(function () {
    var requirejs,
    require,
    define;
    (function () {
        function J(d) {
            return ia.call(d) === "[object Function]"
        }
        function X(d) {
            return ia.call(d) === "[object Array]"
        }
        function Y(d, f, l) {
            for (var j in f)
                if (!(j in F) && (!(j in d) || l))
                    d[j] = f[j];
            return h
        }
        function K(d, f, l) {
            d = new Error(f + "\nhttp://requirejs.org/docs/errors.html#" + d);
            if (l)
                d.originalError = l;
            return d
        }
        function ja(d, f, l) {
            var j,
            q,
            o;
            for (j = 0; o = f[j]; j++) {
                o = typeof o === "string" ? {
                    name: o
                }
                 : o;
                q = o.location;
                if (l && (!q || q.indexOf("/") !== 0 && q.indexOf(":") === -1))
                    q = l + "/" + (q || o.name);
                d[o.name] = {
                    name: o.name,
                    location: q ||
                    o.name,
                    main: (o.main || "main").replace(ua, "").replace(ka, "")
                }
            }
        }
        function Z(d, f) {
            if (d.holdReady)
                d.holdReady(f);
            else if (f)
                d.readyWait += 1;
            else
                d.ready(true)
        }
        function va(d) {
            function f(a) {
                var b,
                c;
                for (b = 0; c = a[b]; b++)
                    if (c === ".") {
                        a.splice(b, 1);
                        b -= 1
                    } else if (c === "..")
                        if (b === 1 && (a[2] === ".." || a[0] === ".."))
                            break;
                        else if (b > 0) {
                            a.splice(b - 1, 2);
                            b -= 2
                        }
            }
            function l(a, b) {
                var c;
                if (a.charAt(0) === ".")
                    if (b) {
                        if (r.pkgs[b])
                            b = [b];
                        else {
                            b = b.split("/");
                            b = b.slice(0, b.length - 1)
                        }
                        a = b.concat(a.split("/"));
                        f(a);
                        c = r.pkgs[b = a[0]];
                        a = a.join("/");
                        if (c && a === b + "/" + c.main)
                            a = b
                    }
                return a
            }
            function j(a, b) {
                var c = a ? a.indexOf("!") : -1,
                e = null,
                g = b ? b.name : null,
                k = a,
                n,
                m;
                if (c !== -1) {
                    e = a.substring(0, c);
                    a = a.substring(c + 1, a.length)
                }
                if (e)
                    e = l(e, g);
                if (a) {
                    if (e)
                        n = (c = p[e]) ? c.normalize ? c.normalize(a, function (u) {
                            return l(u, g)
                        }) : l(a, g) : "__$p" + g + "@" + a;
                    else
                        n = l(a, g);
                    m = $[n];
                    if (!m) {
                        m = h.toModuleUrl ? h.toModuleUrl(i, n, b) : i.nameToUrl(n, null, b);
                        $[n] = m
                    }
                }
                return {
                    prefix: e,
                    name: n,
                    parentMap: b,
                    url: m,
                    originalName: k,
                    fullName: e ? e + "!" + n : n
                }
            }
            function q() {
                var a = true,
                b = r.priorityWait,
                c,
                e;
                if (b) {
                    for (e =
                            0; c = b[e]; e++)
                        if (!v[c]) {
                            a = false;
                            break
                        }
                    a && delete r.priorityWait
                }
                return a
            }
            function o(a) {
                return function (b) {
                    a.exports = b
                }
            }
            function L(a, b, c) {
                return function () {
                    var e = [].concat(wa.call(arguments, 0)),
                    g;
                    if (c && J(g = e[e.length - 1]))
                        g.__requireJsBuild = true;
                    e.push(b);
                    return a.apply(null, e)
                }
            }
            function la(a, b) {
                b = L(i.require, a, b);
                Y(b, {
                    nameToUrl: L(i.nameToUrl, a),
                    toUrl: L(i.toUrl, a),
                    defined: L(i.requireDefined, a),
                    specified: L(i.requireSpecified, a),
                    ready: h.ready,
                    isBrowser: h.isBrowser
                });
                if (h.paths)
                    b.paths = h.paths;
                return b
            }
            function xa(a) {
                var b,
                c,
                e,
                g,
                k,
                n,
                m,
                u = T[a];
                if (u)
                    for (g = 0; c = u[g]; g++) {
                        b = c.fullName;
                        c = j(c.originalName, c.parentMap);
                        c = c.fullName;
                        e = w[b] || [];
                        k = w[c];
                        if (c !== b) {
                            if (b in y) {
                                delete y[b];
                                y[c] = true
                            }
                            w[c] = k ? k.concat(e) : e;
                            delete w[b];
                            for (k = 0; k < e.length; k++) {
                                m = e[k].depArray;
                                for (n = 0; n < m.length; n++)
                                    if (m[n] === b)
                                        m[n] = c
                            }
                        }
                    }
                delete T[a]
            }
            function ma(a) {
                var b = a.prefix,
                c = a.fullName;
                if (!(y[c] || c in p)) {
                    if (b && !G[b]) {
                        G[b] = undefined;
                        (T[b] || (T[b] = [])).push(a);
                        (w[b] || (w[b] = [])).push({
                            onDep: function (e) {
                                e === b && xa(b)
                            }
                        });
                        ma(j(b))
                    }
                    i.paused.push(a)
                }
            }
            function aa(a) {
                var b,
                c,
                e;
                b = a.callback;
                var g = a.fullName,
                k = [],
                n = a.depArray;
                if (b && J(b)) {
                    if (n)
                        for (b = 0; b < n.length; b++)
                            k.push(a.deps[n[b]]);
                    try {
                        c = h.execCb(g, a.callback, k, p[g])
                    } catch (m) {
                        e = m
                    }
                    if (g)
                        if (a.cjsModule && a.cjsModule.exports !== undefined)
                            c = p[g] = a.cjsModule.exports;
                        else if (c === undefined && a.usingExports)
                            c = p[g];
                        else
                            p[g] = c
                } else if (g)
                    c = p[g] = b;
                if (B[a.waitId]) {
                    delete B[a.waitId];
                    a.isDone = true;
                    i.waitCount -= 1;
                    if (i.waitCount === 0)
                        ba = []
                }
                if (e) {
                    e = K("defineerror", 'Error evaluating module "' + g + '" at location "' + (g ?
                                j(g).url : "") + '":\n' + e + "\nfileName:" + (e.fileName || e.sourceURL) + "\nlineNumber: " + (e.lineNumber || e.line), e);
                    e.moduleName = g;
                    return h.onError(e)
                }
                if (g)
                    if (a = w[g]) {
                        for (b = 0; b < a.length; b++)
                            a[b].onDep(g, c);
                        delete w[g]
                    }
            }
            function na(a, b, c, e) {
                a = j(a, e);
                var g = a.name,
                k = a.fullName,
                n = {},
                m = {
                    waitId: g || ya + za++,
                    depCount: 0,
                    depMax: 0,
                    prefix: a.prefix,
                    name: g,
                    fullName: k,
                    deps: {},
                    depArray: b,
                    callback: c,
                    onDep: function (oa, Aa) {
                        if (!(oa in m.deps)) {
                            m.deps[oa] = Aa;
                            m.depCount += 1;
                            m.depCount === m.depMax && aa(m)
                        }
                    }
                },
                u,
                t;
                if (k) {
                    if (k in p || v[k] ===
                        true || k === "jquery" && r.jQuery && r.jQuery !== c().fn.jquery)
                        return;
                    y[k] = true;
                    v[k] = true;
                    k === "jquery" && c && U(c())
                }
                for (c = 0; c < b.length; c++)
                    if (u = b[c]) {
                        u = j(u, g ? a : e);
                        t = u.fullName;
                        b[c] = t;
                        if (t === "require")
                            m.deps[t] = la(a);
                        else if (t === "exports") {
                            m.deps[t] = p[k] = {};
                            m.usingExports = true
                        } else if (t === "module") {
                            m.cjsModule = u = m.deps[t] = {
                                id: g,
                                uri: g ? i.nameToUrl(g, null, e) : undefined,
                                exports: p[k]
                            };
                            u.setExports = o(u)
                        } else if (t in p && !(t in B))
                            m.deps[t] = p[t];
                        else if (!n[t]) {
                            m.depMax += 1;
                            ma(u);
                            (w[t] || (w[t] = [])).push(m);
                            n[t] = true
                        }
                    }
                if (m.depCount ===
                    m.depMax)
                    aa(m);
                else {
                    B[m.waitId] = m;
                    ba.push(m);
                    i.waitCount += 1
                }
            }
            function M(a) {
                na.apply(null, a);
                v[a[0]] = true
            }
            function pa(a, b) {
                if (!a.isDone) {
                    var c = a.fullName,
                    e = a.depArray,
                    g,
                    k;
                    if (c) {
                        if (b[c])
                            return p[c];
                        b[c] = true
                    }
                    for (k = 0; k < e.length; k++)
                        (g = e[k]) && !a.deps[g] && B[g] && a.onDep(g, pa(B[g], b));
                    return c ? p[c] : undefined
                }
            }
            function ca() {
                var a = r.waitSeconds * 1E3,
                b = a && i.startTime + a < (new Date).getTime();
                a = "";
                var c = false,
                e = false,
                g;
                if (!(i.pausedCount > 0)) {
                    if (r.priorityWait)
                        if (q())
                            C();
                        else
                            return;
                    for (g in v)
                        if (!(g in F)) {
                            c = true;
                            if (!v[g])
                                if (b)
                                    a += g + " ";
                                else {
                                    e = true;
                                    break
                                }
                        }
                    if (c || i.waitCount) {
                        if (b && a) {
                            g = K("timeout", "Load timeout for modules: " + a);
                            g.requireType = "timeout";
                            g.requireModules = a;
                            return h.onError(g)
                        }
                        if (e || i.scriptCount) {
                            if ((A || qa) && !da)
                                da = setTimeout(function () {
                                    da = 0;
                                    ca()
                                }, 50)
                        } else {
                            if (i.waitCount) {
                                for (D = 0; a = ba[D]; D++)
                                    pa(a, {});
                                if (ea < 5) {
                                    ea += 1;
                                    ca()
                                }
                            }
                            ea = 0;
                            h.checkReadyState()
                        }
                    }
                }
            }
            function ra(a, b) {
                var c = b.name,
                e = b.fullName,
                g;
                if (!(e in p || e in v)) {
                    G[a] || (G[a] = p[a]);
                    v[e] || (v[e] = false);
                    g = function (k) {
                        h.onPluginLoad && h.onPluginLoad(i,
                            a, c, k);
                        aa({
                            prefix: b.prefix,
                            name: b.name,
                            fullName: b.fullName,
                            callback: function () {
                                return k
                            }
                        });
                        v[e] = true
                    };
                    g.fromText = function (k, n) {
                        var m = N;
                        i.loaded[k] = false;
                        i.scriptCount += 1;
                        if (m)
                            N = false;
                        h.exec(n);
                        if (m)
                            N = true;
                        i.completeLoad(k)
                    };
                    G[a].load(c, la(b.parentMap, true), g, r)
                }
            }
            function Ba(a) {
                if (a.prefix && a.name.indexOf("__$p") === 0 && p[a.prefix])
                    a = j(a.originalName, a.parentMap);
                var b = a.prefix,
                c = a.fullName,
                e = i.urlFetched;
                if (!(y[c] || v[c])) {
                    y[c] = true;
                    if (b)
                        if (p[b])
                            ra(b, a);
                        else {
                            if (!O[b]) {
                                O[b] = [];
                                (w[b] || (w[b] = [])).push({
                                    onDep: function (g) {
                                        if (g ===
                                            b) {
                                            var k,
                                            n = O[b];
                                            for (g = 0; g < n.length; g++) {
                                                k = n[g];
                                                ra(b, j(k.originalName, k.parentMap))
                                            }
                                            delete O[b]
                                        }
                                    }
                                })
                            }
                            O[b].push(a)
                        }
                    else if (!e[a.url]) {
                        h.load(i, c, a.url);
                        e[a.url] = true
                    }
                }
            }
            var i,
            C,
            r = {
                waitSeconds: 7,
                baseUrl: s.baseUrl || "./",
                paths: {},
                pkgs: {}
            },
            P = [],
            y = {
                require: true,
                exports: true,
                module: true
            },
            $ = {},
            p = {},
            v = {},
            B = {},
            ba = [],
            za = 0,
            w = {},
            G = {},
            O = {},
            fa = 0,
            T = {};
            U = function (a) {
                if (!i.jQuery)
                    if (a = a || (typeof jQuery !== "undefined" ? jQuery : null))
                        if (!(r.jQuery && a.fn.jquery !== r.jQuery))
                            if ("holdReady" in a || "readyWait" in a) {
                                i.jQuery = a;
                                M(["jquery",
                                        [], function () {
                                            return jQuery
                                        }
                                    ]);
                                if (i.scriptCount) {
                                    Z(a, true);
                                    i.jQueryIncremented = true
                                }
                            }
            };
            C = function () {
                var a,
                b,
                c;
                fa += 1;
                if (i.scriptCount <= 0)
                    i.scriptCount = 0;
                for (; P.length; ) {
                    a = P.shift();
                    if (a[0] === null)
                        return h.onError(K("mismatch", "Mismatched anonymous define() module: " + a[a.length - 1]));
                    else
                        M(a)
                }
                if (!r.priorityWait || q())
                    for (; i.paused.length; ) {
                        c = i.paused;
                        i.pausedCount += c.length;
                        i.paused = [];
                        for (b = 0; a = c[b]; b++)
                            Ba(a);
                        i.startTime = (new Date).getTime();
                        i.pausedCount -= c.length
                    }
                fa === 1 && ca();
                fa -= 1
            };
            i = {
                contextName: d,
                config: r,
                defQueue: P,
                waiting: B,
                waitCount: 0,
                specified: y,
                loaded: v,
                urlMap: $,
                scriptCount: 0,
                urlFetched: {},
                defined: p,
                paused: [],
                pausedCount: 0,
                plugins: G,
                managerCallbacks: w,
                makeModuleMap: j,
                normalize: l,
                configure: function (a) {
                    var b,
                    c,
                    e;
                    if (a.baseUrl)
                        if (a.baseUrl.charAt(a.baseUrl.length - 1) !== "/")
                            a.baseUrl += "/";
                    b = r.paths;
                    e = r.pkgs;
                    Y(r, a, true);
                    if (a.paths) {
                        for (c in a.paths)
                            c in F || (b[c] = a.paths[c]);
                        r.paths = b
                    }
                    if ((b = a.packagePaths) || a.packages) {
                        if (b)
                            for (c in b)
                                c in F || ja(e, b[c], c);
                        a.packages && ja(e, a.packages);
                        r.pkgs =
                            e
                    }
                    if (a.priority) {
                        c = i.requireWait;
                        i.requireWait = false;
                        i.takeGlobalQueue();
                        C();
                        i.require(a.priority);
                        C();
                        i.requireWait = c;
                        r.priorityWait = a.priority
                    }
                    if (a.deps || a.callback)
                        i.require(a.deps || [], a.callback);
                    a.ready && h.ready(a.ready)
                },
                requireDefined: function (a, b) {
                    return j(a, b).fullName in p
                },
                requireSpecified: function (a, b) {
                    return j(a, b).fullName in y
                },
                require: function (a, b, c) {
                    if (typeof a === "string") {
                        if (h.get)
                            return h.get(i, a, b);
                        c = b;
                        b = j(a, c);
                        a = b.fullName;
                        if (!(a in p))
                            return h.onError(K("notloaded", "Module name '" +
                                    b.fullName + "' has not been loaded yet for context: " + d));
                        return p[a]
                    }
                    na(null, a, b, c);
                    if (!i.requireWait)
                        for (; !i.scriptCount && i.paused.length; ) {
                            i.takeGlobalQueue();
                            C()
                        }
                },
                takeGlobalQueue: function () {
                    if (V.length) {
                        Ca.apply(i.defQueue, [i.defQueue.length - 1, 0].concat(V));
                        V = []
                    }
                },
                completeLoad: function (a) {
                    var b;
                    for (i.takeGlobalQueue(); P.length; ) {
                        b = P.shift();
                        if (b[0] === null) {
                            b[0] = a;
                            break
                        } else if (b[0] === a)
                            break;
                        else {
                            M(b);
                            b = null
                        }
                    }
                    b ? M(b) : M([a, [], a === "jquery" && typeof jQuery !== "undefined" ? function () {
                                return jQuery
                            }
                             : null]);
                    v[a] = true;
                    U();
                    if (h.isAsync)
                        i.scriptCount -= 1;
                    C();
                    h.isAsync || (i.scriptCount -= 1)
                },
                toUrl: function (a, b) {
                    var c = a.lastIndexOf("."),
                    e = null;
                    if (c !== -1) {
                        e = a.substring(c, a.length);
                        a = a.substring(0, c)
                    }
                    return i.nameToUrl(a, e, b)
                },
                nameToUrl: function (a, b, c) {
                    var e,
                    g,
                    k,
                    n,
                    m = i.config;
                    a = l(a, c && c.fullName);
                    if (h.jsExtRegExp.test(a))
                        b = a + (b ? b : "");
                    else {
                        e = m.paths;
                        g = m.pkgs;
                        c = a.split("/");
                        for (n = c.length; n > 0; n--) {
                            k = c.slice(0, n).join("/");
                            if (e[k]) {
                                c.splice(0, n, e[k]);
                                break
                            } else if (k = g[k]) {
                                a = a === k.name ? k.location + "/" + k.main : k.location;
                                c.splice(0, n, a);
                                break
                            }
                        }
                        b = c.join("/") + (b || ".js");
                        b = (b.charAt(0) === "/" || b.match(/^\w+:/) ? "" : m.baseUrl) + b
                    }
                    return m.urlArgs ? b + ((b.indexOf("?") === -1 ? "?" : "&") + m.urlArgs) : b
                }
            };
            i.jQueryCheck = U;
            i.resume = C;
            return i
        }
        function Da() {
            var d,
            f,
            l;
            if (Q && Q.readyState === "interactive")
                return Q;
            d = document.getElementsByTagName("script");
            for (f = d.length - 1; f > -1 && (l = d[f]); f--)
                if (l.readyState === "interactive")
                    return Q = l;
            return null
        }
        var Ea = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,
        Fa = /require\(["']([^'"\s]+)["']\)/g,
        ua = /^\.\//,
        ka = /\.js$/,
        ia = Object.prototype.toString,
        x = Array.prototype,
        wa = x.slice,
        Ca = x.splice,
        A = !!(typeof window !== "undefined" && navigator && document),
        qa = !A && typeof importScripts !== "undefined",
        Ga = A && navigator.platform === "PLAYSTATION 3" ? /^complete$/ : /^(complete|loaded)$/,
        sa = typeof opera !== "undefined" && opera.toString() === "[object Opera]",
        ya = "_r@@",
        F = {},
        H = {},
        V = [],
        Q = null,
        Ha = false,
        ea = 0,
        N = false,
        h;
        x = {};
        var ga,
        s,
        I,
        W,
        z,
        R,
        S,
        D,
        ha,
        ta,
        E,
        U,
        da;
        if (typeof define === "undefined") {
            if (typeof requirejs !== "undefined")
                if (J(requirejs))
                    return;
                else {
                    x =
                        requirejs;
                    requirejs = undefined
                }
            if (typeof require !== "undefined" && !J(require)) {
                x = require;
                require = undefined
            }
            h = requirejs = function (d, f, l) {
                var j = "_",
                q;
                if (!X(d) && typeof d !== "string") {
                    q = d;
                    if (X(f)) {
                        d = f;
                        f = l
                    } else
                        d = []
                }
                if (q && q.context)
                    j = q.context;
                l = H[j] || (H[j] = va(j));
                q && l.configure(q);
                return l.require(d, f)
            };
            if (typeof require === "undefined")
                require = h;
            h.toUrl = function (d) {
                return H._.toUrl(d)
            };
            h.version = "0.25.0";
            h.isArray = X;
            h.isFunction = J;
            h.mixin = Y;
            h.jsExtRegExp = /^\/|:|\?|\.js$/;
            s = h.s = {
                contexts: H,
                skipAsync: {},
                isPageLoaded: !A,
                readyCalls: []
            };
            if (h.isAsync = h.isBrowser = A) {
                I = s.head = document.getElementsByTagName("head")[0];
                if (W = document.getElementsByTagName("base")[0])
                    I = s.head = W.parentNode
            }
            h.onError = function (d) {
                throw d;
            };
            h.load = function (d, f, l) {
                var j = d.loaded;
                Ha = false;
                j[f] || (j[f] = false);
                d.scriptCount += 1;
                h.attach(l, d, f);
                if (d.jQuery && !d.jQueryIncremented) {
                    Z(d.jQuery, true);
                    d.jQueryIncremented = true
                }
            };
            define = h.def = function (d, f, l) {
                var j;
                if (typeof d !== "string") {
                    l = f;
                    f = d;
                    d = null
                }
                if (!h.isArray(f)) {
                    l = f;
                    f = []
                }
                if (!d && !f.length && h.isFunction(l))
                    if (l.length) {
                        l.toString().replace(Ea,
                            "").replace(Fa, function (q, o) {
                            f.push(o)
                        });
                        f = (l.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(f)
                    }
                if (N) {
                    j = ga || Da();
                    if (!j)
                        return h.onError(K("interactive", "No matching script interactive for " + l));
                    d || (d = j.getAttribute("data-requiremodule"));
                    j = H[j.getAttribute("data-requirecontext")]
                }
                (j ? j.defQueue : V).push([d, f, l])
            };
            define.amd = {
                multiversion: true,
                plugins: true,
                jQuery: true
            };
            h.exec = function (d) {
                return eval(d)
            };
            h.execCb = function (d, f, l, j) {
                return f.apply(j, l)
            };
            h.onScriptLoad = function (d) {
                var f = d.currentTarget ||
                    d.srcElement,
                l;
                if (d.type === "load" || Ga.test(f.readyState)) {
                    Q = null;
                    d = f.getAttribute("data-requirecontext");
                    l = f.getAttribute("data-requiremodule");
                    H[d].completeLoad(l);
                    f.detachEvent && !sa ? f.detachEvent("onreadystatechange", h.onScriptLoad) : f.removeEventListener("load", h.onScriptLoad, false)
                }
            };
            h.attach = function (d, f, l, j, q) {
                var o;
                if (A) {
                    j = j || h.onScriptLoad;
                    o = f && f.config && f.config.xhtml ? document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : document.createElement("script");
                    o.type = q || "text/javascript";
                    o.charset = "utf-8";
                    o.async = !s.skipAsync[d];
                    f && o.setAttribute("data-requirecontext", f.contextName);
                    o.setAttribute("data-requiremodule", l);
                    if (o.attachEvent && !sa) {
                        N = true;
                        o.attachEvent("onreadystatechange", j)
                    } else
                        o.addEventListener("load", j, false);
                    o.src = d;
                    ga = o;
                    W ? I.insertBefore(o, W) : I.appendChild(o);
                    ga = null;
                    return o
                } else if (qa) {
                    j = f.loaded;
                    j[l] = false;
                    importScripts(d);
                    f.completeLoad(l)
                }
                return null
            };
            if (A) {
                z = document.getElementsByTagName("script");
                for (D = z.length - 1; D > -1 && (R = z[D]); D--) {
                    if (!I)
                        I = R.parentNode;
                    if (S = R.getAttribute("data-main")) {
                        if (!x.baseUrl) {
                            z = S.split("/");
                            R = z.pop();
                            z = z.length ? z.join("/") + "/" : "./";
                            x.baseUrl = z;
                            S = R.replace(ka, "")
                        }
                        x.deps = x.deps ? x.deps.concat(S) : [S];
                        break
                    }
                }
            }
            s.baseUrl = x.baseUrl;
            h.pageLoaded = function () {
                if (!s.isPageLoaded) {
                    s.isPageLoaded = true;
                    ha && clearInterval(ha);
                    if (ta)
                        document.readyState = "complete";
                    h.callReady()
                }
            };
            h.checkReadyState = function () {
                var d = s.contexts,
                f;
                for (f in d)
                    if (!(f in F))
                        if (d[f].waitCount)
                            return;
                s.isDone = true;
                h.callReady()
            };
            h.callReady = function () {
                var d = s.readyCalls,
                f,
                l,
                j;
                if (s.isPageLoaded && s.isDone) {
                    if (d.length) {
                        s.readyCalls = [];
                        for (f = 0; l = d[f]; f++)
                            l()
                    }
                    d = s.contexts;
                    for (j in d)
                        if (!(j in F)) {
                            f = d[j];
                            if (f.jQueryIncremented) {
                                Z(f.jQuery, false);
                                f.jQueryIncremented = false
                            }
                        }
                }
            };
            h.ready = function (d) {
                s.isPageLoaded && s.isDone ? d() : s.readyCalls.push(d);
                return h
            };
            if (A) {
                if (document.addEventListener) {
                    document.addEventListener("DOMContentLoaded", h.pageLoaded, false);
                    window.addEventListener("load", h.pageLoaded, false);
                    if (!document.readyState) {
                        ta = true;
                        document.readyState = "loading"
                    }
                } else if (window.attachEvent) {
                    window.attachEvent("onload",
                        h.pageLoaded);
                    if (self === self.top)
                        ha = setInterval(function () {
                            try {
                                if (document.body) {
                                    document.documentElement.doScroll("left");
                                    h.pageLoaded()
                                }
                            } catch (d) {}
                        }, 30)
                }
                document.readyState === "complete" && h.pageLoaded()
            }
            h(x);
            if (h.isAsync && typeof setTimeout !== "undefined") {
                E = s.contexts[x.context || "_"];
                E.requireWait = true;
                setTimeout(function () {
                    E.requireWait = false;
                    E.takeGlobalQueue();
                    E.jQueryCheck();
                    E.scriptCount || E.resume();
                    h.checkReadyState()
                }, 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 (C, e) {
        var t = [],
        r = Object.getPrototypeOf,
        s = t.slice,
        g = t.flat ? function (e) {
            return t.flat.call(e)
        }
         : function (e) {
            return t.concat.apply([], e)
        },
        u = t.push,
        i = t.indexOf,
        n = {},
        o = n.toString,
        v = n.hasOwnProperty,
        a = v.toString,
        l = a.call(Object),
        y = {},
        m = function (e) {
            return "function" ==
            typeof e && "number" != typeof e.nodeType && "function" != typeof e.item
        },
        x = function (e) {
            return null != e && e === e.window
        },
        E = C.document,
        c = {
            type: !0,
            src: !0,
            nonce: !0,
            noModule: !0
        };
        function b(e, t, n) {
            var r,
            i,
            o = (n = n || E).createElement("script");
            if (o.text = e, t)
                for (r in c)
                    (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
            n.head.appendChild(o).parentNode.removeChild(o)
        }
        function w(e) {
            return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e
        }
        var f = "3.6.0",
        S = function (e, t) {
            return new S.fn.init(e,
                t)
        };
        function p(e) {
            var t = !!e && "length" in e && e.length,
            n = w(e);
            return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
        }
        S.fn = S.prototype = {
            jquery: f,
            constructor: S,
            length: 0,
            toArray: function () {
                return s.call(this)
            },
            get: function (e) {
                return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e]
            },
            pushStack: function (e) {
                var t = S.merge(this.constructor(), e);
                return t.prevObject = this,
                t
            },
            each: function (e) {
                return S.each(this, e)
            },
            map: function (n) {
                return this.pushStack(S.map(this, function (e, t) {
                        return n.call(e,
                            t, e)
                    }))
            },
            slice: function () {
                return this.pushStack(s.apply(this, arguments))
            },
            first: function () {
                return this.eq(0)
            },
            last: function () {
                return this.eq(-1)
            },
            even: function () {
                return this.pushStack(S.grep(this, function (e, t) {
                        return (t + 1) % 2
                    }))
            },
            odd: function () {
                return this.pushStack(S.grep(this, function (e, t) {
                        return t % 2
                    }))
            },
            eq: function (e) {
                var t = this.length,
                n = +e + (e < 0 ? t : 0);
                return this.pushStack(0 <= n && n < t ? [this[n]] : [])
            },
            end: function () {
                return this.prevObject || this.constructor()
            },
            push: u,
            sort: t.sort,
            splice: t.splice
        },
        S.extend =
            S.fn.extend = function () {
            var e,
            t,
            n,
            r,
            i,
            o,
            a = arguments[0] || {},
            s = 1,
            u = arguments.length,
            l = !1;
            for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)
                if (null != (e = arguments[s]))
                    for (t in e)
                        r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r));
            return a
        },
        S.extend({
            expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""),
            isReady: !0,
            error: function (e) {
                throw new Error(e);
            },
            noop: function () {},
            isPlainObject: function (e) {
                var t,
                n;
                return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof(n = v.call(t, "constructor") && t.constructor) && a.call(n) === l)
            },
            isEmptyObject: function (e) {
                var t;
                for (t in e)
                    return !1;
                return !0
            },
            globalEval: function (e, t, n) {
                b(e, {
                    nonce: t && t.nonce
                }, n)
            },
            each: function (e, t) {
                var n,
                r = 0;
                if (p(e))
                    for (n = e.length; r < n; r++) {
                        if (!1 === t.call(e[r], r, e[r]))
                            break
                    }
                else
                    for (r in e)
                        if (!1 === t.call(e[r], r, e[r]))
                            break;
                return e
            },
            makeArray: function (e, t) {
                var n = t || [];
                return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)),
                n
            },
            inArray: function (e, t, n) {
                return null == t ? -1 : i.call(t, e, n)
            },
            merge: function (e, t) {
                for (var n = +t.length, r = 0, i = e.length; r < n; r++)
                    e[i++] = t[r];
                return e.length = i,
                e
            },
            grep: function (e, t, n) {
                for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)
                    !t(e[i], i) !== a && r.push(e[i]);
                return r
            },
            map: function (e, t, n) {
                var r,
                i,
                o = 0,
                a = [];
                if (p(e))
                    for (r = e.length; o < r; o++)
                        null != (i = t(e[o], o, n)) && a.push(i);
                else
                    for (o in e)
                        null != (i = t(e[o],
                                    o, n)) && a.push(i);
                return g(a)
            },
            guid: 1,
            support: y
        }),
        "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]),
        S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) {
            n["[object " + t + "]"] = t.toLowerCase()
        });
        var d = function (n) {
            var e,
            d,
            b,
            o,
            i,
            h,
            f,
            g,
            w,
            u,
            l,
            T,
            C,
            a,
            E,
            v,
            s,
            c,
            y,
            S = "sizzle" + 1 * new Date,
            p = n.document,
            k = 0,
            r = 0,
            m = ue(),
            x = ue(),
            A = ue(),
            N = ue(),
            j = function (e, t) {
                return e === t && (l = !0),
                0
            },
            D = {}
            .hasOwnProperty,
            t = [],
            q = t.pop,
            L = t.push,
            H = t.push,
            O = t.slice,
            P = function (e,
                t) {
                for (var n = 0, r = e.length; n < r; n++)
                    if (e[n] === t)
                        return n;
                return -1
            },
            R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
            M = "[\\x20\\t\\r\\n\\f]",
            I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+",
            W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]",
            F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" +
                W + ")*)|.*)\\)|)",
            B = new RegExp(M + "+", "g"),
            $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
            _ = new RegExp("^" + M + "*," + M + "*"),
            z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
            U = new RegExp(M + "|>"),
            X = new RegExp(F),
            V = new RegExp("^" + I + "$"),
            G = {
                ID: new RegExp("^#(" + I + ")"),
                CLASS: new RegExp("^\\.(" + I + ")"),
                TAG: new RegExp("^(" + I + "|[*])"),
                ATTR: new RegExp("^" + W),
                PSEUDO: new RegExp("^" + F),
                CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" +
                    M + "*(\\d+)|))" + M + "*\\)|)", "i"),
                bool: new RegExp("^(?:" + R + ")$", "i"),
                needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
            },
            Y = /HTML$/i,
            Q = /^(?:input|select|textarea|button)$/i,
            J = /^h\d$/i,
            K = /^[^{]+\{\s*\[native \w/,
            Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
            ee = /[+~]/,
            te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"),
            ne = function (e, t) {
                var n = "0x" + e.slice(1) - 65536;
                return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >>
                        10 | 55296, 1023 & n | 56320))
            },
            re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
            ie = function (e, t) {
                return t ? "\x00" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
            },
            oe = function () {
                T()
            },
            ae = be(function (e) {
                return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase()
            }, {
                dir: "parentNode",
                next: "legend"
            });
            try {
                H.apply(t = O.call(p.childNodes), p.childNodes),
                t[p.childNodes.length].nodeType
            } catch (e) {
                H = {
                    apply: t.length ? function (e, t) {
                        L.apply(e, O.call(t))
                    }
                     : function (e, t) {
                        var n = e.length,
                        r = 0;
                        while (e[n++] = t[r++]);
                        e.length = n - 1
                    }
                }
            }
            function se(t, e, n, r) {
                var i,
                o,
                a,
                s,
                u,
                l,
                c,
                f = e && e.ownerDocument,
                p = e ? e.nodeType : 9;
                if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p)
                    return n;
                if (!r && (T(e), e = e || C, E)) {
                    if (11 !== p && (u = Z.exec(t)))
                        if (i = u[1])
                            if (9 === p) {
                                if (!(a = e.getElementById(i)))
                                    return n;
                                if (a.id === i)
                                    return n.push(a), n
                            } else {
                                if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i)
                                    return n.push(a), n
                            }
                        else {
                            if (u[2])
                                return H.apply(n, e.getElementsByTagName(t)), n;
                            if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName)
                                return H.apply(n,
                                    e.getElementsByClassName(i)), n
                        }
                    if (d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) {
                        if (c = t, f = e, 1 === p && (U.test(t) || z.test(t))) {
                            (f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)),
                            o = (l = h(t)).length;
                            while (o--)
                                l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]);
                            c = l.join(",")
                        }
                        try {
                            return H.apply(n, f.querySelectorAll(c)),
                            n
                        } catch (e) {
                            N(t, !0)
                        }
                        finally {
                            s === S && e.removeAttribute("id")
                        }
                    }
                }
                return g(t.replace($, "$1"), e, n, r)
            }
            function ue() {
                var r =
                    [];
                return function e(t, n) {
                    return r.push(t + " ") > b.cacheLength && delete e[r.shift()],
                    e[t + " "] = n
                }
            }
            function le(e) {
                return e[S] = !0,
                e
            }
            function ce(e) {
                var t = C.createElement("fieldset");
                try {
                    return !!e(t)
                } catch (e) {
                    return !1
                }
                finally {
                    t.parentNode && t.parentNode.removeChild(t),
                    t = null
                }
            }
            function fe(e, t) {
                var n = e.split("|"),
                r = n.length;
                while (r--)
                    b.attrHandle[n[r]] = t
            }
            function pe(e, t) {
                var n = t && e,
                r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
                if (r)
                    return r;
                if (n)
                    while (n = n.nextSibling)
                        if (n === t)
                            return -1;
                return e ?
                1 : -1
            }
            function de(t) {
                return function (e) {
                    return "input" === e.nodeName.toLowerCase() && e.type === t
                }
            }
            function he(n) {
                return function (e) {
                    var t = e.nodeName.toLowerCase();
                    return ("input" === t || "button" === t) && e.type === n
                }
            }
            function ge(t) {
                return function (e) {
                    return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t
                }
            }
            function ve(a) {
                return le(function (o) {
                    return o = +o,
                    le(function (e, t) {
                        var n,
                        r = a([], e.length, o),
                        i = r.length;
                        while (i--)
                            e[n = r[i]] && (e[n] = !(t[n] = e[n]))
                    })
                })
            }
            function ye(e) {
                return e && "undefined" != typeof e.getElementsByTagName && e
            }
            for (e in d = se.support = {}, i = se.isXML = function (e) {
                var t = e && e.namespaceURI,
                n = e && (e.ownerDocument || e).documentElement;
                return !Y.test(t || n && n.nodeName || "HTML")
            }, T = se.setDocument = function (e) {
                var t,
                n,
                r = e ? e.ownerDocument || e : p;
                return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n &&
                    (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function (e) {
                        return a.appendChild(e).appendChild(C.createElement("div")),
                        "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length
                    }), d.attributes = ce(function (e) {
                        return e.className = "i",
                        !e.getAttribute("className")
                    }), d.getElementsByTagName = ce(function (e) {
                        return e.appendChild(C.createComment("")),
                        !e.getElementsByTagName("*").length
                    }), d.getElementsByClassName = K.test(C.getElementsByClassName),
                    d.getById = ce(function (e) {
                        return a.appendChild(e).id = S,
                        !C.getElementsByName || !C.getElementsByName(S).length
                    }), d.getById ? (b.filter.ID = function (e) {
                        var t = e.replace(te, ne);
                        return function (e) {
                            return e.getAttribute("id") === t
                        }
                    }, b.find.ID = function (e, t) {
                        if ("undefined" != typeof t.getElementById && E) {
                            var n = t.getElementById(e);
                            return n ? [n] : []
                        }
                    }) : (b.filter.ID = function (e) {
                        var n = e.replace(te, ne);
                        return function (e) {
                            var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
                            return t && t.value === n
                        }
                    }, b.find.ID =
                        function (e, t) {
                        if ("undefined" != typeof t.getElementById && E) {
                            var n,
                            r,
                            i,
                            o = t.getElementById(e);
                            if (o) {
                                if ((n = o.getAttributeNode("id")) && n.value === e)
                                    return [o];
                                i = t.getElementsByName(e),
                                r = 0;
                                while (o = i[r++])
                                    if ((n = o.getAttributeNode("id")) && n.value === e)
                                        return [o]
                            }
                            return []
                        }
                    }), b.find.TAG = d.getElementsByTagName ? function (e, t) {
                    return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0
                }
                     : function (e, t) {
                    var n,
                    r = [],
                    i = 0,
                    o = t.getElementsByTagName(e);
                    if ("*" === e) {
                        while (n = o[i++])
                            1 ===
                            n.nodeType && r.push(n);
                            return r
                        }
                        return o
                    }, b.find.CLASS = d.getElementsByClassName && function (e, t) {
                        if ("undefined" != typeof t.getElementsByClassName && E)
                            return t.getElementsByClassName(e)
                    }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) {
                                var t;
                                a.appendChild(e).innerHTML = "<a id='" + S + "'></a><select id='" + S + "-\r\\' msallowcapture=''><option selected=''></option></select>",
                                e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"),
                                e.querySelectorAll("[selected]").length ||
                                v.push("\\[" + M + "*(?:value|" + R + ")"),
                                e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="),
                                (t = C.createElement("input")).setAttribute("name", ""),
                                e.appendChild(t),
                                e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"),
                                e.querySelectorAll(":checked").length || v.push(":checked"),
                                e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"),
                                e.querySelectorAll("\\\u000c"),
                                v.push("[\\r\\n\\f]")
                            }), ce(function (e) {
                                e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
                                var t = C.createElement("input");
                                t.setAttribute("type", "hidden"),
                                e.appendChild(t).setAttribute("name", "D"),
                                e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="),
                                2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"),
                                a.appendChild(e).disabled = !0,
                                2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"),
                                e.querySelectorAll("*,:x"),
                                v.push(",.*:")
                            })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector ||
                                        a.msMatchesSelector)) && ce(function (e) {
                            d.disconnectedMatch = c.call(e, "*"),
                            c.call(e, "[s!='']:x"),
                            s.push("!=", F)
                        }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.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)
                            while (t = t.parentNode)
                                if (t === e)
                                    return !0;
                        return !1
                    },
                        j = t ? function (e, t) {
                        if (e === t)
                            return l = !0, 0;
                        var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
                        return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1)
                    }
                         : function (e, t) {
                        if (e === t)
                            return l = !0, 0;
                        var n,
                        r = 0,
                        i = e.parentNode,
                        o = t.parentNode,
                        a = [e],
                        s = [t];
                        if (!i || !o)
                            return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;
                        if (i === o)
                            return pe(e,
                                t);
                        n = e;
                        while (n = n.parentNode)
                            a.unshift(n);
                        n = t;
                        while (n = n.parentNode)
                            s.unshift(n);
                        while (a[r] === s[r])
                            r++;
                        return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0
                    }),
                    C
                }, se.matches = function (e, t) {
                    return se(e, null, null, t)
                }, se.matchesSelector = function (e, t) {
                    if (T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t)))
                        try {
                            var n = c.call(e, t);
                            if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType)
                                return n
                        } catch (e) {
                            N(t, !0)
                        }
                    return 0 < se(t, C, null, [e]).length
                }, se.contains = function (e, t) {
                    return (e.ownerDocument ||
                        e) != C && T(e),
                    y(e, t)
                }, se.attr = function (e, t) {
                    (e.ownerDocument || e) != C && T(e);
                    var n = b.attrHandle[t.toLowerCase()],
                    r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
                    return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
                }, se.escape = function (e) {
                    return (e + "").replace(re, ie)
                }, se.error = function (e) {
                    throw new Error("Syntax error, unrecognized expression: " + e);
                }, se.uniqueSort = function (e) {
                    var t,
                    n = [],
                    r = 0,
                    i = 0;
                    if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0),
                        e.sort(j), l) {
                        while (t = e[i++])
                            t === e[i] && (r = n.push(i));
                        while (r--)
                            e.splice(n[r], 1)
                    }
                    return u = null,
                    e
                }, o = se.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 += o(e)
                        } else {
                            if (3 === i || 4 === i)
                                return e.nodeValue
                        }
                    else
                        while (t = e[r++])
                            n += o(t);
                    return n
                }, (b = se.selectors = {
                            cacheLength: 50,
                            createPseudo: le,
                            match: G,
                            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(te, ne),
                                    e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne),
                                    "~=" === 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] || se.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] && se.error(e[0]),
                                    e
                                },
                                PSEUDO: function (e) {
                                    var t,
                                    n = !e[6] && e[2];
                                    return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) &&
                                            (t = h(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(te, ne).toLowerCase();
                                    return "*" === e ? function () {
                                        return !0
                                    }
                                     : function (e) {
                                        return e.nodeName && e.nodeName.toLowerCase() === t
                                    }
                                },
                                CLASS: function (e) {
                                    var t = m[e + " "];
                                    return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function (e) {
                                        return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
                                    })
                                },
                                ATTR: function (n,
                                    r, i) {
                                    return function (e) {
                                        var t = se.attr(e, n);
                                        return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"))
                                    }
                                },
                                CHILD: function (h, e, t, g, v) {
                                    var y = "nth" !== h.slice(0, 3),
                                    m = "last" !== h.slice(-4),
                                    x = "of-type" === e;
                                    return 1 === g && 0 === v ? function (e) {
                                        return !!e.parentNode
                                    }
                                     : function (e, t, n) {
                                        var r,
                                        i,
                                        o,
                                        a,
                                        s,
                                        u,
                                        l = y !== m ? "nextSibling" :
                                            "previousSibling",
                                        c = e.parentNode,
                                        f = x && e.nodeName.toLowerCase(),
                                        p = !n && !x,
                                        d = !1;
                                        if (c) {
                                            if (y) {
                                                while (l) {
                                                    a = e;
                                                    while (a = a[l])
                                                        if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType)
                                                            return !1;
                                                    u = l = "only" === h && !u && "nextSibling"
                                                }
                                                return !0
                                            }
                                            if (u = [m ? c.firstChild : c.lastChild], m && p) {
                                                d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2],
                                                a = s && c.childNodes[s];
                                                while (a = ++s && a && a[l] || (d = s = 0) || u.pop())
                                                    if (1 === a.nodeType && ++d && a === e) {
                                                        i[h] = [k, s, d];
                                                        break
                                                    }
                                            } else if (p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d)
                                                while (a = ++s && a && a[l] || (d = s = 0) || u.pop())
                                                    if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e))
                                                        break;
                                            return (d -= v) === g || d % g == 0 && 0 <= d / g
                                        }
                                    }
                                },
                                PSEUDO: function (e, o) {
                                    var t,
                                    a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e);
                                    return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) {
                                            var n,
                                            r = a(e, o),
                                            i = r.length;
                                            while (i--)
                                                e[n = P(e, r[i])] = !(t[n] = r[i])
                                        }) : function (e) {
                                        return a(e, 0, t)
                                    }) : a
                                }
                            },
                            pseudos: {
                                not: le(function (e) {
                                    var r = [],
                                    i = [],
                                    s = f(e.replace($, "$1"));
                                    return s[S] ? le(function (e, t, n, r) {
                                        var i,
                                        o = s(e, null, r, []),
                                        a = e.length;
                                        while (a--)
                                            (i = o[a]) && (e[a] = !(t[a] = i))
                                    }) : function (e, t, n) {
                                        return r[0] = e,
                                        s(r, null, n, i),
                                        r[0] = null,
                                        !i.pop()
                                    }
                                }),
                                has: le(function (t) {
                                    return function (e) {
                                        return 0 < se(t, e).length
                                    }
                                }),
                                contains: le(function (t) {
                                    return t = t.replace(te, ne),
                                    function (e) {
                                        return -1 < (e.textContent || o(e)).indexOf(t)
                                    }
                                }),
                                lang: le(function (n) {
                                    return V.test(n || "") || se.error("unsupported lang: " + n),
                                    n = n.replace(te, ne).toLowerCase(),
                                    function (e) {
                                        var t;
                                        do
                                            if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang"))
                                                return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-");
                                        while ((e = e.parentNode) && 1 === e.nodeType);
                                        return !1
                                    }
                                }),
                                target: function (e) {
                                    var t = n.location && n.location.hash;
                                    return t && t.slice(1) === e.id
                                },
                                root: function (e) {
                                    return e === a
                                },
                                focus: function (e) {
                                    return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href ||
                                        ~e.tabIndex)
                                },
                                enabled: ge(!1),
                                disabled: ge(!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,
                                    !0 === e.selected
                                },
                                empty: function (e) {
                                    for (e = e.firstChild; e; e = e.nextSibling)
                                        if (e.nodeType < 6)
                                            return !1;
                                    return !0
                                },
                                parent: function (e) {
                                    return !b.pseudos.empty(e)
                                },
                                header: function (e) {
                                    return J.test(e.nodeName)
                                },
                                input: function (e) {
                                    return Q.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: ve(function () {
                                    return [0]
                                }),
                                last: ve(function (e, t) {
                                    return [t - 1]
                                }),
                                eq: ve(function (e, t, n) {
                                    return [n < 0 ? n + t : n]
                                }),
                                even: ve(function (e, t) {
                                    for (var n = 0; n < t; n += 2)
                                        e.push(n);
                                    return e
                                }),
                                odd: ve(function (e, t) {
                                    for (var n = 1; n < t; n += 2)
                                        e.push(n);
                                    return e
                                }),
                                lt: ve(function (e, t, n) {
                                    for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; )
                                        e.push(r);
                                    return e
                                }),
                                gt: ve(function (e, t, n) {
                                    for (var r = n < 0 ? n + t : n; ++r < t; )
                                        e.push(r);
                                    return e
                                })
                            }
                        }).pseudos.nth = b.pseudos.eq, {
                    radio: !0,
                    checkbox: !0,
                    file: !0,
                    password: !0,
                    image: !0
                })b.pseudos[e] = de(e);
            for (e in {
                submit: !0,
                reset: !0
            })
                b.pseudos[e] = he(e);
            function me() {}
            function xe(e) {
                for (var t = 0, n = e.length, r = ""; t < n; t++)
                    r += e[t].value;
                return r
            }
            function be(s, e, t) {
                var u = e.dir,
                l = e.next,
                c = l || u,
                f = t && "parentNode" === c,
                p = r++;
                return e.first ? function (e, t, n) {
                    while (e = e[u])
                        if (1 === e.nodeType || f)
                            return s(e, t, n);
                    return !1
                }
                 : function (e, t, n) {
                    var r,
                    i,
                    o,
                    a = [k,
                        p];
                    if (n)
                        while (e = e[u]) {
                            if ((1 === e.nodeType || f) && s(e, t, n))
                                return !0
                        }
                    else
                        while (e = e[u])
                            if (1 === e.nodeType || f)
                                if (i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase())
                                    e = e[u] || e;
                                else {
                                    if ((r = i[c]) && r[0] === k && r[1] === p)
                                        return a[2] = r[2];
                                    if ((i[c] = a)[2] = s(e, t, n))
                                        return !0
                                }
                    return !1
                }
            }
            function we(i) {
                return 1 < i.length ? function (e, t, n) {
                    var r = i.length;
                    while (r--)
                        if (!i[r](e, t, n))
                            return !1;
                    return !0
                }
                 : i[0]
            }
            function Te(e, t, n, r, i) {
                for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)
                    (o = e[s]) && (n && !n(o,
                            r, i) || (a.push(o), l && t.push(s)));
                return a
            }
            function Ce(d, h, g, v, y, e) {
                return v && !v[S] && (v = Ce(v)),
                y && !y[S] && (y = Ce(y, e)),
                le(function (e, t, n, r) {
                    var i,
                    o,
                    a,
                    s = [],
                    u = [],
                    l = t.length,
                    c = e || function (e, t, n) {
                        for (var r = 0, i = t.length; r < i; r++)
                            se(e, t[r], n);
                        return n
                    }
                    (h || "*", n.nodeType ? [n] : n, []),
                    f = !d || !e && h ? c : Te(c, s, d, n, r),
                    p = g ? y || (e ? d : l || v) ? [] : t : f;
                    if (g && g(f, p, n, r), v) {
                        i = Te(p, u),
                        v(i, [], n, r),
                        o = i.length;
                        while (o--)
                            (a = i[o]) && (p[u[o]] = !(f[u[o]] = a))
                    }
                    if (e) {
                        if (y || d) {
                            if (y) {
                                i = [],
                                o = p.length;
                                while (o--)
                                    (a = p[o]) && i.push(f[o] = a);
                                y(null, p = [],
                                    i, r)
                            }
                            o = p.length;
                            while (o--)
                                (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a))
                        }
                    } else
                        p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p)
                })
            }
            function Ee(e) {
                for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) {
                        return e === i
                    }, a, !0), l = be(function (e) {
                        return -1 < P(i, e)
                    }, a, !0), c = [function (e, t, n) {
                            var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
                            return i = null,
                            r
                        }
                    ]; s < r; s++)
                    if (t = b.relative[e[s].type])
                        c = [be(we(c), t)];
                    else {
                        if ((t = b.filter[e[s].type].apply(null,
                                        e[s].matches))[S]) {
                            for (n = ++s; n < r; n++)
                                if (b.relative[e[n].type])
                                    break;
                            return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({
                                        value: " " === e[s - 2].type ? "*" : ""
                                    })).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e))
                        }
                        c.push(t)
                    }
                return we(c)
            }
            return me.prototype = b.filters = b.pseudos,
            b.setFilters = new me,
            h = se.tokenize = function (e, t) {
                var n,
                r,
                i,
                o,
                a,
                s,
                u,
                l = x[e + " "];
                if (l)
                    return t ? 0 : l.slice(0);
                a = e,
                s = [],
                u = b.preFilter;
                while (a) {
                    for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])),
                        n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({
                                value: n,
                                type: r[0].replace($, " ")
                            }), a = a.slice(n.length)), b.filter)
                        !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({
                                value: n,
                                type: o,
                                matches: r
                            }), a = a.slice(n.length));
                    if (!n)
                        break
                }
                return t ? a.length : a ? se.error(e) : x(e, s).slice(0)
            },
            f = se.compile = function (e, t) {
                var n,
                v,
                y,
                m,
                x,
                r,
                i = [],
                o = [],
                a = A[e + " "];
                if (!a) {
                    t || (t = h(e)),
                    n = t.length;
                    while (n--)
                        (a = Ee(t[n]))[S] ? i.push(a) : o.push(a);
                    (a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) {
                                    var o,
                                    a,
                                    s,
                                    u = 0,
                                    l = "0",
                                    c =
                                        e && [],
                                    f = [],
                                    p = w,
                                    d = e || x && b.find.TAG("*", i),
                                    h = k += null == p ? 1 : Math.random() || 0.1,
                                    g = d.length;
                                    for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) {
                                        if (x && o) {
                                            a = 0,
                                            t || o.ownerDocument == C || (T(o), n = !E);
                                            while (s = v[a++])
                                                if (s(o, t || C, n)) {
                                                    r.push(o);
                                                    break
                                                }
                                            i && (k = h)
                                        }
                                        m && ((o = !s && o) && u--, e && c.push(o))
                                    }
                                    if (u += l, m && l !== u) {
                                        a = 0;
                                        while (s = y[a++])
                                            s(c, f, t, n);
                                        if (e) {
                                            if (0 < u)
                                                while (l--)
                                                    c[l] || f[l] || (f[l] = q.call(r));
                                            f = Te(f)
                                        }
                                        H.apply(r, f),
                                        i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r)
                                    }
                                    return i && (k = h, w = p),
                                    c
                                }, m ? le(r) : r))).selector = e
                }
                return a
            },
            g =
                se.select = function (e, t, n, r) {
                var i,
                o,
                a,
                s,
                u,
                l = "function" == typeof e && e,
                c = !r && h(e = l.selector || e);
                if (n = n || [], 1 === c.length) {
                    if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {
                        if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0]))
                            return n;
                        l && (t = t.parentNode),
                        e = e.slice(o.shift().value.length)
                    }
                    i = G.needsContext.test(e) ? 0 : o.length;
                    while (i--) {
                        if (a = o[i], b.relative[s = a.type])
                            break;
                        if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) ||
                                        t))) {
                            if (o.splice(i, 1), !(e = r.length && xe(o)))
                                return H.apply(n, r), n;
                            break
                        }
                    }
                }
                return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t),
                n
            },
            d.sortStable = S.split("").sort(j).join("") === S,
            d.detectDuplicates = !!l,
            T(),
            d.sortDetached = ce(function (e) {
                return 1 & e.compareDocumentPosition(C.createElement("fieldset"))
            }),
            ce(function (e) {
                return e.innerHTML = "<a href='#'></a>",
                "#" === e.firstChild.getAttribute("href")
            }) || fe("type|href|height|width", function (e, t, n) {
                if (!n)
                    return e.getAttribute(t, "type" === t.toLowerCase() ?
                        1 : 2)
            }),
            d.attributes && ce(function (e) {
                return e.innerHTML = "<input/>",
                e.firstChild.setAttribute("value", ""),
                "" === e.firstChild.getAttribute("value")
            }) || fe("value", function (e, t, n) {
                if (!n && "input" === e.nodeName.toLowerCase())
                    return e.defaultValue
            }),
            ce(function (e) {
                return null == e.getAttribute("disabled")
            }) || fe(R, function (e, t, n) {
                var r;
                if (!n)
                    return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
            }),
            se
        }
        (C);
        S.find = d,
        S.expr = d.selectors,
        S.expr[":"] = S.expr.pseudos,
        S.uniqueSort = S.unique =
            d.uniqueSort,
        S.text = d.getText,
        S.isXMLDoc = d.isXML,
        S.contains = d.contains,
        S.escapeSelector = d.escape;
        var h = function (e, t, n) {
            var r = [],
            i = void 0 !== n;
            while ((e = e[t]) && 9 !== e.nodeType)
                if (1 === e.nodeType) {
                    if (i && S(e).is(n))
                        break;
                    r.push(e)
                }
            return r
        },
        T = function (e, t) {
            for (var n = []; e; e = e.nextSibling)
                1 === e.nodeType && e !== t && n.push(e);
            return n
        },
        k = S.expr.match.needsContext;
        function A(e, t) {
            return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
        }
        var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
        function j(e, n, r) {
            return m(n) ? S.grep(e, function (e, t) {
                return !!n.call(e, t, e) !== r
            }) : n.nodeType ? S.grep(e, function (e) {
                return e === n !== r
            }) : "string" != typeof n ? S.grep(e, function (e) {
                return -1 < i.call(n, e) !== r
            }) : S.filter(n, e, r)
        }
        S.filter = function (e, t, n) {
            var r = t[0];
            return n && (e = ":not(" + e + ")"),
            1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function (e) {
                    return 1 === e.nodeType
                }))
        },
        S.fn.extend({
            find: function (e) {
                var t,
                n,
                r = this.length,
                i = this;
                if ("string" != typeof e)
                    return this.pushStack(S(e).filter(function () {
                            for (t =
                                    0; t < r; t++)
                                if (S.contains(i[t], this))
                                    return !0
                        }));
                for (n = this.pushStack([]), t = 0; t < r; t++)
                    S.find(e, i[t], n);
                return 1 < r ? S.uniqueSort(n) : n
            },
            filter: function (e) {
                return this.pushStack(j(this, e || [], !1))
            },
            not: function (e) {
                return this.pushStack(j(this, e || [], !0))
            },
            is: function (e) {
                return !!j(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1).length
            }
        });
        var D,
        q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
        (S.fn.init = function (e, t, n) {
            var r,
            i;
            if (!e)
                return this;
            if (n = n || D, "string" == typeof e) {
                if (!(r = "<" === e[0] && ">" === e[e.length - 1] &&
                            3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t)
                    return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
                if (r[1]) {
                    if (t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t))
                        for (r in t)
                            m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
                    return this
                }
                return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1),
                this
            }
            return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this)
        }).prototype = S.fn,
        D = S(E);
        var L = /^(?:parents|prev(?:Until|All))/,
        H = {
            children: !0,
            contents: !0,
            next: !0,
            prev: !0
        };
        function O(e, t) {
            while ((e = e[t]) && 1 !== e.nodeType);
            return e
        }
        S.fn.extend({
            has: function (e) {
                var t = S(e, this),
                n = t.length;
                return this.filter(function () {
                    for (var e = 0; e < n; e++)
                        if (S.contains(this, t[e]))
                            return !0
                })
            },
            closest: function (e, t) {
                var n,
                r = 0,
                i = this.length,
                o = [],
                a = "string" != typeof e && S(e);
                if (!k.test(e))
                    for (; r < i; r++)
                        for (n = this[r]; n && n !== t; n = n.parentNode)
                            if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n,
                                        e))) {
                                o.push(n);
                                break
                            }
                return this.pushStack(1 < o.length ? S.uniqueSort(o) : o)
            },
            index: function (e) {
                return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
            },
            add: function (e, t) {
                return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t))))
            },
            addBack: function (e) {
                return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
            }
        }),
        S.each({
            parent: function (e) {
                var t = e.parentNode;
                return t && 11 !== t.nodeType ? t : null
            },
            parents: function (e) {
                return h(e,
                    "parentNode")
            },
            parentsUntil: function (e, t, n) {
                return h(e, "parentNode", n)
            },
            next: function (e) {
                return O(e, "nextSibling")
            },
            prev: function (e) {
                return O(e, "previousSibling")
            },
            nextAll: function (e) {
                return h(e, "nextSibling")
            },
            prevAll: function (e) {
                return h(e, "previousSibling")
            },
            nextUntil: function (e, t, n) {
                return h(e, "nextSibling", n)
            },
            prevUntil: function (e, t, n) {
                return h(e, "previousSibling", n)
            },
            siblings: function (e) {
                return T((e.parentNode || {}).firstChild, e)
            },
            children: function (e) {
                return T(e.firstChild)
            },
            contents: function (e) {
                return null !=
                e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes))
            }
        }, function (r, i) {
            S.fn[r] = function (e, t) {
                var n = S.map(this, i, e);
                return "Until" !== r.slice(-5) && (t = e),
                t && "string" == typeof t && (n = S.filter(t, n)),
                1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()),
                this.pushStack(n)
            }
        });
        var P = /[^\x20\t\r\n\f]+/g;
        function R(e) {
            return e
        }
        function M(e) {
            throw e;
        }
        function I(e, t, n, r) {
            var i;
            try {
                e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e,
                    t, n) : t.apply(void 0, [e].slice(r))
            } catch (e) {
                n.apply(void 0, [e])
            }
        }
        S.Callbacks = function (r) {
            var e,
            n;
            r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function (e, t) {
                        n[t] = !0
                    }), n) : S.extend({}, r);
            var i,
            t,
            o,
            a,
            s = [],
            u = [],
            l = -1,
            c = function () {
                for (a = a || r.once, o = i = !0; u.length; l = -1) {
                    t = u.shift();
                    while (++l < s.length)
                        !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1)
                }
                r.memory || (t = !1),
                i = !1,
                a && (s = t ? [] : "")
            },
            f = {
                add: function () {
                    return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) {
                        S.each(e, function (e, t) {
                            m(t) ?
                            r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t)
                        })
                    }
                        (arguments), t && !i && c()),
                    this
                },
                remove: function () {
                    return S.each(arguments, function (e, t) {
                        var n;
                        while (-1 < (n = S.inArray(t, s, n)))
                            s.splice(n, 1), n <= l && l--
                    }),
                    this
                },
                has: function (e) {
                    return e ? -1 < S.inArray(e, s) : 0 < s.length
                },
                empty: function () {
                    return s && (s = []),
                    this
                },
                disable: function () {
                    return a = u = [],
                    s = t = "",
                    this
                },
                disabled: function () {
                    return !s
                },
                lock: function () {
                    return a = u = [],
                    t || i || (s = t = ""),
                    this
                },
                locked: function () {
                    return !!a
                },
                fireWith: function (e, t) {
                    return a ||
                    (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()),
                    this
                },
                fire: function () {
                    return f.fireWith(this, arguments),
                    this
                },
                fired: function () {
                    return !!o
                }
            };
            return f
        },
        S.extend({
            Deferred: function (e) {
                var o = [["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2], ["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"]],
                i = "pending",
                a = {
                    state: function () {
                        return i
                    },
                    always: function () {
                        return s.done(arguments).fail(arguments),
                        this
                    },
                    "catch": function (e) {
                        return a.then(null, e)
                    },
                    pipe: function () {
                        var i = arguments;
                        return S.Deferred(function (r) {
                            S.each(o, function (e, t) {
                                var n = m(i[t[4]]) && i[t[4]];
                                s[t[1]](function () {
                                    var e = n && n.apply(this, arguments);
                                    e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments)
                                })
                            }),
                            i = null
                        }).promise()
                    },
                    then: function (t, n, r) {
                        var u = 0;
                        function l(i, o, a, s) {
                            return function () {
                                var n = this,
                                r = arguments,
                                e = function () {
                                    var e,
                                    t;
                                    if (!(i < u)) {
                                        if ((e = a.apply(n, r)) === o.promise())
                                            throw new TypeError("Thenable self-resolution");
                                        t = e && ("object" == typeof e || "function" == typeof e) && e.then,
                                        m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r))
                                    }
                                },
                                t = s ? e : function () {
                                    try {
                                        e()
                                    } catch (e) {
                                        S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace),
                                        u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r))
                                    }
                                };
                                i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t))
                            }
                        }
                        return S.Deferred(function (e) {
                            o[0][3].add(l(0, e,
                                    m(r) ? r : R, e.notifyWith)),
                            o[1][3].add(l(0, e, m(t) ? t : R)),
                            o[2][3].add(l(0, e, m(n) ? n : M))
                        }).promise()
                    },
                    promise: function (e) {
                        return null != e ? S.extend(e, a) : a
                    }
                },
                s = {};
                return S.each(o, function (e, t) {
                    var n = t[2],
                    r = t[5];
                    a[t[1]] = n.add,
                    r && n.add(function () {
                        i = r
                    }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock),
                    n.add(t[3].fire),
                    s[t[0]] = function () {
                        return s[t[0] + "With"](this === s ? void 0 : this, arguments),
                        this
                    },
                    s[t[0] + "With"] = n.fireWith
                }),
                a.promise(s),
                e && e.call(s, s),
                s
            },
            when: function (e) {
                var n = arguments.length,
                t = n,
                r = Array(t),
                i = s.call(arguments),
                o = S.Deferred(),
                a = function (t) {
                    return function (e) {
                        r[t] = this,
                        i[t] = 1 < arguments.length ? s.call(arguments) : e,
                        --n || o.resolveWith(r, i)
                    }
                };
                if (n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then)))
                    return o.then();
                while (t--)
                    I(i[t], a(t), o.reject);
                return o.promise()
            }
        });
        var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
        S.Deferred.exceptionHook = function (e, t) {
            C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " +
                e.message, e.stack, t)
        },
        S.readyException = function (e) {
            C.setTimeout(function () {
                throw e;
            })
        };
        var F = S.Deferred();
        function B() {
            E.removeEventListener("DOMContentLoaded", B),
            C.removeEventListener("load", B),
            S.ready()
        }
        S.fn.ready = function (e) {
            return F.then(e)["catch"](function (e) {
                S.readyException(e)
            }),
            this
        },
        S.extend({
            isReady: !1,
            readyWait: 1,
            ready: function (e) {
                (!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S])
            }
        }),
        S.ready.then = F.then,
        "complete" === E.readyState || "loading" !== E.readyState &&
        !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B));
        var $ = function (e, t, n, r, i, o, a) {
            var s = 0,
            u = e.length,
            l = null == n;
            if ("object" === w(n))
                for (s in i = !0, n)
                    $(e, t, s, n[s], !0, o, a);
            else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) {
                            return l.call(S(e), n)
                        })), t))
                for (; s < u; s++)
                    t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
            return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
        },
        _ = /^-ms-/,
        z = /-([a-z])/g;
        function U(e, t) {
            return t.toUpperCase()
        }
        function X(e) {
            return e.replace(_, "ms-").replace(z, U)
        }
        var V = function (e) {
            return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
        };
        function G() {
            this.expando = S.expando + G.uid++
        }
        G.uid = 1,
        G.prototype = {
            cache: function (e) {
                var t = e[this.expando];
                return t || (t = {}, V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
                            value: t,
                            configurable: !0
                        }))),
                t
            },
            set: function (e, t, n) {
                var r,
                i = this.cache(e);
                if ("string" == typeof t)
                    i[X(t)] = n;
                else
                    for (r in t)
                        i[X(r)] = t[r];
                return i
            },
            get: function (e, t) {
                return void 0 === t ? this.cache(e) :
                e[this.expando] && e[this.expando][X(t)]
            },
            access: function (e, t, n) {
                return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
            },
            remove: function (e, t) {
                var n,
                r = e[this.expando];
                if (void 0 !== r) {
                    if (void 0 !== t) {
                        n = (t = Array.isArray(t) ? t.map(X) : (t = X(t))in r ? [t] : t.match(P) || []).length;
                        while (n--)
                            delete r[t[n]]
                    }
                    (void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
                }
            },
            hasData: function (e) {
                var t = e[this.expando];
                return void 0 !== t && !S.isEmptyObject(t)
            }
        };
        var Y = new G,
        Q = new G,
        J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
        K = /[A-Z]/g;
        function Z(e, t, n) {
            var r,
            i;
            if (void 0 === n && 1 === e.nodeType)
                if (r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof(n = e.getAttribute(r))) {
                    try {
                        n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i)
                    } catch (e) {}
                    Q.set(e, t, n)
                } else
                    n = void 0;
            return n
        }
        S.extend({
            hasData: function (e) {
                return Q.hasData(e) || Y.hasData(e)
            },
            data: function (e, t, n) {
                return Q.access(e, t, n)
            },
            removeData: function (e, t) {
                Q.remove(e, t)
            },
            _data: function (e,
                t, n) {
                return Y.access(e, t, n)
            },
            _removeData: function (e, t) {
                Y.remove(e, t)
            }
        }),
        S.fn.extend({
            data: function (n, e) {
                var t,
                r,
                i,
                o = this[0],
                a = o && o.attributes;
                if (void 0 === n) {
                    if (this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) {
                        t = a.length;
                        while (t--)
                            a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r]));
                        Y.set(o, "hasDataAttrs", !0)
                    }
                    return i
                }
                return "object" == typeof n ? this.each(function () {
                    Q.set(this, n)
                }) : $(this, function (e) {
                    var t;
                    if (o && void 0 === e)
                        return void 0 !== (t = Q.get(o, n)) ? t : void 0 !==
                        (t = Z(o, n)) ? t : void 0;
                    this.each(function () {
                        Q.set(this, n, e)
                    })
                }, null, e, 1 < arguments.length, null, !0)
            },
            removeData: function (e) {
                return this.each(function () {
                    Q.remove(this, e)
                })
            }
        }),
        S.extend({
            queue: function (e, t, n) {
                var r;
                if (e)
                    return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || []
            },
            dequeue: function (e, t) {
                t = t || "fx";
                var n = S.queue(e, t),
                r = n.length,
                i = n.shift(),
                o = S._queueHooks(e, t);
                "inprogress" === i && (i = n.shift(), r--),
                i && ("fx" === t && n.unshift("inprogress"), delete o.stop,
                    i.call(e, function () {
                        S.dequeue(e, t)
                    }, o)),
                !r && o && o.empty.fire()
            },
            _queueHooks: function (e, t) {
                var n = t + "queueHooks";
                return Y.get(e, n) || Y.access(e, n, {
                    empty: S.Callbacks("once memory").add(function () {
                        Y.remove(e, [t + "queue", n])
                    })
                })
            }
        }),
        S.fn.extend({
            queue: function (t, n) {
                var e = 2;
                return "string" != typeof t && (n = t, t = "fx", e--),
                arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this : this.each(function () {
                    var e = S.queue(this, t, n);
                    S._queueHooks(this, t),
                    "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t)
                })
            },
            dequeue: function (e) {
                return this.each(function () {
                    S.dequeue(this,
                        e)
                })
            },
            clearQueue: function (e) {
                return this.queue(e || "fx", [])
            },
            promise: function (e, t) {
                var n,
                r = 1,
                i = S.Deferred(),
                o = this,
                a = this.length,
                s = function () {
                    --r || i.resolveWith(o, [o])
                };
                "string" != typeof e && (t = e, e = void 0),
                e = e || "fx";
                while (a--)
                    (n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
                return s(),
                i.promise(t)
            }
        });
        var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
        te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"),
        ne = ["Top", "Right", "Bottom", "Left"],
        re = E.documentElement,
        ie = function (e) {
            return S.contains(e.ownerDocument,
                e)
        },
        oe = {
            composed: !0
        };
        re.getRootNode && (ie = function (e) {
            return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument
        });
        var ae = function (e, t) {
            return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display")
        };
        function se(e, t, n, r) {
            var i,
            o,
            a = 20,
            s = r ? function () {
                return r.cur()
            }
             : function () {
                return S.css(e, t, "")
            },
            u = s(),
            l = n && n[3] || (S.cssNumber[t] ? "" : "px"),
            c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t));
            if (c && c[3] !== l) {
                u /= 2,
                l = l || c[3],
                c = +u || 1;
                while (a--)
                    S.style(e,
                        t, c + l), (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), c /= o;
                c *= 2,
                S.style(e, t, c + l),
                n = n || []
            }
            return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)),
            i
        }
        var ue = {};
        function le(e, t) {
            for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)
                (r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"),
                                    o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n)));
            for (c = 0; c < f; c++)
                null != l[c] && (e[c].style.display = l[c]);
            return e
        }
        S.fn.extend({
            show: function () {
                return le(this, !0)
            },
            hide: function () {
                return le(this)
            },
            toggle: function (e) {
                return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () {
                    ae(this) ? S(this).show() : S(this).hide()
                })
            }
        });
        var ce,
        fe,
        pe = /^(?:checkbox|radio)$/i,
        de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
        he = /^$|^module$|\/(?:java|ecma)script/i;
        ce = E.createDocumentFragment().appendChild(E.createElement("div")),
        (fe = E.createElement("input")).setAttribute("type", "radio"),
        fe.setAttribute("checked", "checked"),
        fe.setAttribute("name", "t"),
        ce.appendChild(fe),
        y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked,
        ce.innerHTML = "<textarea>x</textarea>",
        y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue,
        ce.innerHTML = "<option></option>",
        y.option = !!ce.lastChild;
        var ge = {
            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, "", ""]
        };
        function ve(e, t) {
            var n;
            return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [],
            void 0 === t || t && A(e, t) ? S.merge([e], n) : n
        }
        function ye(e, t) {
            for (var n = 0, r = e.length; n < r; n++)
                Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval"))
        }
        ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead,
        ge.th = ge.td,
        y.option ||
        (ge.optgroup = ge.option = [1, "<select multiple='multiple'>", "</select>"]);
        var me = /<|&#?\w+;/;
        function xe(e, t, n, r, i) {
            for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)
                if ((o = e[d]) || 0 === o)
                    if ("object" === w(o))
                        S.merge(p, o.nodeType ? [o] : o);
                    else if (me.test(o)) {
                        a = a || f.appendChild(t.createElement("div")),
                        s = (de.exec(o) || ["", ""])[1].toLowerCase(),
                        u = ge[s] || ge._default,
                        a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2],
                        c = u[0];
                        while (c--)
                            a = a.lastChild;
                        S.merge(p, a.childNodes),
                        (a = f.firstChild).textContent =
                            ""
                    } else
                        p.push(t.createTextNode(o));
            f.textContent = "",
            d = 0;
            while (o = p[d++])
                if (r && -1 < S.inArray(o, r))
                    i && i.push(o);
                else if (l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) {
                    c = 0;
                    while (o = a[c++])
                        he.test(o.type || "") && n.push(o)
                }
            return f
        }
        var be = /^([^.]*)(?:\.(.+)|)/;
        function we() {
            return !0
        }
        function Te() {
            return !1
        }
        function Ce(e, t) {
            return e === function () {
                try {
                    return E.activeElement
                } catch (e) {}
            }
            () == ("focus" === t)
        }
        function Ee(e, t, n, r, i, o) {
            var a,
            s;
            if ("object" == typeof t) {
                for (s in "string" != typeof n && (r = r || n, n = void 0), t)
                    Ee(e,
                        s, n, r, t[s], o);
                return e
            }
            if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i)
                i = Te;
            else if (!i)
                return e;
            return 1 === o && (a = i, (i = function (e) {
                    return S().off(e),
                    a.apply(this, arguments)
                }).guid = a.guid || (a.guid = S.guid++)),
            e.each(function () {
                S.event.add(this, t, i, r, n)
            })
        }
        function Se(e, i, o) {
            o ? (Y.set(e, i, !1), S.event.add(e, i, {
                    namespace: !1,
                    handler: function (e) {
                        var t,
                        n,
                        r = Y.get(this, i);
                        if (1 & e.isTrigger && this[i])
                            if (r.length)
                                (S.event.special[i] || {}).delegateType && e.stopPropagation();
                            else {
                                if (r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n)
                                    return e.stopImmediatePropagation(), e.preventDefault(), n && n.value
                            }
                        else
                            r.length && (Y.set(this, i, {
                                    value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this)
                                }), e.stopImmediatePropagation())
                    }
                })) : void 0 === Y.get(e, i) && S.event.add(e, i, we)
        }
        S.event = {
            global: {},
            add: function (t, e, n, r, i) {
                var o,
                a,
                s,
                u,
                l,
                c,
                f,
                p,
                d,
                h,
                g,
                v = Y.get(t);
                if (V(t)) {
                    n.handler && (n = (o = n).handler, i = o.selector),
                    i && S.find.matchesSelector(re,
                        i),
                    n.guid || (n.guid = S.guid++),
                    (u = v.events) || (u = v.events = Object.create(null)),
                    (a = v.handle) || (a = v.handle = function (e) {
                        return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0
                    }),
                    l = (e = (e || "").match(P) || [""]).length;
                    while (l--)
                        d = g = (s = be.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({
                                type: d,
                                origType: g,
                                data: r,
                                handler: n,
                                guid: n.guid,
                                selector: i,
                                needsContext: i && S.expr.match.needsContext.test(i),
                                namespace: h.join(".")
                            }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0)
                }
            },
            remove: function (e, t, n, r, i) {
                var o,
                a,
                s,
                u,
                l,
                c,
                f,
                p,
                d,
                h,
                g,
                v = Y.hasData(e) && Y.get(e);
                if (v && (u = v.events)) {
                    l = (t = (t || "").match(P) || [""]).length;
                    while (l--)
                        if (d = g = (s = be.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) {
                            f = S.event.special[d] || {},
                            p = u[d = (r ? f.delegateType : f.bindType) || d] || [],
                            s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"),
                            a = o = p.length;
                            while (o--)
                                c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.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));
                            a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d])
                        } else
                            for (d in u)
                                S.event.remove(e, d + t[l], n, r, !0);
                    S.isEmptyObject(u) && Y.remove(e,
                        "handle events")
                }
            },
            dispatch: function (e) {
                var t,
                n,
                r,
                i,
                o,
                a,
                s = new Array(arguments.length),
                u = S.event.fix(e),
                l = (Y.get(this, "events") || Object.create(null))[u.type] || [],
                c = S.event.special[u.type] || {};
                for (s[0] = u, t = 1; t < arguments.length; t++)
                    s[t] = arguments[t];
                if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) {
                    a = S.event.handlers.call(this, u, l),
                    t = 0;
                    while ((i = a[t++]) && !u.isPropagationStopped()) {
                        u.currentTarget = i.elem,
                        n = 0;
                        while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped())
                            u.rnamespace &&
                            !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation()))
                    }
                    return c.postDispatch && c.postDispatch.call(this, u),
                    u.result
                }
            },
            handlers: function (e, t) {
                var n,
                r,
                i,
                o,
                a,
                s = [],
                u = t.delegateCount,
                l = e.target;
                if (u && l.nodeType && !("click" === e.type && 1 <= e.button))
                    for (; l !== this; l = l.parentNode || this)
                        if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
                            for (o =
                                    [], a = {}, n = 0; n < u; n++)
                                void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r);
                            o.length && s.push({
                                elem: l,
                                handlers: o
                            })
                        }
                return l = this,
                u < t.length && s.push({
                    elem: l,
                    handlers: t.slice(u)
                }),
                s
            },
            addProp: function (t, e) {
                Object.defineProperty(S.Event.prototype, t, {
                    enumerable: !0,
                    configurable: !0,
                    get: m(e) ? function () {
                        if (this.originalEvent)
                            return e(this.originalEvent)
                    }
                     : function () {
                        if (this.originalEvent)
                            return this.originalEvent[t]
                    },
                    set: function (e) {
                        Object.defineProperty(this,
                            t, {
                            enumerable: !0,
                            configurable: !0,
                            writable: !0,
                            value: e
                        })
                    }
                })
            },
            fix: function (e) {
                return e[S.expando] ? e : new S.Event(e)
            },
            special: {
                load: {
                    noBubble: !0
                },
                click: {
                    setup: function (e) {
                        var t = this || e;
                        return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click", we),
                        !1
                    },
                    trigger: function (e) {
                        var t = this || e;
                        return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click"),
                        !0
                    },
                    _default: function (e) {
                        var t = e.target;
                        return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a")
                    }
                },
                beforeunload: {
                    postDispatch: function (e) {
                        void 0 !==
                        e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
                    }
                }
            }
        },
        S.removeEvent = function (e, t, n) {
            e.removeEventListener && e.removeEventListener(t, n)
        },
        S.Event = function (e, t) {
            if (!(this instanceof S.Event))
                return new S.Event(e, t);
            e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? we : Te, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget =
                    e.relatedTarget) : this.type = e,
            t && S.extend(this, t),
            this.timeStamp = e && e.timeStamp || Date.now(),
            this[S.expando] = !0
        },
        S.Event.prototype = {
            constructor: S.Event,
            isDefaultPrevented: Te,
            isPropagationStopped: Te,
            isImmediatePropagationStopped: Te,
            isSimulated: !1,
            preventDefault: function () {
                var e = this.originalEvent;
                this.isDefaultPrevented = we,
                e && !this.isSimulated && e.preventDefault()
            },
            stopPropagation: function () {
                var e = this.originalEvent;
                this.isPropagationStopped = we,
                e && !this.isSimulated && e.stopPropagation()
            },
            stopImmediatePropagation: function () {
                var e =
                    this.originalEvent;
                this.isImmediatePropagationStopped = we,
                e && !this.isSimulated && e.stopImmediatePropagation(),
                this.stopPropagation()
            }
        },
        S.each({
            altKey: !0,
            bubbles: !0,
            cancelable: !0,
            changedTouches: !0,
            ctrlKey: !0,
            detail: !0,
            eventPhase: !0,
            metaKey: !0,
            pageX: !0,
            pageY: !0,
            shiftKey: !0,
            view: !0,
            "char": !0,
            code: !0,
            charCode: !0,
            key: !0,
            keyCode: !0,
            button: !0,
            buttons: !0,
            clientX: !0,
            clientY: !0,
            offsetX: !0,
            offsetY: !0,
            pointerId: !0,
            pointerType: !0,
            screenX: !0,
            screenY: !0,
            targetTouches: !0,
            toElement: !0,
            touches: !0,
            which: !0
        }, S.event.addProp),
        S.each({
            focus: "focusin",
            blur: "focusout"
        }, function (e, t) {
            S.event.special[e] = {
                setup: function () {
                    return Se(this, e, Ce),
                    !1
                },
                trigger: function () {
                    return Se(this, e),
                    !0
                },
                _default: function () {
                    return !0
                },
                delegateType: t
            }
        }),
        S.each({
            mouseenter: "mouseover",
            mouseleave: "mouseout",
            pointerenter: "pointerover",
            pointerleave: "pointerout"
        }, function (e, i) {
            S.event.special[e] = {
                delegateType: i,
                bindType: i,
                handle: function (e) {
                    var t,
                    n = e.relatedTarget,
                    r = e.handleObj;
                    return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this,
                                arguments), e.type = i),
                    t
                }
            }
        }),
        S.fn.extend({
            on: function (e, t, n, r) {
                return Ee(this, e, t, n, r)
            },
            one: function (e, t, n, r) {
                return Ee(this, e, t, n, r, 1)
            },
            off: function (e, t, n) {
                var r,
                i;
                if (e && e.preventDefault && e.handleObj)
                    return r = e.handleObj, S(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 !1 !== t && "function" != typeof t || (n = t, t = void 0),
                !1 === n && (n = Te),
                this.each(function () {
                    S.event.remove(this, e, n, t)
                })
            }
        });
        var ke = /<script|<style|<link/i,
        Ae = /checked\s*(?:[^=]|=\s*.checked.)/i,
        Ne = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
        function je(e, t) {
            return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && S(e).children("tbody")[0] || e
        }
        function De(e) {
            return e.type = (null !== e.getAttribute("type")) + "/" + e.type,
            e
        }
        function qe(e) {
            return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"),
            e
        }
        function Le(e, t) {
            var n,
            r,
            i,
            o,
            a,
            s;
            if (1 === t.nodeType) {
                if (Y.hasData(e) && (s = Y.get(e).events))
                    for (i in Y.remove(t,
                            "handle events"), s)
                        for (n = 0, r = s[i].length; n < r; n++)
                            S.event.add(t, i, s[i][n]);
                Q.hasData(e) && (o = Q.access(e), a = S.extend({}, o), Q.set(t, a))
            }
        }
        function He(n, r, i, o) {
            r = g(r);
            var e,
            t,
            a,
            s,
            u,
            l,
            c = 0,
            f = n.length,
            p = f - 1,
            d = r[0],
            h = m(d);
            if (h || 1 < f && "string" == typeof d && !y.checkClone && Ae.test(d))
                return n.each(function (e) {
                    var t = n.eq(e);
                    h && (r[0] = d.call(this, e, t.html())),
                    He(t, r, i, o)
                });
            if (f && (t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) {
                for (s = (a = S.map(ve(e, "script"), De)).length; c < f; c++)
                    u =
                        e, c !== p && (u = S.clone(u, !0, !0), s && S.merge(a, ve(u, "script"))), i.call(n[c], u, c);
                if (s)
                    for (l = a[a.length - 1].ownerDocument, S.map(a, qe), c = 0; c < s; c++)
                        u = a[c], he.test(u.type || "") && !Y.access(u, "globalEval") && S.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? S._evalUrl && !u.noModule && S._evalUrl(u.src, {
                                nonce: u.nonce || u.getAttribute("nonce")
                            }, l) : b(u.textContent.replace(Ne, ""), u, l))
            }
            return n
        }
        function Oe(e, t, n) {
            for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++)
                n || 1 !== r.nodeType || S.cleanData(ve(r)), r.parentNode &&
                (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r));
            return e
        }
        S.extend({
            htmlPrefilter: function (e) {
                return e
            },
            clone: function (e, t, n) {
                var r,
                i,
                o,
                a,
                s,
                u,
                l,
                c = e.cloneNode(!0),
                f = ie(e);
                if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || S.isXMLDoc(e)))
                    for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++)
                        s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue);
                if (t)
                    if (n)
                        for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r <
                            i; r++)
                            Le(o[r], a[r]);
                    else
                        Le(e, c);
                return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")),
                c
            },
            cleanData: function (e) {
                for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++)
                    if (V(n)) {
                        if (t = n[Y.expando]) {
                            if (t.events)
                                for (r in t.events)
                                    i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle);
                            n[Y.expando] = void 0
                        }
                        n[Q.expando] && (n[Q.expando] = void 0)
                    }
            }
        }),
        S.fn.extend({
            detach: function (e) {
                return Oe(this, e, !0)
            },
            remove: function (e) {
                return Oe(this, e)
            },
            text: function (e) {
                return $(this, function (e) {
                    return void 0 === e ?
                    S.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 He(this, arguments, function (e) {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || je(this, e).appendChild(e)
                })
            },
            prepend: function () {
                return He(this, arguments, function (e) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        var t = je(this, e);
                        t.insertBefore(e, t.firstChild)
                    }
                })
            },
            before: function () {
                return He(this, arguments,
                    function (e) {
                    this.parentNode && this.parentNode.insertBefore(e, this)
                })
            },
            after: function () {
                return He(this, arguments, function (e) {
                    this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
                })
            },
            empty: function () {
                for (var e, t = 0; null != (e = this[t]); t++)
                    1 === e.nodeType && (S.cleanData(ve(e, !1)), e.textContent = "");
                return this
            },
            clone: function (e, t) {
                return e = null != e && e,
                t = null == t ? e : t,
                this.map(function () {
                    return S.clone(this, e, t)
                })
            },
            html: function (e) {
                return $(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 && !ke.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) {
                        e = S.htmlPrefilter(e);
                        try {
                            for (; n < r; n++)
                                1 === (t = this[n] || {}).nodeType && (S.cleanData(ve(t, !1)), t.innerHTML = e);
                            t = 0
                        } catch (e) {}
                    }
                    t && this.empty().append(e)
                }, null, e, arguments.length)
            },
            replaceWith: function () {
                var n = [];
                return He(this, arguments, function (e) {
                    var t = this.parentNode;
                    S.inArray(this, n) < 0 && (S.cleanData(ve(this)), t && t.replaceChild(e, this))
                }, n)
            }
        }),
        S.each({
            appendTo: "append",
            prependTo: "prepend",
            insertBefore: "before",
            insertAfter: "after",
            replaceAll: "replaceWith"
        }, function (e, a) {
            S.fn[e] = function (e) {
                for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++)
                    t = o === i ? this : this.clone(!0), S(r[o])[a](t), u.apply(n, t.get());
                return this.pushStack(n)
            }
        });
        var Pe = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"),
        Re = function (e) {
            var t = e.ownerDocument.defaultView;
            return t && t.opener || (t = C),
            t.getComputedStyle(e)
        },
        Me = function (e, t, n) {
            var r,
            i,
            o = {};
            for (i in t)
                o[i] = e.style[i], e.style[i] = t[i];
            for (i in r = n.call(e), t)
                e.style[i] = o[i];
            return r
        },
        Ie = new RegExp(ne.join("|"), "i");
        function We(e, t, n) {
            var r,
            i,
            o,
            a,
            s = e.style;
            return (n = n || Re(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || ie(e) || (a = S.style(e, t)), !y.pixelBoxStyles() && Pe.test(a) && Ie.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)),
            void 0 !== a ? a + "" : a
        }
        function Fe(e, t) {
            return {
                get: function () {
                    if (!e())
                        return (this.get = t).apply(this, arguments);
                    delete this.get
                }
            }
        }
        !function () {
            function e() {
                if (l) {
                    u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",
                    l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",
                    re.appendChild(u).appendChild(l);
                    var e = C.getComputedStyle(l);
                    n = "1%" !== e.top,
                    s = 12 === t(e.marginLeft),
                    l.style.right = "60%",
                    o = 36 === t(e.right),
                    r = 36 === t(e.width),
                    l.style.position = "absolute",
                    i = 12 === t(l.offsetWidth / 3),
                    re.removeChild(u),
                    l = null
                }
            }
            function t(e) {
                return Math.round(parseFloat(e))
            }
            var n,
            r,
            i,
            o,
            a,
            s,
            u = E.createElement("div"),
            l = E.createElement("div");
            l.style && (l.style.backgroundClip =
                    "content-box", l.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === l.style.backgroundClip, S.extend(y, {
                    boxSizingReliable: function () {
                        return e(),
                        r
                    },
                    pixelBoxStyles: function () {
                        return e(),
                        o
                    },
                    pixelPosition: function () {
                        return e(),
                        n
                    },
                    reliableMarginLeft: function () {
                        return e(),
                        s
                    },
                    scrollboxSize: function () {
                        return e(),
                        i
                    },
                    reliableTrDimensions: function () {
                        var e,
                        t,
                        n,
                        r;
                        return null == a && (e = E.createElement("table"), t = E.createElement("tr"), n = E.createElement("div"), e.style.cssText = "position:absolute;left:-11111px;border-collapse:separate",
                            t.style.cssText = "border:1px solid", t.style.height = "1px", n.style.height = "9px", n.style.display = "block", re.appendChild(e).appendChild(t).appendChild(n), r = C.getComputedStyle(t), a = parseInt(r.height, 10) + parseInt(r.borderTopWidth, 10) + parseInt(r.borderBottomWidth, 10) === t.offsetHeight, re.removeChild(e)),
                        a
                    }
                }))
        }
        ();
        var Be = ["Webkit", "Moz", "ms"],
        $e = E.createElement("div").style,
        _e = {};
        function ze(e) {
            var t = S.cssProps[e] || _e[e];
            return t || (e in $e ? e : _e[e] = function (e) {
                var t = e[0].toUpperCase() + e.slice(1),
                n = Be.length;
                while (n--)
                    if ((e = Be[n] + t)in $e)
                        return e
            }
                (e) || e)
        }
        var Ue = /^(none|table(?!-c[ea]).+)/,
        Xe = /^--/,
        Ve = {
            position: "absolute",
            visibility: "hidden",
            display: "block"
        },
        Ge = {
            letterSpacing: "0",
            fontWeight: "400"
        };
        function Ye(e, t, n) {
            var r = te.exec(t);
            return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
        }
        function Qe(e, t, n, r, i, o) {
            var a = "width" === t ? 1 : 0,
            s = 0,
            u = 0;
            if (n === (r ? "border" : "content"))
                return 0;
            for (; a < 4; a += 2)
                "margin" === n && (u += S.css(e, n + ne[a], !0, i)), r ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), "margin" !== n && (u -= S.css(e,
                            "border" + ne[a] + "Width", !0, i))) : (u += S.css(e, "padding" + ne[a], !0, i), "padding" !== n ? u += S.css(e, "border" + ne[a] + "Width", !0, i) : s += S.css(e, "border" + ne[a] + "Width", !0, i));
            return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5)) || 0),
            u
        }
        function Je(e, t, n) {
            var r = Re(e),
            i = (!y.boxSizingReliable() || n) && "border-box" === S.css(e, "boxSizing", !1, r),
            o = i,
            a = We(e, t, r),
            s = "offset" + t[0].toUpperCase() + t.slice(1);
            if (Pe.test(a)) {
                if (!n)
                    return a;
                a = "auto"
            }
            return (!y.boxSizingReliable() && i || !y.reliableTrDimensions() &&
                A(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === S.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === S.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])),
            (a = parseFloat(a) || 0) + Qe(e, t, n || (i ? "border" : "content"), o, r, a) + "px"
        }
        function Ke(e, t, n, r, i) {
            return new Ke.prototype.init(e, t, n, r, i)
        }
        S.extend({
            cssHooks: {
                opacity: {
                    get: function (e, t) {
                        if (t) {
                            var n = We(e, "opacity");
                            return "" === n ? "1" : n
                        }
                    }
                }
            },
            cssNumber: {
                animationIterationCount: !0,
                columnCount: !0,
                fillOpacity: !0,
                flexGrow: !0,
                flexShrink: !0,
                fontWeight: !0,
                gridArea: !0,
                gridColumn: !0,
                gridColumnEnd: !0,
                gridColumnStart: !0,
                gridRow: !0,
                gridRowEnd: !0,
                gridRowStart: !0,
                lineHeight: !0,
                opacity: !0,
                order: !0,
                orphans: !0,
                widows: !0,
                zIndex: !0,
                zoom: !0
            },
            cssProps: {},
            style: function (e, t, n, r) {
                if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                    var i,
                    o,
                    a,
                    s = X(t),
                    u = Xe.test(t),
                    l = e.style;
                    if (u || (t = ze(s)), a = S.cssHooks[t] || S.cssHooks[s], void 0 === n)
                        return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];
                    "string" === (o = typeof n) && (i = te.exec(n)) && i[1] && (n = se(e, t, i), o = "number"),
                    null != n && n == n && ("number" !==
                        o || u || (n += i && i[3] || (S.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n))
                }
            },
            css: function (e, t, n, r) {
                var i,
                o,
                a,
                s = X(t);
                return Xe.test(t) || (t = ze(s)),
                (a = S.cssHooks[t] || S.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)),
                void 0 === i && (i = We(e, t, r)),
                "normal" === i && t in Ge && (i = Ge[t]),
                "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i
            }
        }),
        S.each(["height", "width"], function (e, u) {
            S.cssHooks[u] = {
                get: function (e,
                    t, n) {
                    if (t)
                        return !Ue.test(S.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? Je(e, u, n) : Me(e, Ve, function () {
                            return Je(e, u, n)
                        })
                },
                set: function (e, t, n) {
                    var r,
                    i = Re(e),
                    o = !y.scrollboxSize() && "absolute" === i.position,
                    a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i),
                    s = n ? Qe(e, u, n, a, i) : 0;
                    return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - Qe(e, u, "border", !1, i) - 0.5)),
                    s && (r = te.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = S.css(e, u)),
                    Ye(0, t, s)
                }
            }
        }),
        S.cssHooks.marginLeft = Fe(y.reliableMarginLeft, function (e, t) {
            if (t)
                return (parseFloat(We(e, "marginLeft")) || e.getBoundingClientRect().left - Me(e, {
                        marginLeft: 0
                    }, function () {
                        return e.getBoundingClientRect().left
                    })) + "px"
        }),
        S.each({
            margin: "",
            padding: "",
            border: "Width"
        }, function (i, o) {
            S.cssHooks[i + o] = {
                expand: function (e) {
                    for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++)
                        n[i + ne[t] + o] = r[t] || r[t - 2] || r[0];
                    return n
                }
            },
            "margin" !== i && (S.cssHooks[i + o].set = Ye)
        }),
        S.fn.extend({
            css: function (e, t) {
                return $(this,
                    function (e, t, n) {
                    var r,
                    i,
                    o = {},
                    a = 0;
                    if (Array.isArray(t)) {
                        for (r = Re(e), i = t.length; a < i; a++)
                            o[t[a]] = S.css(e, t[a], !1, r);
                        return o
                    }
                    return void 0 !== n ? S.style(e, t, n) : S.css(e, t)
                }, e, t, 1 < arguments.length)
            }
        }),
        ((S.Tween = Ke).prototype = {
                constructor: Ke,
                init: function (e, t, n, r, i, o) {
                    this.elem = e,
                    this.prop = n,
                    this.easing = i || S.easing._default,
                    this.options = t,
                    this.start = this.now = this.cur(),
                    this.end = r,
                    this.unit = o || (S.cssNumber[n] ? "" : "px")
                },
                cur: function () {
                    var e = Ke.propHooks[this.prop];
                    return e && e.get ? e.get(this) : Ke.propHooks._default.get(this)
                },
                run: function (e) {
                    var t,
                    n = Ke.propHooks[this.prop];
                    return this.options.duration ? this.pos = t = S.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) : Ke.propHooks._default.set(this),
                    this
                }
            }).init.prototype = Ke.prototype,
        (Ke.propHooks = {
                _default: {
                    get: function (e) {
                        var t;
                        return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] :
                        (t = S.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0
                    },
                    set: function (e) {
                        S.fx.step[e.prop] ? S.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !S.cssHooks[e.prop] && null == e.elem.style[ze(e.prop)] ? e.elem[e.prop] = e.now : S.style(e.elem, e.prop, e.now + e.unit)
                    }
                }
            }).scrollTop = Ke.propHooks.scrollLeft = {
            set: function (e) {
                e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
            }
        },
        S.easing = {
            linear: function (e) {
                return e
            },
            swing: function (e) {
                return 0.5 - Math.cos(e * Math.PI) / 2
            },
            _default: "swing"
        },
        S.fx = Ke.prototype.init,
        S.fx.step = {};
        var Ze,
        et,
        tt,
        nt,
        rt = /^(?:toggle|show|hide)$/,
        it = /queueHooks$/;
        function ot() {
            et && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(ot) : C.setTimeout(ot, S.fx.interval), S.fx.tick())
        }
        function at() {
            return C.setTimeout(function () {
                Ze = void 0
            }),
            Ze = Date.now()
        }
        function st(e, t) {
            var n,
            r = 0,
            i = {
                height: e
            };
            for (t = t ? 1 : 0; r < 4; r += 2 - t)
                i["margin" + (n = ne[r])] = i["padding" + n] = e;
            return t && (i.opacity = i.width = e),
            i
        }
        function ut(e, t, n) {
            for (var r, i = (lt.tweeners[t] || []).concat(lt.tweeners["*"]), o = 0, a = i.length; o < a; o++)
                if (r = i[o].call(n,
                            t, e))
                    return r
        }
        function lt(o, e, t) {
            var n,
            a,
            r = 0,
            i = lt.prefilters.length,
            s = S.Deferred().always(function () {
                delete u.elem
            }),
            u = function () {
                if (a)
                    return !1;
                for (var e = Ze || at(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++)
                    l.tweens[r].run(n);
                return s.notifyWith(o, [l, n, t]),
                n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1)
            },
            l = s.promise({
                elem: o,
                props: S.extend({}, e),
                opts: S.extend(!0, {
                    specialEasing: {},
                    easing: S.easing._default
                }, t),
                originalProperties: e,
                originalOptions: t,
                startTime: Ze || at(),
                duration: t.duration,
                tweens: [],
                createTween: function (e, t) {
                    var n = S.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);
                    return l.tweens.push(n),
                    n
                },
                stop: function (e) {
                    var t = 0,
                    n = e ? l.tweens.length : 0;
                    if (a)
                        return this;
                    for (a = !0; t < n; t++)
                        l.tweens[t].run(1);
                    return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]),
                    this
                }
            }),
            c = l.props;
            for (!function (e, t) {
                var n,
                r,
                i,
                o,
                a;
                for (n in e)
                    if (i = t[r = X(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a =
                                S.cssHooks[r]) && "expand" in a)
                        for (n in o = a.expand(o), delete e[r], o)
                            n in e || (e[n] = o[n], t[n] = i);
                        else
                            t[r] = i
                }
                    (c, l.opts.specialEasing); r < i; r++)if (n = lt.prefilters[r].call(l, o, c, l.opts))
                    return m(n.stop) && (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;
            return S.map(c, ut, l),
            m(l.opts.start) && l.opts.start.call(o, l),
            l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always),
            S.fx.timer(S.extend(u, {
                    elem: o,
                    anim: l,
                    queue: l.opts.queue
                })),
            l
        }
        S.Animation = S.extend(lt, {
            tweeners: {
                "*": [function (e, t) {
                        var n = this.createTween(e, t);
                        return se(n.elem, e, te.exec(t), n),
                        n
                    }
                ]
            },
            tweener: function (e, t) {
                m(e) ? (t = e, e = ["*"]) : e = e.match(P);
                for (var n, r = 0, i = e.length; r < i; r++)
                    n = e[r], lt.tweeners[n] = lt.tweeners[n] || [], lt.tweeners[n].unshift(t)
            },
            prefilters: [function (e, t, n) {
                    var r,
                    i,
                    o,
                    a,
                    s,
                    u,
                    l,
                    c,
                    f = "width" in t || "height" in t,
                    p = this,
                    d = {},
                    h = e.style,
                    g = e.nodeType && ae(e),
                    v = Y.get(e, "fxshow");
                    for (r in n.queue || (null == (a = S._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () {
                                a.unqueued ||
                                s()
                            }), a.unqueued++, p.always(function () {
                                p.always(function () {
                                    a.unqueued--,
                                    S.queue(e, "fx").length || a.empty.fire()
                                })
                            })), t)
                        if (i = t[r], rt.test(i)) {
                            if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) {
                                if ("show" !== i || !v || void 0 === v[r])
                                    continue;
                                g = !0
                            }
                            d[r] = v && v[r] || S.style(e, r)
                        }
                    if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d))
                        for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Y.get(e, "display")), "none" === (c = S.css(e, "display")) && (l ? c = l : (le([e], !0), l = e.style.display ||
                                                l, c = S.css(e, "display"), le([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === S.css(e, "float") && (u || (p.done(function () {
                                            h.display = l
                                        }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () {
                                    h.overflow = n.overflow[0],
                                    h.overflowX = n.overflow[1],
                                    h.overflowY = n.overflow[2]
                                })), u = !1, d)
                            u || (v ? "hidden" in v && (g = v.hidden) : v = Y.access(e, "fxshow", {
                                    display: l
                                }), o && (v.hidden = !g), g && le([e], !0), p.done(function () {
                                    for (r in g || le([e]), Y.remove(e, "fxshow"),
                                        d)
                                        S.style(e, r, d[r])
                                })), u = ut(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0))
                }
            ],
            prefilter: function (e, t) {
                t ? lt.prefilters.unshift(e) : lt.prefilters.push(e)
            }
        }),
        S.speed = function (e, t, n) {
            var r = e && "object" == typeof e ? S.extend({}, e) : {
                complete: n || !n && t || m(e) && e,
                duration: e,
                easing: n && t || t && !m(t) && t
            };
            return S.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in S.fx.speeds ? r.duration = S.fx.speeds[r.duration] : r.duration = S.fx.speeds._default),
            null != r.queue && !0 !== r.queue || (r.queue = "fx"),
            r.old = r.complete,
            r.complete = function () {
                m(r.old) && r.old.call(this),
                r.queue && S.dequeue(this, r.queue)
            },
            r
        },
        S.fn.extend({
            fadeTo: function (e, t, n, r) {
                return this.filter(ae).css("opacity", 0).show().end().animate({
                    opacity: t
                }, e, n, r)
            },
            animate: function (t, e, n, r) {
                var i = S.isEmptyObject(t),
                o = S.speed(e, n, r),
                a = function () {
                    var e = lt(this, S.extend({}, t), o);
                    (i || Y.get(this, "finish")) && e.stop(!0)
                };
                return a.finish = a,
                i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
            },
            stop: function (i, e, o) {
                var a = function (e) {
                    var t = e.stop;
                    delete e.stop,
                    t(o)
                };
                return "string" != typeof i && (o = e, e = i, i = void 0),
                e && this.queue(i || "fx", []),
                this.each(function () {
                    var e = !0,
                    t = null != i && i + "queueHooks",
                    n = S.timers,
                    r = Y.get(this);
                    if (t)
                        r[t] && r[t].stop && a(r[t]);
                    else
                        for (t in r)
                            r[t] && r[t].stop && it.test(t) && a(r[t]);
                    for (t = n.length; t--; )
                        n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1));
                    !e && o || S.dequeue(this, i)
                })
            },
            finish: function (a) {
                return !1 !== a && (a = a || "fx"),
                this.each(function () {
                    var e,
                    t = Y.get(this),
                    n = t[a + "queue"],
                    r = t[a + "queueHooks"],
                    i = S.timers,
                    o = n ? n.length : 0;
                    for (t.finish = !0, S.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--; )
                        i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));
                    for (e = 0; e < o; e++)
                        n[e] && n[e].finish && n[e].finish.call(this);
                    delete t.finish
                })
            }
        }),
        S.each(["toggle", "show", "hide"], function (e, r) {
            var i = S.fn[r];
            S.fn[r] = function (e, t, n) {
                return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(st(r, !0), e, t, n)
            }
        }),
        S.each({
            slideDown: st("show"),
            slideUp: st("hide"),
            slideToggle: st("toggle"),
            fadeIn: {
                opacity: "show"
            },
            fadeOut: {
                opacity: "hide"
            },
            fadeToggle: {
                opacity: "toggle"
            }
        }, function (e, r) {
            S.fn[e] = function (e, t, n) {
                return this.animate(r, e, t, n)
            }
        }),
        S.timers = [],
        S.fx.tick = function () {
            var e,
            t = 0,
            n = S.timers;
            for (Ze = Date.now(); t < n.length; t++)
                (e = n[t])() || n[t] !== e || n.splice(t--, 1);
            n.length || S.fx.stop(),
            Ze = void 0
        },
        S.fx.timer = function (e) {
            S.timers.push(e),
            S.fx.start()
        },
        S.fx.interval = 13,
        S.fx.start = function () {
            et || (et = !0, ot())
        },
        S.fx.stop = function () {
            et = null
        },
        S.fx.speeds = {
            slow: 600,
            fast: 200,
            _default: 400
        },
        S.fn.delay = function (r, e) {
            return r =
                S.fx && S.fx.speeds[r] || r,
            e = e || "fx",
            this.queue(e, function (e, t) {
                var n = C.setTimeout(e, r);
                t.stop = function () {
                    C.clearTimeout(n)
                }
            })
        },
        tt = E.createElement("input"),
        nt = E.createElement("select").appendChild(E.createElement("option")),
        tt.type = "checkbox",
        y.checkOn = "" !== tt.value,
        y.optSelected = nt.selected,
        (tt = E.createElement("input")).value = "t",
        tt.type = "radio",
        y.radioValue = "t" === tt.value;
        var ct,
        ft = S.expr.attrHandle;
        S.fn.extend({
            attr: function (e, t) {
                return $(this, S.attr, e, t, 1 < arguments.length)
            },
            removeAttr: function (e) {
                return this.each(function () {
                    S.removeAttr(this,
                        e)
                })
            }
        }),
        S.extend({
            attr: function (e, t, n) {
                var r,
                i,
                o = e.nodeType;
                if (3 !== o && 8 !== o && 2 !== o)
                    return "undefined" == typeof e.getAttribute ? S.prop(e, t, n) : (1 === o && S.isXMLDoc(e) || (i = S.attrHooks[t.toLowerCase()] || (S.expr.match.bool.test(t) ? ct : void 0)), void 0 !== n ? null === n ? void S.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = S.find.attr(e, t)) ? void 0 : r)
            },
            attrHooks: {
                type: {
                    set: function (e, t) {
                        if (!y.radioValue && "radio" === t && A(e, "input")) {
                            var n =
                                e.value;
                            return e.setAttribute("type", t),
                            n && (e.value = n),
                            t
                        }
                    }
                }
            },
            removeAttr: function (e, t) {
                var n,
                r = 0,
                i = t && t.match(P);
                if (i && 1 === e.nodeType)
                    while (n = i[r++])
                        e.removeAttribute(n)
            }
        }),
        ct = {
            set: function (e, t, n) {
                return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n),
                n
            }
        },
        S.each(S.expr.match.bool.source.match(/\w+/g), function (e, t) {
            var a = ft[t] || S.find.attr;
            ft[t] = function (e, t, n) {
                var r,
                i,
                o = t.toLowerCase();
                return n || (i = ft[o], ft[o] = r, r = null != a(e, t, n) ? o : null, ft[o] = i),
                r
            }
        });
        var pt = /^(?:input|select|textarea|button)$/i,
        dt = /^(?:a|area)$/i;
        function ht(e) {
            return (e.match(P) || []).join(" ")
        }
        function gt(e) {
            return e.getAttribute && e.getAttribute("class") || ""
        }
        function vt(e) {
            return Array.isArray(e) ? e : "string" == typeof e && e.match(P) || []
        }
        S.fn.extend({
            prop: function (e, t) {
                return $(this, S.prop, e, t, 1 < arguments.length)
            },
            removeProp: function (e) {
                return this.each(function () {
                    delete this[S.propFix[e] || e]
                })
            }
        }),
        S.extend({
            prop: function (e, t, n) {
                var r,
                i,
                o = e.nodeType;
                if (3 !== o && 8 !== o && 2 !== o)
                    return 1 === o && S.isXMLDoc(e) || (t = S.propFix[t] || t, i = S.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) {
                        var t = S.find.attr(e, "tabindex");
                        return t ? parseInt(t, 10) : pt.test(e.nodeName) || dt.test(e.nodeName) && e.href ? 0 : -1
                    }
                }
            },
            propFix: {
                "for": "htmlFor",
                "class": "className"
            }
        }),
        y.optSelected || (S.propHooks.selected = {
                get: function (e) {
                    var t = e.parentNode;
                    return t && t.parentNode && t.parentNode.selectedIndex,
                    null
                },
                set: function (e) {
                    var t = e.parentNode;
                    t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex)
                }
            }),
        S.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
            S.propFix[this.toLowerCase()] = this
        }),
        S.fn.extend({
            addClass: function (t) {
                var e,
                n,
                r,
                i,
                o,
                a,
                s,
                u = 0;
                if (m(t))
                    return this.each(function (e) {
                        S(this).addClass(t.call(this, e, gt(this)))
                    });
                if ((e = vt(t)).length)
                    while (n = this[u++])
                        if (i = gt(n), r = 1 === n.nodeType && " " + ht(i) + " ") {
                            a = 0;
                            while (o = e[a++])
                                r.indexOf(" " + o + " ") < 0 && (r += o + " ");
                            i !== (s = ht(r)) && n.setAttribute("class", s)
                        }
                return this
            },
            removeClass: function (t) {
                var e,
                n,
                r,
                i,
                o,
                a,
                s,
                u = 0;
                if (m(t))
                    return this.each(function (e) {
                        S(this).removeClass(t.call(this, e, gt(this)))
                    });
                if (!arguments.length)
                    return this.attr("class", "");
                if ((e = vt(t)).length)
                    while (n = this[u++])
                        if (i = gt(n), r = 1 === n.nodeType && " " + ht(i) + " ") {
                            a = 0;
                            while (o = e[a++])
                                while (-1 < r.indexOf(" " + o + " "))
                                    r = r.replace(" " + o + " ", " ");
                            i !== (s = ht(r)) && n.setAttribute("class", s)
                        }
                return this
            },
            toggleClass: function (i, t) {
                var o = typeof i,
                a = "string" === o || Array.isArray(i);
                return "boolean" == typeof t && a ? t ? this.addClass(i) :
                this.removeClass(i) : m(i) ? this.each(function (e) {
                    S(this).toggleClass(i.call(this, e, gt(this), t), t)
                }) : this.each(function () {
                    var e,
                    t,
                    n,
                    r;
                    if (a) {
                        t = 0,
                        n = S(this),
                        r = vt(i);
                        while (e = r[t++])
                            n.hasClass(e) ? n.removeClass(e) : n.addClass(e)
                    } else
                        void 0 !== i && "boolean" !== o || ((e = gt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || ""))
                })
            },
            hasClass: function (e) {
                var t,
                n,
                r = 0;
                t = " " + e + " ";
                while (n = this[r++])
                    if (1 === n.nodeType && -1 < (" " + ht(gt(n)) + " ").indexOf(t))
                        return !0;
                return !1
            }
        });
        var yt = /\r/g;
        S.fn.extend({
            val: function (n) {
                var r,
                e,
                i,
                t = this[0];
                return arguments.length ? (i = m(n), this.each(function (e) {
                        var t;
                        1 === this.nodeType && (null == (t = i ? n.call(this, e, S(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = S.map(t, function (e) {
                                        return null == e ? "" : e + ""
                                    })), (r = S.valHooks[this.type] || S.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t))
                    })) : t ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !==
                (e = r.get(t, "value")) ? e : "string" == typeof(e = t.value) ? e.replace(yt, "") : null == e ? "" : e : void 0
            }
        }),
        S.extend({
            valHooks: {
                option: {
                    get: function (e) {
                        var t = S.find.attr(e, "value");
                        return null != t ? t : ht(S.text(e))
                    }
                },
                select: {
                    get: function (e) {
                        var t,
                        n,
                        r,
                        i = e.options,
                        o = e.selectedIndex,
                        a = "select-one" === e.type,
                        s = a ? null : [],
                        u = a ? o + 1 : i.length;
                        for (r = o < 0 ? u : a ? o : 0; r < u; r++)
                            if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) {
                                if (t = S(n).val(), a)
                                    return t;
                                s.push(t)
                            }
                        return s
                    },
                    set: function (e,
                        t) {
                        var n,
                        r,
                        i = e.options,
                        o = S.makeArray(t),
                        a = i.length;
                        while (a--)
                            ((r = i[a]).selected = -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0);
                        return n || (e.selectedIndex = -1),
                        o
                    }
                }
            }
        }),
        S.each(["radio", "checkbox"], function () {
            S.valHooks[this] = {
                set: function (e, t) {
                    if (Array.isArray(t))
                        return e.checked = -1 < S.inArray(S(e).val(), t)
                }
            },
            y.checkOn || (S.valHooks[this].get = function (e) {
                return null === e.getAttribute("value") ? "on" : e.value
            })
        }),
        y.focusin = "onfocusin" in C;
        var mt = /^(?:focusinfocus|focusoutblur)$/,
        xt = function (e) {
            e.stopPropagation()
        };
        S.extend(S.event, {
            trigger: function (e, t, n, r) {
                var i,
                o,
                a,
                s,
                u,
                l,
                c,
                f,
                p = [n || E],
                d = v.call(e, "type") ? e.type : e,
                h = v.call(e, "namespace") ? e.namespace.split(".") : [];
                if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !mt.test(d + S.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[S.expando] ? e : new S.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result =
                            void 0, e.target || (e.target = n), t = null == t ? [e] : S.makeArray(t, [e]), c = S.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) {
                    if (!r && !c.noBubble && !x(n)) {
                        for (s = c.delegateType || d, mt.test(s + d) || (o = o.parentNode); o; o = o.parentNode)
                            p.push(o), a = o;
                        a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C)
                    }
                    i = 0;
                    while ((o = p[i++]) && !e.isPropagationStopped())
                        f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Y.get(o, "events") || Object.create(null))[e.type] && Y.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && V(o) &&
                        (e.result = l.apply(o, t), !1 === e.result && e.preventDefault());
                    return e.type = d,
                    r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !V(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), S.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, xt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, xt), S.event.triggered = void 0, a && (n[u] = a)),
                    e.result
                }
            },
            simulate: function (e, t, n) {
                var r = S.extend(new S.Event, n, {
                    type: e,
                    isSimulated: !0
                });
                S.event.trigger(r, null, t)
            }
        }),
        S.fn.extend({
            trigger: function (e,
                t) {
                return this.each(function () {
                    S.event.trigger(e, t, this)
                })
            },
            triggerHandler: function (e, t) {
                var n = this[0];
                if (n)
                    return S.event.trigger(e, t, n, !0)
            }
        }),
        y.focusin || S.each({
            focus: "focusin",
            blur: "focusout"
        }, function (n, r) {
            var i = function (e) {
                S.event.simulate(r, e.target, S.event.fix(e))
            };
            S.event.special[r] = {
                setup: function () {
                    var e = this.ownerDocument || this.document || this,
                    t = Y.access(e, r);
                    t || e.addEventListener(n, i, !0),
                    Y.access(e, r, (t || 0) + 1)
                },
                teardown: function () {
                    var e = this.ownerDocument || this.document || this,
                    t = Y.access(e,
                            r) - 1;
                    t ? Y.access(e, r, t) : (e.removeEventListener(n, i, !0), Y.remove(e, r))
                }
            }
        });
        var bt = C.location,
        wt = {
            guid: Date.now()
        },
        Tt = /\?/;
        S.parseXML = function (e) {
            var t,
            n;
            if (!e || "string" != typeof e)
                return null;
            try {
                t = (new C.DOMParser).parseFromString(e, "text/xml")
            } catch (e) {}
            return n = t && t.getElementsByTagName("parsererror")[0],
            t && !n || S.error("Invalid XML: " + (n ? S.map(n.childNodes, function (e) {
                        return e.textContent
                    }).join("\n") : e)),
            t
        };
        var Ct = /\[\]$/,
        Et = /\r?\n/g,
        St = /^(?:submit|button|image|reset|file)$/i,
        kt = /^(?:input|select|textarea|keygen)/i;
        function At(n, e, r, i) {
            var t;
            if (Array.isArray(e))
                S.each(e, function (e, t) {
                    r || Ct.test(n) ? i(n, t) : At(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i)
                });
            else if (r || "object" !== w(e))
                i(n, e);
            else
                for (t in e)
                    At(n + "[" + t + "]", e[t], r, i)
        }
        S.param = function (e, t) {
            var n,
            r = [],
            i = function (e, t) {
                var n = m(t) ? t() : t;
                r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n)
            };
            if (null == e)
                return "";
            if (Array.isArray(e) || e.jquery && !S.isPlainObject(e))
                S.each(e, function () {
                    i(this.name, this.value)
                });
            else
                for (n in e)
                    At(n, e[n],
                        t, i);
            return r.join("&")
        },
        S.fn.extend({
            serialize: function () {
                return S.param(this.serializeArray())
            },
            serializeArray: function () {
                return this.map(function () {
                    var e = S.prop(this, "elements");
                    return e ? S.makeArray(e) : this
                }).filter(function () {
                    var e = this.type;
                    return this.name && !S(this).is(":disabled") && kt.test(this.nodeName) && !St.test(e) && (this.checked || !pe.test(e))
                }).map(function (e, t) {
                    var n = S(this).val();
                    return null == n ? null : Array.isArray(n) ? S.map(n, function (e) {
                        return {
                            name: t.name,
                            value: e.replace(Et, "\r\n")
                        }
                    }) : {
                        name: t.name,
                        value: n.replace(Et, "\r\n")
                    }
                }).get()
            }
        });
        var Nt = /%20/g,
        jt = /#.*$/,
        Dt = /([?&])_=[^&]*/,
        qt = /^(.*?):[ \t]*([^\r\n]*)$/gm,
        Lt = /^(?:GET|HEAD)$/,
        Ht = /^\/\//,
        Ot = {},
        Pt = {},
        Rt = "*/".concat("*"),
        Mt = E.createElement("a");
        function It(o) {
            return function (e, t) {
                "string" != typeof e && (t = e, e = "*");
                var n,
                r = 0,
                i = e.toLowerCase().match(P) || [];
                if (m(t))
                    while (n = i[r++])
                        "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t)
            }
        }
        function Wt(t, i, o, a) {
            var s = {},
            u = t === Pt;
            function l(e) {
                var r;
                return s[e] = !0,
                S.each(t[e] || [], function (e, t) {
                    var n = t(i, o, a);
                    return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1)
                }),
                r
            }
            return l(i.dataTypes[0]) || !s["*"] && l("*")
        }
        function Ft(e, t) {
            var n,
            r,
            i = S.ajaxSettings.flatOptions || {};
            for (n in t)
                void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
            return r && S.extend(!0, e, r),
            e
        }
        Mt.href = bt.href,
        S.extend({
            active: 0,
            lastModified: {},
            etag: {},
            ajaxSettings: {
                url: bt.href,
                type: "GET",
                isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),
                global: !0,
                processData: !0,
                async: !0,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                accepts: {
                    "*": Rt,
                    text: "text/plain",
                    html: "text/html",
                    xml: "application/xml, text/xml",
                    json: "application/json, text/javascript"
                },
                contents: {
                    xml: /\bxml\b/,
                    html: /\bhtml/,
                    json: /\bjson\b/
                },
                responseFields: {
                    xml: "responseXML",
                    text: "responseText",
                    json: "responseJSON"
                },
                converters: {
                    "* text": String,
                    "text html": !0,
                    "text json": JSON.parse,
                    "text xml": S.parseXML
                },
                flatOptions: {
                    url: !0,
                    context: !0
                }
            },
            ajaxSetup: function (e, t) {
                return t ? Ft(Ft(e,
                        S.ajaxSettings), t) : Ft(S.ajaxSettings, e)
            },
            ajaxPrefilter: It(Ot),
            ajaxTransport: It(Pt),
            ajax: function (e, t) {
                "object" == typeof e && (t = e, e = void 0),
                t = t || {};
                var c,
                f,
                p,
                n,
                d,
                r,
                h,
                g,
                i,
                o,
                v = S.ajaxSetup({}, t),
                y = v.context || v,
                m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event,
                x = S.Deferred(),
                b = S.Callbacks("once memory"),
                w = v.statusCode || {},
                a = {},
                s = {},
                u = "canceled",
                T = {
                    readyState: 0,
                    getResponseHeader: function (e) {
                        var t;
                        if (h) {
                            if (!n) {
                                n = {};
                                while (t = qt.exec(p))
                                    n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2])
                            }
                            t =
                                n[e.toLowerCase() + " "]
                        }
                        return null == t ? null : t.join(", ")
                    },
                    getAllResponseHeaders: function () {
                        return h ? p : null
                    },
                    setRequestHeader: function (e, t) {
                        return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t),
                        this
                    },
                    overrideMimeType: function (e) {
                        return null == h && (v.mimeType = e),
                        this
                    },
                    statusCode: function (e) {
                        var t;
                        if (e)
                            if (h)
                                T.always(e[T.status]);
                            else
                                for (t in e)
                                    w[t] = [w[t], e[t]];
                        return this
                    },
                    abort: function (e) {
                        var t = e || u;
                        return c && c.abort(t),
                        l(0, t),
                        this
                    }
                };
                if (x.promise(T), v.url = ((e || v.url || bt.href) + "").replace(Ht,
                        bt.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""], null == v.crossDomain) {
                    r = E.createElement("a");
                    try {
                        r.href = v.url,
                        r.href = r.href,
                        v.crossDomain = Mt.protocol + "//" + Mt.host != r.protocol + "//" + r.host
                    } catch (e) {
                        v.crossDomain = !0
                    }
                }
                if (v.data && v.processData && "string" != typeof v.data && (v.data = S.param(v.data, v.traditional)), Wt(Ot, v, t, T), h)
                    return T;
                for (i in(g = S.event && v.global) && 0 == S.active++ && S.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(),
                    v.hasContent = !Lt.test(v.type), f = v.url.replace(jt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(Nt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (Tt.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Dt, "$1"), o = (Tt.test(f) ? "&" : "?") + "_=" + wt.guid++ + o), v.url = f + o), v.ifModified && (S.lastModified[f] && T.setRequestHeader("If-Modified-Since", S.lastModified[f]), S.etag[f] &&
                        T.setRequestHeader("If-None-Match", S.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + Rt + "; q=0.01" : "") : v.accepts["*"]), v.headers)
                    T.setRequestHeader(i, v.headers[i]);
                if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h))
                    return T.abort();
                if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Wt(Pt, v,
                            t, T)) {
                    if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h)
                        return T;
                    v.async && 0 < v.timeout && (d = C.setTimeout(function () {
                            T.abort("timeout")
                        }, v.timeout));
                    try {
                        h = !1,
                        c.send(a, l)
                    } catch (e) {
                        if (h)
                            throw e;
                        l(-1, e)
                    }
                } else
                    l(-1, "No Transport");
                function l(e, t, n, r) {
                    var i,
                    o,
                    a,
                    s,
                    u,
                    l = t;
                    h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) {
                            var r,
                            i,
                            o,
                            a,
                            s = e.contents,
                            u = e.dataTypes;
                            while ("*" === u[0])
                                u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
                            if (r)
                                for (i in s)
                                    if (s[i] && s[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
                                    }
                                    a || (a = i)
                                }
                                o = o || a
                            }
                            if (o)
                                return o !== u[0] && u.unshift(o), n[o]
                        }
                            (v, T, n)), !i && -1 < S.inArray("script", v.dataTypes) && S.inArray("json", v.dataTypes) < 0 && (v.converters["text script"] = function () {}), s = function (e, t, n, r) {
                        var i,
                        o,
                        a,
                        s,
                        u,
                        l = {},
                        c = e.dataTypes.slice();
                        if (c[1])
                            for (a in e.converters)
                                l[a.toLowerCase()] = e.converters[a];
                        o = c.shift();
                        while (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 (!(a = l[u + " " + o] || l["* " + o]))
                                        for (i in l)
                                            if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
                                                !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1]));
                                                break
                                            }
                                    if (!0 !== a)
                                        if (a && e["throws"])
                                            t = a(t);
                                        else
                                            try {
                                                t = a(t)
                                            } catch (e) {
                                                return {
                                                    state: "parsererror",
                                                    error: a ? e : "No conversion from " + u + " to " + o
                                                }
                                            }
                                }
                        return {
                            state: "success",
                            data: t
                        }
                    }
                        (v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) &&
                                (S.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --S.active || S.event.trigger("ajaxStop")))
                }
                return T
            },
            getJSON: function (e, t, n) {
                return S.get(e,
                    t, n, "json")
            },
            getScript: function (e, t) {
                return S.get(e, void 0, t, "script")
            }
        }),
        S.each(["get", "post"], function (e, i) {
            S[i] = function (e, t, n, r) {
                return m(t) && (r = r || n, n = t, t = void 0),
                S.ajax(S.extend({
                        url: e,
                        type: i,
                        dataType: r,
                        data: t,
                        success: n
                    }, S.isPlainObject(e) && e))
            }
        }),
        S.ajaxPrefilter(function (e) {
            var t;
            for (t in e.headers)
                "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "")
        }),
        S._evalUrl = function (e, t, n) {
            return S.ajax({
                url: e,
                type: "GET",
                dataType: "script",
                cache: !0,
                async: !1,
                global: !1,
                converters: {
                    "text script": function () {}
                },
                dataFilter: function (e) {
                    S.globalEval(e, t, n)
                }
            })
        },
        S.fn.extend({
            wrapAll: function (e) {
                var t;
                return this[0] && (m(e) && (e = e.call(this[0])), t = S(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () {
                        var e = this;
                        while (e.firstElementChild)
                            e = e.firstElementChild;
                        return e
                    }).append(this)),
                this
            },
            wrapInner: function (n) {
                return m(n) ? this.each(function (e) {
                    S(this).wrapInner(n.call(this, e))
                }) : this.each(function () {
                    var e = S(this),
                    t = e.contents();
                    t.length ? t.wrapAll(n) : e.append(n)
                })
            },
            wrap: function (t) {
                var n = m(t);
                return this.each(function (e) {
                    S(this).wrapAll(n ? t.call(this, e) : t)
                })
            },
            unwrap: function (e) {
                return this.parent(e).not("body").each(function () {
                    S(this).replaceWith(this.childNodes)
                }),
                this
            }
        }),
        S.expr.pseudos.hidden = function (e) {
            return !S.expr.pseudos.visible(e)
        },
        S.expr.pseudos.visible = function (e) {
            return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
        },
        S.ajaxSettings.xhr = function () {
            try {
                return new C.XMLHttpRequest
            } catch (e) {}
        };
        var Bt = {
            "0": 200,
            1223: 204
        },
        $t = S.ajaxSettings.xhr();
        y.cors = !!$t && "withCredentials" in $t,
        y.ajax = $t = !!$t,
        S.ajaxTransport(function (i) {
            var o,
            a;
            if (y.cors || $t && !i.crossDomain)
                return {
                    send: function (e, t) {
                        var n,
                        r = i.xhr();
                        if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields)
                            for (n in i.xhrFields)
                                r[n] = i.xhrFields[n];
                        for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e)
                            r.setRequestHeader(n, e[n]);
                        o = function (e) {
                            return function () {
                                o && (o = a = r.onload = r.onerror =
                                        r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(Bt[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? {
                                        binary: r.response
                                    }
                                         : {
                                        text: r.responseText
                                    }, r.getAllResponseHeaders()))
                            }
                        },
                        r.onload = o(),
                        a = r.onerror = r.ontimeout = o("error"),
                        void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function () {
                            4 === r.readyState && C.setTimeout(function () {
                                o && a()
                            })
                        },
                        o = o("abort");
                        try {
                            r.send(i.hasContent &&
                                i.data || null)
                        } catch (e) {
                            if (o)
                                throw e;
                        }
                    },
                    abort: function () {
                        o && o()
                    }
                }
        }),
        S.ajaxPrefilter(function (e) {
            e.crossDomain && (e.contents.script = !1)
        }),
        S.ajaxSetup({
            accepts: {
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
            },
            contents: {
                script: /\b(?:java|ecma)script\b/
            },
            converters: {
                "text script": function (e) {
                    return S.globalEval(e),
                    e
                }
            }
        }),
        S.ajaxPrefilter("script", function (e) {
            void 0 === e.cache && (e.cache = !1),
            e.crossDomain && (e.type = "GET")
        }),
        S.ajaxTransport("script", function (n) {
            var r,
            i;
            if (n.crossDomain || n.scriptAttrs)
                return {
                    send: function (e, t) {
                        r = S("<script>").attr(n.scriptAttrs || {}).prop({
                            charset: n.scriptCharset,
                            src: n.url
                        }).on("load error", i = function (e) {
                                r.remove(),
                                i = null,
                                e && t("error" === e.type ? 404 : 200, e.type)
                            }),
                        E.head.appendChild(r[0])
                    },
                    abort: function () {
                        i && i()
                    }
                }
        });
        var _t,
        zt = [],
        Ut = /(=)\?(?=&|$)|\?\?/;
        S.ajaxSetup({
            jsonp: "callback",
            jsonpCallback: function () {
                var e = zt.pop() || S.expando + "_" + wt.guid++;
                return this[e] = !0,
                e
            }
        }),
        S.ajaxPrefilter("json jsonp", function (e, t, n) {
            var r,
            i,
            o,
            a = !1 !== e.jsonp &&
                (Ut.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Ut.test(e.data) && "data");
            if (a || "jsonp" === e.dataTypes[0])
                return r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Ut, "$1" + r) : !1 !== e.jsonp && (e.url += (Tt.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function () {
                    return o || S.error(r + " was not called"),
                    o[0]
                },
            e.dataTypes[0] = "json",
            i = C[r],
            C[r] = function () {
                o = arguments
            },
            n.always(function () {
                void 0 ===
                i ? S(C).removeProp(r) : C[r] = i,
                e[r] && (e.jsonpCallback = t.jsonpCallback, zt.push(r)),
                o && m(i) && i(o[0]),
                o = i = void 0
            }),
            "script"
        }),
        y.createHTMLDocument = ((_t = E.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === _t.childNodes.length),
        S.parseHTML = function (e, t, n) {
            return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (y.createHTMLDocument ? ((r = (t = E.implementation.createHTMLDocument("")).createElement("base")).href = E.location.href, t.head.appendChild(r)) : t = E), o = !n && [], (i =
                        N.exec(e)) ? [t.createElement(i[1])] : (i = xe([e], t, o), o && o.length && S(o).remove(), S.merge([], i.childNodes)));
            var r,
            i,
            o
        },
        S.fn.load = function (e, t, n) {
            var r,
            i,
            o,
            a = this,
            s = e.indexOf(" ");
            return -1 < s && (r = ht(e.slice(s)), e = e.slice(0, s)),
            m(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"),
            0 < a.length && S.ajax({
                url: e,
                type: i || "GET",
                dataType: "html",
                data: t
            }).done(function (e) {
                o = arguments,
                a.html(r ? S("<div>").append(S.parseHTML(e)).find(r) : e)
            }).always(n && function (e, t) {
                a.each(function () {
                    n.apply(this, o || [e.responseText, t,
                            e])
                })
            }),
            this
        },
        S.expr.pseudos.animated = function (t) {
            return S.grep(S.timers, function (e) {
                return t === e.elem
            }).length
        },
        S.offset = {
            setOffset: function (e, t, n) {
                var r,
                i,
                o,
                a,
                s,
                u,
                l = S.css(e, "position"),
                c = S(e),
                f = {};
                "static" === l && (e.style.position = "relative"),
                s = c.offset(),
                o = S.css(e, "top"),
                u = S.css(e, "left"),
                ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0),
                m(t) && (t = t.call(e, n, S.extend({}, s))),
                null != t.top && (f.top = t.top - s.top + a),
                null != t.left &&
                (f.left = t.left - s.left + i),
                "using" in t ? t.using.call(e, f) : c.css(f)
            }
        },
        S.fn.extend({
            offset: function (t) {
                if (arguments.length)
                    return void 0 === t ? this : this.each(function (e) {
                        S.offset.setOffset(this, t, e)
                    });
                var e,
                n,
                r = this[0];
                return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, {
                    top: e.top + n.pageYOffset,
                    left: e.left + n.pageXOffset
                }) : {
                    top: 0,
                    left: 0
                }
                 : void 0
            },
            position: function () {
                if (this[0]) {
                    var e,
                    t,
                    n,
                    r = this[0],
                    i = {
                        top: 0,
                        left: 0
                    };
                    if ("fixed" === S.css(r, "position"))
                        t = r.getBoundingClientRect();
                    else {
                        t = this.offset(),
                        n = r.ownerDocument,
                        e = r.offsetParent || n.documentElement;
                        while (e && (e === n.body || e === n.documentElement) && "static" === S.css(e, "position"))
                            e = e.parentNode;
                        e && e !== r && 1 === e.nodeType && ((i = S(e).offset()).top += S.css(e, "borderTopWidth", !0), i.left += S.css(e, "borderLeftWidth", !0))
                    }
                    return {
                        top: t.top - i.top - S.css(r, "marginTop", !0),
                        left: t.left - i.left - S.css(r, "marginLeft", !0)
                    }
                }
            },
            offsetParent: function () {
                return this.map(function () {
                    var e = this.offsetParent;
                    while (e && "static" === S.css(e, "position"))
                        e = e.offsetParent;
                    return e || re
                })
            }
        }),
        S.each({
            scrollLeft: "pageXOffset",
            scrollTop: "pageYOffset"
        }, function (t, i) {
            var o = "pageYOffset" === i;
            S.fn[t] = function (e) {
                return $(this, function (e, t, n) {
                    var r;
                    if (x(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n)
                        return r ? r[i] : e[t];
                    r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n
                }, t, e, arguments.length)
            }
        }),
        S.each(["top", "left"], function (e, n) {
            S.cssHooks[n] = Fe(y.pixelPosition, function (e, t) {
                if (t)
                    return t = We(e, n), Pe.test(t) ? S(e).position()[n] + "px" : t
            })
        }),
        S.each({
            Height: "height",
            Width: "width"
        },
            function (a, s) {
            S.each({
                padding: "inner" + a,
                content: s,
                "": "outer" + a
            }, function (r, o) {
                S.fn[o] = function (e, t) {
                    var n = arguments.length && (r || "boolean" != typeof e),
                    i = r || (!0 === e || !0 === t ? "margin" : "border");
                    return $(this, function (e, t, n) {
                        var r;
                        return x(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" + a], r["offset" + a], r["client" + a])) : void 0 === n ? S.css(e, t, i) : S.style(e, t, n, i)
                    }, s, n ? e : void 0, n)
                }
            })
        }),
        S.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) {
            S.fn[t] = function (e) {
                return this.on(t, e)
            }
        }),
        S.fn.extend({
            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)
            },
            hover: function (e, t) {
                return this.mouseenter(e).mouseleave(t || e)
            }
        }),
        S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),
            function (e, n) {
            S.fn[n] = function (e, t) {
                return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n)
            }
        });
        var Xt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
        S.proxy = function (e, t) {
            var n,
            r,
            i;
            if ("string" == typeof t && (n = e[t], t = e, e = n), m(e))
                return r = s.call(arguments, 2), (i = function () {
                    return e.apply(t || this, r.concat(s.call(arguments)))
                }).guid = e.guid = e.guid || S.guid++, i
        },
        S.holdReady = function (e) {
            e ? S.readyWait++ : S.ready(!0)
        },
        S.isArray = Array.isArray,
        S.parseJSON = JSON.parse,
        S.nodeName = A,
        S.isFunction = m,
        S.isWindow = x,
        S.camelCase =
            X,
        S.type = w,
        S.now = Date.now,
        S.isNumeric = function (e) {
            var t = S.type(e);
            return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
        },
        S.trim = function (e) {
            return null == e ? "" : (e + "").replace(Xt, "")
        },
        "function" == typeof define && define.amd && define("jquery", [], function () {
            return S
        });
        var Vt = C.jQuery,
        Gt = C.$;
        return S.noConflict = function (e) {
            return C.$ === S && (C.$ = Gt),
            e && C.jQuery === S && (C.jQuery = Vt),
            S
        },
        "undefined" == typeof e && (C.jQuery = C.$ = S),
        S
    });
    (function () {
        var TDV = window["TDV"] || (window["TDV"] = {});
        (function () {
            (function () {
                function n(n) {
                    function t(t, r, e, u, i, o) {
                        for (; i >= 0 && o > i; i += n) {
                            var a = u ? u[i] : i;
                            e = r(e, t[a], a, t)
                        }
                        return e
                    }
                    return function (r, e, u, i) {
                        e = b(e, i, 4);
                        var o = !k(r) && m.keys(r),
                        a = (o || r).length,
                        c = n > 0 ? 0 : a - 1;
                        return arguments.length < 3 && (u = r[o ? o[c] : c], c += n),
                        t(r, e, u, o, c, a)
                    }
                }
                function t(n) {
                    return function (t, r, e) {
                        r = x(r, e);
                        for (var u = O(t), i = n > 0 ? 0 : u - 1; i >= 0 && u > i; i += n)
                            if (r(t[i], i, t))
                                return i;
                        return -1
                    }
                }
                function r(n, t, r) {
                    return function (e, u, i) {
                        var o = 0,
                        a =
                            O(e);
                        if ("number" == typeof i)
                            n > 0 ? o = i >= 0 ? i : Math.max(i + a, o) : a = i >= 0 ? Math.min(i + 1, a) : i + a + 1;
                        else if (r && i && a)
                            return i = r(e, u), e[i] === u ? i : -1;
                        if (u !== u)
                            return i = t(l.call(e, o, a), m.isNaN), i >= 0 ? i + o : -1;
                        for (i = n > 0 ? o : a - 1; i >= 0 && a > i; i += n)
                            if (e[i] === u)
                                return i;
                        return -1
                    }
                }
                function e(n, t) {
                    var r = I.length,
                    e = n.constructor,
                    u = m.isFunction(e) && e.prototype || a,
                    i = "constructor";
                    for (m.has(n, i) && !m.contains(t, i) && t.push(i); r--; )
                        i = I[r], i in n && n[i] !== u[i] && !m.contains(t, i) && t.push(i)
                }
                var u = this,
                i = u._,
                o = Array.prototype,
                a = Object.prototype,
                c = Function.prototype,
                f = o.push,
                l = o.slice,
                s = a.toString,
                p = a.hasOwnProperty,
                h = Array.isArray,
                v = Object.keys,
                g = c.bind,
                y = Object.create,
                d = function () {},
                m = function (n) {
                    return n instanceof m ? n : this instanceof m ? void(this._wrapped = n) : new m(n)
                };
                "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = m), exports._ = m) : u._ = m,
                m.VERSION = "1.8.3";
                var b = function (n, t, r) {
                    if (t === void 0)
                        return n;
                    switch (null == r ? 3 : r) {
                    case 1:
                        return function (r) {
                            return n.call(t, r)
                        };
                    case 2:
                        return function (r,
                            e) {
                            return n.call(t, r, e)
                        };
                    case 3:
                        return function (r, e, u) {
                            return n.call(t, r, e, u)
                        };
                    case 4:
                        return function (r, e, u, i) {
                            return n.call(t, r, e, u, i)
                        }
                    }
                    return function () {
                        return n.apply(t, arguments)
                    }
                },
                x = function (n, t, r) {
                    return null == n ? m.identity : m.isFunction(n) ? b(n, t, r) : m.isObject(n) ? m.matcher(n) : m.property(n)
                };
                m.iteratee = function (n, t) {
                    return x(n, t, 1 / 0)
                };
                var _ = function (n, t) {
                    return function (r) {
                        var e = arguments.length;
                        if (2 > e || null == r)
                            return r;
                        for (var u = 1; e > u; u++)
                            for (var i = arguments[u], o = n(i), a = o.length, c = 0; a > c; c++) {
                                var f =
                                    o[c];
                                t && r[f] !== void 0 || (r[f] = i[f])
                            }
                        return r
                    }
                },
                j = function (n) {
                    if (!m.isObject(n))
                        return {};
                    if (y)
                        return y(n);
                    d.prototype = n;
                    var t = new d;
                    return d.prototype = null,
                    t
                },
                w = function (n) {
                    return function (t) {
                        return null == t ? void 0 : t[n]
                    }
                },
                A = Math.pow(2, 53) - 1,
                O = w("length"),
                k = function (n) {
                    var t = O(n);
                    return "number" == typeof t && t >= 0 && A >= t
                };
                m.each = m.forEach = function (n, t, r) {
                    t = b(t, r);
                    var e,
                    u;
                    if (k(n))
                        for (e = 0, u = n.length; u > e; e++)
                            t(n[e], e, n);
                    else {
                        var i = m.keys(n);
                        for (e = 0, u = i.length; u > e; e++)
                            t(n[i[e]], i[e], n)
                    }
                    return n
                },
                m.map = m.collect =
                function (n, t, r) {
                    t = x(t, r);
                    for (var e = !k(n) && m.keys(n), u = (e || n).length, i = Array(u), o = 0; u > o; o++) {
                        var a = e ? e[o] : o;
                        i[o] = t(n[a], a, n)
                    }
                    return i
                },
                m.reduce = m.foldl = m.inject = n(1),
                m.reduceRight = m.foldr = n(-1),
                m.find = m.detect = function (n, t, r) {
                    var e;
                    return e = k(n) ? m.findIndex(n, t, r) : m.findKey(n, t, r),
                    e !== void 0 && e !== -1 ? n[e] : void 0
                },
                m.filter = m.select = function (n, t, r) {
                    var e = [];
                    return t = x(t, r),
                    m.each(n, function (n, r, u) {
                        t(n, r, u) && e.push(n)
                    }),
                    e
                },
                m.reject = function (n, t, r) {
                    return m.filter(n, m.negate(x(t)), r)
                },
                m.every = m.all = function (n,
                    t, r) {
                    t = x(t, r);
                    for (var e = !k(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) {
                        var o = e ? e[i] : i;
                        if (!t(n[o], o, n))
                            return !1
                    }
                    return !0
                },
                m.some = m.any = function (n, t, r) {
                    t = x(t, r);
                    for (var e = !k(n) && m.keys(n), u = (e || n).length, i = 0; u > i; i++) {
                        var o = e ? e[i] : i;
                        if (t(n[o], o, n))
                            return !0
                    }
                    return !1
                },
                m.contains = m.includes = m.include = function (n, t, r, e) {
                    return k(n) || (n = m.values(n)),
                    ("number" != typeof r || e) && (r = 0),
                    m.indexOf(n, t, r) >= 0
                },
                m.invoke = function (n, t) {
                    var r = l.call(arguments, 2),
                    e = m.isFunction(t);
                    return m.map(n, function (n) {
                        var u = e ? t : n[t];
                        return null == u ? u : u.apply(n, r)
                    })
                },
                m.pluck = function (n, t) {
                    return m.map(n, m.property(t))
                },
                m.where = function (n, t) {
                    return m.filter(n, m.matcher(t))
                },
                m.findWhere = function (n, t) {
                    return m.find(n, m.matcher(t))
                },
                m.max = function (n, t, r) {
                    var e,
                    u,
                    i = -1 / 0,
                    o = -1 / 0;
                    if (null == t && null != n) {
                        n = k(n) ? n : m.values(n);
                        for (var a = 0, c = n.length; c > a; a++)
                            e = n[a], e > i && (i = e)
                    } else
                        t = x(t, r), m.each(n, function (n, r, e) {
                            u = t(n, r, e),
                            (u > o || u === -1 / 0 && i === -1 / 0) && (i = n, o = u)
                        });
                    return i
                },
                m.min = function (n, t, r) {
                    var e,
                    u,
                    i = 1 / 0,
                    o = 1 / 0;
                    if (null == t && null != n) {
                        n = k(n) ?
                            n : m.values(n);
                        for (var a = 0, c = n.length; c > a; a++)
                            e = n[a], i > e && (i = e)
                    } else
                        t = x(t, r), m.each(n, function (n, r, e) {
                            u = t(n, r, e),
                            (o > u || 1 / 0 === u && 1 / 0 === i) && (i = n, o = u)
                        });
                    return i
                },
                m.shuffle = function (n) {
                    for (var t, r = k(n) ? n : m.values(n), e = r.length, u = Array(e), i = 0; e > i; i++)
                        t = m.random(0, i), t !== i && (u[i] = u[t]), u[t] = r[i];
                    return u
                },
                m.sample = function (n, t, r) {
                    return null == t || r ? (k(n) || (n = m.values(n)), n[m.random(n.length - 1)]) : m.shuffle(n).slice(0, Math.max(0, t))
                },
                m.sortBy = function (n, t, r) {
                    return t = x(t, r),
                    m.pluck(m.map(n, function (n, r, e) {
                            return {
                                value: n,
                                index: r,
                                criteria: t(n, r, e)
                            }
                        }).sort(function (n, t) {
                            var r = n.criteria,
                            e = t.criteria;
                            if (r !== e) {
                                if (r > e || r === void 0)
                                    return 1;
                                if (e > r || e === void 0)
                                    return -1
                            }
                            return n.index - t.index
                        }), "value")
                };
                var F = function (n) {
                    return function (t, r, e) {
                        var u = {};
                        return r = x(r, e),
                        m.each(t, function (e, i) {
                            var o = r(e, i, t);
                            n(u, e, o)
                        }),
                        u
                    }
                };
                m.groupBy = F(function (n, t, r) {
                    m.has(n, r) ? n[r].push(t) : n[r] = [t]
                }),
                m.indexBy = F(function (n, t, r) {
                    n[r] = t
                }),
                m.countBy = F(function (n, t, r) {
                    m.has(n, r) ? n[r]++ : n[r] = 1
                }),
                m.toArray = function (n) {
                    return n ? m.isArray(n) ? l.call(n) :
                    k(n) ? m.map(n, m.identity) : m.values(n) : []
                },
                m.size = function (n) {
                    return null == n ? 0 : k(n) ? n.length : m.keys(n).length
                },
                m.partition = function (n, t, r) {
                    t = x(t, r);
                    var e = [],
                    u = [];
                    return m.each(n, function (n, r, i) {
                        (t(n, r, i) ? e : u).push(n)
                    }),
                    [e, u]
                },
                m.first = m.head = m.take = function (n, t, r) {
                    return null == n ? void 0 : null == t || r ? n[0] : m.initial(n, n.length - t)
                },
                m.initial = function (n, t, r) {
                    return l.call(n, 0, Math.max(0, n.length - (null == t || r ? 1 : t)))
                },
                m.last = function (n, t, r) {
                    return null == n ? void 0 : null == t || r ? n[n.length - 1] : m.rest(n, Math.max(0, n.length -
                            t))
                },
                m.rest = m.tail = m.drop = function (n, t, r) {
                    return l.call(n, null == t || r ? 1 : t)
                },
                m.compact = function (n) {
                    return m.filter(n, m.identity)
                };
                var S = function (n, t, r, e) {
                    for (var u = [], i = 0, o = e || 0, a = O(n); a > o; o++) {
                        var c = n[o];
                        if (k(c) && (m.isArray(c) || m.isArguments(c))) {
                            t || (c = S(c, t, r));
                            var f = 0,
                            l = c.length;
                            for (u.length += l; l > f; )
                                u[i++] = c[f++]
                        } else
                            r || (u[i++] = c)
                    }
                    return u
                };
                m.flatten = function (n, t) {
                    return S(n, t, !1)
                },
                m.without = function (n) {
                    return m.difference(n, l.call(arguments, 1))
                },
                m.uniq = m.unique = function (n, t, r, e) {
                    m.isBoolean(t) ||
                    (e = r, r = t, t = !1),
                    null != r && (r = x(r, e));
                    for (var u = [], i = [], o = 0, a = O(n); a > o; o++) {
                        var c = n[o],
                        f = r ? r(c, o, n) : c;
                        t ? (o && i === f || u.push(c), i = f) : r ? m.contains(i, f) || (i.push(f), u.push(c)) : m.contains(u, c) || u.push(c)
                    }
                    return u
                },
                m.union = function () {
                    return m.uniq(S(arguments, !0, !0))
                },
                m.intersection = function (n) {
                    for (var t = [], r = arguments.length, e = 0, u = O(n); u > e; e++) {
                        var i = n[e];
                        if (!m.contains(t, i)) {
                            for (var o = 1; r > o && m.contains(arguments[o], i); o++);
                            o === r && t.push(i)
                        }
                    }
                    return t
                },
                m.difference = function (n) {
                    var t = S(arguments, !0, !0, 1);
                    return m.filter(n,
                        function (n) {
                        return !m.contains(t, n)
                    })
                },
                m.zip = function () {
                    return m.unzip(arguments)
                },
                m.unzip = function (n) {
                    for (var t = n && m.max(n, O).length || 0, r = Array(t), e = 0; t > e; e++)
                        r[e] = m.pluck(n, e);
                    return r
                },
                m.object = function (n, t) {
                    for (var r = {}, e = 0, u = O(n); u > e; e++)
                        t ? r[n[e]] = t[e] : r[n[e][0]] = n[e][1];
                    return r
                },
                m.findIndex = t(1),
                m.findLastIndex = t(-1),
                m.sortedIndex = function (n, t, r, e) {
                    r = x(r, e, 1);
                    for (var u = r(t), i = 0, o = O(n); o > i; ) {
                        var a = Math.floor((i + o) / 2);
                        r(n[a]) < u ? i = a + 1 : o = a
                    }
                    return i
                },
                m.indexOf = r(1, m.findIndex, m.sortedIndex),
                m.lastIndexOf =
                    r(-1, m.findLastIndex),
                m.range = function (n, t, r) {
                    null == t && (t = n || 0, n = 0),
                    r = r || 1;
                    for (var e = Math.max(Math.ceil((t - n) / r), 0), u = Array(e), i = 0; e > i; i++, n += r)
                        u[i] = n;
                    return u
                };
                var E = function (n, t, r, e, u) {
                    if (!(e instanceof t))
                        return n.apply(r, u);
                    var i = j(n.prototype),
                    o = n.apply(i, u);
                    return m.isObject(o) ? o : i
                };
                m.bind = function (n, t) {
                    if (g && n.bind === g)
                        return g.apply(n, l.call(arguments, 1));
                    if (!m.isFunction(n))
                        throw new TypeError("Bind must be called on a function");
                    var r = l.call(arguments, 2),
                    e = function () {
                        return E(n, e, t, this,
                            r.concat(l.call(arguments)))
                    };
                    return e
                },
                m.partial = function (n) {
                    var t = l.call(arguments, 1),
                    r = function () {
                        for (var e = 0, u = t.length, i = Array(u), o = 0; u > o; o++)
                            i[o] = t[o] === m ? arguments[e++] : t[o];
                        for (; e < arguments.length; )
                            i.push(arguments[e++]);
                        return E(n, r, this, this, i)
                    };
                    return r
                },
                m.bindAll = function (n) {
                    var t,
                    r,
                    e = arguments.length;
                    if (1 >= e)
                        throw new Error("bindAll must be passed function names");
                    for (t = 1; e > t; t++)
                        r = arguments[t], n[r] = m.bind(n[r], n);
                    return n
                },
                m.memoize = function (n, t) {
                    var r = function (e) {
                        var u = r.cache,
                        i = "" +
                            (t ? t.apply(this, arguments) : e);
                        return m.has(u, i) || (u[i] = n.apply(this, arguments)),
                        u[i]
                    };
                    return r.cache = {},
                    r
                },
                m.delay = function (n, t) {
                    var r = l.call(arguments, 2);
                    return setTimeout(function () {
                        return n.apply(null, r)
                    }, t)
                },
                m.defer = m.partial(m.delay, m, 1),
                m.throttle = function (n, t, r) {
                    var e,
                    u,
                    i,
                    o = null,
                    a = 0;
                    r || (r = {});
                    var c = function () {
                        a = r.leading === !1 ? 0 : m.now(),
                        o = null,
                        i = n.apply(e, u),
                        o || (e = u = null)
                    };
                    return function () {
                        var f = m.now();
                        a || r.leading !== !1 || (a = f);
                        var l = t - (f - a);
                        return e = this,
                        u = arguments,
                        0 >= l || l > t ? (o && (clearTimeout(o),
                                o = null), a = f, i = n.apply(e, u), o || (e = u = null)) : o || r.trailing === !1 || (o = setTimeout(c, l)),
                        i
                    }
                },
                m.debounce = function (n, t, r) {
                    var e,
                    u,
                    i,
                    o,
                    a,
                    c = function () {
                        var f = m.now() - o;
                        t > f && f >= 0 ? e = setTimeout(c, t - f) : (e = null, r || (a = n.apply(i, u), e || (i = u = null)))
                    };
                    return function () {
                        i = this,
                        u = arguments,
                        o = m.now();
                        var f = r && !e;
                        return e || (e = setTimeout(c, t)),
                        f && (a = n.apply(i, u), i = u = null),
                        a
                    }
                },
                m.wrap = function (n, t) {
                    return m.partial(t, n)
                },
                m.negate = function (n) {
                    return function () {
                        return !n.apply(this, arguments)
                    }
                },
                m.compose = function () {
                    var n = arguments,
                    t = n.length - 1;
                    return function () {
                        for (var r = t, e = n[t].apply(this, arguments); r--; )
                            e = n[r].call(this, e);
                        return e
                    }
                },
                m.after = function (n, t) {
                    return function () {
                        return --n < 1 ? t.apply(this, arguments) : void 0
                    }
                },
                m.before = function (n, t) {
                    var r;
                    return function () {
                        return --n > 0 && (r = t.apply(this, arguments)),
                        1 >= n && (t = null),
                        r
                    }
                },
                m.once = m.partial(m.before, 2);
                var M = !{
                    toString: null
                }
                .propertyIsEnumerable("toString"),
                I = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"];
                m.keys = function (n) {
                    if (!m.isObject(n))
                        return [];
                    if (v)
                        return v(n);
                    var t = [];
                    for (var r in n)
                        m.has(n, r) && t.push(r);
                    return M && e(n, t),
                    t
                },
                m.allKeys = function (n) {
                    if (!m.isObject(n))
                        return [];
                    var t = [];
                    for (var r in n)
                        t.push(r);
                    return M && e(n, t),
                    t
                },
                m.values = function (n) {
                    for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++)
                        e[u] = n[t[u]];
                    return e
                },
                m.mapObject = function (n, t, r) {
                    t = x(t, r);
                    for (var e, u = m.keys(n), i = u.length, o = {}, a = 0; i > a; a++)
                        e = u[a], o[e] = t(n[e], e, n);
                    return o
                },
                m.pairs = function (n) {
                    for (var t = m.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++)
                        e[u] = [t[u], n[t[u]]];
                    return e
                },
                m.invert = function (n) {
                    for (var t = {}, r = m.keys(n), e = 0, u = r.length; u > e; e++)
                        t[n[r[e]]] = r[e];
                    return t
                },
                m.functions = m.methods = function (n) {
                    var t = [];
                    for (var r in n)
                        m.isFunction(n[r]) && t.push(r);
                    return t.sort()
                },
                m.extend = _(m.allKeys),
                m.extendOwn = m.assign = _(m.keys),
                m.findKey = function (n, t, r) {
                    t = x(t, r);
                    for (var e, u = m.keys(n), i = 0, o = u.length; o > i; i++)
                        if (e = u[i], t(n[e], e, n))
                            return e
                },
                m.pick = function (n, t, r) {
                    var e,
                    u,
                    i = {},
                    o = n;
                    if (null == o)
                        return i;
                    m.isFunction(t) ? (u = m.allKeys(o), e = b(t, r)) : (u = S(arguments, !1, !1, 1), e = function (n,
                            t, r) {
                        return t in r
                    }, o = Object(o));
                    for (var a = 0, c = u.length; c > a; a++) {
                        var f = u[a],
                        l = o[f];
                        e(l, f, o) && (i[f] = l)
                    }
                    return i
                },
                m.omit = function (n, t, r) {
                    if (m.isFunction(t))
                        t = m.negate(t);
                    else {
                        var e = m.map(S(arguments, !1, !1, 1), String);
                        t = function (n, t) {
                            return !m.contains(e, t)
                        }
                    }
                    return m.pick(n, t, r)
                },
                m.defaults = _(m.allKeys, !0),
                m.create = function (n, t) {
                    var r = j(n);
                    return t && m.extendOwn(r, t),
                    r
                },
                m.clone = function (n) {
                    return m.isObject(n) ? m.isArray(n) ? n.slice() : m.extend({}, n) : n
                },
                m.tap = function (n, t) {
                    return t(n),
                    n
                },
                m.isMatch = function (n,
                    t) {
                    var r = m.keys(t),
                    e = r.length;
                    if (null == n)
                        return !e;
                    for (var u = Object(n), i = 0; e > i; i++) {
                        var o = r[i];
                        if (t[o] !== u[o] || !(o in u))
                            return !1
                    }
                    return !0
                };
                var N = function (n, t, r, e) {
                    if (n === t)
                        return 0 !== n || 1 / n === 1 / t;
                    if (null == n || null == t)
                        return n === t;
                    n instanceof m && (n = n._wrapped),
                    t instanceof m && (t = t._wrapped);
                    var u = s.call(n);
                    if (u !== s.call(t))
                        return !1;
                    switch (u) {
                    case "[object RegExp]":
                    case "[object String]":
                        return "" + n == "" + t;
                    case "[object Number]":
                        return +n !== +n ? +t !== +t : 0 === +n ? 1 / +n === 1 / t : +n === +t;
                    case "[object Date]":
                    case "[object Boolean]":
                        return +n ===
                        +t
                    }
                    var i = "[object Array]" === u;
                    if (!i) {
                        if ("object" != typeof n || "object" != typeof t)
                            return !1;
                        var o = n.constructor,
                        a = t.constructor;
                        if (o !== a && !(m.isFunction(o) && o instanceof o && m.isFunction(a) && a instanceof a) && "constructor" in n && "constructor" in t)
                            return !1
                    }
                    r = r || [],
                    e = e || [];
                    for (var c = r.length; c--; )
                        if (r[c] === n)
                            return e[c] === t;
                    if (r.push(n), e.push(t), i) {
                        if (c = n.length, c !== t.length)
                            return !1;
                        for (; c--; )
                            if (!N(n[c], t[c], r, e))
                                return !1
                    } else {
                        var f,
                        l = m.keys(n);
                        if (c = l.length, m.keys(t).length !== c)
                            return !1;
                        for (; c--; )
                            if (f =
                                    l[c], !m.has(t, f) || !N(n[f], t[f], r, e))
                                return !1
                    }
                    return r.pop(),
                    e.pop(),
                    !0
                };
                m.isEqual = function (n, t) {
                    return N(n, t)
                },
                m.isEmpty = function (n) {
                    return null == n ? !0 : k(n) && (m.isArray(n) || m.isString(n) || m.isArguments(n)) ? 0 === n.length : 0 === m.keys(n).length
                },
                m.isElement = function (n) {
                    return !(!n || 1 !== n.nodeType)
                },
                m.isArray = h || function (n) {
                    return "[object Array]" === s.call(n)
                },
                m.isObject = function (n) {
                    var t = typeof n;
                    return "function" === t || "object" === t && !!n
                },
                m.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error"],
                    function (n) {
                    m["is" + n] = function (t) {
                        return s.call(t) === "[object " + n + "]"
                    }
                }),
                m.isArguments(arguments) || (m.isArguments = function (n) {
                    return m.has(n, "callee")
                }),
                "function" != typeof / . /  && "object" != typeof Int8Array && (m.isFunction = function (n) {
                    return "function" == typeof n || !1
                }),
                m.isFinite = function (n) {
                    return isFinite(n) && !isNaN(parseFloat(n))
                },
                m.isNaN = function (n) {
                    return m.isNumber(n) && n !== +n
                },
                m.isBoolean = function (n) {
                    return n === !0 || n === !1 || "[object Boolean]" === s.call(n)
                },
                m.isNull = function (n) {
                    return null === n
                },
                m.isUndefined =
                function (n) {
                    return n === void 0
                },
                m.has = function (n, t) {
                    return null != n && p.call(n, t)
                },
                m.noConflict = function () {
                    return u._ = i,
                    this
                },
                m.identity = function (n) {
                    return n
                },
                m.constant = function (n) {
                    return function () {
                        return n
                    }
                },
                m.noop = function () {},
                m.property = w,
                m.propertyOf = function (n) {
                    return null == n ? function () {}
                     : function (t) {
                        return n[t]
                    }
                },
                m.matcher = m.matches = function (n) {
                    return n = m.extendOwn({}, n),
                    function (t) {
                        return m.isMatch(t, n)
                    }
                },
                m.times = function (n, t, r) {
                    var e = Array(Math.max(0, n));
                    t = b(t, r, 1);
                    for (var u = 0; n > u; u++)
                        e[u] =
                            t(u);
                    return e
                },
                m.random = function (n, t) {
                    return null == t && (t = n, n = 0),
                    n + Math.floor(Math.random() * (t - n + 1))
                },
                m.now = Date.now || function () {
                    return (new Date).getTime()
                };
                var B = {
                    "&": "&amp;",
                    "<": "&lt;",
                    ">": "&gt;",
                    '"': "&quot;",
                    "'": "&#x27;",
                    "`": "&#x60;"
                },
                T = m.invert(B),
                R = function (n) {
                    var t = function (t) {
                        return n[t]
                    },
                    r = "(?:" + m.keys(n).join("|") + ")",
                    e = RegExp(r),
                    u = RegExp(r, "g");
                    return function (n) {
                        return n = null == n ? "" : "" + n,
                        e.test(n) ? n.replace(u, t) : n
                    }
                };
                m.escape = R(B),
                m.unescape = R(T),
                m.result = function (n, t, r) {
                    var e = null == n ? void 0 :
                        n[t];
                    return e === void 0 && (e = r),
                    m.isFunction(e) ? e.call(n) : e
                };
                var q = 0;
                m.uniqueId = function (n) {
                    var t = ++q + "";
                    return n ? n + t : t
                },
                m.templateSettings = {
                    evaluate: /<%([\s\S]+?)%>/g,
                    interpolate: /<%=([\s\S]+?)%>/g,
                    escape: /<%-([\s\S]+?)%>/g
                };
                var K = /(.)^/,
                z = {
                    "'": "'",
                    "\\": "\\",
                    "\r": "r",
                    "\n": "n",
                    "\u2028": "u2028",
                    "\u2029": "u2029"
                },
                D = /\\|'|\r|\n|\u2028|\u2029/g,
                L = function (n) {
                    return "\\" + z[n]
                };
                m.template = function (n, t, r) {
                    !t && r && (t = r),
                    t = m.defaults({}, t, m.templateSettings);
                    var e = RegExp([(t.escape || K).source, (t.interpolate ||
                                    K).source, (t.evaluate || K).source].join("|") + "|$", "g"),
                    u = 0,
                    i = "__p+='";
                    n.replace(e, function (t, r, e, o, a) {
                        return i += n.slice(u, a).replace(D, L),
                        u = a + t.length,
                        r ? i += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'" : e ? i += "'+\n((__t=(" + e + "))==null?'':__t)+\n'" : o && (i += "';\n" + o + "\n__p+='"),
                        t
                    }),
                    i += "';\n",
                    t.variable || (i = "with(obj||{}){\n" + i + "}\n"),
                    i = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + i + "return __p;\n";
                    try {
                        var o = new Function(t.variable || "obj", "_", i)
                    } catch (a) {
                        throw a.source =
                            i,
                        a;
                    }
                    var c = function (n) {
                        return o.call(this, n, m)
                    },
                    f = t.variable || "obj";
                    return c.source = "function(" + f + "){\n" + i + "}",
                    c
                },
                m.chain = function (n) {
                    var t = m(n);
                    return t._chain = !0,
                    t
                };
                var P = function (n, t) {
                    return n._chain ? m(t).chain() : t
                };
                m.mixin = function (n) {
                    m.each(m.functions(n), function (t) {
                        var r = m[t] = n[t];
                        m.prototype[t] = function () {
                            var n = [this._wrapped];
                            return f.apply(n, arguments),
                            P(this, r.apply(m, n))
                        }
                    })
                },
                m.mixin(m),
                m.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (n) {
                    var t = o[n];
                    m.prototype[n] =
                    function () {
                        var r = this._wrapped;
                        return t.apply(r, arguments),
                        "shift" !== n && "splice" !== n || 0 !== r.length || delete r[0],
                        P(this, r)
                    }
                }),
                m.each(["concat", "join", "slice"], function (n) {
                    var t = o[n];
                    m.prototype[n] = function () {
                        return P(this, t.apply(this._wrapped, arguments))
                    }
                }),
                m.prototype.value = function () {
                    return this._wrapped
                },
                m.prototype.valueOf = m.prototype.toJSON = m.prototype.value,
                m.prototype.toString = function () {
                    return "" + this._wrapped
                },
                "function" == typeof define && define.amd && define("underscore", [], function () {
                    return m
                })
            }).call(this)
        }).call(TDV)
    })();
    function i(a) {
        throw a;
    }
    var m = void 0,
    n = !0,
    r = null,
    y = !1;
    function D() {
        return function () {}
    }
    function P(a) {
        return function (b) {
            this[a] = b
        }
    }
    function Q(a) {
        return function () {
            return this[a]
        }
    }
    function R(a) {
        return function () {
            return a
        }
    }
    (function () {
        function a(a) {
            this.Qk = a;
            this.ip = r;
            this.Xc = {}
        }
        function b() {
            this.ak = {};
            this.ak[b.SCRIPT_URL] = [];
            this.ak[b.THREE_JS_WEBGL_URL] = "lib/ThreeWebGL.js";
            this.ak[b.WEBVR_POLYFILL_URL] = "lib/WebVRPolyfill.js";
            this.ak[b.HLS_URL] = "lib/Hls.js";
            this.ak[b.CURSORS_DIR_URL] = "lib/cursors";
            this.ak[b.SERVICE_WORKER_URL] = "tdvplayersw.js";
            this.ak[b.BACKGROUND_PRELOAD_ENABLED] = m
        }
        function c() {
            this.aD = [];
            this.QK = [];
            this.qpa = [];
            this.RG = r
        }
        function e(a) {
            return "[object Array]" == Object.prototype.toString.call(a)
        }
        function g(a) {
            return 0 <=
            f.search(a.toLowerCase())
        }
        var d = window.TDV = window.TDV || {},
        f = navigator.userAgent.toLowerCase();
        c.prototype.getVersion = c.prototype.IM = function () {
            return {
                MAJOR: "0",
                MINOR: "1544"
            }
        };
        c.prototype.R8 = function () {
            if (this.RG)
                for (; 0 < this.aD.length; ) {
                    var a = this.aD[0];
                    this.aD = this.aD.slice(1);
                    this.QK.push(a);
                    this.ika(a)
                }
        };
        c.prototype.E6 = function (a) {
            var b = document.createElement("a");
            b.href = a;
            return b.href
        };
        c.prototype.Yla = function () {
            var a = document.currentScript;
            a || (a = document.getElementsByTagName("head")[0].getElementsByTagName("script"),
                a = a[a.length - 1]);
            return this.E6(a.src)
        };
        c.prototype.ika = function (a) {
            var d = this,
            f = a.Qk.get(b.SELECTED_SCRIPT_URL);
            setTimeout(function () {
                var b = document.createElement("script");
                b.type = "text/javascript";
                b.src = f;
                document.getElementsByTagName("head")[0].appendChild(b);
                d.RG.Oza(a)
            }, 1)
        };
        c.prototype.defineScript = c.prototype.dBa = function (a) {
            for (var d = [], f = this.Yla(), c = 0; c < this.QK.length; c++) {
                var h = this.QK[c],
                g = this.E6(h.Qk.get(b.SELECTED_SCRIPT_URL));
                g == f ? (h.Qk.set(b.SCRIPT_DATA, a), h.$ya(new this.RG(h, h.Qk)),
                    this.qpa.push(h)) : d.push(g)
            }
            this.QK = d
        };
        c.prototype.create = c.prototype.create = function (a) {
            var f = a.get(b.SCRIPT_URL),
            f = e(f) ? this.eqa(f) : "string" === typeof f ? f : "script.js";
            a.set(b.SELECTED_SCRIPT_URL, f);
            a = new d.R0(a);
            this.aD.push(a);
            this.R8();
            return a
        };
        c.prototype.setPlayerClass = c.prototype.Zya = function (a) {
            this.RG = a;
            this.R8()
        };
        c.prototype.getOrientation = c.prototype.Fn = function () {
            var a = screen.orientation && screen.orientation.type || window.orientation;
            return "portrait-primary" == a || "portrait-secondary" == a ||
            0 === a || 180 == a ? d.Da.VO : "landscape-primary" == a || "landscape-secondary" == a || 90 == a || -90 == a ? d.Da.UO : window.innerWidth < window.innerHeight ? d.Da.VO : d.Da.UO
        };
        c.prototype.eqa = function (a) {
            if (0 < a.length) {
                for (var b = 0; b < a.length; b++) {
                    var d = a[b];
                    if (e(d)) {
                        if (this.T$(d[0]))
                            return d[1]
                    } else if ("string" === typeof d)
                        return d
                }
                return a[0][1]
            }
            return "script.js"
        };
        c.prototype.T$ = function (a) {
            if ("string" === typeof a) {
                var b = a.match(/^\s*default\s*$/);
                if (b)
                    return n;
                if (b = a.match(/^\s*os\s*=\s*(\w+)\s*$/))
                    return this.Rd == b[1].toLowerCase();
                if (b = a.match(/^\s*browser\s*=\s*(\w+)\s*$/))
                    return this.browser == b[1].toLowerCase();
                if (b = a.match(/^\s*device\s*=\s*(\w+)\s*$/))
                    return this.Es == b[1].toLowerCase();
                if (b = a.match(/^\s*screen_size\s*(<|>|=|<=|>=)\s*(\d+)\s*x\s*(\d+)\s*$/)) {
                    var a = parseInt(b[2]),
                    d = parseInt(b[3]),
                    f;
                    switch (b[1]) {
                    case "<":
                        f = function (a, b) {
                            return a < b
                        };
                        break;
                    case ">":
                        f = function (a, b) {
                            return a > b
                        };
                        break;
                    case "=":
                        f = function (a, b) {
                            return a == b
                        };
                        break;
                    case "<=":
                        f = function (a, b) {
                            return a <= b
                        };
                        break;
                    case ">=":
                        f = function (a, b) {
                            return a >= b
                        }
                    }
                    return f(screen.width,
                        a) && f(screen.height, d) || this.pZ && f(screen.width, d) && f(screen.height, a)
                }
                return y
            }
            if (e(a)) {
                for (b = 0; b < a.length; b++)
                    if (!this.T$(a[b]))
                        return y;
                return n
            }
            return y
        };
        c.prototype.ORIENTATION_LANDSCAPE = c.prototype.UO = "landscape";
        c.prototype.ORIENTATION_PORTRAIT = c.prototype.VO = "portrait";
        c.prototype.OS_IOS = c.prototype.GG = "ios";
        c.prototype.OS_ANDROID = c.prototype.WO = "android";
        c.prototype.OS_WINDOWS = c.prototype.H0 = "windows";
        c.prototype.OS_WINDOWS_PHONE = c.prototype.$O = "windows_phone";
        c.prototype.OS_MACOSX = c.prototype.XO =
            "osx";
        c.prototype.OS_LINUX = c.prototype.G0 = "linux";
        c.prototype.OS_QNX = c.prototype.ZO = "qnx";
        c.prototype.OS_OTHER = c.prototype.YO = "other";
        c.prototype.BROWSER_TYPE_WEBKIT = c.prototype.iA = "webkit";
        c.prototype.BROWSER_TYPE_OPERA = c.prototype.VN = "opera";
        c.prototype.BROWSER_TYPE_MSIE = c.prototype.UN = "msie";
        c.prototype.BROWSER_TYPE_MOZILLA = c.prototype.TN = "mozilla";
        c.prototype.BROWSER_TYPE_OTHER = c.prototype.WN = "other";
        c.prototype.BROWSER_SAFARI_IOS = c.prototype.If = "safari_ios";
        c.prototype.BROWSER_OPERA = c.prototype.iG =
            "opera";
        c.prototype.BROWSER_SAFARI = c.prototype.Ji = "safari";
        c.prototype.BROWSER_CHROME = c.prototype.Ii = "chrome";
        c.prototype.BROWSER_EDGE = c.prototype.Dw = "edge";
        c.prototype.BROWSER_MSIE = c.prototype.nq = "msie";
        c.prototype.BROWSER_ANDROID = c.prototype.dA = "android";
        c.prototype.BROWSER_MOZILLA = c.prototype.at = "mozilla";
        c.prototype.BROWSER_OTHER = c.prototype.SN = "other";
        c.prototype.BROWSER_SUBTYPE_SAMSUNG_INTERNET = c.prototype.hA = "samsunginternet";
        c.prototype.BROWSER_SUBTYPE_OCULUS_BROWSER = c.prototype.Vn = "oculusbrowser";
        c.prototype.BROWSER_SUBTYPE_SAMSUNG_INTERNET_FOR_GEAR_VR = c.prototype.mG = "samsunginternetgearvr";
        c.prototype.BROWSER_SUBTYPE_CHROME_IOS = c.prototype.jG = "chromeios";
        c.prototype.BROWSER_SUBTYPE_SAFARI_IOS = c.prototype.fA = "safari_ios";
        c.prototype.BROWSER_SUBTYPE_CHROME_WEBVIEW = c.prototype.Ew = "chrome_webview";
        c.prototype.BROWSER_SUBTYPE_SAFARI_WEBVIEW = c.prototype.gA = "safari_webview";
        c.prototype.BROWSER_SUBTYPE_TOUR_LAUNCHER = c.prototype.bt = "tour_launcher";
        c.prototype.BROWSER_SUBTYPE_CHROMIUM_EDGE = c.prototype.Ew =
            "chromium_edge";
        c.prototype.BROWSER_SUBTYPE_FIREFOX_REALITY = c.prototype.eA = "firefox_reality";
        c.prototype.BROWSER_SUBTYPE_VR_APP = c.prototype.Fw = "vrapp";
        c.prototype.BROWSER_SUBTYPE_FACEBOOK_IOS_WEBVIEW = c.prototype.kG = "facebook_ios_webview";
        c.prototype.BROWSER_SUBTYPE_OTHER = c.prototype.lG = "other";
        c.prototype.BROWSER_VERSION_UNKNOWN = c.prototype.XN = -1;
        c.prototype.DEVICE_IPHONE = c.prototype.aO = "iphone";
        c.prototype.DEVICE_IPAD = c.prototype.Gw = "ipad";
        c.prototype.DEVICE_IPOD = c.prototype.bO = "ipod";
        c.prototype.DEVICE_OTHER =
            c.prototype.cO = "other";
        c.prototype.os = c.prototype.Rd = g("iphone") || g("ipad") || g("ipod") ? c.prototype.GG : g("qnx") ? c.prototype.ZO : g("android") || g("oculusbrowser") && g("linux") ? c.prototype.WO : g("windows phone") ? c.prototype.$O : g("windows") ? c.prototype.H0 : g("mac_powerpc") ? c.prototype.XO : g("macintosh") ? 1 < navigator.maxTouchPoints ? c.prototype.GG : c.prototype.XO : g("linux") || g("x11") ? c.prototype.G0 : c.prototype.YO;
        c.prototype.browser = c.prototype.browser = g("ipad") || g("iphone") || g("ipod") || g("macintosh") && 1 < navigator.maxTouchPoints ?
            c.prototype.If : g("opera") ? c.prototype.iG : g("edge") ? c.prototype.Dw : g("chrome") || g("crmo") ? c.prototype.Ii : g("android") ? c.prototype.dA : g("safari") ? c.prototype.Ji : g("trident") || g("msie") ? c.prototype.nq : !g("compatible") && g("mozilla") ? c.prototype.at : c.prototype.SN;
        c.prototype.browserType = c.prototype.iz = c.prototype.browser == c.prototype.If || c.prototype.browser == c.prototype.Ii || c.prototype.browser == c.prototype.dA || c.prototype.browser == c.prototype.Ji || g("webkit") ? c.prototype.iA : c.prototype.browser == c.prototype.iG ||
            g("opera") ? c.prototype.VN : g("trident") || g("msie") ? c.prototype.UN : !g("compatible") && g("mozilla") ? c.prototype.TN : c.prototype.WN;
        c.prototype.browserSubtype = c.prototype.Uc = g("oculusbrowser") ? c.prototype.Vn : g("samsungbrowser") && g("android") ? g("mobile vr") ? c.prototype.mG : c.prototype.hA : g("ipad") || g("iphone") || g("ipod") ? g("crios") ? c.prototype.jG : g("fban") || g("fbav") ? c.prototype.kG : g("safari") && g("version") && !navigator.MBa ? c.prototype.fA : c.prototype.gA : g("electron") ? c.prototype.bt : g("chrome") && g("wv") ? c.prototype.Ew :
            g("edg/") ? c.prototype.C_ : window.location.hash && 0 <= window.location.hash.indexOf("vrapp") ? c.prototype.Fw : !g("compatible") && g("mozilla") && g("mobile vr") ? c.prototype.eA : c.prototype.lG;
        c.prototype.browserVersion = c.prototype.rba = function () {
            if (c.prototype.browser == c.prototype.nq) {
                var a = f.match(/MSIE ([0-9]{1,}[.0-9]{0,})/);
                if (a != r)
                    return parseFloat(a[1]);
                a = f.match(/Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/);
                if (a != r)
                    return parseFloat(a[1])
            }
            return c.prototype.XN
        }
        ();
        c.prototype.device = c.prototype.Es = g("ipad") ||
            g("macintosh") && 1 < navigator.maxTouchPoints ? c.prototype.Gw : g("iphone") ? c.prototype.aO : g("ipod") ? c.prototype.bO : c.prototype.cO;
        var h;
        a: {
            switch (c.prototype.Rd) {
            case c.prototype.WO:
            case c.prototype.GG:
            case c.prototype.$O:
            case c.prototype.ZO:
                h = n;
                break a
            }
            h = y
        }
        c.prototype.mobile = c.prototype.pZ = h;
        d.PlayerAPI = d.Da = new c;
        b.prototype.append = b.prototype.append = function (a, d, f) {
            a == b.SCRIPT_URL && ("undefined" == typeof f && (f = d, d = "default"), d = [d, f]);
            e(this.ak[a]) || (this.ak[a] = []);
            this.ak[a].push(d)
        };
        b.prototype.set =
            b.prototype.set = function (a, b) {
            this.ak[a] = b
        };
        b.prototype.get = b.prototype.get = function (a) {
            return this.ak[a]
        };
        b.SCRIPT_URL = b.SCRIPT_URL = "ScriptURL";
        b.SCRIPT_DATA = b.SCRIPT_DATA = "ScriptData";
        b.FLASH_EXPRESS_INSTALLER_URL = b.FLASH_EXPRESS_INSTALLER_URL = "FlashExpressInstallerURL";
        b.FLASH_AUDIO_PLAYER_URL = b.FLASH_AUDIO_PLAYER_URL = "FlashAudioPlayerURL";
        b.FLASH_VIDEO_PLAYER_URL = b.FLASH_VIDEO_PLAYER_URL = "FlashVideoPlayerURL";
        b.FLASH_PANORAMA_PLAYER_URL = b.FLASH_PANORAMA_PLAYER_URL = "FlashPanoramaPlayerURL";
        b.THREE_JS_WEBGL_URL =
            b.THREE_JS_WEBGL_URL = "ThreeJSWebGLURL";
        b.WEBVR_POLYFILL_URL = b.WEBVR_POLYFILL_URL = "WebVRPolyfillURL";
        b.CAPTURA_VIEWER_URL = b.CAPTURA_VIEWER_URL = "CapturaViewerURL";
        b.DASH_URL = b.DASH_URL = "DashURL";
        b.HLS_URL = b.HLS_URL = "HlsURL";
        b.CONTAINER = b.CONTAINER = "Container";
        b.SELECTED_SCRIPT_URL = b.SELECTED_SCRIPT_URL = "SelectedScriptURL";
        b.BASE_DIR_URL = b.BASE_DIR_URL = "BaseDirURL";
        b.QUERY_STRING_PARAMETERS = b.QUERY_STRING_PARAMETERS = "QueryStringParameters";
        b.CURSORS_DIR_URL = b.CURSORS_DIR_URL = "CursorsDirURL";
        b.BACKGROUND_PRELOAD_ENABLED =
            b.BACKGROUND_PRELOAD_ENABLED = "BackgroundPreloadEnabled";
        b.ACTIVE_VIDEO_ELEMENT = b.ACTIVE_VIDEO_ELEMENT = "ActiveVideoElement";
        b.SERVICE_WORKER_URL = b.SERVICE_WORKER_URL = "ServiceWorkerURL";
        b.PINCH_TO_ZOOM_ENABLED = b.hga = "PinchToZoomEnabled";
        d.PlayerSettings = d.PlayerSettings = b;
        d.PlayerEvent = d.KG = function (a, b, d, f) {
            this.name = a;
            this.data = this.originalEvent = b;
            this.sourceClassName = d[d.length - 1];
            this.sourceClassPath = d;
            this.sourceId = f
        };
        a.prototype.$ya = P("ip");
        a.prototype["delete"] = function () {
            this.ip && (this.ip.clear(),
                this.ip = r)
        };
        a.prototype.getById = a.prototype.jBa = function (a) {
            return this.ip ? this.ip.Sva(a) : r
        };
        a.prototype.getByClassName = a.prototype.An = function (a) {
            return this.ip ? this.ip.oca(a) : []
        };
        a.prototype.createInstance = a.prototype.Cs = function (a) {
            return this.ip.Cs(a)
        };
        a.prototype.bind = a.prototype.bind = function (a, b, d, f) {
            var h = a.split(":"),
            a = h[0],
            h = 1 < h.length ? h[1] : "*";
            this.Xc[a] = this.Xc[a] || {};
            this.Xc[a][h] = this.Xc[a][h] || [];
            this.Xc[a][h].push({
                handler: b,
                context: d,
                immediate: f
            });
            return this
        };
        a.prototype.unbind =
            a.prototype.unbind = function (a, b, d, f) {
            var h = a.split(":"),
            a = h[0],
            h = 1 < h.length ? h[1] : "*";
            if (a in this.Xc && h in this.Xc[a]) {
                for (var c = [], g = this.Xc[a][h], e = 0; e < g.length; e++) {
                    var v = g[e];
                    (v.handler != b || v.context != d || v.immediate != f) && c.push(v)
                }
                this.Xc[a][h] = c
            }
        };
        a.prototype.bindOnObject = a.prototype.VAa = function (a, b, d, f, h) {
            return this.bind(b + ":" + this.qS(a), d, f, h)
        };
        a.prototype.unbindOnObject = a.prototype.TBa = function (a, b, d, f, h) {
            return this.unbind(b + ":" + this.qS(a), d, f, h)
        };
        a.prototype.bindOnObjectsOf = a.prototype.WAa =
        function (a, b, d, f, h) {
            return this.bind(b + ":" + this.fS(a), d, f, h)
        };
        a.prototype.unbindOnObjectsOf = a.prototype.UBa = function (a, b, d, f, h) {
            return this.unbind(b + ":" + this.fS(a), d, f, h)
        };
        a.prototype.cookiesEnabled = a.prototype.Cua = y;
        a.DEFAULT_PANORAMA_HFOV = a.wfa = c.prototype.pZ ? 90 : 110;
        a.prototype.trigger = function (a) {
            if (a.name in this.Xc) {
                this.VA(a, n);
                var b = this;
                setTimeout(function () {
                    b.VA(a, y)
                }, 0)
            }
        };
        a.prototype.VA = function (a, b) {
            for (var d = this.sla(a, b), f = 0; f < d.length; f++)
                try {
                    d[f].handler.call(d[f].context || window, a)
                } catch (h) {
                    setTimeout(function () {
                        i(h)
                    },
                        0)
                }
        };
        a.prototype.sla = function (a, b) {
            var d = [];
            if (a.name in this.Xc) {
                for (var f = [], h = 0; h < a.sourceClassPath.length; h++)
                    f.push(this.fS(a.sourceClassPath[h]));
                a.sourceId && f.push(this.qS(a.sourceId));
                f.push("*");
                for (var c = this.Xc[a.name], h = 0; h < f.length; h++)
                    for (var g = c[f[h]] || [], e = 0; e < g.length; e++)
                        !!g[e].immediate == !!b && d.push(g[e])
            }
            return d
        };
        a.prototype.qS = function (a) {
            return "instance(" + a + ")"
        };
        a.prototype.fS = function (a) {
            return "className(" + a + ")"
        };
        d.Player = d.R0 = a
    })();
    define("jquery.mod", ["jquery"], function (a) {
        return a.noConflict(n)
    });
    (function () {
        (function () {
            function a(a, b) {
                return a.Eia ? o(b).chain() : b
            }
            function b(a) {
                return "\\" + T[a]
            }
            function c(a) {
                function b(d) {
                    return a[d]
                }
                var d = "(?:" + o.keys(a).join("|") + ")",
                j = RegExp(d),
                f = RegExp(d, "g");
                return function (a) {
                    return a = r == a ? "" : "" + a,
                    j.test(a) ? a.replace(f, b) : a
                }
            }
            function e(a, b, d, j) {
                if (a === b)
                    return 0 !== a || 1 / a === 1 / b;
                if (r == a || r == b)
                    return a === b;
                a instanceof o && (a = a.Dv);
                b instanceof o && (b = b.Dv);
                var f = J.call(a);
                if (f !== J.call(b))
                    return y;
                switch (f) {
                case "[object RegExp]":
                case "[object String]":
                    return "" +
                    a == "" + b;
                case "[object Number]":
                    return +a !== +a ? +b !== +b : 0 === +a ? 1 / +a === 1 / b : +a === +b;
                case "[object Date]":
                case "[object Boolean]":
                    return +a === +b
                }
                f = "[object Array]" === f;
                if (!f) {
                    if ("object" != typeof a || "object" != typeof b)
                        return y;
                    var h = a.constructor,
                    c = b.constructor;
                    if (h !== c && (!o.isFunction(h) || !(h instanceof h && o.isFunction(c) && c instanceof c)) && "constructor" in a && "constructor" in b)
                        return y
                }
                d = d || [];
                j = j || [];
                for (h = d.length; h--; )
                    if (d[h] === a)
                        return j[h] === b;
                if (d.push(a), j.push(b), f) {
                    if (h = a.length, h !== b.length)
                        return y;
                    for (; h--; )
                        if (!e(a[h], b[h], d, j))
                            return y
                } else {
                    var g,
                    f = o.keys(a);
                    if (h = f.length, o.keys(b).length !== h)
                        return y;
                    for (; h--; )
                        if (g = f[h], !o.has(b, g) || !e(a[g], b[g], d, j))
                            return y
                }
                return d.pop(),
                j.pop(),
                n
            }
            function g(a, b, d, j, f) {
                if (!(j instanceof b))
                    return a.apply(d, f);
                b = p(a.prototype);
                a = a.apply(b, f);
                return o.Fz(a) ? a : b
            }
            function d(a, b, j, f) {
                for (var c = [], g = 0, f = f || 0, e = E(a); e > f; f++) {
                    var k = a[f];
                    if (h(k) && (o.isArray(k) || o.isArguments(k))) {
                        b || (k = d(k, b, j));
                        var p = 0,
                        l = k.length;
                        for (c.length += l; l > p; )
                            c[g++] = k[p++]
                    } else
                        j || (c[g++] =
                                k)
                }
                return c
            }
            function f(a) {
                return function (b, d, j) {
                    var f = {};
                    return d = l(d, j),
                    o.each(b, function (j, h) {
                        var c = d(j, h, b);
                        a(f, j, c)
                    }),
                    f
                }
            }
            function h(a) {
                a = E(a);
                return "number" == typeof a && 0 <= a && G >= a
            }
            function j(a) {
                return function (b) {
                    return r == b ? m : b[a]
                }
            }
            function p(a) {
                if (!o.Fz(a))
                    return {};
                if (L)
                    return L(a);
                t.prototype = a;
                a = new t;
                return t.prototype = r,
                a
            }
            function k(a, b) {
                return function (d) {
                    var j = arguments.length;
                    if (2 > j || r == d)
                        return d;
                    for (var f = 1; j > f; f++)
                        for (var h = arguments[f], c = a(h), g = c.length, e = 0; g > e; e++) {
                            var k = c[e];
                            b &&
                            d[k] !== m || (d[k] = h[k])
                        }
                    return d
                }
            }
            function l(a, b, d) {
                return r == a ? o.identity : o.isFunction(a) ? q(a, b, d) : o.Fz(a) ? o.kZ(a) : o.Uda(a)
            }
            function q(a, b, d) {
                if (b === m)
                    return a;
                switch (r == d ? 3 : d) {
                case 1:
                    return function (d) {
                        return a.call(b, d)
                    };
                case 2:
                    return function (d, j) {
                        return a.call(b, d, j)
                    };
                case 3:
                    return function (d, j, f) {
                        return a.call(b, d, j, f)
                    };
                case 4:
                    return function (d, j, f, h) {
                        return a.call(b, d, j, f, h)
                    }
                }
                return function () {
                    return a.apply(b, arguments)
                }
            }
            function o(a) {
                return a instanceof o ? a : this instanceof o ? void(this.Dv = a) :
                new o(a)
            }
            function t() {}
            function s(a) {
                return function (b, d, j, f) {
                    var d = q(d, f, 4),
                    c = !h(b) && o.keys(b),
                    g = (c || b).length,
                    e = 0 < a ? 0 : g - 1;
                    3 > arguments.length && (j = b[c ? c[e] : e], e += a);
                    for (var k = d, p = j; 0 <= e && g > e; e += a)
                        var l = c ? c[e] : e, p = k(p, b[l], l, b);
                    return p
                }
            }
            function v(a) {
                return function (b, d, j) {
                    for (var d = l(d, j), j = E(b), f = 0 < a ? 0 : j - 1; 0 <= f && j > f; f += a)
                        if (d(b[f], f, b))
                            return f;
                    return -1
                }
            }
            function u(a, b, d) {
                return function (j, f, h) {
                    var c = 0,
                    g = E(j);
                    if ("number" == typeof h)
                        0 < a ? c = 0 <= h ? h : Math.max(h + g, c) : g = 0 <= h ? Math.min(h + 1, g) : h + g + 1;
                    else if (d &&
                        h && g)
                        return h = d(j, f), j[h] === f ? h : -1;
                    if (f !== f)
                        return h = b(F.call(j, c, g), o.isNaN), 0 <= h ? h + c : -1;
                    for (h = 0 < a ? c : g - 1; 0 <= h && g > h; h += a)
                        if (j[h] === f)
                            return h;
                    return -1
                }
            }
            function w(a, b) {
                var d = M.length,
                j = a.constructor,
                j = o.isFunction(j) && j.prototype || A,
                f = "constructor";
                for (o.has(a, f) && !o.contains(b, f) && b.push(f); d--; )
                    f = M[d], f in a && a[f] !== j[f] && !o.contains(b, f) && b.push(f)
            }
            var x = this,
            z = x.qP,
            C = Array.prototype,
            A = Object.prototype,
            K = C.push,
            F = C.slice,
            J = A.toString,
            B = A.hasOwnProperty,
            O = Array.isArray,
            N = Object.keys,
            I = Function.prototype.bind,
            L = Object.create;
            "undefined" != typeof exports ? ("undefined" != typeof module && module.Vua && (exports = module.Vua = o), exports.qP = o) : x.qP = o;
            o.VERSION = "1.8.3";
            o.vBa = function (a, b) {
                return l(a, b, 1 / 0)
            };
            var G = Math.pow(2, 53) - 1,
            E = j("length");
            o.each = o.forEach = function (a, b, d) {
                var b = q(b, d),
                j;
                if (h(a)) {
                    d = 0;
                    for (j = a.length; j > d; d++)
                        b(a[d], d, a)
                } else {
                    var f = o.keys(a),
                    d = 0;
                    for (j = f.length; j > d; d++)
                        b(a[f[d]], f[d], a)
                }
                return a
            };
            o.map = o.$Aa = function (a, b, d) {
                for (var b = l(b, d), d = !h(a) && o.keys(a), j = (d || a).length, f = Array(j), c = 0; j > c; c++) {
                    var g =
                        d ? d[c] : c;
                    f[c] = b(a[g], g, a)
                }
                return f
            };
            o.reduce = o.gBa = o.rBa = s(1);
            o.reduceRight = o.hBa = s(-1);
            o.find = o.detect = function (a, b, d) {
                var j;
                return j = h(a) ? o.Pba(a, b, d) : o.ava(a, b, d),
                j !== m && -1 !== j ? a[j] : m
            };
            o.filter = o.select = function (a, b, d) {
                var j = [];
                return b = l(b, d),
                o.each(a, function (a, d, f) {
                    b(a, d, f) && j.push(a)
                }),
                j
            };
            o.reject = function (a, b, d) {
                return o.filter(a, o.Hda(l(b)), d)
            };
            o.every = o.all = function (a, b, d) {
                for (var b = l(b, d), d = !h(a) && o.keys(a), j = (d || a).length, f = 0; j > f; f++) {
                    var c = d ? d[f] : f;
                    if (!b(a[c], c, a))
                        return y
                }
                return n
            };
            o.some = o.any = function (a, b, d) {
                for (var b = l(b, d), d = !h(a) && o.keys(a), j = (d || a).length, f = 0; j > f; f++) {
                    var c = d ? d[f] : f;
                    if (b(a[c], c, a))
                        return n
                }
                return y
            };
            o.contains = o.pBa = o.include = function (a, b, d, j) {
                return h(a) || (a = o.values(a)),
                ("number" != typeof d || j) && (d = 0),
                0 <= o.indexOf(a, b, d)
            };
            o.invoke = function (a, b) {
                var d = F.call(arguments, 2),
                j = o.isFunction(b);
                return o.map(a, function (a) {
                    var f = j ? b : a[b];
                    return r == f ? f : f.apply(a, d)
                })
            };
            o.pluck = function (a, b) {
                return o.map(a, o.Uda(b))
            };
            o.XBa = function (a, b) {
                return o.filter(a, o.kZ(b))
            };
            o.fBa = function (a, b) {
                return o.find(a, o.kZ(b))
            };
            o.max = function (a, b, d) {
                var j,
                f = -1 / 0,
                c = -1 / 0;
                if (r == b && r != a)
                    for (var a = h(a) ? a : o.values(a), g = 0, e = a.length; e > g; g++)
                        d = a[g], d > f && (f = d);
                else
                    b = l(b, d), o.each(a, function (a, d, h) {
                        j = b(a, d, h);
                        (j > c || j === -1 / 0 && f === -1 / 0) && (f = a, c = j)
                    });
                return f
            };
            o.min = function (a, b, d) {
                var j,
                f = 1 / 0,
                c = 1 / 0;
                if (r == b && r != a)
                    for (var a = h(a) ? a : o.values(a), g = 0, e = a.length; e > g; g++)
                        d = a[g], f > d && (f = d);
                else
                    b = l(b, d), o.each(a, function (a, d, h) {
                        j = b(a, d, h);
                        (c > j || 1 / 0 === j && 1 / 0 === f) && (f = a, c = j)
                    });
                return f
            };
            o.sza = function (a) {
                for (var b =
                        h(a) ? a : o.values(a), d = b.length, j = Array(d), f = 0; d > f; f++)
                    a = o.random(0, f), a !== f && (j[f] = j[a]), j[a] = b[f];
                return j
            };
            o.sample = function (a, b, d) {
                return r == b || d ? (h(a) || (a = o.values(a)), a[o.random(a.length - 1)]) : o.sza(a).slice(0, Math.max(0, b))
            };
            o.sortBy = function (a, b, d) {
                return b = l(b, d),
                o.pluck(o.map(a, function (a, d, j) {
                        return {
                            value: a,
                            index: d,
                            Fba: b(a, d, j)
                        }
                    }).sort(function (a, b) {
                        var d = a.Fba,
                        j = b.Fba;
                        if (d !== j) {
                            if (d > j || d === m)
                                return 1;
                            if (j > d || j === m)
                                return -1
                        }
                        return a.index - b.index
                    }), "value")
            };
            o.groupBy = f(function (a, b, d) {
                o.has(a,
                    d) ? a[d].push(b) : a[d] = [b]
            });
            o.qBa = f(function (a, b, d) {
                a[d] = b
            });
            o.bBa = f(function (a, b, d) {
                o.has(a, d) ? a[d]++ : a[d] = 1
            });
            o.toArray = function (a) {
                return a ? o.isArray(a) ? F.call(a) : h(a) ? o.map(a, o.identity) : o.values(a) : []
            };
            o.size = function (a) {
                return r == a ? 0 : h(a) ? a.length : o.keys(a).length
            };
            o.GBa = function (a, b, d) {
                var b = l(b, d),
                j = [],
                f = [];
                return o.each(a, function (a, d, h) {
                    (b(a, d, h) ? j : f).push(a)
                }),
                [j, f]
            };
            o.first = o.head = o.PBa = function (a, b, d) {
                return r == a ? m : r == b || d ? a[0] : o.swa(a, a.length - b)
            };
            o.swa = function (a, b) {
                return F.call(a,
                    0, Math.max(0, a.length - (r == b ? 1 : b)))
            };
            o.last = function (a, b, d) {
                return r == a ? m : r == b || d ? a[a.length - 1] : o.rest(a, Math.max(0, a.length - b))
            };
            o.rest = o.OBa = o.eBa = function (a, b, d) {
                return F.call(a, r == b || d ? 1 : b)
            };
            o.compact = function (a) {
                return o.filter(a, o.identity)
            };
            o.flatten = function (a, b) {
                return d(a, b, y)
            };
            o.without = function (a) {
                return o.difference(a, F.call(arguments, 1))
            };
            o.uniq = o.unique = function (a, b, d, j) {
                o.isBoolean(b) || (j = d, d = b, b = y);
                r != d && (d = l(d, j));
                for (var j = [], f = [], h = 0, c = E(a); c > h; h++) {
                    var g = a[h],
                    e = d ? d(g, h, a) : g;
                    b ?
                    (h && f === e || j.push(g), f = e) : d ? o.contains(f, e) || (f.push(e), j.push(g)) : o.contains(j, g) || j.push(g)
                }
                return j
            };
            o.union = function () {
                return o.uniq(d(arguments, n, n))
            };
            o.intersection = function (a) {
                for (var b = [], d = arguments.length, j = 0, f = E(a); f > j; j++) {
                    var h = a[j];
                    if (!o.contains(b, h)) {
                        for (var c = 1; d > c && o.contains(arguments[c], h); c++);
                        c === d && b.push(h)
                    }
                }
                return b
            };
            o.difference = function (a) {
                var b = d(arguments, n, n, 1);
                return o.filter(a, function (a) {
                    return !o.contains(b, a)
                })
            };
            o.zip = function () {
                return o.Qza(arguments)
            };
            o.Qza = function (a) {
                for (var b =
                        a && o.max(a, E).length || 0, d = Array(b), j = 0; b > j; j++)
                    d[j] = o.pluck(a, j);
                return d
            };
            o.object = function (a, b) {
                for (var d = {}, j = 0, f = E(a); f > j; j++)
                    b ? d[a[j]] = b[j] : d[a[j][0]] = a[j][1];
                return d
            };
            o.Pba = v(1);
            o.bva = v(-1);
            o.sortedIndex = function (a, b, d, j) {
                for (var d = l(d, j, 1), b = d(b), j = 0, f = E(a); f > j; ) {
                    var h = Math.floor((j + f) / 2);
                    d(a[h]) < b ? j = h + 1 : f = h
                }
                return j
            };
            o.indexOf = u(1, o.Pba, o.sortedIndex);
            o.lastIndexOf = u(-1, o.bva);
            o.range = function (a, b, d) {
                r == b && (b = a || 0, a = 0);
                for (var d = d || 1, b = Math.max(Math.ceil((b - a) / d), 0), j = Array(b), f = 0; b > f; f++,
                    a += d)
                    j[f] = a;
                return j
            };
            o.bind = function (a, b) {
                function d() {
                    return g(a, d, b, this, j.concat(F.call(arguments)))
                }
                if (I && a.bind === I)
                    return I.apply(a, F.call(arguments, 1));
                o.isFunction(a) || i(new TypeError("Bind must be called on a function"));
                var j = F.call(arguments, 2);
                return d
            };
            o.tZ = function (a) {
                function b() {
                    for (var j = 0, f = d.length, h = Array(f), c = 0; f > c; c++)
                        h[c] = d[c] === o ? arguments[j++] : d[c];
                    for (; j < arguments.length; )
                        h.push(arguments[j++]);
                    return g(a, b, this, this, h)
                }
                var d = F.call(arguments, 1);
                return b
            };
            o.bindAll = function (a) {
                var b,
                d,
                j = arguments.length;
                1 >= j && i(Error("bindAll must be passed function names"));
                for (b = 1; j > b; b++)
                    d = arguments[b], a[d] = o.bind(a[d], a);
                return a
            };
            o.memoize = function (a, b) {
                function d(j) {
                    var f = d.lua,
                    h = "" + (b ? b.apply(this, arguments) : j);
                    return o.has(f, h) || (f[h] = a.apply(this, arguments)),
                    f[h]
                }
                return d.lua = {},
                d
            };
            o.delay = function (a, b) {
                var d = F.call(arguments, 2);
                return setTimeout(function () {
                    return a.apply(r, d)
                }, b)
            };
            o.defer = o.tZ(o.delay, o, 1);
            o.throttle = function (a, b, d) {
                function j() {
                    e = d.Twa === y ? 0 : o.now();
                    g = r;
                    c = a.apply(f,
                            h);
                    g || (f = h = r)
                }
                var f,
                h,
                c,
                g = r,
                e = 0;
                d || (d = {});
                return function () {
                    var k = o.now();
                    e || d.Twa !== y || (e = k);
                    var p = b - (k - e);
                    return f = this,
                    h = arguments,
                    0 >= p || p > b ? (g && (clearTimeout(g), g = r), e = k, c = a.apply(f, h), g || (f = h = r)) : g || d.QBa === y || (g = setTimeout(j, p)),
                    c
                }
            };
            o.debounce = function (a, b, d) {
                function j() {
                    var k = o.now() - g;
                    b > k && 0 <= k ? f = setTimeout(j, b - k) : (f = r, d || (e = a.apply(c, h), f || (c = h = r)))
                }
                var f,
                h,
                c,
                g,
                e;
                return function () {
                    c = this;
                    h = arguments;
                    g = o.now();
                    var k = d && !f;
                    return f || (f = setTimeout(j, b)),
                    k && (e = a.apply(c, h), c = h = r),
                    e
                }
            };
            o.wrap =
            function (a, b) {
                return o.tZ(b, a)
            };
            o.Hda = function (a) {
                return function () {
                    return !a.apply(this, arguments)
                }
            };
            o.compose = function () {
                var a = arguments,
                b = a.length - 1;
                return function () {
                    for (var d = b, j = a[b].apply(this, arguments); d--; )
                        j = a[d].call(this, j);
                    return j
                }
            };
            o.after = function (a, b) {
                return function () {
                    return 1 > --a ? b.apply(this, arguments) : m
                }
            };
            o.before = function (a, b) {
                var d;
                return function () {
                    return 0 < --a && (d = b.apply(this, arguments)),
                    1 >= a && (b = r),
                    d
                }
            };
            o.once = o.tZ(o.before, 2);
            var H = !{
                toString: r
            }
            .propertyIsEnumerable("toString"),
            M = "valueOf,isPrototypeOf,toString,propertyIsEnumerable,hasOwnProperty,toLocaleString".split(",");
            o.keys = function (a) {
                if (!o.Fz(a))
                    return [];
                if (N)
                    return N(a);
                var b = [],
                d;
                for (d in a)
                    o.has(a, d) && b.push(d);
                return H && w(a, b),
                b
            };
            o.VX = function (a) {
                if (!o.Fz(a))
                    return [];
                var b = [],
                d;
                for (d in a)
                    b.push(d);
                return H && w(a, b),
                b
            };
            o.values = function (a) {
                for (var b = o.keys(a), d = b.length, j = Array(d), f = 0; d > f; f++)
                    j[f] = a[b[f]];
                return j
            };
            o.yBa = function (a, b, d) {
                for (var b = l(b, d), j = o.keys(a), f = j.length, h = {}, c = 0; f > c; c++)
                    d = j[c], h[d] = b(a[d],
                            d, a);
                return h
            };
            o.FBa = function (a) {
                for (var b = o.keys(a), d = b.length, j = Array(d), f = 0; d > f; f++)
                    j[f] = [b[f], a[b[f]]];
                return j
            };
            o.ada = function (a) {
                for (var b = {}, d = o.keys(a), j = 0, f = d.length; f > j; j++)
                    b[a[d[j]]] = d[j];
                return b
            };
            o.functions = o.BBa = function (a) {
                var b = [],
                d;
                for (d in a)
                    o.isFunction(a[d]) && b.push(d);
                return b.sort()
            };
            o.extend = k(o.VX);
            o.Nba = o.assign = k(o.keys);
            o.ava = function (a, b, d) {
                for (var b = l(b, d), j, d = o.keys(a), f = 0, h = d.length; h > f; f++)
                    if (j = d[f], b(a[j], j, a))
                        return j
            };
            o.oxa = function (a, b, j) {
                var f,
                h,
                c = {},
                g = a;
                if (r ==
                    g)
                    return c;
                o.isFunction(b) ? (h = o.VX(g), f = q(b, j)) : (h = d(arguments, y, y, 1), f = function (a, b, d) {
                    return b in d
                }, g = Object(g));
                for (var e = 0, k = h.length; k > e; e++) {
                    var p = h[e],
                    l = g[p];
                    f(l, p, g) && (c[p] = l)
                }
                return c
            };
            o.DBa = function (a, b, j) {
                if (o.isFunction(b))
                    b = o.Hda(b);
                else
                    var f = o.map(d(arguments, y, y, 1), String), b = function (a, b) {
                        return !o.contains(f, b)
                    };
                return o.oxa(a, b, j)
            };
            o.defaults = k(o.VX, n);
            o.create = function (a, b) {
                var d = p(a);
                return b && o.Nba(d, b),
                d
            };
            o.clone = function (a) {
                return o.Fz(a) ? o.isArray(a) ? a.slice() : o.extend({},
                    a) : a
            };
            o.tap = function (a, b) {
                return b(a),
                a
            };
            o.Iwa = function (a, b) {
                var d = o.keys(b),
                j = d.length;
                if (r == a)
                    return !j;
                for (var f = Object(a), h = 0; j > h; h++) {
                    var c = d[h];
                    if (b[c] !== f[c] || !(c in f))
                        return y
                }
                return n
            };
            o.isEqual = function (a, b) {
                return e(a, b)
            };
            o.isEmpty = function (a) {
                return r == a ? n : h(a) && (o.isArray(a) || o.isString(a) || o.isArguments(a)) ? 0 === a.length : 0 === o.keys(a).length
            };
            o.isElement = function (a) {
                return !(!a || 1 !== a.nodeType)
            };
            o.isArray = O || function (a) {
                return "[object Array]" === J.call(a)
            };
            o.Fz = function (a) {
                var b = typeof a;
                return "function" === b || "object" === b && !!a
            };
            o.each("Arguments,Function,String,Number,Date,RegExp,Error".split(","), function (a) {
                o["is" + a] = function (b) {
                    return J.call(b) === "[object " + a + "]"
                }
            });
            o.isArguments(arguments) || (o.isArguments = function (a) {
                return o.has(a, "callee")
            });
            "function" != typeof / . /  && "object" != typeof Int8Array && (o.isFunction = function (a) {
                return "function" == typeof a || y
            });
            o.sBa = function (a) {
                return isFinite(a) && !isNaN(parseFloat(a))
            };
            o.isNaN = function (a) {
                return o.isNumber(a) && a !== +a
            };
            o.isBoolean = function (a) {
                return a ===
                n || a === y || "[object Boolean]" === J.call(a)
            };
            o.isNull = function (a) {
                return r === a
            };
            o.isUndefined = function (a) {
                return a === m
            };
            o.has = function (a, b) {
                return r != a && B.call(a, b)
            };
            o.noConflict = function () {
                return x.qP = z,
                this
            };
            o.identity = function (a) {
                return a
            };
            o.aBa = function (a) {
                return function () {
                    return a
                }
            };
            o.noop = D();
            o.Uda = j;
            o.HBa = function (a) {
                return r == a ? D() : function (b) {
                    return a[b]
                }
            };
            o.kZ = o.zBa = function (a) {
                return a = o.Nba({}, a),
                function (b) {
                    return o.Iwa(b, a)
                }
            };
            o.times = function (a, b, d) {
                for (var j = Array(Math.max(0, a)), b = q(b,
                            d, 1), d = 0; a > d; d++)
                    j[d] = b(d);
                return j
            };
            o.random = function (a, b) {
                return r == b && (b = a, a = 0),
                a + Math.floor(Math.random() * (b - a + 1))
            };
            o.now = Date.now || function () {
                return (new Date).getTime()
            };
            var O = {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#x27;",
                "`": "&#x60;"
            },
            U = o.ada(O);
            o.escape = c(O);
            o.unescape = c(U);
            o.result = function (a, b, d) {
                b = r == a ? m : a[b];
                return b === m && (b = d),
                o.isFunction(b) ? b.call(a) : b
            };
            var V = 0;
            o.uniqueId = function (a) {
                var b = ++V + "";
                return a ? a + b : b
            };
            o.Iza = {
                evaluate: /<%([\s\S]+?)%>/g,
                wwa: /<%=([\s\S]+?)%>/g,
                escape: /<%-([\s\S]+?)%>/g
            };
            var S = /(.)^/,
            T = {
                "'": "'",
                "\\": "\\",
                "\r": "r",
                "\n": "n",
                "\u2028": "u2028",
                "\u2029": "u2029"
            },
            W = /\\|'|\r|\n|\u2028|\u2029/g;
            o.template = function (a, d, j) {
                function f(a) {
                    return g.call(this, a, o)
                }
                !d && j && (d = j);
                var d = o.defaults({}, d, o.Iza),
                h = 0,
                c = "__p+='";
                a.replace(RegExp([(d.escape || S).source, (d.wwa || S).source, (d.evaluate || S).source].join("|") + "|$", "g"), function (d, j, f, g, e) {
                    return c += a.slice(h, e).replace(W, b),
                    h = e + d.length,
                    j ? c += "'+\n((__t=(" + j + "))==null?'':_.escape(__t))+\n'" : f ? c += "'+\n((__t=(" +
                    f + "))==null?'':__t)+\n'" : g && (c += "';\n" + g + "\n__p+='"),
                    d
                });
                c += "';\n";
                d.hfa || (c = "with(obj||{}){\n" + c + "}\n");
                c = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + c + "return __p;\n";
                try {
                    var g = new Function(d.hfa || "obj", "_", c)
                } catch (e) {
                    i((e.source = c, e))
                }
                return f.source = "function(" + (d.hfa || "obj") + "){\n" + c + "}",
                f
            };
            o.chain = function (a) {
                a = o(a);
                return a.Eia = n,
                a
            };
            o.mixin = function (b) {
                o.each(o.functions(b), function (d) {
                    var j = o[d] = b[d];
                    o.prototype[d] = function () {
                        var b = [this.Dv];
                        return K.apply(b, arguments),
                        a(this, j.apply(o, b))
                    }
                })
            };
            o.mixin(o);
            o.each("pop,push,reverse,shift,sort,splice,unshift".split(","), function (b) {
                var d = C[b];
                o.prototype[b] = function () {
                    var j = this.Dv;
                    return d.apply(j, arguments),
                    "shift" !== b && "splice" !== b || 0 !== j.length || delete j[0],
                    a(this, j)
                }
            });
            o.each(["concat", "join", "slice"], function (b) {
                var d = C[b];
                o.prototype[b] = function () {
                    return a(this, d.apply(this.Dv, arguments))
                }
            });
            o.prototype.value = Q("Dv");
            o.prototype.valueOf = o.prototype.toJSON = o.prototype.value;
            o.prototype.toString =
            function () {
                return "" + this.Dv
            };
            "function" == typeof define && define.OAa && define("lz", [], function () {
                return o
            })
        }).call(this)
    }).call(window.TDV || (window.TDV = {}));
    define("underscore-min", D());
    define("do", ["underscore-min"], function () {
        return window.TDV._.noConflict()
    });
    define("ll", [], function () {
        return {
            D: function (a) {
                return a + "_change"
            },
            dd: "default",
            Hb: "mouseDown",
            Mc: "mouseMove",
            fc: "mouseUp",
            sq: "mouseWheel",
            U: "click",
            DG: "doubleClick",
            xc: "rollOver",
            Qb: "rollOut",
            Mh: "mouseEnter",
            Kf: "mouseLeave",
            Nh: "pointerOver",
            nAa: "pointerOut",
            O0: "pointerDown",
            P0: "pointerUp",
            Li: "pointerClick",
            xG: "gestureStart",
            Ifa: "gestureChange",
            wG: "gestureEnd",
            Jfa: "gestureRotate",
            Jw: "gestureScale",
            wc: "progress",
            ct: "close",
            OPEN: "open",
            Mi: "select",
            yb: "resize",
            ZN: "changing",
            aa: "change",
            gc: "stateChange",
            Jf: "cueChange",
            S: "loaded",
            oe: "loadingError",
            lh: "start",
            pe: "stop",
            vt: "play",
            IG: "pause",
            Lb: "ready",
            Sk: "begin",
            Ba: "end",
            aAa: "cancel",
            Dg: "press",
            Ph: "release",
            wt: "repeatEnd",
            bl: "scroll",
            EG: "movementChange",
            $za: "beforeShow",
            B_: "beforeHide",
            INIT: "init",
            od: "show",
            zd: "hide",
            Sw: "showEnd",
            Kw: "hideEnd",
            Sfa: "loadingScript",
            lga: "processingScript",
            Hw: "enableCookies",
            qfa: "applicationSet",
            sG: "userInteraction",
            c1: "toolTipShow",
            lP: "toolTipHide"
        }
    });
    define("bZ", [], function () {
        return function (a, b) {
            this.name = a;
            this.source = m;
            this.data = b
        }
    });
    define("ky", [], function () {
        function a() {
            this.Ye = [];
            this.rn = []
        }
        a.prototype.sI = function (a) {
            for (var c = 0; c < this.Ye.length; c++)
                if (this.Ye[c] == a)
                    return c;
            return -1
        };
        a.prototype.set = function (a, c) {
            var e = this.sI(a);
            0 <= e ? this.rn[e] = c : (this.Ye.push(a), this.rn.push(c))
        };
        a.prototype.Eca = function (a) {
            return 0 <= this.sI(a)
        };
        a.prototype.get = function (a) {
            a = this.sI(a);
            if (0 <= a)
                return this.rn[a]
        };
        a.prototype.keys = function () {
            return this.Ye.slice()
        };
        a.prototype.values = function () {
            return this.rn.slice()
        };
        a.prototype.length = function () {
            return this.Ye.length
        };
        a.prototype.clear = function (a) {
            a = this.sI(a);
            0 <= a && (this.Ye.splice(a, 1), this.rn.splice(a, 1))
        };
        a.prototype.each = function (a, c) {
            for (var e = 0; e < this.Ye.length; e++)
                a.call(c, this.Ye[e], this.rn[e])
        };
        return a
    });
    define("gr", ["require", "do", "ll"], function (a) {
        function b(a) {
            var b = g[a];
            if (b)
                return b;
            if ("string" != typeof a)
                return g[a] = function () {
                    return a
                };
            var j = (b = d.exec(a)) && parseFloat(b[1]);
            switch (b && b[4] && b[4].toLowerCase()) {
            case "vw":
                return g[a] = function (a) {
                    return a * j
                };
            case "vh":
                return g[a] = function (a, b) {
                    return b * j
                };
            case "vmin":
                return g[a] = function (a, b, d) {
                    return d * j
                };
            case "vmax":
                return g[a] = function (a, b, d, f) {
                    return f * j
                };
            default:
                return g[a] = function () {
                    return a
                }
            }
        }
        function c(a) {
            this.ra = a;
            this.lz = this.lz.bind(this);
            this.ra.bind(e.yb, this.kb, this, n);
            this.aW = {};
            this.so = [];
            this.kb()
        }
        a("do");
        var e = a("ll");
        c.prototype.kb = function () {
            this.Bta();
            for (var a in this.aW)
                this.lz(this.aW[a]);
            this.so.forEach(this.lz)
        };
        c.prototype.Bta = function () {
            var a = this.ra.eb();
            this.WL = 0.01 * this.ra.Aa();
            this.RL = 0.01 * a;
            this.fba = Math.min(this.WL, this.RL);
            this.eba = Math.max(this.WL, this.RL)
        };
        c.prototype.lz = function (a) {
            a(this.WL, this.RL, this.fba, this.eba)
        };
        c.prototype.$ta = function (a) {
            this.so.push(a)
        };
        c.prototype.Gxa = function (a) {
            a = this.so.indexOf(a);
            0 <= a && this.so.splice(a, 1)
        };
        c.prototype.gua = function (a, d, j, c) {
            function g(b, c, k, p) {
                d.call(a, j, e(b, c, k, p))
            }
            var e = b(c);
            this.aW[a.qr + "." + j] = g;
            g(this.WL, this.RL, this.fba, this.eba)
        };
        c.Yc = {};
        c.get = function (a) {
            var b = a.qr,
            d = c.Yc[b];
            d || (d = new c(a), c.Yc[b] = d);
            return d
        };
        var g = {},
        d = /^\s*((\+|\-)?(\d*\.)?\d+)\s*(vmin|vmax|vw|vh|px|%)?\s*$/i;
        return c
    });
    define("jt", [], function () {
        function a(a, b) {
            var g = a.split(b),
            d = g[0];
            (g = g.slice(1).join(b)) && (g = b + g);
            return [d, g]
        }
        var b = window.URL || D();
        b.ej = document.createElement("a");
        b.eda = function (a) {
            if (b.ZY(a)) {
                var e = window.location.protocol + "//" + window.location.hostname;
                return a.substring(0, e.length) != e
            }
            return y
        };
        b.Zs = function (a, e) {
            if (b.Nwa(a))
                a = window.location.protocol + a;
            else if (!b.ZY(a) && !b.cw(a)) {
                if (e)
                    if (0 == a.indexOf("/")) {
                        var g = e.indexOf("//"),
                        d = "";
                        0 <= g && (d = e.substr(0, g + 2), e = e.substr(g + 2));
                        g = e.indexOf("/");
                        0 < g && (e = e.substr(0, g));
                        a = d + e + a
                    } else
                        a = e + a;
                b.ej.href = a;
                a = b.ej.href
            }
            return a
        };
        b.Cwa = function () {
            switch (window.location.protocol) {
            case "http:":
            case "https:":
                return n;
            default:
                return y
            }
        };
        b.Nwa = function (a) {
            return 0 === a.indexOf("//")
        };
        b.ZY = function (a) {
            if (!a)
                return y;
            var b = a.indexOf("://");
            return 3 <= b && 5 >= b ? n : 0 == a.indexOf("filesystem:")
        };
        b.cw = function (a) {
            return a && 0 == a.indexOf("data:")
        };
        b.getDirectory = function (a) {
            a = b.Zs(a);
            a = a.split("?")[0];
            a = a.split("/");
            1 < a.length && a.splice(a.length - 1, 1);
            return a.join("/") +
            "/"
        };
        b.zg = function (a) {
            b.sy || (b.sy = b.h5());
            return b.sy[a] !== m
        };
        b.Jn = function (a) {
            b.sy || (b.sy = b.h5());
            return b.sy[a]
        };
        b.Hv = function (b, e) {
            if (!e)
                return b;
            var g = a(b, "#"),
            d = g[1],
            g = a(g[0], "?"),
            f = g[0],
            g = g[1];
            return 0 <= g.indexOf(e) ? b : f + (g + (g ? "&" : "?") + e) + d
        };
        b.parse = function (a) {
            b.ej.href = a;
            a = {};
            a.protocol = b.ej.protocol;
            a.hostname = b.ej.hostname;
            a.port = b.ej.port;
            a.pathname = b.ej.pathname;
            a.search = b.ej.search;
            a.hash = b.ej.hash;
            a.host = b.ej.host;
            var e = a.pathname ? a.pathname.lastIndexOf(".") : -1;
            a.Wua = 0 <= e ? a.pathname.substr(e).toLowerCase() :
                "";
            return a
        };
        b.XAa = function (a) {
            return a.protocol + "//" + a.hostname + a.pathname + a.search + a.hash
        };
        b.getExtension = function (a) {
            var a = b.parse(a).pathname,
            e = a.lastIndexOf(".");
            return 0 <= e ? a.substr(e, a.length) : ""
        };
        b.$g = function (a, e) {
            switch ((b.Jn(a) || "").toLowerCase()) {
            case "false":
            case "0":
            case "no":
            case "n":
                return y;
            case "true":
            case "1":
            case "yes":
            case "y":
                return n;
            default:
                return e
            }
        };
        b.bca = function (a, e) {
            var g = parseInt(b.Jn(a));
            return isNaN(g) ? e : g
        };
        b.BM = function (a) {
            a = parseFloat(b.Jn(a));
            return isNaN(a) ? m : a
        };
        b.sy = r;
        b.h5 = function () {
            for (var a = {}, b = window.location.search.substring(1).split("&"), g = 0; g < b.length; g++) {
                var d = b[g].split("=");
                a[decodeURIComponent(d[0])] = 1 < d.length ? decodeURIComponent(d[1]) : r
            }
            return a
        };
        return b
    });
    define("fg", ["require", "do", "jquery.mod"], function (a) {
        var b = a("do"),
        c = a("jquery.mod"),
        e = {
            rwa: function (a, b) {
                function h() {}
                h.prototype = b.prototype;
                a.prototype = new h;
                a.prototype.constructor = a
            },
            iua: function (a, b) {
                b.forEach(function (b) {
                    Object.getOwnPropertyNames(b).forEach(function (j) {
                        a.prototype[j] = b[j]
                    })
                })
            },
            extend: function () {
                var a = arguments[0],
                b = arguments[arguments.length - 1],
                h = Array.prototype.slice.call(arguments, 1, arguments.length - 1);
                e.rwa(b, a);
                e.iua(b, h);
                return b
            },
            deferred: function (a, f) {
                return function () {
                    var h =
                        arguments;
                    b.defer(function () {
                        a.apply(f, h)
                    })
                }
            },
            nm: function (a, f) {
                var h = y;
                return function () {
                    h || (h = n, b.defer(function () {
                            h = y;
                            a.apply(f || window)
                        }))
                }
            },
            memoize: function (a, b, h, j) {
                a.jC || (a.jC = [], a.TT = []);
                for (var g = a.jC, c = 0, e = g.length; c < e; c++) {
                    var q = g[c];
                    if (j.length == q.length) {
                        for (var o = n, t = 0, s = j.length; t < s && o; t++)
                            o = q[t] == j[t];
                        if (o)
                            return a.TT[c]
                    }
                }
                h = h.apply(window, j);
                a.jC.length == b && (a.jC.shift(), a.TT.shift());
                a.jC.push(j);
                a.TT.push(h);
                return h
            },
            Rx: [],
            UAa: function (a, b) {
                var h = e.Rja();
                window[h] = function () {
                    a.apply(b,
                        arguments)
                };
                e.Rx.push({
                    handler: a,
                    context: b,
                    callback: h
                });
                return h
            },
            kBa: function (a, b) {
                for (var h = 0; h < e.Rx.length; h++) {
                    var j = e.Rx[h];
                    if (j.handler == a && j.context == b)
                        return j.callback
                }
            },
            SBa: function (a, b) {
                for (var h = 0; h < e.Rx.length; h++) {
                    var j = e.Rx[h];
                    if (j.handler == a && j.context == b)
                        return j = j.callback, e.Rx.splice(h, 1), delete window[j], j
                }
            },
            Rja: function () {
                var a;
                do
                    a = "__callback_" + e.Wda(8);
                while (window[a]);
                return a
            },
            Wda: function (a) {
                for (var b = [], h = 0; h < a; h++)
                    b.push(Math.floor(16 * Math.random()).toString(16));
                return b.join("")
            },
            Tua: function (a) {
                e.ey = c("<div></div>");
                e.ey.css({
                    overflow: "auto",
                    position: "absolute",
                    bottom: 0,
                    left: 0,
                    right: 0,
                    padding: "20px",
                    fontFamily: "Verdana",
                    backgroundColor: "#FFFFFF",
                    color: "#000000",
                    "z-index": 100
                });
                a ? e.ey.css({
                    top: 0
                }) : e.ey.css({
                    width: "40%",
                    right: "0",
                    left: "auto",
                    height: "50%",
                    filter: "alpha(opacity=60)",
                    opacity: 0.6
                });
                c("body").append(e.ey);
                console.log = function (a) {
                    e.log(a)
                }
            }
        },
        g;
        e.log = function (a) {
            if (a != g) {
                g = a;
                try {
                    e.ey ? c("<div></div>").text(a).prependTo(e.ey) : console.log(a)
                } catch (b) {}
            }
        };
        e.IBa = function (a) {
            this.TR.push(a)
        };
        e.TR = [];
        e.debug = function (a, b) {
            try {
                b.apply(this, arguments)
            } catch (h) {
                e.bN(a, h),
                i(h)
            }
        };
        e.bN = function (a, b) {
            var h = [];
            h.push("Exception: " + a);
            b.message ? (h.push(b.message), h.push(b.stack)) : h.push(b);
            this.log(h.join("\n"));
            for (h = 0; h < this.TR.length; h++)
                this.TR[h](b)
        };
        e.clone = function (a, b) {
            var b = b || 0,
            h = new a.constructor,
            j;
            for (j in a)
                if (a.hasOwnProperty(j)) {
                    var g = a[j];
                    0 < b && g && "object" === typeof g && (g = e.clone(g, b - 1));
                    h[j] = g
                }
            return h
        };
        e.toArray = function (a) {
            return a === m || a === r ? [] : !Array.isArray(a) ? [a] : a
        };
        "function" !=
        typeof Object.assign && Object.defineProperty(Object, "assign", {
            value: function (a, b) {
                a == r && i(new TypeError("Cannot convert undefined or null to object"));
                for (var h = Object(a), j = 1; j < arguments.length; j++) {
                    var g = arguments[j];
                    if (g != r)
                        for (var c in g)
                            Object.prototype.hasOwnProperty.call(g, c) && (h[c] = g[c])
                }
                return h
            },
            writable: n,
            configurable: n
        });
        return e
    });
    define("dW", "require,jquery.mod,do,ky,gr,jt,fg".split(","), function (a) {
        function b(a, b) {
            this.px = a;
            this.FQ = b;
            this.ZC = r;
            this.AU = {};
            this.wU = this.It = this.ex = m;
            this.t8 = [];
            this.vE = this.zv = m;
            this.s8 = [];
            this.MD = this.mv = m;
            this.r8 = {};
            this.kC = m;
            this.p8 = [];
            this.cr = m;
            this.q8 = [];
            this.tr = m;
            this.V5 = this.X5 = y
        }
        var c = a("jquery.mod"),
        e = a("do"),
        g = a("ky"),
        d = a("gr"),
        f = a("jt"),
        h = a("fg");
        b.prototype.B = function (a) {
            this.ZC = a;
            this.f3();
            this.j3();
            this.yQ();
            return this
        };
        b.prototype.Jva = function () {
            if (this.ZC)
                return b.An(this.ZC)
        };
        b.prototype.tz = Q("px");
        b.prototype.eF = function () {
            return this.nr() ? this.Ho().eF().concat(this.px) : [this.px]
        };
        b.prototype.J = function (a) {
            this.AU = a;
            this.f3();
            return this
        };
        b.prototype.hasAttributes = function () {
            return this.tY().length > 0
        };
        b.prototype.hasAttribute = function (a) {
            return this.sY(a) ? n : y
        };
        b.prototype.tY = function () {
            this.ex == m && this.E3();
            return this.ex
        };
        b.prototype.Qya = function () {
            this.wU = ["definitions"];
            return this
        };
        b.prototype.kca = function () {
            if (this.wU)
                return this.wU;
            if (this.nr())
                this.Ho().kca();
            else
                return []
        };
        b.prototype.sY = function (a) {
            this.It == m && this.E3();
            return this.It[a]
        };
        b.prototype.hh = function (a) {
            this.t8 = a;
            this.Wia();
            return this
        };
        b.prototype.iwa = function () {
            return this.sca().length > 0
        };
        b.prototype.sca = function () {
            this.zv == m && this.J3();
            return this.zv
        };
        b.prototype.Uva = function () {
            this.vE == m && this.J3();
            return this.vE
        };
        b.prototype.gq = function (a) {
            this.s8 = a;
            this.Uia();
            return this
        };
        b.prototype.hwa = function () {
            return this.qca().length > 0
        };
        b.prototype.qca = function () {
            this.mv == m && this.I3();
            return this.mv
        };
        b.prototype.Tva = function () {
            this.MD == m && this.I3();
            return this.MD
        };
        b.prototype.Xb = function (a) {
            this.p8 = a;
            this.yQ();
            return this
        };
        b.prototype.bwa = function () {
            return this.xY().length > 0
        };
        b.prototype.Cca = function (a) {
            this.cr == m && this.MH();
            return e(this.cr).contains(a)
        };
        b.prototype.xY = function () {
            this.cr == m && this.MH();
            return this.cr
        };
        b.prototype.Hf = function (a) {
            this.q8 = a;
            this.yQ();
            return this
        };
        b.prototype.ewa = function () {
            return this.CY().length > 0
        };
        b.prototype.Dca = function (a) {
            this.tr == m && this.MH();
            return e(this.tr).contains(a)
        };
        b.prototype.CY = function () {
            this.tr == m && this.MH();
            return this.tr
        };
        b.prototype.Cg = function (a) {
            this.r8 = a;
            this.j3();
            return this
        };
        b.prototype.ica = function () {
            this.kC == m && this.Jja();
            return this.kC
        };
        b.prototype.xya = function () {
            this.X5 = n;
            return this
        };
        b.prototype.cca = function () {
            return this.X5 || this.nr() && this.Ho().cca()
        };
        b.prototype.Cs = function (a, b, d, f) {
            this.npa(b, d);
            var g = this.FQ,
            c;
            c = f && f.length > 0 ? new(h.extend(g, function () {
                        g.apply(this, f)
                    })) : new g;
            c.set("application", a);
            c.set("baseDirectoy", b);
            c.set("queryStringParameters",
                d);
            c.set("class", this.tz());
            return c
        };
        b.prototype.npa = function (a, b) {
            if (!this.V5) {
                this.V5 = n;
                this.Uja(a, b);
                this.zka()
            }
        };
        b.prototype.Uja = function (a, b) {
            if (this.iwa() || this.hwa()) {
                var h = this.FQ.prototype,
                g = this.Uva(),
                c = this.Tva(),
                e = h.set;
                h.set = function (h, k) {
                    if (g[h]) {
                        k && !f.cw(k) && !f.ZY(k) && (k = f.Hv(f.Zs(k, a), b));
                        e.call(this, h, k)
                    } else
                        c[h] ? d.get(this.get("application") || this.Ta()).gua(this, e, h, k) : e.call(this, h, k)
                }
            }
        };
        b.prototype.zka = function () {
            var a = this.FQ.prototype,
            b = this;
            if (this.hasAttributes()) {
                a.set =
                    a.set;
                a.get = a.get
            }
            if (this.bwa() || this.ewa()) {
                a.bind = a.bind;
                a.getBindings = a.cF;
                a.hasBindings = a.Aca;
                a.trigger = a.trigger;
                a.unbind = a.unbind
            }
            a.getClassName = function () {
                return b.tz()
            };
            a.getClassPath = function () {
                return b.eF()
            };
            a.getAttributeNames = function () {
                return b.tY()
            };
            var d = this.ica(),
            f;
            for (f in d)
                a[f] = d[f]
        };
        b.prototype.f3 = function () {
            this.It = this.ex = m
        };
        b.prototype.E3 = function () {
            this.ex = [];
            this.It = {};
            for (var a in this.AU) {
                this.ex.push(a);
                this.It[a] = b.kS(this.AU[a])
            }
            if (this.nr())
                for (var d = this.Ho(), f = d.tY(),
                    h = 0; h < f.length; h++) {
                    a = f[h];
                    if (!this.It[a]) {
                        this.ex.push(a);
                        this.It[a] = d.sY(a)
                    }
                }
        };
        b.prototype.Wia = function () {
            this.vE = m
        };
        b.prototype.J3 = function () {
            this.zv = this.t8.slice();
            if (this.nr())
                this.zv = e(this.zv).union(this.Ho().sca());
            this.vE = {};
            for (var a = 0; a < this.zv.length; a++)
                this.vE[this.zv[a]] = n
        };
        b.prototype.Uia = function () {
            this.MD = m
        };
        b.prototype.I3 = function () {
            this.mv = this.s8.slice();
            if (this.nr())
                this.mv = e(this.mv).union(this.Ho().qca());
            this.MD = {};
            for (var a = 0; a < this.mv.length; a++)
                this.MD[this.mv[a]] = n
        };
        b.prototype.yQ = function () {
            this.tr = this.cr = m
        };
        b.prototype.MH = function () {
            this.cr = this.p8.slice();
            this.tr = this.q8.slice();
            if (this.nr()) {
                this.cr = e(this.cr).union(this.Ho().xY());
                this.tr = e(this.tr).union(this.Ho().CY())
            }
        };
        b.prototype.j3 = function () {
            this.kC = m
        };
        b.prototype.Jja = function () {
            this.kC = e(this.r8).clone();
            this.nr() && e(this.kC).defaults(this.Ho().ica())
        };
        b.prototype.nr = function () {
            return this.ZC ? n : y
        };
        b.prototype.Ho = function () {
            return b.An(this.ZC)
        };
        b.d3 = new g;
        b.c3 = new g;
        b.LAa = {};
        b.A = function (a, d) {
            var f =
                new b(a, d);
            b.d3.set(a, f);
            b.c3.set(d, f);
            return f
        };
        b.An = function (a) {
            return b.d3.get(a)
        };
        b.hva = function (a) {
            return b.c3.get(a)
        };
        b.tb = function (a, d) {
            var f = b.An(a);
            if (e(d).isNull())
                return n;
            if (d && d.constructor)
                for (var h = b.hva(d.constructor); h; ) {
                    if (h == f)
                        return n;
                    h = h.Jva()
                }
            return y
        };
        b.kS = function (a) {
            switch (a) {
            case "string":
            case "code":
                return b.asa;
            case "number":
                return b.yna;
            case "bool":
                return b.bia;
            case "color":
                return b.bja;
            case "percent":
                return b.Zoa;
            case "size":
                return b.zra;
            case "identifier":
                return b.Ama;
            case "array":
                return b.o2;
            case "dict":
                return b.$oa;
            case "*":
                return b.rka;
            default:
                if (b.Uma(a))
                    switch (b.fla(a)) {
                    case "array":
                        var d = b.kS(b.F4(a));
                        return function (a, j) {
                            for (var a = b.o2(a, j), f = 0; f < a.length; f++)
                                a[f] = d(a[f], j);
                            return a
                        };
                    case "enum":
                        var f = b.G4(a);
                        return b.gla(f);
                    case "or":
                        var f = b.G4(a),
                        h = e(f).map(function (a) {
                            return b.kS(a)
                        });
                        return function (a, b) {
                            for (var d = 0; d < h.length; d++)
                                try {
                                    return h[d](a, b)
                                } catch (j) {}
                            i("Invalid value")
                        };
                    default:
                        i("Invalid type validator definition: " + a)
                    }
                else
                    return b.ql(function (d) {
                        return b.tb(a,
                            d)
                    })
            }
        };
        b.Uma = function (a) {
            return a.indexOf("[") >= 0 && a.lastIndexOf("]") == a.length - 1
        };
        b.fla = function (a) {
            return a.substring(0, a.indexOf("["))
        };
        b.F4 = function (a) {
            return a.substring(a.indexOf("[") + 1, a.lastIndexOf("]"))
        };
        b.G4 = function (a) {
            for (var a = b.F4(a), d = [], f = "", h = 0, g = 0; g < a.length; g++) {
                var c = a.charAt(g),
                f = f + c;
                switch (c) {
                case "[":
                    h++;
                    break;
                case "]":
                    h--;
                    break;
                case ",":
                    if (h == 0) {
                        d.push(f.substr(0, f.length - 1));
                        f = ""
                    }
                }
            }
            f != "" && d.push(f);
            return e(d).map(function (a) {
                return b.Jsa(a)
            })
        };
        b.Jsa = function (a) {
            return a.replace(/^\s+|\s+$/g,
                "")
        };
        b.ql = function (a) {
            return function (d, f) {
                if (!a(d)) {
                    typeof d != "string" && i("Invalid value");
                    d = b.xka(d, f);
                    a(d) || i("Invalid value")
                }
                return d
            }
        };
        b.xka = function (a, b) {
            return function () {
                return eval(a)
            }
            .call(b)
        };
        b.rka = function (a) {
            return a
        };
        b.yna = b.ql(function (a) {
            return Object.prototype.toString.call(a) == "[object Number]"
        });
        b.asa = b.ql(function (a) {
            return typeof a == "string" || a === r
        });
        b.bia = b.ql(function (a) {
            return a === n || a === y
        });
        b.o2 = b.ql(function (a) {
            return Object.prototype.toString.call(a) == "[object Array]"
        });
        b.gla = function (a) {
            return b.ql(function (b) {
                return e(a).contains(b)
            })
        };
        b.gI = function (a, b) {
            return e(a).isString() && b.test(a)
        };
        b.Ama = b.ql(function (a) {
            return b.gI(a, /^[a-z][a-z0-9_]*$/i)
        });
        b.Zoa = b.ql(function (a) {
            return b.gI(a, /^\s*([+-]?\d+\.?\d*)%\s*$/i)
        });
        b.zra = b.ql(function (a) {
            return b.gI(a, /^\s*([+-]?\d+\.?\d*)\s*((vw)|(vh)|(vmin)|(vmax)|(px))\s*$/i)
        });
        b.bja = b.ql(function (a) {
            return b.gI(a, /^#[0-9a-f]{6}$/i)
        });
        b.$oa = b.ql(function (a) {
            try {
                return c.isPlainObject(a)
            } catch (b) {
                return y
            }
        });
        return b
    });
    define("gG", ["require"], function () {
        function a() {
            d[0] = d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = d[7] = d[8] = d[9] = d[10] = d[11] = d[12] = d[13] = d[14] = d[15] = d[16] = 0;
            this.YX = d;
            this.KM = 1779033703;
            this.LM = 3144134277;
            this.MM = 1013904242;
            this.NM = 2773480762;
            this.OM = 1359893119;
            this.PM = 2600822924;
            this.QM = 528734635;
            this.RM = 1541459225;
            this.OE = this.start = this.Bs = this.OY = 0;
            this.oY = this.SM = y;
            this.first = n
        }
        var b = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f".split(","),
        c = [-2147483648, 8388608, 32768, 128],
        e = [24, 16, 8, 0],
        g = [1116352408, 1899447441, 3049323471,
            3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616,
            659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298],
        d = [];
        a.prototype.update = function (a) {
            if (!this.oY) {
                for (var b, d = 0, g, c = a.length, l = this.YX; d < c; ) {
                    this.SM && (this.SM = y, l[0] = this.OE, l[16] = l[1] = l[2] = l[3] = l[4] = l[5] = l[6] = l[7] = l[8] = l[9] = l[10] = l[11] = l[12] = l[13] = l[14] = l[15] = 0);
                    for (g = this.start; d < c && 64 > g; ++d)
                        b = a.charCodeAt(d), 128 > b ? l[g >> 2] |= b << e[g++ & 3] : (2048 > b ? l[g >> 2] |= (192 | b >> 6) << e[g++ & 3] : (55296 > b || 57344 <= b ? l[g >>
                                    2] |= (224 | b >> 12) << e[g++ & 3] : (b = 65536 + ((b & 1023) << 10 | a.charCodeAt(++d) & 1023), l[g >> 2] |= (240 | b >> 18) << e[g++ & 3], l[g >> 2] |= (128 | b >> 12 & 63) << e[g++ & 3]), l[g >> 2] |= (128 | b >> 6 & 63) << e[g++ & 3]), l[g >> 2] |= (128 | b & 63) << e[g++ & 3]);
                    this.Swa = g;
                    this.Bs += g - this.start;
                    64 <= g ? (this.OE = l[16], this.start = g - 64, this.hash(), this.SM = n) : this.start = g
                }
                4294967295 < this.Bs && (this.OY += this.Bs / 4294967296 << 0, this.Bs %= 4294967296);
                return this
            }
        };
        a.prototype.$ua = function () {
            if (!this.oY) {
                this.oY = n;
                var a = this.YX,
                b = this.Swa;
                a[16] = this.OE;
                a[b >> 2] |= c[b & 3];
                this.OE = a[16];
                56 <= b && (this.SM || this.hash(), a[0] = this.OE, a[16] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = a[9] = a[10] = a[11] = a[12] = a[13] = a[14] = a[15] = 0);
                a[14] = this.OY << 3 | this.Bs >>> 29;
                a[15] = this.Bs << 3;
                this.hash()
            }
        };
        a.prototype.hash = function () {
            var a = this.KM,
            b = this.LM,
            d = this.MM,
            c = this.NM,
            e = this.OM,
            l = this.PM,
            q = this.QM,
            o = this.RM,
            t = this.YX,
            s,
            v,
            u,
            w,
            x,
            z,
            C;
            for (s = 16; 64 > s; ++s)
                u = t[s - 15], v = (u >>> 7 | u << 25) ^ (u >>> 18 | u << 14) ^ u >>> 3, u = t[s - 2], u = (u >>> 17 | u << 15) ^ (u >>> 19 | u << 13) ^ u >>> 10, t[s] = t[s - 16] + v + t[s - 7] + u << 0;
            C = b & d;
            for (s = 0; 64 > s; s +=
                4)
                this.first ? (z = 704751109, u = t[0] - 210244248, o = u - 1521486534 << 0, c = u + 143694565 << 0, this.first = y) : (v = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10), u = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7), z = a & b, w = z ^ a & d ^ C, x = e & l ^ ~e & q, u = o + u + x + g[s] + t[s], v += w, o = c + u << 0, c = u + v << 0), v = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10), u = (o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7), C = c & a, w = C ^ c & b ^ z, x = o & e ^ ~o & l, u = q + u + x + g[s + 1] + t[s + 1], v += w, q = d + u << 0, d = u + v << 0, v = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10), u = (q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 |
                    q << 7), z = d & c, w = z ^ d & a ^ C, x = q & o ^ ~q & e, u = l + u + x + g[s + 2] + t[s + 2], v += w, l = b + u << 0, b = u + v << 0, v = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10), u = (l >>> 6 | l << 26) ^ (l >>> 11 | l << 21) ^ (l >>> 25 | l << 7), C = b & d, w = C ^ b & c ^ z, x = l & q ^ ~l & o, u = e + u + x + g[s + 3] + t[s + 3], v += w, e = a + u << 0, a = u + v << 0;
            this.KM = this.KM + a << 0;
            this.LM = this.LM + b << 0;
            this.MM = this.MM + d << 0;
            this.NM = this.NM + c << 0;
            this.OM = this.OM + e << 0;
            this.PM = this.PM + l << 0;
            this.QM = this.QM + q << 0;
            this.RM = this.RM + o << 0
        };
        a.prototype.kwa = function () {
            this.$ua();
            var a = this.KM,
            d = this.LM,
            j = this.MM,
            g = this.NM,
            c = this.OM,
            e = this.PM,
            q = this.QM,
            o = this.RM;
            return b[a >> 28 & 15] + b[a >> 24 & 15] + b[a >> 20 & 15] + b[a >> 16 & 15] + b[a >> 12 & 15] + b[a >> 8 & 15] + b[a >> 4 & 15] + b[a & 15] + b[d >> 28 & 15] + b[d >> 24 & 15] + b[d >> 20 & 15] + b[d >> 16 & 15] + b[d >> 12 & 15] + b[d >> 8 & 15] + b[d >> 4 & 15] + b[d & 15] + b[j >> 28 & 15] + b[j >> 24 & 15] + b[j >> 20 & 15] + b[j >> 16 & 15] + b[j >> 12 & 15] + b[j >> 8 & 15] + b[j >> 4 & 15] + b[j & 15] + b[g >> 28 & 15] + b[g >> 24 & 15] + b[g >> 20 & 15] + b[g >> 16 & 15] + b[g >> 12 & 15] + b[g >> 8 & 15] + b[g >> 4 & 15] + b[g & 15] + b[c >> 28 & 15] + b[c >> 24 & 15] + b[c >> 20 & 15] + b[c >> 16 & 15] + b[c >> 12 & 15] + b[c >> 8 & 15] + b[c >> 4 & 15] + b[c & 15] + b[e >> 28 & 15] + b[e >>
                24 & 15] + b[e >> 20 & 15] + b[e >> 16 & 15] + b[e >> 12 & 15] + b[e >> 8 & 15] + b[e >> 4 & 15] + b[e & 15] + b[q >> 28 & 15] + b[q >> 24 & 15] + b[q >> 20 & 15] + b[q >> 16 & 15] + b[q >> 12 & 15] + b[q >> 8 & 15] + b[q >> 4 & 15] + b[q & 15] + b[o >> 28 & 15] + b[o >> 24 & 15] + b[o >> 20 & 15] + b[o >> 16 & 15] + b[o >> 12 & 15] + b[o >> 8 & 15] + b[o >> 4 & 15] + b[o & 15]
        };
        return function (b) {
            return (new a).update(b).kwa()
        }
    });
    define("jE", ["require", "jt"], function (a) {
        var a = a("jt"),
        b = {};
        b.H_ = a.$g("debug", y);
        b.Mfa = a.zg("hqhls");
        b.A_ = a.$g("audiocontext", n);
        b.uga = a.$g("testhash", y);
        b.Dfa = a.$g("exitvronblur", y);
        b.yfa = a.$g("download", n);
        return b
    });
    define("bF", ["require", "gG", "jE"], function (a) {
        function b(a) {
            switch (Array.isArray(a) ? "array" : a === r ? "null" : typeof a) {
            case "array":
                return "[" + a.map(b).join(",") + "]";
            case "object":
                return "{" + Object.keys(a).sort().map(function (f) {
                    return b(f) + ":" + b(a[f])
                }).join(",") + "}";
            case "boolean":
                return a ? "true" : "false";
            case "number":
                return a.toFixed(3);
            case "string":
                return '"' + a.split('"').join('\\"') + '"';
            case "null":
                return "null";
            case "undefined":
                return "undefined";
            case "function":
                return "<function>"
            }
            return ""
        }
        var c = a("gG"),
        e = a("jE"),
        g = TDV.Da.IM().MAJOR + "." + TDV.Da.IM().MINOR;
        return {
            Vza: function (a) {
                var f = a.hash;
                delete a.hash;
                var a = b(a),
                h = c(g + a);
                e.uga && h != f && (console.log(g + a), console.log(h), console.log(f))
            }
        }
    });
    define("iN", [], function () {
        function a() {
            var a = d.length,
            b = d.splice(0, a);
            g += a;
            for (var j = 0; j < a; j++) {
                var f = b[j];
                f && f()
            }
        }
        var b = window.MutationObserver,
        c = window.Promise,
        e = 0,
        g = 0,
        d = [],
        f;
        setInterval(function () {
            0 < d.length && 100 < (new Date).getTime() - h && a()
        }, 100);
        var h,
        j;
        c && (j = new c(function (a) {
                a()
            }));
        b && (f = document.createTextNode(""), (new b(a)).observe(f, {
                characterData: n
            }));
        return {
            nw: function (g, k) {
                if (k > 0 || !b && !c)
                    return ~setTimeout(g, k || 1);
                if (d.length == 0) {
                    c ? j.then(a) : f.textContent = e;
                    h = (new Date).getTime()
                }
                e++;
                d.push(g);
                return e - 1
            },
            cancel: function (a) {
                if (a < 0)
                    clearTimeout(~a);
                else {
                    var b = a - g;
                    if (b >= 0) {
                        d[b] || i("invalid async handle: " + a);
                        d[b] = r
                    }
                }
            }
        }
    });
    define("eO", ["do", "iN", "bZ", "fg"], function (a, b, c, e) {
        function g() {
            this.Xc = {}
        }
        g.prototype.bind = function (a, b, h, j, g) {
            a === m && i("Event name undefined");
            b === m && i("Event handler undefined");
            a in this.Xc || (this.Xc[a] = []);
            this.Xc[a].push({
                handler: b,
                handlerDef: g || b,
                context: h || this,
                immediate: j ? n : y
            });
            return this
        };
        g.prototype.unbind = function (b, f, h) {
            if (b in this.Xc) {
                var h = h || this,
                j = a(this.Xc[b]).select(function (a) {
                    return a.handler != f || a.context != h
                });
                0 < j.length ? this.Xc[b] = j : delete this.Xc[b]
            }
            return this
        };
        g.prototype.Pza =
        function (a) {
            a in this.Xc && delete this.Xc[a]
        };
        g.prototype.efa = function () {
            this.Xc = {}
        };
        g.prototype.trigger = function (a, b) {
            var h = "string" == typeof a,
            j = h ? a : a.name;
            j in this.Xc && (h && (a = new c(a, b)), a.source = this, this.VA(a, n), j in this.Xc && this.Vja(a));
            return this
        };
        g.prototype.Vja = function (a) {
            g.QH.push({
                caller: this,
                event: a
            });
            g.rR || (g.rR = n, b.nw(g.R3))
        };
        g.QH = [];
        g.rR = y;
        g.R3 = function () {
            for (var a = (new Date).getTime() + 1E3; g.QH.length; ) {
                var f = g.QH.shift();
                g.prototype.VA.call(f.caller, f.event, y);
                if ((new Date).getTime() >
                    a)
                    break
            }
            0 < g.QH.length ? b.nw(g.R3, 1) : g.rR = y
        };
        g.prototype.Aca = function (a) {
            return a in this.Xc
        };
        g.prototype.cF = function (a, b) {
            for (var h = [], j = this.Xc[a] || [], g = 0; g < j.length; g++) {
                var c = j[g];
                (b === m || c.immediate == b) && h.push(c.handlerDef)
            }
            return h
        };
        g.prototype.VA = function (a, b) {
            if (a.name in this.Xc)
                for (var g = this.Xc[a.name], j = 0; j < g.length; j++) {
                    var c = g[j];
                    if (c.immediate == b)
                        try {
                            c.handler.call(c.context, a)
                        } catch (k) {
                            e.bN("Exception handling event " + a.name, k)
                        }
                }
        };
        return g
    });
    define("jd", ["ll", "fg", "bZ", "eO"], function (a, b, c, e) {
        b = b.extend(e, function () {
            e.call(this);
            this.MA = {}
        });
        b.prototype.set = function (a, b) {
            this.MA[a] != b && (this.MA[a] = b, this.qaa(a))
        };
        b.prototype.qaa = function (b) {
            this.trigger(new c(a.D(b)))
        };
        b.prototype.get = function (a, b) {
            var f = this.MA[a];
            return f !== m ? f : b
        };
        return b
    });
    define("fk", [], function () {
        function a(a, c, e) {
            this.set("undefined" != typeof a ? a : 0, "undefined" != typeof c ? c : 0, "undefined" != typeof e ? e : 0)
        }
        a.prototype.set = function (a, c, e) {
            this.x = a;
            this.y = c;
            this.z = e
        };
        a.prototype.clone = function () {
            return new a(this.x, this.y, this.z)
        };
        a.prototype.apply = function (a) {
            a.hz(this)
        };
        a.prototype.project = function (a) {
            a.project(this)
        };
        return a
    });
    define("a", ["fg", "fk"], function (a, b) {
        var c = a.extend(b, function (a, g, d) {
            b.call(this, a, g, d)
        });
        c.prototype.clone = function () {
            return new c(this.x, this.y, this.z)
        };
        c.prototype.ac = function () {
            return 0 == this.x && 0 == this.z ? 0 : -Math.atan2(this.x, this.z)
        };
        c.prototype.ec = function () {
            return 0 == this.y && 0 == this.z ? 0 : Math.atan2(this.y, Math.sqrt(this.z * this.z + this.x * this.x))
        };
        c.prototype.EY = function () {
            return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
        };
        c.prototype.SF = function (a) {
            a /= this.EY();
            this.x *= a;
            this.y *= a;
            this.z *= a;
            return this
        };
        c.prototype.normalize = function () {
            return this.SF(1)
        };
        c.prototype.Mv = function (a) {
            return this.x * a.x + this.y * a.y + this.z * a.z
        };
        c.prototype.lM = function (a) {
            var b = this.z * a.x - this.x * a.z,
            d = this.x * a.y - this.y * a.x;
            this.x = this.y * a.z - this.z * a.y;
            this.y = b;
            this.z = d;
            return this
        };
        c.Gs = function (a, b) {
            return new c(b.x - a.x, b.y - a.y, b.z - a.z)
        };
        c.Mp = function (a, b) {
            return new c(Math.cos(b) * Math.sin(a), Math.sin(b), Math.cos(b) * Math.cos(a))
        };
        return c
    });
    define("gH", "require,fg,jd,ll,dW,a".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("a"),
        a = b.extend(c, function () {
            c.call(this);
            this.yX = this.Bo = m;
            this.set("enabled", n);
            this.set("enabledInSurfaceSelection", n)
        });
        g.A("AdjacentPanorama", a).B("Object").J({
            enabled: "bool",
            enabledInSurfaceSelection: "bool",
            yaw: "number",
            distance: "number",
            panorama: "Panorama",
            backwardYaw: "number"
        }).Hf([e.Mi]);
        a.prototype.Wba = function () {
            if (this.Bo === m) {
                for (this.Bo = this.S4() - this.get("yaw"); this.Bo > 180; )
                    this.Bo =
                        this.Bo - 360;
                for (; this.Bo < -180; )
                    this.Bo = this.Bo + 360
            }
            return this.Bo
        };
        a.prototype.tva = function () {
            if (this.yX === m)
                this.yX = d.Mp(this.S4() * Math.PI / 180, 0);
            return this.yX
        };
        a.prototype.oua = function () {
            return this.get("yaw") !== m && this.get("backwardYaw") !== m
        };
        a.prototype.S4 = function () {
            return this.get("backwardYaw") - 180
        };
        return a
    });
    define("fu", [], function () {
        return {
            H: "stopped",
            P: "playing",
            mc: "paused"
        }
    });
    define("dY", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("ImageResource", b).B("Object").J({
            levels: "array[ImageResourceLevel]"
        });
        return b
    });
    define("dw", "require,fg,ll,fu,dY,dW".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("dY"),
        a = a("dW"),
        b = b.extend(g, function () {
            g.call(this);
            this.set("state", e.H);
            this.set("autoplay", n);
            this.set("repeat", 0);
            this.set("visibleOnStop", n);
            this.set("finalFrame", "last")
        });
        b.prototype.play = function () {
            this.set("state", e.P)
        };
        b.prototype.pause = function () {
            this.set("state", e.mc)
        };
        b.prototype.stop = function () {
            this.set("state", e.H)
        };
        a.A("AnimatedImageResource", b).B("ImageResource").J({
            autoplay: "bool",
            finalFrame: "enum[first, last]",
            frameCount: "number",
            frameDuration: "number",
            rowCount: "number",
            colCount: "number",
            repeat: "number",
            state: "enum[stopped, playing, paused]",
            visibleOnStop: "bool"
        }).Xb([c.Ba, c.wt, c.lh]).Cg({
            pause: b.prototype.pause,
            play: b.prototype.play,
            stop: b.prototype.stop
        });
        b.prototype.set = function (a, b) {
            switch (a) {
            case "state":
                (this.get("state") || e.H) == e.H && b == e.P && this.trigger(c.lh)
            }
            g.prototype.set.call(this, a, b)
        };
        b.prototype.ah = function (a, b, h) {
            b || (b = 1);
            h || (h = 1);
            return g.prototype.ah.call(this,
                a, b * this.get("colCount", 1), h * this.get("rowCount", 1))
        };
        return b
    });
    define("gs", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function (a) {
            b.call(this);
            this.Iy = a === m ? n : a;
            this.cy = this.Tl = this.Sl = this.Y = m;
            this.set("enabled", n);
            this.set("selected", y)
        });
        c.A("HotspotMapOverlay", a).B("MapOverlay").J({
            areas: "array[HotspotMapOverlayArea]",
            enabled: "bool",
            image: "HotspotMapOverlayImage",
            map: "HotspotMapOverlayMap",
            rollOverDisplay: "bool",
            rollOverImage: "HotspotMapOverlayImage",
            rollOverMap: "HotspotMapOverlayMap",
            selectedImage: "HotspotMapOverlayImage",
            selectedMap: "HotspotMapOverlayMap",
            selected: "bool",
            useHandCursor: "bool"
        });
        a.prototype.getItem = function () {
            if (this.Y === m) {
                var a = this.get("image");
                this.Y = a ? a.kM(this.Iy) : r
            }
            return this.Y
        };
        a.prototype.nca = function () {
            if (this.Sl === m) {
                var a = this.get("rollOverImage");
                this.Sl = a ? a.kM(this.Iy) : r
            }
            return this.Sl
        };
        a.prototype.pca = function () {
            if (this.Tl === m) {
                var a = this.get("selectedImage");
                this.Tl = a ? a.kM(this.Iy) : r
            }
            return this.Tl
        };
        a.prototype.Eva = function () {
            if (this.cy === m) {
                this.cy = [];
                var a = this.getItem();
                a && this.cy.push(a);
                (a = this.nca()) && this.cy.push(a);
                (a = this.pca()) && this.cy.push(a)
            }
            return this.cy
        };
        return a
    });
    define("dN", ["fg", "dW", "gs"], function (a, b, c) {
        a = a.extend(c, function () {
            c.call(this, n)
        });
        b.A("AreaHotspotMapOverlay", a).B("HotspotMapOverlay");
        return a
    });
    define("kU", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("gain", 1);
            this.set("fadeOutTime", 0)
        });
        a.A("AudioResource", b).B("Object").J({
            fadeOutTime: "number",
            gain: "number",
            mp3Url: "string",
            oggUrl: "string"
        }).hh(["mp3Url", "oggUrl"]);
        return b
    });
    define("ck", [], function () {
        return {
            ut: "inAdvance",
            J_: "delayed"
        }
    });
    define("R", [], function () {
        return {
            yG: "grab",
            zG: "grabbing",
            Yfa: "move",
            x0: "move-n",
            y0: "move-ne",
            o0: "move-e",
            B0: "move-se",
            A0: "move-s",
            C0: "move-sw",
            D0: "move-w",
            z0: "move-nw",
            Zfa: "move-ew",
            aga: "move-ns",
            $fa: "move-nesw",
            bga: "move-nwse",
            q0: "move-fast-n",
            r0: "move-fast-ne",
            p0: "move-fast-e",
            u0: "move-fast-se",
            t0: "move-fast-s",
            v0: "move-fast-sw",
            w0: "move-fast-w",
            s0: "move-fast-nw",
            Ue: "hand",
            dd: "default",
            qq: "inherit"
        }
    });
    define("fF", ["require", "ll"], function (a) {
        function b() {
            this.gg = []
        }
        var c = a("ll");
        b.prototype.register = function (a) {
            this.Zga(a);
            this.gg.push(a);
            a.get("pressed") && this.Q9(a)
        };
        b.prototype.dG = function (a) {
            this.Dpa(a)
        };
        b.prototype.Zga = function (a) {
            a.bind(c.Dg, this.T6, this, n)
        };
        b.prototype.Dpa = function (a) {
            a.unbind(c.Dg, this.T6, this)
        };
        b.prototype.T6 = function (a) {
            this.Q9(a.source)
        };
        b.prototype.Q9 = function (a) {
            this.gg.forEach(function (b) {
                b.set("pressed", b == a)
            })
        };
        b.register = function (a, b) {
            this.dG(a);
            var d = this.Of(b);
            a.EP = d;
            d.register(a)
        };
        b.dG = function (a) {
            a.EP && (a.EP.dG(a), delete a.EP)
        };
        b.Of = function (a) {
            return this.L5[a] || (this.L5[a] = new b)
        };
        b.L5 = {};
        return b
    });
    define("dm", [], function () {
        return {
            Wc: "push",
            Qh: "toggle"
        }
    });
    define("fV", [], function () {
        return {
            yt: "visible",
            f0: "hidden",
            bl: "scroll"
        }
    });
    define("fm", [], function () {
        return {
            dd: m,
            v: "over",
            Ca: "pressed",
            $a: "pressedOver",
            G: "selected"
        }
    });
    define("ep", [], function () {
        return {
            xc: "rollOver",
            ALWAYS: "always"
        }
    });
    define("cJ", ["require"], function () {
        var a = {},
        b;
        a: {
            try {
                if ("localStorage" in window && (window.localStorage.setItem("test", "test"), "test" == window.localStorage.getItem("test"))) {
                    b = n;
                    break a
                }
            } catch (c) {}
            b = y
        }
        if (b)
            a.setItem = function (a, b) {
                window.localStorage.setItem(a, b)
            },
        a.getItem = function (a) {
            return window.localStorage.getItem(a)
        },
        a.removeItem = function (a) {
            return window.localStorage.removeItem(a)
        },
        a.clear = function () {
            try {
                window.localStorage.clear()
            } catch (a) {}
        };
        else {
            var e = {};
            a.setItem = function (a, b) {
                e[a] = b
            };
            a.getItem =
            function (a) {
                return e[a]
            };
            a.removeItem = function (a) {
                delete e[a]
            };
            a.clear = function () {
                e = {}
            }
        }
        return a
    });
    define("r", ["require", "fg", "jt", "cJ"], function (a) {
        function b() {}
        var c = a("fg"),
        e = a("jt"),
        g = a("cJ");
        b.Lh = TDV.Da.GG;
        b.z_ = TDV.Da.WO;
        b.oP = TDV.Da.H0;
        b.CAa = TDV.Da.$O;
        b.Ufa = TDV.Da.XO;
        b.Rfa = TDV.Da.G0;
        b.pAa = TDV.Da.ZO;
        b.YO = TDV.Da.YO;
        b.iA = TDV.Da.iA;
        b.VN = TDV.Da.VN;
        b.UN = TDV.Da.UN;
        b.TN = TDV.Da.TN;
        b.WN = TDV.Da.WN;
        b.If = TDV.Da.If;
        b.iG = TDV.Da.iG;
        b.Ji = TDV.Da.Ji;
        b.Ii = TDV.Da.Ii;
        b.Dw = TDV.Da.Dw;
        b.nq = TDV.Da.nq;
        b.dA = TDV.Da.dA;
        b.at = TDV.Da.at;
        b.SN = TDV.Da.SN;
        b.hA = TDV.Da.hA;
        b.Vn = TDV.Da.Vn;
        b.mG = TDV.Da.mG;
        b.fA = TDV.Da.fA;
        b.jG = TDV.Da.jG;
        b.Ew = TDV.Da.Ew;
        b.gA = TDV.Da.gA;
        b.bt = TDV.Da.bt;
        b.C_ = TDV.Da.C_;
        b.eA = TDV.Da.eA;
        b.Fw = TDV.Da.Fw;
        b.kG = TDV.Da.kG;
        b.lG = TDV.Da.lG;
        b.XN = TDV.Da.XN;
        b.aO = TDV.Da.aO;
        b.Gw = TDV.Da.Gw;
        b.bO = TDV.Da.bO;
        b.cO = TDV.Da.cO;
        b.gr = function (a) {
            a = "force_" + a;
            if (e.zg("debug") && e.zg(a))
                return e.Jn(a)
        };
        b.Pka = b.gr("os");
        b.Rd = function () {
            return b.Pka || TDV.Da.Rd
        };
        b.Kka = b.gr("browser");
        b.browser = function () {
            return b.Kka || TDV.Da.browser
        };
        b.Lka = b.gr("browser_type");
        b.iz = function () {
            return b.Lka || TDV.Da.iz
        };
        b.t4 = b.gr("browser_subtype");
        b.Uc = function () {
            return b.t4 ?
            b.t4 : TDV.Da.Uc
        };
        b.Mka = b.gr("browser_version");
        b.rba = function () {
            return b.Mka || TDV.Da.rba
        };
        b.Oka = b.gr("device");
        b.Es = function () {
            return b.Oka || TDV.Da.Es
        };
        b.Za = function () {
            return TDV.Da.pZ
        };
        b.Bka = function () {
            for (var a = navigator.userAgent.toLowerCase(), b = ["SM-G960", "SM-G965"], d = 0; d < b.length; d++)
                if (0 <= a.indexOf(b[d].toLowerCase()))
                    return n;
            return y
        }
        ();
        b.Uka = function () {
            for (var a = navigator.userAgent.toLowerCase(), b = "SM-G920,SM-G925,SM-G928,SM-N920,SM-G930,SM-G935,SC-02H,SM-G950,SM-G955,SM-N950,SM-G960,SM-G965,SM-N960,SM-G970,SM-G973,SM-G975,SM-G977,SM-N970,SM-N975".split(","),
                d = 0; d < b.length; d++)
                if (0 <= a.indexOf(b[d].toLowerCase()))
                    return n;
            return y
        }
        ();
        b.u4 = b.gr("gearvrcompatible");
        b.aF = function () {
            return b.u4 !== m ? "true" == b.u4 : b.Uka
        };
        b.Hia = b.browser() != b.Ii || 0 > navigator.userAgent.indexOf("; wv") ? y : n;
        b.Nka = !!b.gr("chromewebview");
        b.Aba = function () {
            return b.Nka || b.Hia
        };
        b.le = function () {
            return b.Uc() == b.Vn || b.Uc() == b.mG || b.Uc() == b.Fw || b.Uc() == b.eA
        };
        b.dZ = function () {
            return b.oda() || b.ida() || b.qda()
        };
        b.Lwa = function () {
            return !!(window.location.hash && 0 <= window.location.hash.indexOf("device=picog2"))
        };
        b.Jwa = function () {
            return !!(window.location.hash && 0 <= window.location.hash.indexOf("device=piconeo2"))
        };
        b.ida = function () {
            return !!(window.location.hash && 0 <= window.location.hash.indexOf("device=piconeo3"))
        };
        b.qda = function () {
            return !!(window.location.hash && 0 <= window.location.hash.indexOf("device=vivefocus"))
        };
        b.oda = function () {
            return b.Uc() == b.Vn && 0 <= navigator.userAgent.indexOf("Quest 2")
        };
        b.nda = function () {
            return b.Uc() == b.Vn && 0 <= navigator.userAgent.indexOf("Quest") && 0 > navigator.userAgent.indexOf("Quest 2")
        };
        b.Bwa = function () {
            return b.Uc() == b.Vn && 0 > navigator.userAgent.indexOf("Quest")
        };
        b.aZ = function () {
            return b.le() && b.aF()
        };
        b.kD = m;
        b.wxa = function () {
            b.kD === m && (b.kD = parseInt(e.Jn("sts")), isNaN(b.kD) && (b.kD = b.le() && !b.Bka ? 512 : b.Za() && b.Rd() == b.Lh ? 512 : b.Za() ? 256 : 1024));
            return b.kD
        };
        var d;
        if (b.browser() == b.Ji || b.browser() == b.If)
            try {
                d = parseFloat(/Version\/([0-9]+\.[0-9]+)/i.exec(navigator.userAgent)[1])
            } catch (f) {}
        b.bqa = d;
        b.HF = function () {
            return b.bqa
        };
        b.xma = function () {
            var a;
            try {
                a = parseFloat(("" + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) ||
                                [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) || y
            } catch (d) {}
            a || (a = b.HF());
            return a
        }
        ();
        b.bw = function () {
            return b.xma
        };
        b.u5 = function () {
            var a = {
                wca: "unknown",
                vda: 1
            },
            b = document.createElement("canvas");
            if (b && (b = b.getContext("webgl") || b.getContext("experimental-webgl"))) {
                var d = b.getExtension("WEBGL_debug_renderer_info");
                d && (a.wca = b.getParameter(d.UNMASKED_RENDERER_WEBGL));
                a.Ywa = b.getParameter(b.MAX_TEXTURE_SIZE);
                if (d = b.getExtension("EXT_texture_filter_anisotropic") || b.getExtension("MOZ_EXT_texture_filter_anisotropic") ||
                        b.getExtension("WEBKIT_EXT_texture_filter_anisotropic"))
                    a.vda = b.getParameter(d.MAX_TEXTURE_MAX_ANISOTROPY_EXT)
            }
            return a
        }
        ();
        b.vca = function () {
            return b.u5
        };
        b.uha = function () {
            var a = b.u5.wca.match(/Apple\s+(.+)\s+GPU/);
            return a ? a[1].toUpperCase() : "unknown"
        }
        ();
        b.PAa = function () {
            return b.uha
        };
        b.bna = b.Es() == b.Gw ? n : y;
        b.Tp = function () {
            return b.bna
        };
        b.eY = function () {
            return b.browser() == b.Ji && 14 <= b.HF()
        };
        var h = !!g.getItem("tdvp_video_drift_2");
        b.Lca = function () {
            return h
        };
        b.dza = function () {
            h = n;
            g.setItem("tdvp_video_drift_2",
                n)
        };
        b.hna = "ontouchstart" in window || "undefined" !== typeof window.PointerEvent && "undefined" !== typeof navigator.maxTouchPoints && 0 < navigator.maxTouchPoints ? n : y;
        b.r_ = function () {
            return b.hna
        };
        b.ik = e.zg("touchenabled") ? e.$g("touchenabled") : "ontouchstart" in window ? b.Rd() == b.oP ? y : n : y;
        b.HN = function () {
            return b.ik
        };
        b.summary = function () {
            return ["browser: " + b.browser(), "browserType: " + b.iz(), "browserSubtype: " + b.Uc(), "device: " + b.Es(), "isMobile: " + b.Za(), "gearVRCompatibleDevice: " + b.aF(), "chromeWebView: " + b.Aba(),
                "touchDevice" + b.r_(), "touchEnabled" + b.HN()].join(", ")
        };
        b.log = function () {
            c.log("browser: " + b.browser());
            c.log("browserType: " + b.iz());
            c.log("browserSubtype: " + b.Uc());
            c.log("device: " + b.Es());
            c.log("isMobile: " + b.Za());
            c.log("gearVRCompatibleDevice: " + b.aF());
            c.log("chromeWebView: " + b.Aba());
            c.log("touchDevice: " + b.r_());
            c.log("touchEnabled: " + b.HN())
        };
        return b
    });
    define("jg", ["require", "r"], function (a) {
        function b() {
            for (; p.length; )
                p.shift()();
            document.body.removeEventListener("click", b, n);
            document.body.removeEventListener("touchstart", g, n);
            document.body.removeEventListener("touchmove", e, n);
            document.body.removeEventListener("touchend", c, n);
            h = y
        }
        function c() {
            j && b()
        }
        function e() {
            j = y
        }
        function g() {
            j = n;
            f.Rd() == f.Lh && b()
        }
        function d() {
            document.body.addEventListener("click", b, n);
            document.body.addEventListener("touchstart", g, n);
            document.body.addEventListener("touchmove",
                e, n);
            document.body.addEventListener("touchend", c, n)
        }
        var f = a("r"),
        h = y,
        j = y,
        p = [];
        return {
            LN: function () {
                b()
            },
            aA: function (a) {
                p.push(a);
                h || (h = n, document.body ? d() : document.addEventListener("DOMContentLoaded", d))
            },
            NBa: function (a) {
                a = p.indexOf(a);
                0 <= a && p.splice(a, 1)
            }
        }
    });
    define("ge", [], function () {
        return {
            Xfa: 7,
            hG: 6,
            k0: 5,
            Uj: 4,
            W0: 3,
            Rw: 2,
            aP: 1,
            jAa: 0,
            gga: 1,
            fga: 2,
            ega: 2,
            Ni: 2,
            vga: 3,
            yga: 4
        }
    });
    define("W", [], function () {
        return {
            PO: "horizontal",
            mP: "vertical"
        }
    });
    define("lC", [], function () {
        return {
            l1: "auto",
            k1: "auto",
            V0: "1",
            J0: "2",
            I0: "auto",
            hG: "2",
            G_: "3",
            F_: "auto",
            U0: "3",
            d1: "100",
            l1: "1",
            k1: "auto",
            V0: "1",
            J0: "2",
            I0: "auto",
            hG: "2",
            G_: "3",
            F_: "auto",
            U0: "5",
            d1: "100",
            dAa: "101",
            Efa: 999998,
            BAa: 999999,
            Pfa: 1E6
        }
    });
    define("fe", [], function () {
        var a = 1,
        b = {};
        return {
            css: function (c, e) {
                var g = c.__duqid;
                g === m && (g = a.toString(), c.__duqid = g, a++);
                var g = b[g] || (b[g] = {
                            e: c,
                            s: {}
                        }),
                d;
                for (d in e)
                    g.s[d] = e[d]
            },
            yxa: function () {
                for (var a in b) {
                    var e = b[a],
                    g = e.e.style,
                    e = e.s,
                    d;
                    for (d in e)
                        g[d] = e[d]
                }
                b = {}
            }
        }
    });
    define("by", ["require"], function () {
        return {
            cwa: function (a) {
                return !!a && 0 <= a.indexOf("&tdvflipx")
            },
            mba: function (a) {
                a && (0 > a.indexOf("#") && (a += "#"), a += "&tdvflipx");
                return a
            },
            dva: function (a, b, c) {
                var e = document.createElement("canvas");
                e.width = b;
                e.height = c;
                c = e.getContext("2d");
                c.translate(b, 0);
                c.scale(-1, 1);
                c.drawImage(a, 0, 0);
                a.src = e.toDataURL()
            }
        }
    });
    define("gx", ["require", "r", "jt", "iN", "cJ"], function (a) {
        function b(a, b, d, f, h) {
            this.url = a;
            this.Td = b;
            this.time = d;
            this.vza = f;
            this.pua = h
        }
        var c = a("r"),
        e = a("jt"),
        g = a("iN"),
        d = a("cJ");
        b.prototype.loaded = function () {
            f.SV(this.url);
            f.rD(this)
        };
        b.prototype.cancel = function () {
            f.rD(this)
        };
        var f = {
            $r: [],
            Om: [],
            WD: [],
            qX: r,
            h6: {},
            add: function (a, d, f, h) {
                a = new b(a, d, (new Date).getTime(), f, h);
                this.$r.push(a);
                this.L();
                return a
            },
            Bza: function (a) {
                this.WD.push(a);
                this.L()
            },
            Aza: function (a) {
                var b = this.WD,
                a = b.indexOf(a);
                0 <= a && b.splice(a,
                    1);
                this.L()
            }
        };
        if (c.Uc() == c.bt)
            f.x_ = R(n), f.SV = D();
        else if (!e.zg("debug") || !e.$g("disable-cache")) {
            f.x_ = function (a) {
                return this.h6[a] || d.getItem("tdvp_" + a)
            };
            var h = y;
            f.SV = function (a) {
                this.h6[a] = n;
                try {
                    d.setItem("tdvp_" + a, n)
                } catch (b) {
                    h || (h = n, d.clear())
                }
            }
        } else
            f.x_ = R(y), f.SV = D();
        f.L = function () {
            this.qX || (this.qX = g.nw(f.$sa))
        };
        f.$sa = function () {
            f.qX = r;
            for (var a = this.gqa(), b = 0, d = this.Om.length; b < d; b++) {
                var h = this.Om[b];
                0 > a.indexOf(h) && h.pua()
            }
            var c = this.Om;
            this.Om = a;
            b = 0;
            for (d = this.Om.length; b < d; b++)
                h = this.Om[b],
                0 > c.indexOf(h) && h.vza()
        }
        .bind(f);
        f.Ara = function () {
            this.$r.sort(function (a, b) {
                return a.Td - b.Td || b.time - a.time
            });
            this.WD.sort(function (a, b) {
                return a - b
            })
        };
        f.gqa = function () {
            this.Ara();
            var a = [];
            if (this.$r.length)
                for (var b = this.WD.length ? this.WD[0] : this.$r[0].Td, d = 0; 10 > d && d < this.$r.length && this.$r[d].Td <= b; d++)
                    a.push(this.$r[d]);
            return a
        };
        f.rD = function (a) {
            var b = this.$r,
            a = b.indexOf(a);
            0 <= a && b.splice(a, 1);
            this.L()
        };
        return f
    });
    define("id", "require,fg,bZ,eO,ll,ge,jt,by,gx".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = a("ll"),
        d = a("ge"),
        f = a("jt"),
        h = a("by"),
        j = a("gx"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.nD = a || d.Xfa;
            this.ia = this.X = this.Ab = this.Od = r;
            this.Ar = y;
            this.Hy = this.lk = r;
            this.FK = 0;
            this.cT = [];
            this.II = this.II.bind(this);
            this.JI = this.JI.bind(this)
        });
        a.prototype.load = function (a) {
            this.cancel();
            this.Od = a;
            this.FK = 0;
            this.p9()
        };
        a.prototype.p9 = function () {
            this.lk = j.add(this.Od, this.nD, this.Jra.bind(this), this.Aia.bind(this))
        };
        a.prototype.cancel = function () {
            if (this.lk) {
                this.lk.cancel();
                this.lk = r
            }
            this.e3()
        };
        a.prototype.Gwa = function () {
            return !!this.Ab && !this.Ar || this.Hy
        };
        a.prototype.Sp = Q("Ar");
        a.prototype.we = function (a) {
            if (a) {
                a = this.Ab.cloneNode(n);
                this.cT.push(a);
                return a
            }
            return this.Ab
        };
        a.prototype.ad = Q("X");
        a.prototype.Pd = Q("ia");
        a.prototype.Dj = Q("Od");
        a.prototype.Jra = function () {
            this.Ab = this.Eja(this.Od)
        };
        a.prototype.Aia = function () {
            this.Gwa() && this.e3()
        };
        a.prototype.e3 = function () {
            if (this.Ab) {
                if (this.Hy) {
                    clearTimeout(this.Hy);
                    this.Hy = r
                }
                for (this.Ar = y; this.cT.length; )
                    this.Z3(this.cT.shift());
                this.Z3(this.Ab);
                this.Ab = r
            }
        };
        a.prototype.cha = function (a) {
            a.addEventListener("load", this.II);
            a.addEventListener("error", this.JI)
        };
        a.prototype.i9 = function (a) {
            a.removeEventListener("load", this.II);
            a.removeEventListener("error", this.JI)
        };
        a.prototype.II = function () {
            this.lk.loaded();
            this.lk = r;
            this.i9(this.Ab);
            this.Ar = n;
            this.X = this.Ab.width;
            this.ia = this.Ab.height;
            h.cwa(this.Od) && h.dva(this.Ab, this.X, this.ia);
            this.trigger(new c(g.S))
        };
        a.prototype.JI =
        function () {
            this.cancel();
            if (this.FK < l) {
                this.FK++;
                this.Hy = setTimeout(function () {
                    this.Hy = r;
                    this.p9()
                }
                        .bind(this), Math.pow(2, this.FK) * 1E3)
            } else
                this.trigger(new c(g.oe))
        };
        a.prototype.Eja = function (a) {
            var b;
            if (k.length > 0)
                b = k.pop();
            else {
                b = document.createElement("img");
                if (f.eda(a))
                    b.crossOrigin = "Anonymous"
            }
            b.setAttribute("draggable", "false");
            b.style.position = "static";
            b.style.border = "none";
            b.style.display = "none";
            this.cha(b);
            b.src = a;
            return b
        };
        a.prototype.Z3 = function (a) {
            this.i9(a);
            a.parentNode && a.parentNode.removeChild(a);
            a.src = "";
            k.length > p && k.push(a)
        };
        var p = 100,
        k = [],
        l = 5;
        a.n_ = function (a) {
            return j.x_(a)
        };
        return a
    });
    define("eY", "require,do,jquery.mod,ll,ge,W,lC,fe,id".split(","), function (a) {
        function b() {
            this.jl = this.ll = this.ml = this.kl = this.oo = this.mo = this.qo = this.po = 0;
            this.dH = this.fH = this.gH = this.eH = "";
            this.Bb = 1;
            this.Ub = m;
            this.Vt = [];
            this.JQ = [];
            this.GQ = f.mP;
            this.vH = y;
            this.FI = m;
            this.xf = r;
            this.ES = this.HX = 0;
            this.hb = document.createElement("canvas");
            this.hb.setAttribute("tdvlayer", "background");
            this.K = e(this.hb);
            j.css(this.hb, {
                position: "absolute",
                left: 0,
                top: 0,
                "z-index": h.hG,
                "user-select": "none",
                "-ms-user-select": "none",
                "-moz-user-select": "none",
                "-webkit-user-select": "none"
            });
            this.se = n
        }
        var c = a("do"),
        e = a("jquery.mod"),
        g = a("ll"),
        d = a("ge"),
        f = a("W"),
        h = a("lC"),
        j = a("fe"),
        p = a("id");
        b.prototype.setSize = function (a, b) {
            if (this.HX != a || this.ES != b) {
                this.HX = a || 0;
                this.ES = b || 0;
                this.se = n
            }
        };
        b.prototype.Eea = function (a) {
            if (this.ul != a) {
                this.ul = a;
                this.se = n
            }
        };
        b.prototype.Gb = Q("K");
        b.prototype.fF = Q("hb");
        b.prototype.uya = function (a) {
            if (this.FI != a) {
                if (this.xf) {
                    this.xf.unbind(g.S, this.JB, this);
                    this.xf.cancel();
                    this.xf = r
                }
                if (this.FI = a) {
                    this.xf =
                        new p(d.W0);
                    this.xf.bind(g.S, this.JB, this);
                    this.xf.load(this.FI)
                }
                this.se = n
            }
        };
        b.prototype.PZ = function (a) {
            if (this.po != a) {
                this.po = a;
                this.se = n
            }
        };
        b.prototype.QZ = function (a) {
            if (this.qo != a) {
                this.qo = a;
                this.se = n
            }
        };
        b.prototype.KZ = function (a) {
            if (this.mo != a) {
                this.mo = a;
                this.se = n
            }
        };
        b.prototype.LZ = function (a) {
            if (this.oo != a) {
                this.oo = a;
                this.se = n
            }
        };
        b.prototype.NZ = function (a) {
            if (this.kl != a) {
                this.kl = a;
                this.se = n
            }
        };
        b.prototype.RZ = function (a) {
            if (this.ml != a) {
                this.ml = a;
                this.se = n
            }
        };
        b.prototype.OZ = function (a) {
            if (this.ll != a) {
                this.ll =
                    a;
                this.se = n
            }
        };
        b.prototype.MZ = function (a) {
            if (this.jl != a) {
                this.jl = a;
                this.se = n
            }
        };
        b.prototype.$xa = function (a) {
            if (this.eH != a) {
                this.eH = a;
                this.se = n
            }
        };
        b.prototype.bya = function (a) {
            if (this.gH != a) {
                this.gH = a;
                this.se = n
            }
        };
        b.prototype.aya = function (a) {
            if (this.fH != a) {
                this.fH = a;
                this.se = n
            }
        };
        b.prototype.Zxa = function (a) {
            if (this.dH != a) {
                this.dH = a;
                this.se = n
            }
        };
        b.prototype.Jj = function (a) {
            if (this.Bb != a) {
                this.Bb = a;
                this.se = n
            }
        };
        b.prototype.Hh = Q("Bb");
        b.prototype.Tz = function (a) {
            if (!c.isEqual(this.Ub, a)) {
                this.Ub = a;
                c(a).isArray() ||
                (a = [a]);
                a = c(a).filter(function (a) {
                    return c(a).isString()
                });
                this.wea(a)
            }
        };
        b.prototype.wea = function (a) {
            if (!c.isEqual(this.Vt, a)) {
                this.Vt = a;
                this.se = n
            }
        };
        b.prototype.fya = function (a) {
            if (this.IAa != a) {
                this.JQ = a;
                this.se = n
            }
        };
        b.prototype.eya = function (a) {
            if (this.GQ != a) {
                this.GQ = a;
                this.se = n
            }
        };
        b.prototype.JB = function () {
            this.se = n;
            this.Se()
        };
        b.prototype.Se = function () {
            if (this.se) {
                this.L();
                this.se = y
            }
        };
        b.prototype.L = function () {
            var a = Math.max(0, this.HX - (this.kl + this.ll)),
            b = Math.max(0, this.ES - (this.ml + this.jl)),
            d = this.K.get(0);
            d.width = a;
            d.height = b;
            var d = d.getContext("2d"),
            j = this.via(),
            h = j.length > 0,
            g = this.xf && this.xf.Sp(),
            e = this.kl > 0 && this.eH || this.ml > 0 && this.gH || this.ll > 0 && this.fH || this.jl > 0 && this.dH,
            e = h || g || e;
            if (h) {
                var p;
                p = this.GQ == f.PO ? d.createLinearGradient(0, 0, a, 0) : d.createLinearGradient(0, 0, 0, b);
                c(j).forEach(function (a) {
                    p.addColorStop(a.ratio, a.color)
                });
                d.fillStyle = p;
                d.fillRect(0, 0, a, b);
                this.vH = n
            } else if (this.vH) {
                d.clearRect(0, 0, a, b);
                this.vH = y
            }
            if (g) {
                d.drawImage(this.xf.we(), 0, 0, a, b);
                this.vH = n
            }
            this.hb.style.opacity =
                this.Bb;
            this.hb.style.filter = "alpha(opacity=" + Math.round(this.Bb * 100) + ")";
            this.hb.style["-ms-filter"] = "alpha(opacity=" + Math.round(this.Bb * 100) + ")";
            this.hb.style.borderTopLeftRadius = this.po + "px";
            this.hb.style.borderTopRightRadius = this.qo + "px";
            this.hb.style.borderBottomLeftRadius = this.mo + "px";
            this.hb.style.borderBottomRightRadius = this.oo + "px";
            this.hb.style.borderLeft = this.pI(this.kl, this.eH);
            this.hb.style.borderTop = this.pI(this.ml, this.gH);
            this.hb.style.borderRight = this.pI(this.ll, this.fH);
            this.hb.style.borderBottom =
                this.pI(this.jl, this.dH);
            this.hb.style.width = a + "px";
            this.hb.style.height = b + "px";
            this.hb.style.cursor = "inherit";
            this.hb.style.display = e ? "block" : "none";
            if (this.hb.clientWidth === 0 && a !== 0) {
                this.hb.style.width = 0;
                this.hb.style.width = a + "px"
            }
        };
        b.prototype.pI = function (a, b) {
            return a > 0 ? b ? a + "px solid " + b : a + "px solid transparent" : "none"
        };
        b.prototype.via = function () {
            var a = [];
            if (this.Vt.length > 0) {
                for (var b = this.Vt.slice(), b = [].concat([b[0]], b, [b[b.length - 1]]), d = this.uia(), d = [].concat([0], d, [1]), f = 0; f < b.length; f++) {
                    var j =
                        d[f];
                    j >= 0 && a.push({
                        color: b[f],
                        ratio: j
                    })
                }
                for (f = 0; f < a.length - 1; )
                    a[f].ratio == a[f + 1].ratio && a[f].color == a[f + 1].color ? a.splice(f, 1) : f++;
                for (f = 1; f < a.length - 1; )
                    a[f - 1].ratio == a[f + 1].ratio ? a.splice(f, 1) : f++
            }
            return a
        };
        b.prototype.uia = function () {
            var a = this.Vt.length,
            b;
            for (b = this.JQ.length > 0 ? c(this.JQ).map(function (a) {
                    return Math.min(1, Math.max(0, a))
                }) : a == 1 ? [0.5] : c(c.range(a)).map(function (b, d) {
                    return 1 * d / (a - 1)
                }); b.length < a; )
                b.push(1);
            b.length > a && b.splice(a, b.length - a);
            return b
        };
        return b
    });
    define("dH", ["jquery.mod", "lC", "fe"], function (a, b, c) {
        function e() {
            this.UJ = this.WJ = this.XJ = this.VJ = this.jl = this.ll = this.ml = this.kl = 0;
            this.XC = this.ul = n;
            this.CX = this.VS = 0;
            this.Z = n;
            this.zD = document.createElement("div");
            this.zD.setAttribute("tdvlayer", "content");
            this.C9 = a(this.zD);
            c.css(this.zD, {
                position: "absolute"
            });
            this.ZA = document.createElement("div");
            this.z3 = a(this.ZA);
            c.css(this.ZA, {
                position: "absolute"
            });
            this.C9.append(this.z3)
        }
        e.prototype.append = function (a) {
            this.z3.append(a)
        };
        e.prototype.WX = function (a) {
            this.ZA.appendChild(a)
        };
        e.prototype.Ixa = function (a) {
            this.ZA.removeChild(a)
        };
        e.prototype.Gb = Q("C9");
        e.prototype.fF = Q("zD");
        e.prototype.rya = function (a) {
            this.VS != a && (this.VS = a, this.Z = n)
        };
        e.prototype.oza = function (a) {
            this.CX != a && (this.CX = a, this.Z = n)
        };
        e.prototype.wz = function () {
            return this.VJ + this.kl
        };
        e.prototype.zz = function () {
            return this.XJ + this.ml
        };
        e.prototype.yz = function () {
            return this.WJ + this.ll
        };
        e.prototype.sz = function () {
            return this.UJ + this.jl
        };
        e.prototype.Vz = function (a) {
            this.XC != a && (this.XC = a, this.Z = n)
        };
        e.prototype.Tya = function (a) {
            this.VJ !=
            a && (this.VJ = a, this.Z = n)
        };
        e.prototype.Vya = function (a) {
            this.XJ != a && (this.XJ = a, this.Z = n)
        };
        e.prototype.Uya = function (a) {
            this.WJ != a && (this.WJ = a, this.Z = n)
        };
        e.prototype.Sya = function (a) {
            this.UJ != a && (this.UJ = a, this.Z = n)
        };
        e.prototype.NZ = function (a) {
            this.kl != a && (this.kl = a, this.Z = n)
        };
        e.prototype.RZ = function (a) {
            this.ml != a && (this.ml = a, this.Z = n)
        };
        e.prototype.OZ = function (a) {
            this.ll != a && (this.ll = a, this.Z = n)
        };
        e.prototype.MZ = function (a) {
            this.jl != a && (this.jl = a, this.Z = n)
        };
        e.prototype.Eea = function (a) {
            this.ul != a && (this.ul =
                    a, this.Z = n)
        };
        e.prototype.Se = function () {
            this.Z && (this.L(), this.Z = y)
        };
        e.prototype.L = function () {
            c.css(this.zD, {
                overflow: this.XC ? "visible" : "hidden",
                "z-index": this.ul ? b.G_ : b.F_,
                left: this.wz() + "px",
                top: this.zz() + "px",
                right: this.yz() + "px",
                bottom: this.sz() + "px",
                cursor: "inherit"
            });
            c.css(this.ZA, {
                left: -this.VS + "px",
                top: -this.CX + "px",
                right: this.XC ? 0 : "initial",
                bottom: this.XC ? 0 : "initial",
                cursor: "inherit"
            })
        };
        return e
    });
    define("hF", ["do", "jquery.mod", "fg", "lC", "fe"], function (a, b, c, e, g) {
        function d() {
            this.ia = this.X = this.fa = this.da = m;
            this.oo = this.mo = this.qo = this.po = 0;
            this.Ic = y;
            this.US = 0;
            this.BX = 4;
            this.iQ = 6;
            this.jW = 0;
            this.Ub = "#000000";
            this.Bb = 1;
            this.hb = document.createElement("div");
            this.hb.setAttribute("tdvlayer", "shadow");
            this.K = b(this.hb);
            g.css(this.hb, {
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: "0"
            });
            this.Z = y
        }
        d.prototype.Gb = Q("K");
        d.prototype.fF = Q("hb");
        d.prototype.PZ = function (a) {
            this.po != a && (this.po = a, this.Z =
                    n)
        };
        d.prototype.QZ = function (a) {
            this.qo != a && (this.qo = a, this.Z = n)
        };
        d.prototype.KZ = function (a) {
            this.mo != a && (this.mo = a, this.Z = n)
        };
        d.prototype.LZ = function (a) {
            this.oo != a && (this.oo = a, this.Z = n)
        };
        d.prototype.Jj = function (a) {
            this.Bb != a && (this.Bb = a, this.Z = n)
        };
        d.prototype.Hh = Q("Bb");
        d.prototype.xe = function (a) {
            this.Ic != a && (this.Ic = a, this.Z = n)
        };
        d.prototype.qya = function (a) {
            this.US != a && (this.US = a, this.Z = n)
        };
        d.prototype.nza = function (a) {
            this.BX != a && (this.BX = a, this.Z = n)
        };
        d.prototype.Yxa = function (a) {
            this.iQ != a && (this.iQ =
                    a, this.Z = n)
        };
        d.prototype.eza = function (a) {
            this.jW != a && (this.jW = a, this.Z = n)
        };
        d.prototype.Tz = function (a) {
            this.Ub != a && (this.Ub = a, this.Z = n)
        };
        d.prototype.Se = function () {
            this.Z && (this.L(), this.Z = y)
        };
        d.prototype.L = function () {
            var a = this.US + "px " + this.BX + "px " + this.iQ + "px " + this.jW + "px " + this.Ub;
            this.hb.style.display = this.Ic ? "block" : "none";
            this.hb.style.boxShadow = a;
            this.hb.style["-webkit-box-shadow"] = a;
            this.hb.style["-moz-box-shadow"] = a;
            this.hb.style.borderTopLeftRadius = this.po + "px";
            this.hb.style.borderTopRightRadius =
                this.qo + "px";
            this.hb.style.borderBottomLeftRadius = this.mo + "px";
            this.hb.style.borderBottomRightRadius = this.oo + "px";
            this.hb.style.filter = "alpha(opacity=" + Math.round(100 * this.Bb) + ")";
            this.hb.style["-ms-filter"] = "alpha(opacity=" + Math.round(100 * this.Bb) + ")";
            this.hb.style.opacity = this.Bb;
            this.hb.style.zIndex = e.V0
        };
        return d
    });
    define("kc", "require,jquery.mod,do,fg,jd,R,ll,eY,dH,hF,lC,bZ,fe,r".split(","), function (a) {
        var b = a("jquery.mod");
        a("do");
        var c = a("fg"),
        e = a("jd"),
        g = a("R"),
        d = a("ll"),
        f = a("eY"),
        h = a("dH"),
        j = a("hF"),
        p = a("lC"),
        k = a("bZ"),
        l = a("fe");
        a("r");
        var q = c.extend(e, function () {
            e.call(this);
            this.qr = q.qr++;
            this.PQ = this.Ad = this.zU = this.WC = this.cW = this.K = this.hb = r;
            this.saa = this.P5 = y;
            this.Q = this.ra = r;
            this.ia = this.X = this.Gu = this.Fu = 0;
            this.vr = this.Ic = y;
            this.H5 = n;
            this.fC = this.gC = this.ci = this.di = 0;
            this.Bb = 1;
            this.tf = g.dd;
            this.set("inView",
                y);
            this.set("toolTip", m);
            this.jv(n);
            this.VV(n)
        });
        q.prototype.Tc = P("px");
        q.prototype.toString = function () {
            return "[" + this.K.attr("tdvclass") + "::" + this.qr + "]"
        };
        q.prototype.log = function (a) {
            c.log(a + " " + this.toString() + " " + (new Date).getTime().toString())
        };
        q.prototype.Ta = Q("ra");
        q.prototype.cn = function (a) {
            (this.ra = a) && this.eT();
            this.$y();
            this.trigger(d.qfa)
        };
        q.prototype.Gb = function () {
            this.K = b(this.Lm());
            this.Gb = Q("K");
            return this.K
        };
        q.prototype.Lm = function () {
            this.hb = document.createElement("div");
            this.hb.setAttribute("id",
                this.qr);
            this.px && this.hb.setAttribute("tdvclass", this.px);
            l.css(this.hb, {
                margin: 0,
                padding: 0,
                position: "absolute",
                overflow: "visible",
                display: "block"
            });
            this.Lm = Q("hb");
            return this.hb
        };
        q.prototype.Wh = function () {
            this.cW = new j;
            this.Wh = Q("cW");
            return this.cW
        };
        q.prototype.Jb = function () {
            this.Ad = new f;
            this.Jb = Q("Ad");
            return this.Ad
        };
        q.prototype.Qx = function () {
            this.WC = document.createElement("div");
            this.WC.setAttribute("tdvlayer", "overShadow");
            l.css(this.WC, {
                position: "absolute",
                left: 0,
                top: 0,
                cursor: "inherit"
            });
            this.Qx = Q("WC");
            return this.WC
        };
        q.prototype.vS = function () {
            this.zU = b(this.Qx());
            this.vS = Q("zU");
            return this.zU
        };
        q.prototype.Ra = function () {
            this.PQ = new h;
            this.Ra = Q("PQ");
            return this.PQ
        };
        q.prototype.getParent = Q("Q");
        q.prototype.Aa = Q("X");
        q.prototype.eb = Q("ia");
        q.prototype.awa = function () {
            return this.X !== m && this.ia !== m
        };
        q.prototype.Id = function () {
            return this.X - this.Ra().wz() - this.Ra().yz()
        };
        q.prototype.Hd = function () {
            return this.ia - this.Ra().zz() - this.Ra().sz()
        };
        q.prototype.xi = function () {
            return this.Ra().wz()
        };
        q.prototype.Cn = function () {
            return this.Ra().zz()
        };
        q.prototype.Bn = function () {
            return this.Ra().yz()
        };
        q.prototype.uz = function () {
            return this.Ra().sz()
        };
        q.prototype.xe = function (a) {
            if (this.Ic != a) {
                this.Ic = a;
                this.Dc();
                if (this.Q) {
                    this.Q.Xa();
                    this.Q.Kc()
                }
                this.$y()
            }
        };
        q.prototype.$y = function () {
            var a = y;
            this.ra && this.Ic && this.Hh() > 0 && (this == this.ra ? a = n : this.Q && (a = this.Q.vr));
            this.vr != a && this.WP(a)
        };
        q.prototype.WP = function (a) {
            this.vr = a;
            this.set("inView", a);
            this.vr ? this.trigger(new k(d.od)) : this.trigger(new k(d.zd))
        };
        q.prototype.Uqa = function (a) {
            if (this.H5 != a) {
                this.H5 = a;
                this.Q && this.Q.Kc()
            }
        };
        q.prototype.Oqa = function (a) {
            if (this.Kx != a) {
                this.Kx = a;
                this.Xa()
            }
        };
        q.prototype.Nqa = function (a) {
            if (this.Jx != a) {
                this.Jx = a;
                this.Xa()
            }
        };
        q.prototype.Mqa = function (a) {
            if (this.Ix != a) {
                this.Ix = a;
                this.Xa()
            }
        };
        q.prototype.Lqa = function (a) {
            if (this.Hx != a) {
                this.Hx = a;
                this.Xa()
            }
        };
        q.prototype.Pqa = function (a) {
            if (this.Yi != a) {
                this.Yi = a;
                if (this.Yi != m)
                    this.mj = m;
                this.Xa()
            }
        };
        q.prototype.Kqa = function (a) {
            if (this.eu != a) {
                this.eu = a;
                if (this.eu != m)
                    this.lj = m;
                this.Xa()
            }
        };
        q.prototype.era = function (a) {
            if (this.mj != a) {
                this.mj = a;
                if (this.mj != m)
                    this.Yi = m;
                this.Xa()
            }
        };
        q.prototype.ara = function (a) {
            if (this.lj != a) {
                this.lj = a;
                if (this.lj != m)
                    this.eu = m;
                this.Xa()
            }
        };
        q.prototype.Wqa = function (a) {
            if (this.So != a) {
                if (a != m)
                    this.iK = m;
                this.So = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.rra = function (a) {
            if (this.Ap != a) {
                if (a != m)
                    this.kK = m;
                this.Ap = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.gra = function (a) {
            if (this.vD != a) {
                if (a != m)
                    this.jK = m;
                this.vD = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.Cqa =
        function (a) {
            if (this.OA != a) {
                if (a != m)
                    this.hK = m;
                this.OA = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.bra = function (a) {
            if (this.iK != a) {
                if (a != m)
                    this.So = m;
                this.iK = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.dra = function (a) {
            if (this.kK != a) {
                if (a != m)
                    this.Ap = m;
                this.kK = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.cra = function (a) {
            if (this.jK != a) {
                if (a != m)
                    this.vD = m;
                this.jK = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.$qa = function (a) {
            if (this.hK != a) {
                if (a != m)
                    this.OA = m;
                this.hK = a;
                this.Q && this.Q.Kc();
                this.Xa()
            }
        };
        q.prototype.Fqa =
        function (a) {
            if (this.Lq != a) {
                this.Lq = a;
                this.Q && this.Q.Kc()
            }
        };
        q.prototype.Gqa = function (a) {
            if (this.Mq != a) {
                this.Mq = a;
                this.Q && this.Q.Kc()
            }
        };
        q.prototype.Hn = function () {
            return isNaN(this.Yi) ? this.di : this.Yi
        };
        q.prototype.Gn = function () {
            return isNaN(this.eu) ? this.ci : this.eu
        };
        q.prototype.Nla = function () {
            return isNaN(this.yka) ? this.q6 : this.yka
        };
        q.prototype.En = function () {
            return isNaN(this.Kx) ? this.gC : this.Kx
        };
        q.prototype.Pp = function () {
            return isNaN(this.Jx) ? this.fC : this.Jx
        };
        q.prototype.GM = function () {
            return isNaN(this.Ix) ?
            1E4 : this.Ix
        };
        q.prototype.FM = function () {
            return isNaN(this.Hx) ? 1E4 : this.Hx
        };
        q.prototype.e$ = function (a) {
            if (this.yS() != a) {
                this.Ra().Tya(a);
                this.Xa()
            }
        };
        q.prototype.yS = function () {
            return this.Ra().VJ
        };
        q.prototype.g$ = function (a) {
            if (this.AS() != a) {
                this.Ra().Vya(a);
                this.Xa()
            }
        };
        q.prototype.AS = function () {
            return this.Ra().XJ
        };
        q.prototype.f$ = function (a) {
            if (this.zS() != a) {
                this.Ra().Uya(a);
                this.Xa()
            }
        };
        q.prototype.zS = function () {
            return this.Ra().WJ
        };
        q.prototype.d$ = function (a) {
            if (this.xS() != a) {
                this.Ra().Sya(a);
                this.Xa()
            }
        };
        q.prototype.xS = function () {
            return this.Ra().UJ
        };
        q.prototype.TF = function (a) {
            if (this.Fu != a) {
                this.Fu = a;
                this.Ih()
            }
        };
        q.prototype.UF = function (a) {
            if (this.Gu != a) {
                this.Gu = a;
                this.Ih()
            }
        };
        q.prototype.Jj = function (a) {
            if (this.Bb != a) {
                this.Bb = a;
                l.css(this.Qx(), {
                    filter: "alpha(opacity=" + Math.round(this.Bb * 100) + ") ",
                    opacity: this.Bb
                });
                this.$y();
                this.Ih()
            }
        };
        q.prototype.Hh = Q("Bb");
        q.prototype.zqa = function (a) {
            if (this.Jb().po != a) {
                this.Wh().PZ(a);
                this.Jb().PZ(a)
            }
        };
        q.prototype.dla = function () {
            return this.Jb().po
        };
        q.prototype.Aqa =
        function (a) {
            if (this.Jb().qo != a) {
                this.Wh().QZ(a);
                this.Jb().QZ(a)
            }
        };
        q.prototype.ela = function () {
            return this.Jb().qo
        };
        q.prototype.rqa = function (a) {
            if (this.Jb().mo != a) {
                this.Wh().KZ(a);
                this.Jb().KZ(a)
            }
        };
        q.prototype.bla = function () {
            return this.Jb().mo
        };
        q.prototype.sqa = function (a) {
            if (this.Jb().oo != a) {
                this.Wh().LZ(a);
                this.Jb().LZ(a)
            }
        };
        q.prototype.cla = function () {
            return this.Jb().oo
        };
        q.prototype.vqa = function (a) {
            if (this.Jb().kl != a) {
                this.Jb().NZ(a);
                this.Ra().NZ(a);
                this.Xa()
            }
        };
        q.prototype.I4 = function () {
            return this.Jb().kl
        };
        q.prototype.Bqa = function (a) {
            if (this.Jb().ml != a) {
                this.Jb().RZ(a);
                this.Ra().RZ(a);
                this.Xa()
            }
        };
        q.prototype.K4 = function () {
            return this.Jb().ml
        };
        q.prototype.xqa = function (a) {
            if (this.Jb().ll != a) {
                this.Jb().OZ(a);
                this.Ra().OZ(a);
                this.Xa()
            }
        };
        q.prototype.J4 = function () {
            return this.Jb().ll
        };
        q.prototype.tqa = function (a) {
            if (this.Jb().jl != a) {
                this.Jb().MZ(a);
                this.Ra().MZ(a);
                this.Xa()
            }
        };
        q.prototype.H4 = function () {
            return this.Jb().jl
        };
        q.prototype.uqa = function (a) {
            this.Jb().$xa(a)
        };
        q.prototype.yqa = function (a) {
            this.Jb().bya(a)
        };
        q.prototype.wqa = function (a) {
            this.Jb().aya(a)
        };
        q.prototype.qqa = function (a) {
            this.Jb().Zxa(a)
        };
        q.prototype.ZK = function (a) {
            this.Wh().xe(a)
        };
        q.prototype.mra = function (a) {
            this.Wh().qya(a)
        };
        q.prototype.pra = function (a) {
            this.Wh().nza(a)
        };
        q.prototype.kra = function (a) {
            this.Wh().Yxa(a)
        };
        q.prototype.ora = function (a) {
            this.Wh().eza(a)
        };
        q.prototype.nra = function (a) {
            this.Wh().Jj(a)
        };
        q.prototype.lra = function (a) {
            this.Wh().Tz(a)
        };
        q.prototype.nqa = function (a) {
            this.$ka() != a && this.Jb().Jj(a)
        };
        q.prototype.$ka = function () {
            return this.Jb().Hh()
        };
        q.prototype.jqa = function (a) {
            this.Zka() != a && this.Jb().Tz(a)
        };
        q.prototype.Zka = function () {
            return this.Jb().Ub
        };
        q.prototype.lqa = function (a) {
            this.Jb().fya(a)
        };
        q.prototype.kqa = function (a) {
            this.Jb().eya(a)
        };
        q.prototype.mqa = function (a) {
            this.Jb().uya(a)
        };
        q.prototype.ks = function (a) {
            if (this.tf != a) {
                this.tf = a;
                this.Ih()
            }
        };
        q.prototype.jv = function (a) {
            if (this.ul != a) {
                this.ul = a;
                l.css(this.Qx(), {
                    "z-index": this.ul ? p.J0 : p.I0
                });
                this.Ra().Eea(this.ul);
                this.Ih()
            }
        };
        q.prototype.VV = function (a) {
            if (this.A8 != a) {
                this.A8 = a;
                l.css(this.Lm(), {
                    "z-index": this.A8 ? p.l1 : p.k1
                });
                this.Ih()
            }
        };
        q.prototype.el = function () {
            this.$y();
            this.mF()
        };
        q.prototype.qj = function () {
            this.$y()
        };
        q.prototype.uV = D();
        q.prototype.eT = function () {
            this.mF();
            this.Dc();
            this.Xa();
            this.Kc();
            this.Ih()
        };
        q.prototype.Xo = function () {
            this.fC = this.gC = this.ci = this.di = 0;
            this.q6 = m
        };
        q.prototype.mF = function () {
            var a = this.Ta();
            a && a.bx.mF(this)
        };
        q.prototype.Dc = function () {
            var a = this.Ta();
            a && a.bx.Dc(this)
        };
        q.prototype.Xa = function () {
            var a = this.Ta();
            a && a.bx.Xa(this)
        };
        q.prototype.Kc = function () {
            var a =
                this.Ta();
            a && a.bx.Kc(this)
        };
        q.prototype.Ih = function () {
            var a = this.Ta();
            a && a.bx.Ih(this)
        };
        q.prototype.JS = function () {
            var a = isNaN(this.iK) && isNaN(this.So),
            b = isNaN(this.jK) && isNaN(this.vD);
            return isNaN(this.Yi) && isNaN(this.mj) && (a || b) ? n : y
        };
        q.prototype.v5 = function () {
            var a = isNaN(this.kK) && isNaN(this.Ap),
            b = isNaN(this.hK) && isNaN(this.OA);
            return isNaN(this.eu) && isNaN(this.lj) && (a || b) ? n : y
        };
        q.prototype.rta = function () {
            this.Xo();
            var a = this.Nla();
            if (a) {
                var b = this.JS(),
                d = this.v5();
                if (b && !d) {
                    b = this.Hd();
                    if (b != 0) {
                        this.di =
                            b * a + this.xi() + this.Bn();
                        this.ci = b + this.Cn() + this.uz()
                    }
                } else if (!b && d) {
                    b = this.Id();
                    if (b != 0) {
                        this.ci = b / a + this.xi() + this.Bn();
                        this.di = b + this.xi() + this.Bn()
                    }
                }
            }
            if (!isNaN(this.Kx) && this.di < this.Kx)
                this.di = this.Kx;
            if (!isNaN(this.Ix) && this.di > this.Ix)
                this.di = this.Ix;
            if (!isNaN(this.Jx) && this.ci < this.Jx)
                this.ci = this.Jx;
            if (!isNaN(this.Hx) && this.ci > this.Hx)
                this.ci = this.Hx
        };
        q.prototype.Ga = function () {
            if (!this.saa) {
                this.saa = n;
                var a = this.Lm(),
                b = this.Qx();
                a.appendChild(this.Wh().fF());
                a.appendChild(b);
                b.appendChild(this.Jb().fF());
                b.appendChild(this.Ra().fF())
            }
        };
        q.prototype.Sza = function () {
            this.rta();
            var a = this.Hn(),
            b = this.Gn(),
            d = this.En(),
            j = this.Pp();
            if (a != this.Ena || b != this.Dna || d != this.Ana || j != this.zna || this.mj != this.Cna || this.lj != this.Bna) {
                this.Ena = a;
                this.Dna = b;
                this.Ana = d;
                this.zna = j;
                this.Cna = this.mj;
                this.Bna = this.lj;
                return n
            }
            return y
        };
        q.prototype.ja = function () {
            this.Ih()
        };
        q.prototype.Gi = D();
        q.prototype.vea = function (a, b, j, f) {
            if (this.da != a || this.fa != b || this.X != j || this.ia != f) {
                this.da = a;
                this.fa = b;
                this.X = j;
                this.ia = f;
                this.Jb().setSize(this.X,
                    this.ia);
                this.Kc();
                this.Ih();
                this.trigger(new k(d.yb))
            }
        };
        q.prototype.Se = function () {
            var a = this.Lm(),
            b = this.Qx();
            if (this.Ic) {
                b.style.width = this.X + "px";
                b.style.height = this.ia + "px";
                a.style.left = this.da + this.Fu + "px";
                a.style.top = this.fa + this.Gu + "px";
                a.style.width = this.X + "px";
                a.style.height = this.ia + "px";
                a.style.visibility = "inherit";
                a.style.overflow = "visible";
                a.style.cursor = this.ra && this.ra.nR.Tba(this.tf);
                if (b.clientWidth === 0 && this.X !== 0) {
                    a.style.width = 0;
                    a.style.width = this.X + "px"
                }
            } else {
                a.style.visibility =
                    "hidden";
                a.style.width = 0;
                a.style.height = 0;
                a.style.overflow = "hidden";
                b.style.width = 0;
                b.style.height = 0
            }
            this.Wh().Se();
            this.Jb().Se();
            this.Ra().Se();
            if (!this.P5 && this.ra) {
                this.P5 = n;
                this.ra.B$ ? this.fT() : this.ra.bind(d.lh, this.fT, this, n)
            }
        };
        q.prototype.fT = function () {
            this.trigger(d.INIT)
        };
        q.prototype.Qva = function (a) {
            var a = a.Gb().offset(),
            b = this.Gb().offset(),
            d = {};
            d.left = b.left - a.left;
            d.top = b.top - a.top;
            if (this.ra) {
                d.left = d.left / this.ra.py;
                d.top = d.top / this.ra.py
            }
            return d
        };
        q.qr = 0;
        return q
    });
    define("J", "require,do,fg,ll,bZ,fm,kc".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("fm"),
        f = a("kc"),
        h = c.extend(f, function () {
            this.V = {};
            this.np = this.v4 = m;
            this.Zr = {};
            this.r4 = n;
            this.C$ = {};
            f.call(this);
            this.Wja();
            this.za();
            this.Tc("UICustomizable");
            this.Dc()
        });
        h.ob = {
            visible: n,
            includeInLayout: n,
            state: m,
            left: m,
            right: m,
            top: m,
            bottom: m,
            centerX: m,
            centerY: m,
            width: m,
            height: m,
            minWidth: m,
            minHeight: m,
            maxWidth: m,
            maxHeight: m,
            actualWidth: m,
            actualHeight: m,
            paddingLeft: 0,
            paddingTop: 0,
            paddingRight: 0,
            paddingBottom: 0,
            opacity: 1,
            borderRadius: 0,
            borderTopRadius: m,
            borderBottomRadius: m,
            borderLeftRadius: m,
            borderRightRadius: m,
            borderTopLeftRadius: m,
            borderTopRightRadius: m,
            borderBottomLeftRadius: m,
            borderBottomRightRadius: m,
            borderSize: 0,
            borderLeftSize: m,
            borderTopSize: m,
            borderRightSize: m,
            borderBottomSize: m,
            borderColor: m,
            borderLeftColor: m,
            borderTopColor: m,
            borderRightColor: m,
            borderBottomColor: m,
            shadow: y,
            shadowHorizontalLength: 0,
            shadowVerticalLength: 3,
            shadowBlurRadius: 6,
            shadowSpread: 0,
            shadowColor: "#000000",
            shadowOpacity: m,
            backgroundOpacity: 1,
            backgroundColor: m,
            backgroundColorRatios: m,
            backgroundColorDirection: m,
            backgroundImageUrl: m,
            hideEffect: m,
            showEffect: m
        };
        h.prototype.Wja = function () {
            this.C$[d.$a] = d.Ca
        };
        h.prototype.za = function () {
            this.bk(h.ob)
        };
        h.prototype.bk = function (a) {
            for (var b in a) {
                var d = a[b],
                f = d && d.length;
                !f || typeof d == "string" ? this.f(b, d) : f == 1 ? this.f(b, d[0]) : f == 2 ? this.h(b, d[0], d[1]) : f == 3 && this.h(b, d[0], d[1], d[2])
            }
        };
        h.prototype.f = function (a, b) {
            this.V[a] = {
                i: n,
                d: b
            }
        };
        h.prototype.Tla = function () {
            var a = [],
            b;
            for (b in this.V)
                a.push(b);
            return a
        };
        h.prototype.h = function (a, b, d, f) {
            this.Zr[b] || (this.Zr[b] = {});
            this.f(a, f);
            this.Zr[b][d] = a
        };
        h.prototype.Ny = function (a, b) {
            if (b)
                this.v4 = a;
            else if (this.v4 != m)
                return;
            if (this.np != a) {
                var d = this.Zr[this.np];
                if (d)
                    for (var f in d)
                        (this.V[f] || (this.V[f] = {})).i = n;
                this.np = a;
                if (d = this.Zr[this.np])
                    for (f in d)
                        (this.V[f] || (this.V[f] = {})).i = n;
                this.Dc()
            }
        };
        h.prototype.M = function (a) {
            if (b(a).isString())
                this.set(a, m);
            else {
                var d = a;
                for (a in d)
                    this.set(a, d[a])
            }
        };
        h.prototype.set = function (a, d) {
            var h = this.V[a];
            if (h) {
                d ==
                m && (d = h.d);
                if (!b.isEqual(this.get(a), d)) {
                    a == "state" && this.Ny(d, n);
                    f.prototype.set.call(this, a, d);
                    h.i = n;
                    this.Dc()
                }
            } else
                f.prototype.set.call(this, a, d)
        };
        h.prototype.get = function (a, b) {
            switch (a) {
            case "actualWidth":
                return this.Aa();
            case "actualHeight":
                return this.eb();
            default:
                var d = f.prototype.get.call(this, a);
                if (d === m) {
                    var h = this.V[a];
                    h && (d = h.d);
                    d === m && (d = b)
                }
                return d
            }
        };
        h.prototype.n2 = function () {
            for (var a = ["paddingLeft", "paddingTop", "paddingRight", "paddingBottom", "borderRadius", "borderTopRadius", "borderBottomRadius",
                    "borderLeftRadius", "borderRightRadius", "borderTopLeftRadius", "borderTopRightRadius", "borderBottomLeftRadius", "borderBottomRightRadius", "borderSize", "borderLeftSize", "borderTopSize", "borderRightSize", "borderBottomSize"], b = 0; b < a.length; b++)
                if (this.n(a[b]))
                    return n;
            return y
        };
        h.prototype.n = function (a) {
            if ((this.V[a] || {}).i)
                return n;
            if (this.np !== m) {
                a = this.Zr[this.np][a];
                return !!(this.V[a] || {}).i
            }
        };
        h.prototype.kv = function (a) {
            (this.V[a] || (this.V[a] = {})).i = n;
            this.Dc()
        };
        h.prototype.q = function (a) {
            (this.V[a] ||
                (this.V[a] = {})).i = y;
            if (this.np != m)
                (a = this.Zr[this.np][a]) && ((this.V[a] || (this.V[a] = {})).i = y)
        };
        h.prototype.k = function () {
            for (var a, b = 0; b < arguments.length; b++) {
                for (var d = arguments[b], f = this.np; f; ) {
                    if (a = this.Zr[f][d]) {
                        a = this.get(a);
                        if (a != m && a != r)
                            return a
                    }
                    f = this.C$[f]
                }
                a = this.get(d);
                if (a != m && a != r)
                    return a
            }
        };
        h.prototype.dW = function (a) {
            a.source.unbind(e.Ba, this.dW, this);
            this.trigger(new g(e.Sw))
        };
        h.prototype.RS = function (a) {
            a.source.unbind(e.Ba, this.RS, this);
            this.trigger(new g(e.Kw))
        };
        h.prototype.ja = function () {
            if (this.r4)
                this.r4 =
                    y;
            else if (this.n("visible")) {
                var a = this.k("visible"),
                b = this.get(a ? "hideEffect" : "showEffect");
                if (b && b.Gz(this)) {
                    b.unbind(e.Ba, a ? this.RS : this.dW, this);
                    b.end()
                }
                if (b = this.get(a ? "showEffect" : "hideEffect")) {
                    if (!b.Gz(this)) {
                        this.q("visible");
                        b.bind(e.Ba, a ? this.dW : this.RS, this);
                        b.play(this)
                    }
                } else
                    this.trigger(new g(a ? e.Sw : e.Kw))
            }
            if (this.n("visible")) {
                this.xe(this.k("visible"));
                this.q("visible")
            }
            if (this.n("includeInLayout")) {
                this.Uqa(this.k("includeInLayout"));
                this.q("includeInLayout")
            }
            if (this.n("left")) {
                b =
                    this.k("left");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.bra(a);
                this.Wqa(b);
                this.q("left")
            }
            if (this.n("top")) {
                b = this.k("top");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.dra(a);
                this.rra(b);
                this.q("top")
            }
            if (this.n("right")) {
                b = this.k("right");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.cra(a);
                this.gra(b);
                this.q("right")
            }
            if (this.n("bottom")) {
                b = this.k("bottom");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.$qa(a);
                this.Cqa(b);
                this.q("bottom")
            }
            if (this.n("centerX")) {
                this.Fqa(this.k("centerX"));
                this.q("centerX")
            }
            if (this.n("centerY")) {
                this.Gqa(this.k("centerY"));
                this.q("centerY")
            }
            if (this.n("width")) {
                b =
                    this.k("width");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.era(a);
                this.Pqa(b);
                this.q("width")
            }
            if (this.n("height")) {
                b = this.k("height");
                a = h.Ok(b);
                b = a === m ? b : m;
                this.ara(a);
                this.Kqa(b);
                this.q("height")
            }
            if (this.n("minWidth")) {
                b = this.k("minWidth");
                this.Oqa(b);
                this.q("minWidth")
            }
            if (this.n("minHeight")) {
                b = this.k("minHeight");
                this.Nqa(b);
                this.q("minHeight")
            }
            if (this.n("maxWidth")) {
                b = this.k("maxWidth");
                this.Mqa(b);
                this.q("maxWidth")
            }
            if (this.n("maxHeight")) {
                b = this.k("maxHeight");
                this.Lqa(b);
                this.q("maxHeight")
            }
            if (this.n("paddingLeft")) {
                this.e$(this.k("paddingLeft"));
                this.q("paddingLeft")
            }
            if (this.n("paddingTop")) {
                this.g$(this.k("paddingTop"));
                this.q("paddingTop")
            }
            if (this.n("paddingRight")) {
                this.f$(this.k("paddingRight"));
                this.q("paddingRight")
            }
            if (this.n("paddingBottom")) {
                this.d$(this.k("paddingBottom"));
                this.q("paddingBottom")
            }
            a = y;
            if (this.n("borderRadius")) {
                this.q("borderRadius");
                a = n
            }
            b = y;
            if (this.n("borderLeftRadius")) {
                this.q("borderLeftRadius");
                b = n
            }
            var d = y;
            if (this.n("borderTopRadius")) {
                this.q("borderTopRadius");
                d = n
            }
            var c = y;
            if (this.n("borderRightRadius")) {
                this.q("borderRightRadius");
                c = n
            }
            var q = y;
            if (this.n("borderBottomRadius")) {
                this.q("borderBottomRadius");
                q = n
            }
            if (this.n("borderTopLeftRadius") || d || b || a) {
                this.zqa(this.k("borderTopLeftRadius", "borderLeftRadius", "borderTopRadius", "borderRadius"));
                this.q("borderTopLeftRadius")
            }
            if (this.n("borderTopRightRadius") || d || c || a) {
                this.Aqa(this.k("borderTopRightRadius", "borderRightRadius", "borderTopRadius", "borderRadius"));
                this.q("borderTopRightRadius")
            }
            if (this.n("borderBottomLeftRadius") || q || b || a) {
                this.rqa(this.k("borderBottomLeftRadius", "borderLeftRadius",
                        "borderBottomRadius", "borderRadius"));
                this.q("borderBottomLeftRadius")
            }
            if (this.n("borderBottomRightRadius") || q || c || a) {
                this.sqa(this.k("borderBottomRightRadius", "borderRightRadius", "borderBottomRadius", "borderRadius"));
                this.q("borderBottomRightRadius")
            }
            a = y;
            if (this.n("borderSize")) {
                this.q("borderSize");
                a = n
            }
            if (this.n("borderLeftSize") || a) {
                this.vqa(this.k("borderLeftSize", "borderSize"));
                this.q("borderLeftSize")
            }
            if (this.n("borderTopSize") || a) {
                this.Bqa(this.k("borderTopSize", "borderSize"));
                this.q("borderTopSize")
            }
            if (this.n("borderRightSize") ||
                a) {
                this.xqa(this.k("borderRightSize", "borderSize"));
                this.q("borderRightSize")
            }
            if (this.n("borderBottomSize") || a) {
                this.tqa(this.k("borderBottomSize", "borderSize"));
                this.q("borderBottomSize")
            }
            a = y;
            if (this.n("borderColor")) {
                this.q("borderColor");
                a = n
            }
            if (this.n("borderLeftColor") || a) {
                this.uqa(this.k("borderLeftColor", "borderColor"));
                this.q("borderLeftColor")
            }
            if (this.n("borderTopColor") || a) {
                this.yqa(this.k("borderTopColor", "borderColor"));
                this.q("borderTopColor")
            }
            if (this.n("borderRightColor") || a) {
                this.wqa(this.k("borderRightColor",
                        "borderColor"));
                this.q("borderRightColor")
            }
            if (this.n("borderBottomColor") || a) {
                this.qqa(this.k("borderBottomColor", "borderColor"));
                this.q("borderBottomColor")
            }
            if (this.n("shadow")) {
                this.ZK(this.k("shadow"));
                this.q("shadow")
            }
            if (this.n("shadowHorizontalLength")) {
                this.mra(this.k("shadowHorizontalLength"));
                this.q("shadowHorizontalLength")
            }
            if (this.n("shadowVerticalLength")) {
                this.pra(this.k("shadowVerticalLength"));
                this.q("shadowVerticalLength")
            }
            if (this.n("shadowBlurRadius")) {
                this.kra(this.k("shadowBlurRadius"));
                this.q("shadowBlurRadius")
            }
            if (this.n("shadowSpread")) {
                this.ora(this.k("shadowSpread"));
                this.q("shadowSpread")
            }
            if (this.n("shadowColor")) {
                this.lra(this.k("shadowColor"));
                this.q("shadowColor")
            }
            a = y;
            if (this.n("opacity")) {
                this.Jj(this.k("opacity"));
                this.q("opacity");
                a = n
            }
            if (this.n("shadowOpacity") || a) {
                this.nra(this.k("shadowOpacity", "opacity"));
                this.q("shadowOpacity")
            }
            if (this.n("backgroundOpacity")) {
                this.nqa(this.k("backgroundOpacity"));
                this.q("backgroundOpacity")
            }
            if (this.n("backgroundColor")) {
                this.jqa(this.k("backgroundColor"));
                this.q("backgroundColor")
            }
            if (this.n("backgroundColorRatios")) {
                this.lqa(this.k("backgroundColorRatios"));
                this.q("backgroundColorRatios")
            }
            if (this.n("backgroundColorDirection")) {
                this.kqa(this.k("backgroundColorDirection"));
                this.q("backgroundColorDirection")
            }
            if (this.n("backgroundImageUrl")) {
                this.mqa(this.k("backgroundImageUrl"));
                this.q("backgroundImageUrl")
            }
            f.prototype.ja.call(this)
        };
        h.Ok = function (a) {
            if (b(a).isString())
                if ((a = a.match(/^\s*([+-]?\d+\.?\d*)\s*%\s*$/)) && a.length >= 2)
                    return parseFloat(a[1])
        };
        return h
    });
    define("hp", ["do", "fg", "bZ"], function (a, b, c) {
        return b.extend(c, function (b, g, d) {
            a.isNumber(g) || (g = 1);
            a.isNumber(d) || (d = 0);
            c.call(this, b);
            this.scale = g;
            this.rotation = d
        })
    });
    define("lp", ["do", "fg", "bZ"], function (a, b, c) {
        return b.extend(c, function (a, b, d, f, h, j, p) {
            c.call(this, a);
            this.x = b;
            this.y = d;
            this.pageX = f;
            this.pageY = h;
            this.Jp = j;
            this.kY = p
        })
    });
    define("d", "require,jquery.mod,do,fg,ll,fm,jg,J,hp,lp,fe,r,jt".split(","), function (a) {
        var b = a("jquery.mod"),
        c = a("do"),
        e = a("fg"),
        g = a("ll"),
        d = a("fm"),
        f = a("jg"),
        h = a("J"),
        j = a("hp"),
        p = a("lp");
        a("fe");
        var k = a("r"),
        a = a("jt"),
        l = e.extend(h, function () {
            h.call(this);
            this.Tc("UIComponent");
            this.aI = [];
            this.nC = [];
            this.hka = 500;
            this.rb = 1;
            this.ik = k.HN();
            this.NB = this.Mo = this.RI = y;
            this.set("propagateClick", n)
        });
        l.ob = {
            autoRolledOver: y,
            autoPressed: y,
            contentOpaque: n,
            cursor: m,
            inheritedCursor: m,
            inheritedInteractionEnabled: n,
            interactionEnabled: n,
            rollOverOpacity: [d.v, "opacity"],
            rollOverShadow: [d.v, "shadow"],
            toolTipFollowMouse: y
        };
        c.defaults(l.ob, h.ob);
        l.prototype.za = function () {
            this.bk(l.ob)
        };
        l.prototype.z2 = function () {
            this.j$(n)
        };
        l.prototype.y2 = function () {
            this.j$(y)
        };
        l.prototype.w2 = function () {
            this.My(n)
        };
        l.prototype.x2 = function () {
            this.My(y)
        };
        l.prototype.ED = function (a) {
            if (this.Mo != a) {
                this.Mo = a;
                this.je()
            }
        };
        l.prototype.My = function (a) {
            if (this.NB != a) {
                this.NB = a;
                this.je()
            }
        };
        l.prototype.j$ = function (a) {
            if (this.RI != a) {
                this.RI = a;
                this.je()
            }
        };
        l.prototype.je = function () {
            this.Mo ? this.Ny(d.G) : this.NB && this.RI ? this.Ny(d.$a) : this.NB ? this.Ny(d.Ca) : this.RI ? this.Ny(d.v) : this.Ny(d.dd)
        };
        l.prototype.trigger = function () {
            h.prototype.trigger.apply(this, arguments)
        };
        l.prototype.laa = function (a) {
            this.trigger(new p(g.Hb, a.x, a.y, a.pageX, a.pageY))
        };
        l.prototype.maa = function (a) {
            this.trigger(new p(g.Mc, a.x, a.y, a.pageX, a.pageY))
        };
        l.prototype.naa = function (a) {
            this.trigger(new p(g.fc, a.x, a.y, a.pageX, a.pageY))
        };
        l.prototype.Dsa = function (a, b) {
            this.trigger(new p(g.sq,
                    a.x, a.y, a.pageX, a.pageY, b.Jp, b.kY))
        };
        l.prototype.gaa = function (a) {
            this.trigger(new p(g.U, a.x, a.y, a.pageX, a.pageY))
        };
        l.prototype.haa = function (a) {
            this.trigger(new p(g.DG, a.x, a.y, a.pageX, a.pageY))
        };
        l.prototype.Fsa = function () {
            this.trigger(new p(g.xc))
        };
        l.prototype.Esa = function () {
            this.trigger(new p(g.Qb))
        };
        l.prototype.Bsa = function () {
            this.trigger(new p(g.Mh))
        };
        l.prototype.Csa = function () {
            this.trigger(new p(g.Kf))
        };
        l.prototype.Asa = function (a, b) {
            this.trigger(new j(g.xG, a, b))
        };
        l.prototype.ysa = function (a, b) {
            this.trigger(new j(g.Ifa,
                    a, b))
        };
        l.prototype.zsa = function (a, b) {
            this.trigger(new j(g.wG, a, b))
        };
        l.prototype.jaa = function (a) {
            this.trigger(new j(g.Jfa, m, a))
        };
        l.prototype.kaa = function (a) {
            this.trigger(new j(g.Jw, a))
        };
        l.prototype.JW = function (a) {
            a.stopImmediatePropagation();
            this.Fx(["touchend"]);
            if (this.rT(a))
                this.eV(a);
            else {
                this.J5();
                this.Z8(a, n)
            }
        };
        l.prototype.Z8 = function (a, b) {
            var d = this.BB(a);
            b && this.usa(d);
            this.laa(d);
            this.Q && this.Q.Z8(a, b && this.get("propagateClick"))
        };
        l.prototype.IW = function (a) {
            a.preventDefault();
            a.stopImmediatePropagation();
            this.rT(a) ? this.cV(a) : this.Y8(a)
        };
        l.prototype.Y8 = function (a) {
            var b = this.BB(a);
            this.tsa(b);
            this.maa(b);
            this.Q && this.Q.Y8(a)
        };
        l.prototype.N4 = function (a, b) {
            var d = a.pageX - b.pageX,
            f = a.pageY - b.pageY;
            return Math.sqrt(d * d + f * f)
        };
        l.prototype.qs = function (a, b) {
            this.mB(["touchend"]);
            b !== y && a.preventDefault();
            a.stopImmediatePropagation();
            this.rT(a) ? this.dV(a) : this.X8(a, this.S5());
            this.HA()
        };
        l.prototype.X8 = function (a, b) {
            this.naa(this.BB(a));
            this.ssa(b);
            this.Q && this.Q.X8(a)
        };
        l.prototype.usa = function (a) {
            this.bind(g.Qb,
                this.baa, this, n);
            this.rv = a
        };
        l.prototype.tsa = function (a) {
            if (this.rv) {
                var a = this.N4(this.rv, a),
                b;
                if (k.Za()) {
                    b = this.Ta();
                    b = Math.min(b.Aa(), b.eb()) * 0.01;
                    b = l.Nga * b
                } else
                    b = l.Tga;
                a > b && this.xL()
            }
        };
        l.prototype.ssa = function (a) {
            if (this.rv) {
                this.gaa(this.rv);
                a && this.haa(this.rv);
                this.xL()
            }
        };
        l.prototype.xL = function () {
            if (this.rv) {
                this.unbind(g.Qb, this.baa, this);
                this.rv = m
            }
        };
        l.prototype.baa = function () {
            this.xL()
        };
        l.prototype.eS = function (a) {
            this.Fx(["gesturechange", "gestureend"]);
            a.preventDefault();
            a.stopImmediatePropagation();
            this.eV(a)
        };
        l.prototype.eV = function (a) {
            var b = this.pS(a);
            this.zy = b;
            this.Asa(b.scale, b.rotation);
            this.Q && this.Q.eV(a)
        };
        l.prototype.y4 = function (a) {
            a.preventDefault();
            a.stopImmediatePropagation();
            this.cV(a)
        };
        l.prototype.cV = function (a) {
            var b = this.pS(a, this.zy),
            d = b.rotation - this.zy.rotation,
            f = b.scale / this.zy.scale;
            this.zy = b;
            this.rb = this.rb * f;
            for (this.ie = this.ie + d; this.ie > 180; )
                this.ie = this.ie - 360;
            for (; this.ie < -180; )
                this.ie = this.ie + 360;
            this.ysa(this.rb, this.ie);
            d != 0 && this.jaa(this.ie);
            f != 1 && this.kaa(this.rb);
            this.xL();
            this.Q && this.Q.cV(a)
        };
        l.prototype.A4 = function (a) {
            this.mB(["gesturechange", "gestureend"]);
            a.preventDefault();
            a.stopImmediatePropagation();
            this.dV(a)
        };
        l.prototype.dV = function (a) {
            var b = this.pS(a),
            d = b.rotation - this.zy.rotation,
            b = b.scale / this.zy.scale;
            this.rb = this.rb * b;
            for (this.ie = this.ie + d; this.ie > 180; )
                this.ie = this.ie - 360;
            for (; this.ie < -180; )
                this.ie = this.ie + 360;
            this.zsa(this.rb, this.ie);
            d != 0 && this.jaa(this.ie);
            b != 1 && this.kaa(this.rb);
            this.Q && this.Q.dV(a)
        };
        l.prototype.YT = function (a) {
            this.Fx(["mouseup"]);
            a.stopImmediatePropagation();
            this.J5();
            this.T8(a, n);
            q && this.rna(a.ctrlKey)
        };
        l.prototype.T8 = function (a, b) {
            var d = this.mu(a);
            b && this.$ia(d);
            this.laa(d);
            this.Q && this.Q.T8(a, b && this.get("propagateClick"))
        };
        l.prototype.ZT = function (a) {
            a.preventDefault();
            a.stopImmediatePropagation();
            this.Ta().pw(this);
            this.U8(a)
        };
        l.prototype.U8 = function (a) {
            var b = this.mu(a);
            this.Zia(b);
            this.maa(b);
            this.Q && this.Q.U8(a)
        };
        l.prototype.rJ = function (a) {
            this.mB(["mouseup"]);
            a.preventDefault();
            a.stopImmediatePropagation();
            this.V8(a,
                this.S5())
        };
        l.prototype.V8 = function (a, b) {
            this.naa(this.mu(a));
            this.Yia(b);
            this.Q && this.Q.V8(a, b)
        };
        l.prototype.$ia = function (a) {
            this.bind(g.Qb, this.n3, this, n);
            this.Ut = a
        };
        l.prototype.Zia = function (a) {
            this.Ut && this.N4(this.Ut, a) > l.Iga && this.EQ()
        };
        l.prototype.Yia = function (a) {
            if (this.Ut) {
                this.gaa(this.Ut);
                a && this.haa(this.Ut);
                this.EQ()
            }
        };
        l.prototype.EQ = function () {
            if (this.Ut) {
                this.unbind(g.Qb, this.n3, this);
                this.Ut = m
            }
        };
        l.prototype.n3 = function () {
            this.EQ()
        };
        l.prototype.w6 = function (a) {
            if (this.ra.v6) {
                a.preventDefault();
                a.stopImmediatePropagation();
                this.W8(a)
            }
        };
        l.prototype.T2 = R(y);
        l.prototype.W8 = function (a) {
            var b = this.mu(a),
            d = this.Gla(a);
            this.Q && !this.T2(d.Jp) && this.Q.W8(a);
            this.Dsa(b, d)
        };
        l.prototype.mu = function (a) {
            return this.hS(a.pageX, a.pageY)
        };
        l.prototype.Gla = function (a) {
            var a = window.event || a.originalEvent || a,
            b = {};
            b.Jp = Math.max(-1, Math.min(1, a.wheelDelta || -a.detail));
            b.kY = a.wheelDelta ? a.wheelDelta * 0.01 : b.Jp;
            return b
        };
        l.prototype.BB = function (a) {
            var b = this.mS(a);
            return this.ppa = a = b === m ? this.hS(a.pageX, a.pageY) :
                b.length == 0 ? this.ppa : this.hS(b[0].pageX, b[0].pageY)
        };
        l.prototype.rT = function (a) {
            if ((a = this.mS(a)) && a.length > 1)
                for (var b = 0, d = 0; d < a.length; d++)
                    if (this.Vma(a[d].target)) {
                        b++;
                        if (b > 1)
                            return n
                    }
            return y
        };
        l.prototype.Vma = function (a) {
            for (; a; ) {
                if (a == this.hb)
                    return n;
                a = a.parentNode
            }
            return y
        };
        l.prototype.mS = function (a) {
            return a.originalEvent.touches || a.originalEvent.targetTouches || a.originalEvent.changedTouches
        };
        l.prototype.hS = function (a, b) {
            var d = this.Gb().offset(),
            f = this.ra ? this.ra.py : 1,
            h = {};
            h.x = (a - d.left) /
            f;
            h.y = (b - d.top) / f;
            h.pageX = a / f;
            h.pageY = b / f;
            h.Jda = a;
            h.Kda = b;
            return h
        };
        l.prototype.pS = function (a, b) {
            if (a.originalEvent.scale !== m || a.originalEvent.rotation !== m)
                return {
                    scale: a.originalEvent.scale,
                    rotation: a.originalEvent.rotation
                };
            if (b) {
                var d = this.U4(a);
                return {
                    scale: b.scale * d / b.touchesDistance,
                    rotation: 0,
                    touchesDistance: d
                }
            }
            return {
                scale: 1,
                rotation: 0,
                touchesDistance: this.U4(a)
            }
        };
        l.prototype.U4 = function (a) {
            var b = this.mS(a);
            if (b && b.length > 1) {
                a = Math.abs(b[0].pageX - b[1].pageX);
                b = Math.abs(b[0].pageY - b[1].pageY);
                return Math.sqrt(a * a + b * b)
            }
            return 0
        };
        l.prototype.Fx = function (a) {
            this.aI = c(this.aI).union(a);
            for (var a = this.T4(a), b = 0; b < a.length; b++) {
                var d = a[b];
                d.target.bind(d.name, d.handler)
            }
        };
        l.prototype.J5 = function () {
            this.nC.push((new Date).getTime());
            this.nC = this.nC.slice(-2)
        };
        l.prototype.S5 = function () {
            var a = (new Date).getTime();
            if (this.nC.length > 1) {
                var b = this.nC.slice(-2)[0];
                if (a - b <= this.hka)
                    return n
            }
            return y
        };
        l.prototype.mB = function (a) {
            this.aI = c(this.aI).difference(a);
            for (var a = this.T4(a), b = 0; b < a.length; b++) {
                var d =
                    a[b];
                d.target.unbind(d.name, d.handler)
            }
        };
        l.prototype.T4 = function (a) {
            this.m4 || (this.m4 = this.lS());
            for (var b = [], d = 0; d < a.length; d++)
                b = b.concat(this.m4[a[d]]);
            return b
        };
        l.prototype.lS = function () {
            var a = this.Gb(),
            d = b(document),
            f = b(window);
            return {
                touchstart: [{
                        target: a,
                        name: "touchstart",
                        handler: this.gf(this.JW)
                    }
                ],
                touchmove: [{
                        target: a,
                        name: "touchmove",
                        handler: this.gf(this.IW)
                    }
                ],
                touchend: [{
                        target: a,
                        name: "touchend",
                        handler: this.gf(this.qs, n)
                    }, {
                        target: d,
                        name: "touchend",
                        handler: this.gf(this.qs, n)
                    }, {
                        target: a,
                        name: "touchcancel",
                        handler: this.gf(this.qs, n)
                    }, {
                        target: d,
                        name: "touchcancel",
                        handler: this.gf(this.qs, n)
                    }
                ],
                gesturestart: [{
                        target: a,
                        name: "gesturestart",
                        handler: this.gf(this.eS)
                    }
                ],
                gesturechange: [{
                        target: a,
                        name: "gesturechange",
                        handler: this.gf(this.y4)
                    }
                ],
                gestureend: [{
                        target: a,
                        name: "gestureend",
                        handler: this.gf(this.A4)
                    }
                ],
                mousedown: [{
                        target: a,
                        name: "mousedown",
                        handler: this.gf(this.YT)
                    }
                ],
                mousemove: [{
                        target: a,
                        name: "mousemove",
                        handler: this.gf(this.ZT)
                    }
                ],
                mouseup: [{
                        target: a,
                        name: "mouseup",
                        handler: this.gf(this.rJ, n)
                    }, {
                        target: f,
                        name: "mouseup",
                        handler: this.gf(this.rJ, n)
                    }
                ],
                mousewheel: [{
                        target: a,
                        name: "mousewheel",
                        handler: this.gf(this.w6)
                    }, {
                        target: a,
                        name: "DOMMouseScroll",
                        handler: this.gf(this.w6)
                    }
                ]
            }
        };
        l.prototype.gf = function (a, b) {
            var d = this;
            return function () {
                b && f.LN();
                l.yE = l.yE + 1;
                var h = a.apply(d, arguments);
                l.yE = l.yE - 1;
                return h
            }
        };
        l.prototype.ja = function () {
            if (this.n("autoRolledOver")) {
                this.unbind(g.xc, this.z2, this);
                this.unbind(g.Qb, this.y2, this);
                if (this.k("autoRolledOver")) {
                    this.bind(g.xc, this.z2, this);
                    this.bind(g.Qb, this.y2, this)
                }
                this.q("autoRolledOver")
            }
            if (this.n("autoPressed")) {
                this.unbind(g.Hb,
                    this.w2);
                this.unbind(g.fc, this.x2);
                if (this.k("autoPressed")) {
                    this.bind(g.Hb, this.w2);
                    this.bind(g.fc, this.x2)
                }
                this.q("autoPressed")
            }
            var a = y;
            if (this.n("contentOpaque")) {
                a = n;
                this.q("contentOpaque")
            }
            if (this.n("inheritedInteractionEnabled")) {
                a = n;
                this.q("inheritedInteractionEnabled")
            }
            if (this.n("interactionEnabled")) {
                a = n;
                this.q("interactionEnabled")
            }
            if (this.n("backgroundOpacity") || this.n("backgroundColor"))
                a = n;
            h.prototype.ja.call(this);
            if (a) {
                var b = this.Jb(),
                b = b.Hh() > 0 && b.Vt.length > 0,
                d = this.k("contentOpaque"),
                f = this.k("inheritedInteractionEnabled"),
                c = this.k("interactionEnabled");
                this.iv(f && c && (d || b))
            }
            if (a || this.n("cursor") || this.n("inheritedCursor")) {
                this.q("cursor");
                this.q("inheritedCursor");
                this.YG ? this.ks(this.k("cursor")) : this.ks(this.k("inheritedCursor"))
            }
        };
        l.prototype.iv = function (a) {
            if (this.YG != a) {
                (this.YG = a) ? this.Fx(l.Z1) : this.mB(l.Z1);
                this.HA()
            }
        };
        l.prototype.HA = function () {
            this.Lm().style["pointer-events"] = this.k5()
        };
        l.prototype.k5 = function () {
            return this.YG ? "auto" : "none"
        };
        l.prototype.rna = function (a) {
            if (a) {
                for (var a =
                        [], b = this; b; ) {
                    a.push(b);
                    b = b.getParent()
                }
                console.log(a.map(function (a) {
                        return a.MA
                    }))
            } else
                console.log(this.MA)
        };
        l.qF = function () {
            return l.yE > 0
        };
        l.Z1 = function () {
            var a = [],
            a = a.concat(["touchstart", "touchmove", "gesturestart"]);
            k.Rd() != k.Lh && (a = a.concat(["mousedown", "mousemove", "mousewheel"]));
            return a
        }
        ();
        l.yE = 0;
        l.FAa = 1E3;
        l.Tga = 10;
        l.Nga = 5;
        l.Iga = 10;
        var q = a.$g("debug");
        return l
    });
    define("jY", [], function () {
        return {
            qa: "left",
            Na: "right",
            Lc: "center",
            nb: "top",
            mb: "bottom",
            vc: "middle"
        }
    });
    define("c", [], function () {
        return {
            gG: "absolute",
            Be: "horizontal",
            pq: "grid",
            of: "vertical"
        }
    });
    define("ca", [], function () {
        return function (a) {
            this.Vc = a;
            this.height = this.width = this.y = this.x = 0
        }
    });
    define("cV", [], function () {
        return function () {
            this.minHeight = this.minWidth = this.height = this.width = 0
        }
    });
    define("bL", ["jY", "ca", "cV"], function (a, b, c) {
        function e() {
            this.Tb = r;
            this.ti = a.nb;
            this.Zh = a.qa;
            this.Av = this.Io = 0
        }
        e.prototype.Dea = function (a) {
            this.Io != a && (this.Io = a, this.ed())
        };
        e.prototype.CN = function (a) {
            this.Av != a && (this.Av = a, this.ed())
        };
        e.prototype.Mea = function (a) {
            this.Tb = a;
            this.ed()
        };
        e.prototype.Uz = function (a) {
            this.Zh != a && (this.Zh = a, this.ed())
        };
        e.prototype.Yz = function (a) {
            this.ti != a && (this.ti = a, this.ed())
        };
        e.prototype.uF = function () {
            return new c
        };
        e.prototype.update = function () {
            var a = this.rja();
            this.Zy(a);
            this.Hqa(a)
        };
        e.prototype.Zy = function (a) {
            this.mE(a);
            this.lE(a)
        };
        e.prototype.tI = function () {
            for (var a = this.s5(), b = [], f = 0; f < a.length; f++) {
                var h = a[f];
                h.get("includeInLayout") && b.push(h)
            }
            return b
        };
        e.prototype.s5 = function () {
            for (var a = this.Tb.Pa(), b = [], f = 0; f < a.length; f++) {
                var h = a[f];
                h.get("visible") && b.push(h)
            }
            return b
        };
        e.prototype.rja = function () {
            for (var a = this.s5(), d = [], f = 0; f < a.length; f++)
                d.push(new b(a[f]));
            return d
        };
        e.prototype.Hqa = function (a) {
            for (var b = 0; b < a.length; b++) {
                var f = a[b];
                f.Vc.vea(f.x, f.y, f.width,
                    f.height)
            }
        };
        e.prototype.ed = function () {
            this.Tb && this.Tb.Xa()
        };
        return e
    });
    define("cO", ["fg", "jY", "bL", "cV"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this)
        });
        a.prototype.uF = function () {
            for (var a = new e, b = this.tI(), f = 0; f < b.length; f++) {
                var h = b[f],
                c = h.So,
                p = h.vD,
                k = 0;
                isNaN(c) || (k += c);
                isNaN(p) || (k += p);
                a.width = Math.max(k + h.Hn(), a.width);
                a.minWidth = Math.max(k + h.En(), a.minWidth);
                c = h.Ap;
                p = h.OA;
                k = 0;
                isNaN(c) || (k += c);
                isNaN(p) || (k += p);
                a.height = Math.max(k + h.Gn(), a.height);
                a.minHeight = Math.max(k + h.Pp(), a.minHeight)
            }
            b = this.Tb.xi() + this.Tb.Bn();
            a.width += b;
            a.minWidth += b;
            b = this.Tb.Cn() +
                this.Tb.uz();
            a.height += b;
            a.minHeight += b;
            return a
        };
        a.prototype.Zy = function (a) {
            this.mE(a);
            this.lE(a)
        };
        a.prototype.Zy = function (a) {
            for (var b = this.Tb.Id(), f = this.Tb.Hd(), h = 0; h < a.length; h++) {
                var c = a[h],
                e = c.Vc,
                k = e.So;
                if (isNaN(k)) {
                    var l = e.iK;
                    isNaN(l) || (k = Math.round(0.01 * l * b))
                }
                l = e.vD;
                if (isNaN(l)) {
                    var q = e.jK;
                    isNaN(q) || (l = Math.round(0.01 * q * b))
                }
                var q = e.Lq,
                o = e.Yi;
                if (isNaN(o)) {
                    var t = e.mj;
                    isNaN(t) ? !isNaN(k) && !isNaN(l) && (o = b - k - l) : o = Math.round(0.01 * t * b)
                }
                t = e.Ap;
                if (isNaN(t)) {
                    var s = e.kK;
                    isNaN(s) || (t = Math.round(0.01 *
                                s * f))
                }
                s = e.OA;
                if (isNaN(s)) {
                    var v = e.hK;
                    isNaN(v) || (s = Math.round(0.01 * v * f))
                }
                var v = e.Mq,
                u = e.eu;
                if (isNaN(u)) {
                    var w = e.lj;
                    isNaN(w) ? !isNaN(t) && !isNaN(s) && (u = f - t - s) : u = Math.round(0.01 * w * f)
                }
                c.width = isNaN(o) ? e.Hn() : Math.max(e.En(), Math.min(e.GM(), o));
                c.height = isNaN(u) ? e.Gn() : Math.max(e.Pp(), Math.min(e.FM(), u));
                c.x = !isNaN(k) && !isNaN(l) ? Math.round(k + 0.5 * (b - l - k - c.width)) : isNaN(k) ? isNaN(l) ? isNaN(q) ? 0 : 0.5 * b + q - 0.5 * c.width : b - l - c.width : k;
                c.y = !isNaN(t) && !isNaN(s) ? Math.round(t + 0.5 * (f - s - t - c.height)) : isNaN(t) ? isNaN(s) ? isNaN(v) ?
                    0 : 0.5 * f + v - 0.5 * c.height : f - s - c.height : t
            }
        };
        return a
    });
    define("hU", ["fg", "jY", "bL", "cV"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this);
            this.PB = this.QB = this.RB = this.vu = this.No = this.Oo = this.TB = this.yr = this.Yi = m
        });
        a.prototype.nya = function (a) {
            this.Yi != a && (this.Yi = a, this.ed())
        };
        a.prototype.zya = function (a) {
            this.Oo != a && (this.Oo = a, this.Oo != m && (this.yr = m), this.ed())
        };
        a.prototype.yya = function (a) {
            this.No != a && (this.No = a, this.No != m && (this.TB = m), this.ed())
        };
        a.prototype.Hya = function (a) {
            this.yr != a && (this.yr = a, this.Oo != m && (this.Oo = m), this.ed())
        };
        a.prototype.Gya =
        function (a) {
            this.TB != a && (this.TB = a, this.No != m && (this.No = m), this.ed())
        };
        a.prototype.Eya = function (a) {
            this.vu != a && (this.vu = a, this.ed())
        };
        a.prototype.Dya = function (a) {
            this.RB != a && (this.RB = a, this.ed())
        };
        a.prototype.Cya = function (a) {
            this.QB != a && (this.QB = a, this.ed())
        };
        a.prototype.Bya = function (a) {
            this.PB != a && (this.PB = a, this.ed())
        };
        a.prototype.uF = function () {
            for (var a = new e, b = this.tI(), f = 0, h = 0; h < b.length; h++)
                b[h].get("includeInLayout") && f++;
            if (!isNaN(this.yr)) {
                isNaN(this.vu) || (a.minWidth = this.vu);
                for (h = 0; h < b.length; h++) {
                    var c =
                        b[h].En();
                    isNaN(c) || (a.minWidth = Math.max(c, a.minWidth))
                }
            }
            if (isNaN(this.Oo))
                for (h = 0; h < b.length; h++)
                    c = b[h].Hn(), isNaN(c) || (a.width = Math.max(c, a.width));
            else
                a.width = this.Oo;
            if (isNaN(this.No))
                for (h = 0; h < b.length; h++)
                    c = b[h].Gn(), isNaN(c) || (a.height = Math.max(c, a.height));
            else
                a.height = this.No;
            isNaN(this.yr) ? isNaN(this.Yi) ? b = Math.ceil(Math.sqrt(f)) : (b = this.Yi - this.Tb.xi() - this.Tb.Bn(), b = Math.max(1, Math.floor((b + this.Io) / (a.width + this.Io)))) : b = Math.max(1, Math.floor(100 / this.yr));
            f = Math.ceil(f / b);
            a.width =
                a.width * b + Math.max(0, b - 1) * this.Io + this.Tb.xi() + this.Tb.Bn();
            a.minWidth = a.minWidth + this.Tb.xi() + this.Tb.Bn();
            a.height = a.height * f + Math.max(0, f - 1) * this.Av + this.Tb.Cn() + this.Tb.uz();
            a.minHeight = 0;
            return a
        };
        a.prototype.Zy = function (a) {
            for (var d, f, h = [], c = [], e = 0; e < a.length; e++)
                f = a[e].Vc, f.get("includeInLayout") ? h.push(a[e]) : c.push(a[e]);
            var k = h.length,
            l = this.Tb.Id(),
            q = this.Io,
            o;
            if (isNaN(this.Oo))
                if (isNaN(this.yr)) {
                    for (e = a = 0; e < h.length; e++)
                        f = h[e].Vc, a = Math.max(f.En(), f.Hn(), a);
                    a = Math.min(l, a)
                } else {
                    if (a = Math.max(1,
                                Math.floor(100 / this.yr)), a = (l - (a - 1) * q) / a, e = y, !isNaN(this.QB) && this.QB < a && (a = this.QB, e = n), !isNaN(this.vu) && this.vu > a && (a = this.vu, e = n), e)
                        a = Math.max(1, Math.floor((l + q) / (a + q))), a = (l - (a - 1) * q) / a
                }
            else
                a = this.Oo;
            a = Math.max(1, a);
            o = Math.max(1, Math.floor(0.001 + (l + q) / (a + q)));
            var e = o * a,
            t = o * (a + q) - q,
            s = 0;
            if (l >= t)
                switch (this.Zh) {
                case b.Na:
                    s = l - t;
                    break;
                case b.Lc:
                    s = Math.round(0.5 * (l - t));
                    break;
                default:
                    s = 0
                }
            for (var l = [], t = [], v = 0; v < o; v++)
                f = Math.round(e / (o - v)), e -= f, t.push(s), s += f + q, l.push(f);
            s = this.Tb.Hd();
            v = this.Av;
            if (isNaN(this.No))
                if (isNaN(this.TB)) {
                    q =
                        1;
                    for (e = 0; e < h.length; e++)
                        f = h[e].Vc, q = Math.max(f.Pp(), f.Gn(), q)
                } else {
                    if (q = Math.max(1, 100 / this.TB), q = (s - (q - 1) * v) / q, e = y, !isNaN(this.PB) && this.PB < q && (q = this.PB, e = n), !isNaN(this.RB) && this.RB > q && (q = this.RB, e = n), e)
                        q = Math.max(1, Math.floor((s + v) / (q + v))), q = (s - (q - 1) * v) / q
                }
            else
                q = this.No;
            e = Math.max(1, Math.ceil(k / o));
            d = e * q;
            var k = e * (q + v) - v,
            u = 0;
            if (s >= k)
                switch (this.ti) {
                case b.mb:
                    u = s - k;
                    break;
                case b.vc:
                    u = Math.round(0.5 * (s - k))
                }
            k = [];
            s = [];
            for (f = 0; f < e; f++) {
                var w = Math.round(d / (e - f));
                d -= w;
                s.push(u);
                u += w + v;
                k.push(w)
            }
            for (e =
                    0; e < h.length; e++)
                d = h[e], v = e % o, f = Math.floor(e / o), d.x = t[v], d.width = l[v], d.y = s[f], d.height = k[f];
            for (e = 0; e < c.length; e++)
                d = c[e], d.x = 0, d.width = Math.round(a), d.y = 0, d.height = Math.round(q)
        };
        return a
    });
    define("eC", ["fg", "jY", "bL", "cV"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this)
        });
        a.prototype.uF = function () {
            for (var a = new e, b = this.tI(), f = 0; f < b.length; f++) {
                var h = b[f];
                a.height = Math.max(h.Gn(), a.height);
                a.minHeight = Math.max(h.Pp(), a.minHeight);
                a.width += h.Hn();
                a.minWidth += h.En()
            }
            b = Math.max(0, b.length - 1) * this.Io + this.Tb.xi() + this.Tb.Bn();
            a.width += b;
            a.minWidth += b;
            b = this.Tb.Cn() + this.Tb.uz();
            a.height += b;
            a.minHeight += b;
            return a
        };
        a.prototype.Zy = function (a) {
            this.mE(a);
            this.lE(a)
        };
        a.prototype.mE =
        function (a) {
            for (var b = 0, f = 0; f < a.length; f++)
                a[f].Vc.get("includeInLayout") && b++;
            for (var f = Math.max(0, b - 1) * this.Io, h = this.Tb.Id() - f, c = this.Tb.Hd(), b = h, e = 0, k = [], f = 0; f < a.length; f++) {
                var l = a[f],
                q = l.Vc,
                o = q.lj;
                l.height = isNaN(o) ? q.Gn() : Math.max(q.Pp(), Math.min(q.FM(), Math.round(0.01 * c * o)));
                o = q.mj;
                isNaN(o) ? (l.width = q.Hn(), b -= l.width) : q.get("includeInLayout") ? (e += o, k.push(l)) : l.width = Math.max(q.En(), Math.min(q.GM(), Math.round(0.01 * h * o)))
            }
            f = Math.max(0, b - 0.01 * h * e);
            b -= f;
            do {
                a = y;
                h = Math.max(0, 0 < e ? b / e : 0);
                c = [];
                for (f =
                        e = 0; f < k.length; f++) {
                    var l = k[f],
                    q = l.Vc,
                    o = Math.round(q.mj * h),
                    t = q.En(),
                    s = q.GM();
                    o < t ? (l.width = t, b -= l.width, a = n) : o > s ? (l.width = s, b -= l.width, a = n) : (e += q.mj, c.push(l))
                }
                k = c
            } while (a);
            for (f = 0; f < k.length; f++)
                l = k[f], q = l.Vc, h = Math.max(0, 0 < e ? b / e : 0), l.width = Math.round(q.mj * h), b -= l.width, e -= q.mj
        };
        a.prototype.lE = function (a) {
            for (var d = this.Io, f = this.Tb.Id(), h = this.Tb.Hd(), c = 0, e = 0, k = 0; k < a.length; k++) {
                var l = a[k];
                l.Vc.get("includeInLayout") && (c += a[k].width, e++)
            }
            c += d * (e - 1);
            if (f >= c)
                switch (this.Zh) {
                case b.Na:
                    f -= c;
                    break;
                case b.Lc:
                    f =
                        Math.round(0.5 * (f - c));
                    break;
                default:
                    f = 0
                }
            else
                f = 0;
            for (k = 0; k < a.length; k++)
                if (l = a[k], l.Vc.get("includeInLayout")) {
                    if (h >= l.height)
                        switch (this.ti) {
                        case b.mb:
                            l.y = h - l.height;
                            break;
                        case b.vc:
                            l.y = Math.round(0.5 * (h - l.height));
                            break;
                        default:
                            l.y = 0
                        }
                    else
                        l.y = 0;
                    l.x = f;
                    f += l.width + d
                } else
                    l.x = 0, l.y = 0
        };
        return a
    });
    define("cv", ["fg", "jY", "bL", "cV"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this)
        });
        a.prototype.uF = function () {
            for (var a = new e, b = this.tI(), f = 0; f < b.length; f++) {
                var h = b[f];
                a.width = Math.max(h.Hn(), a.width);
                a.minWidth = Math.max(h.En(), a.minWidth);
                a.height += h.Gn();
                a.minHeight += h.Pp()
            }
            b = Math.max(0, b.length - 1) * this.Av + this.Tb.Cn() + this.Tb.uz();
            a.height += b;
            a.minHeight += b;
            b = this.Tb.xi() + this.Tb.Bn();
            a.width += b;
            a.minWidth += b;
            return a
        };
        a.prototype.Zy = function (a) {
            this.mE(a);
            this.lE(a)
        };
        a.prototype.mE = function (a) {
            for (var b =
                    0, f = 0; f < a.length; f++)
                a[f].Vc.get("includeInLayout") && b++;
            for (var f = Math.max(0, b - 1) * this.Av, h = this.Tb.Id(), c = this.Tb.Hd() - f, b = c, e = 0, k = [], f = 0; f < a.length; f++) {
                var l = a[f],
                q = l.Vc,
                o = q.mj;
                l.width = isNaN(o) ? q.Hn() : Math.max(q.En(), Math.min(q.GM(), Math.round(0.01 * h * o)));
                o = q.lj;
                isNaN(o) ? (l.height = q.Gn(), b -= l.height) : q.get("includeInLayout") ? (e += o, k.push(l)) : l.height = Math.max(q.Pp(), Math.min(q.FM(), Math.round(0.01 * c * o)))
            }
            f = Math.max(0, b - 0.01 * c * e);
            b -= f;
            do {
                a = y;
                h = Math.max(0, 0 < e ? b / e : 0);
                c = [];
                for (f = e = 0; f < k.length; f++) {
                    var l =
                        k[f],
                    q = l.Vc,
                    o = Math.round(q.lj * h),
                    t = q.Pp(),
                    s = q.FM();
                    o < t ? (l.height = t, b -= l.height, a = n) : o > s ? (l.height = s, b -= l.height, a = n) : (e += q.lj, c.push(l))
                }
                k = c
            } while (a);
            for (f = 0; f < k.length; f++)
                l = k[f], q = l.Vc, h = Math.max(0, 0 < e ? b / e : 0), l.height = Math.round(q.lj * h), b -= l.height, e -= q.lj
        };
        a.prototype.lE = function (a) {
            for (var d = this.Av, f = this.Tb.Id(), c = this.Tb.Hd(), e = 0, p = 0, k = 0; k < a.length; k++) {
                var l = a[k];
                l.Vc.get("includeInLayout") && (e += l.height, l.width > f && (f = l.width), p++)
            }
            e += d * (p - 1);
            if (c >= e)
                switch (this.ti) {
                case b.mb:
                    c -= e;
                    break;
                case b.vc:
                    c =
                        Math.round(0.5 * (c - e));
                    break;
                default:
                    c = 0
                }
            else
                c = 0;
            for (k = 0; k < a.length; k++)
                if (l = a[k], l.Vc.get("includeInLayout")) {
                    switch (this.Zh) {
                    case b.Na:
                        l.x = f - l.width;
                        break;
                    case b.Lc:
                        l.x = Math.round(0.5 * (f - l.width));
                        break;
                    default:
                        l.x = 0
                    }
                    l.y = c;
                    c += l.height + d
                } else
                    l.x = 0, l.y = 0
        };
        return a
    });
    define("k", "fg,do,d,J,jY,ck,c,cO,hU,eC,cv".split(","), function (a, b, c, e, g, d, f, h, j, p, k) {
        var l = a.extend(c, function () {
            c.call(this);
            this.Tc("BaseContainer");
            this.jk = r;
            this.zc = [];
            this.nl = [];
            this.hB = d.J_;
            this.set("contentOpaque", y)
        });
        l.ob = {
            children: [[]],
            childrenInteractionEnabled: n,
            gap: 0,
            horizontalAlign: g.qa,
            itemHeight: m,
            itemMaxHeight: m,
            itemMaxWidth: m,
            itemMinHeight: m,
            itemMinWidth: m,
            itemWidth: m,
            layout: f.gG,
            verticalAlign: g.nb
        };
        b.defaults(l.ob, c.ob);
        l.prototype.za = function () {
            this.bk(l.ob)
        };
        l.prototype.set =
        function (a, b) {
            a == "children" ? this.jf(b) : a == "creationPolicy" ? this.gya(b) : c.prototype.set.call(this, a, b)
        };
        l.prototype.get = function (a, b) {
            return a == "children" ? this.Pa() : a == "creationPolicy" ? this.hB : c.prototype.get.call(this, a, b)
        };
        l.prototype.gya = function (a) {
            if (this.hB != a) {
                this.hB = a;
                this.VW()
            }
        };
        l.prototype.jf = function (a) {
            for (var d = this.Pa(), a = a || [], f = b(d).difference(a), c = 0; c < f.length; c++)
                this.removeChild(f[c]);
            d = b(a).difference(d);
            for (c = 0; c < d.length; c++)
                this.la(d[c]);
            for (c = 0; c < a.length; c++)
                this.Hj(a[c],
                    c)
        };
        l.prototype.Pa = Q("zc");
        l.prototype.la = function (a) {
            a.getParent() && a.getParent().removeChild(a);
            this.zc.push(a);
            a.Q = this;
            this.q2(a);
            a.VV(this.ul);
            this.nl.push(a);
            this.VW();
            a.el()
        };
        l.prototype.removeChild = function (a) {
            if (a.getParent() == this) {
                a.qj();
                a.Q = r;
                if (b(this.nl).contains(a))
                    this.nl = b.without(this.nl, a);
                else {
                    a.Gb().detach();
                    a.cn(r);
                    this.Xa();
                    this.Kc()
                }
                this.zc = b.without(this.zc, a);
                a.uV()
            }
        };
        l.prototype.Xda = function () {
            b(this.Pa()).forEach(function (a) {
                this.removeChild(a)
            })
        };
        l.prototype.dF = function (a) {
            return b(this.zc).indexOf(a)
        };
        l.prototype.Hj = function (a, d) {
            var f = this.dF(a);
            f < 0 && i("Can't set index. This is not a child of this container");
            var c = this.zc.slice();
            c.splice(f, 1);
            c.splice(d, 0, a);
            if (!b.isEqual(this.zc, c)) {
                this.zc = c;
                if (!b(this.nl).contains(a)) {
                    f = this.dF(a);
                    a.Gb().detach();
                    for (var h = c = r, e = f - 1; e >= 0 && !c; e--)
                        b(this.nl).contains(this.zc[e]) || (c = this.zc[e]);
                    for (e = f + 1; e < this.zc.length && !h && !c; e++)
                        b(this.nl).contains(this.zc[e]) || (h = this.zc[e]);
                    c ? a.Gb().insertAfter(c.Gb()) : h ? a.Gb().insertBefore(h.Gb()) : this.Ra().WX(a.Lm());
                    this.Kc()
                }
            }
        };
        l.prototype.iv = function (a) {
            c.prototype.iv.call(this, a);
            this.yaa()
        };
        l.prototype.yaa = function () {
            b(this.zc).forEach(function (a) {
                this.q2(a)
            }, this)
        };
        l.prototype.q2 = function (a) {
            a.set("inheritedInteractionEnabled", this.k("interactionEnabled") && this.k("inheritedInteractionEnabled") && this.k("childrenInteractionEnabled"))
        };
        l.prototype.HA = function () {
            c.prototype.HA.call(this);
            this.zc.forEach(function (a) {
                a.HA()
            })
        };
        l.prototype.jv = function (a) {
            c.prototype.jv.call(this, a);
            b(this.zc).forEach(function (a) {
                a.VV(this.ul)
            },
                this)
        };
        l.prototype.WP = function (a) {
            c.prototype.WP.call(this, a);
            b(this.Pa()).forEach(function (a) {
                a.$y()
            });
            this.VW()
        };
        l.prototype.cn = function (a) {
            c.prototype.cn.call(this, a);
            b(this.Pa()).forEach(function (d) {
                b(this.nl).contains(d) || d.cn(a)
            }, this)
        };
        l.prototype.VW = function () {
            if ((this.hB == d.J_ && this.vr || this.hB == d.ut) && this.nl.length > 0) {
                b(this.nl).forEach(function (a) {
                    this.Ra().WX(a.Lm());
                    a.cn(this.Ta())
                }, this);
                this.nl = [];
                this.Xa();
                this.Kc()
            }
        };
        l.prototype.PF = function (a) {
            if (this.jk != a) {
                this.jk && this.jk.Mea(r);
                (this.jk = a) && this.jk.Mea(this)
            }
        };
        l.prototype.ja = function () {
            var a = y,
            b = this.k("layout");
            if (this.n("layout")) {
                switch (b) {
                case f.pq:
                    this.PF(new j);
                    break;
                case f.Be:
                    this.PF(new p);
                    break;
                case f.of:
                    this.PF(new k);
                    break;
                default:
                    this.PF(new h)
                }
                this.q("layout");
                a = n
            }
            var d = this.jk;
            if (this.n("horizontalAlign") || a) {
                d.Uz(this.k("horizontalAlign"));
                this.q("horizontalAlign")
            }
            if (this.n("verticalAlign") || a) {
                d.Yz(this.k("verticalAlign"));
                this.q("verticalAlign")
            }
            if (this.n("gap") || a) {
                if (b == f.pq) {
                    d.Dea(this.k("gap"));
                    d.CN(this.k("gap"))
                } else
                    b ==
                    f.Be ? d.Dea(this.k("gap")) : b == f.of && d.CN(this.k("gap"));
                this.q("gap")
            }
            if (b == f.pq) {
                if (this.n("itemWidth") || a) {
                    var g = this.k("itemWidth"),
                    l = e.Ok(g);
                    l !== m ? d.Hya(l) : d.zya(g);
                    this.q("itemWidth")
                }
                if (this.n("itemHeight") || a) {
                    g = this.k("itemHeight");
                    l = e.Ok(g);
                    l !== m ? d.Gya(l) : d.yya(g);
                    this.q("itemHeight")
                }
                if (this.n("itemMinWidth")) {
                    d.Eya(this.k("itemMinWidth"));
                    this.q("itemMinWidth")
                }
                if (this.n("itemMinHeight")) {
                    d.Dya(this.k("itemMinHeight"));
                    this.q("itemMinHeight")
                }
                if (this.n("itemMaxWidth")) {
                    d.Cya(this.k("itemMaxWidth"));
                    this.q("itemMaxWidth")
                }
                if (this.n("itemMaxHeight")) {
                    d.Bya(this.k("itemMaxHeight"));
                    this.q("itemMaxHeight")
                }
            }
            if (this.n("childrenInteractionEnabled")) {
                this.q("childrenInteractionEnabled");
                this.yaa()
            }
            this.ib(["cursor"], {
                cursor: "inheritedCursor"
            }, this.zc, n, y);
            c.prototype.ja.call(this);
            b == f.pq && d.nya(this.Yi)
        };
        l.prototype.ib = function (a, b, d, f, c) {
            for (var h = 0; h < a.length; h++) {
                var e = a[h];
                if (!f || this.n(e)) {
                    for (var j = 0; j < d.length; j++)
                        d[j].set(b[e] ? b[e] : e, this.k(e));
                    c && this.q(e)
                }
            }
        };
        l.prototype.Xo = function () {
            if (this.jk) {
                var a =
                    this.jk.uF();
                this.di = a.width;
                this.ci = a.height;
                this.gC = a.minWidth;
                this.fC = a.minHeight
            } else
                c.prototype.Xo.call(this)
        };
        l.prototype.Gi = function () {
            this.jk && this.jk.update(this);
            c.prototype.Gi.call(this)
        };
        return l
    });
    define("ln", ["jquery.mod", "fg", "lC", "fe"], function (a, b, c, e) {
        function g(b, f) {
            this.Dx = b;
            this.Ub = "#000000";
            this.Bb = 0.5;
            this.X = 10;
            this.BE = this.DB = 5;
            this.Bd = f;
            this.GH = this.CU = this.va = 0;
            this.m2 = this.Ic = this.hH = y;
            this.Z = n;
            this.sx = document.createElement("div");
            this.sx.setAttribute("tdvlayer", "scrollbar");
            this.YA = a(this.sx);
            e.css(this.sx, {
                position: "absolute",
                "z-index": c.U0
            });
            this.KA = document.createElement("div");
            this.cQ = a(this.KA);
            e.css(this.KA, {
                position: "absolute",
                left: 0,
                top: 0
            });
            this.YA.append(this.cQ)
        }
        g.prototype.ad =
        function () {
            return this.YA.width()
        };
        g.prototype.Pd = function () {
            return this.YA.height()
        };
        g.prototype.Ka = function (a) {
            this.va != a && (this.va = a, this.x9(), this.Z = n)
        };
        g.prototype.Ks = Q("va");
        g.prototype.setSize = function (a, b) {
            this.CU = a;
            this.GH = b;
            this.x9();
            this.Z = n
        };
        g.prototype.xe = function (a) {
            this.Ic != a && (this.Ic = a, this.Z = n)
        };
        g.prototype.uea = function (a) {
            this.hH != a && (this.hH = a, this.Z = n)
        };
        g.prototype.Tz = function (a) {
            this.Ub != a && (this.Ub = a, this.Z = n)
        };
        g.prototype.Jj = function (a) {
            this.Bb != a && (this.Bb = a, this.Z = n)
        };
        g.prototype.WF =
        function (a) {
            this.X != a && (this.X = a, this.Z = n)
        };
        g.prototype.Bea = function (a) {
            this.DB != a && (this.DB = a, this.Z = n)
        };
        g.prototype.Nea = function (a) {
            this.BE != a && (this.BE = a, this.Z = n)
        };
        g.prototype.Se = function () {
            this.Z && (this.m2 != this.Ic && (this.Ic ? this.Bd.append(this.YA) : this.YA.detach(), this.m2 = this.Ic), this.L(), this.Z = y)
        };
        g.prototype.L = function () {
            var a = Math.round(100 * this.CU / this.GH),
            b = Math.round(100 * this.va / this.GH);
            e.css(this.sx, {
                filter: "alpha(opacity=" + Math.round(100 * this.Bb) + ")",
                opacity: this.Bb,
                display: this.Ic ?
                "block" : "none"
            });
            e.css(this.KA, {
                backgroundColor: this.Ub,
                "border-radius": Math.floor(this.X / 2) + "px"
            });
            this.Dx == g.Be ? (e.css(this.sx, {
                    left: this.DB + "px",
                    right: (this.hH ? this.X : 0) + this.DB + "px",
                    height: this.X + "px",
                    bottom: this.BE + "px"
                }), e.css(this.KA, {
                    left: b + "%",
                    width: a + "%",
                    height: this.X + "px"
                })) : (e.css(this.sx, {
                    top: this.BE + "px",
                    right: this.DB + "px",
                    width: this.X + "px",
                    bottom: (this.hH ? this.X : 0) + this.BE + "px"
                }), e.css(this.KA, {
                    top: b + "%",
                    width: this.X + "px",
                    height: a + "%"
                }))
        };
        g.prototype.x9 = function () {
            var a = this.GH - this.CU;
            0 > this.va ? this.va = 0 : this.va > a && (this.va = a)
        };
        g.Be = "horizontal";
        g.of = "vertical";
        return g
    });
    define("hB", ["fg", "ln"], function (a, b) {
        return a.extend(b, function (a) {
            b.call(this, b.Be, a)
        })
    });
    define("dx", ["fg", "ln"], function (a, b) {
        return a.extend(b, function (a) {
            b.call(this, b.of, a)
        })
    });
    define("V", ["require"], function () {
        function a() {}
        function b(d) {
            var c = f;
            f = [];
            a.VY = n;
            var e = d - a.vd,
            e = 1 < e ? 100 > e ? e : 100 : 1;
            a.vd = d;
            for (d = 0; d < c.length; d++) {
                var j = c[d];
                j.callback.call(j.context, e)
            }
            a.VY = y;
            h = 0 < f.length ? g(b) : m
        }
        var c = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame,
        e = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame ||
            window.msCancelAnimationFrame,
        g = c,
        d = e,
        f = [],
        h = m,
        j = y;
        a.Ma = function (a, d) {
            for (var c = 0; c < f.length; c++) {
                var e = f[c];
                if (e.callback == a && e.context == d)
                    return
            }
            f.push({
                callback: a,
                context: d
            });
            !j && h === m && (h = g(b))
        };
        a.$Z = function (a) {
            j != a && ((j = a) ? h !== m && (d(h), h = m) : 0 < f.length && (h = g(b)))
        };
        a.zN = function (a, f) {
            a = a || c;
            f = f || e;
            g != a && (h !== m && (d(h), h = a(b)), g = a, d = f)
        };
        a.FZ = function () {
            a.zN(r, r)
        };
        a.vd = (new Date).getTime();
        a.VY = y;
        return a
    });
    define("kX", [], function () {
        function a(a) {
            var b = {
                pY: function (b, c, f, e) {
                    f = 0 >= f ? 0 : f >= e ? 1 : f / e;
                    0.5 > f ? f = Math.pow(2 * f, a) : (f = 1 - Math.pow(1 - (2 * f - 1), a), f += 1);
                    return b + (c - b) * 0.5 * f
                }
            };
            b.oZ = e(a);
            return b
        }
        function b(a) {
            var b = {
                pY: function (b, f, c, e) {
                    return b + (f - b) * (1 - Math.pow(1 - (0 >= c ? 0 : c >= e ? 1 : c / e), a))
                }
            };
            b.oZ = e(a);
            return b
        }
        function c(a) {
            var b = {
                pY: function (b, f, c, e) {
                    return b + (f - b) * Math.pow(0 >= c ? 0 : c >= e ? 1 : c / e, a)
                }
            };
            b.oZ = e(a);
            return b
        }
        function e(a) {
            return function (b, c, e) {
                b = Math.abs(c - b);
                return 1 > b / e ? 0 : 1 / (1 - Math.pow((b - e) / b,
                        1 / a))
            }
        }
        function g(d, f, h) {
            this.oh = r;
            switch (d) {
            case "quad_in":
                this.oh = c(2);
                break;
            case "quad_out":
                this.oh = b(2);
                break;
            case "quad_in_out":
                this.oh = a(2);
                break;
            case "cubic_in":
                this.oh = c(3);
                break;
            case "cubic_out":
                this.oh = b(3);
                break;
            case "cubic_in_out":
                this.oh = a(3);
                break;
            case "quart_in":
                this.oh = c(4);
                break;
            case "quart_out":
                this.oh = b(4);
                break;
            case "quart_in_out":
                this.oh = a(4);
                break;
            case "quint_in":
                this.oh = c(5);
                break;
            case "quint_out":
                this.oh = b(5);
                break;
            case "quint_in_out":
                this.oh = a(5);
                break;
            default:
                this.oh = c(1)
            }
            this.Co =
                f.slice();
            this.tc = 0;
            this.gb = this.fr(f, h);
            this.tR = {};
            for (d = 0; d < this.Co.length; d++)
                this.tR[this.Co[d].name] = f[d].Rv
        }
        g.prototype.Xba = function (a) {
            for (var b = 0; b < this.Co.length; b++)
                if (this.Co[b].name == a)
                    return this.Co[b];
            return r
        };
        g.prototype.Fb = function (a) {
            return this.tR[a]
        };
        g.prototype.Re = function () {
            return this.tc >= this.gb
        };
        g.prototype.Cj = Q("gb");
        g.prototype.setTime = function (a) {
            this.tc = Math.min(Math.max(0, a), this.gb);
            for (a = 0; a < this.Co.length; a++) {
                var b = this.Co[a];
                this.tR[b.name] = this.oh.pY(b.Rv, b.Zz,
                        this.tc, this.gb)
            }
        };
        g.prototype.fb = function (a) {
            this.setTime(this.tc + a)
        };
        g.prototype.fr = function (a, b, c) {
            for (var e = [], g = 0; g < this.Co.length; g++) {
                var k = this.Co[g],
                l = c ? c : k.Xwa;
                l !== m && 0 < l && e.push(this.oh.oZ(k.Rv, k.Zz, l / 1E3))
            }
            if (0 < e.length) {
                a = e[0];
                for (g = 1; g < e.length; g++)
                    a = Math.max(a, e[g]);
                return 0 < b ? Math.max(b, a) : a
            }
            return 0 < b ? b : this.fr(a, b, 1E3)
        };
        return g
    });
    define("bq", [], function () {
        return function (a, b, c, e) {
            this.name = a;
            this.Rv = b;
            this.Zz = c;
            this.Xwa = e
        }
    });
    define("kS", "require,do,fg,ll,bZ,fV,ep,k,hB,dx,V,kX,bq".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("fV"),
        f = a("ep"),
        h = a("k"),
        j = a("hB"),
        p = a("dx"),
        k = a("V"),
        l = a("kX"),
        q = a("bq"),
        o = c.extend(h, function () {
            h.call(this);
            this.Tc("Container");
            this.kc = this.Fc = this.fe = this.He = this.Ya = this.Oa = this.B3 = this.A3 = 0;
            this.mT = this.sT = this.fi = this.ei = y;
            this.u3 = 0;
            this.MQ = this.LQ = m;
            this.OQ = this.NQ = 0;
            this.gs = r;
            this.TJ = d.f0;
            this.mr = y;
            this.xI = r;
            this.qn = y;
            this.NL = r
        });
        o.ob = {
            overflow: d.yt,
            scrollBarColor: "#000000",
            scrollBarWidth: 10,
            scrollBarMargin: 5,
            scrollBarHorizontalMargin: m,
            scrollBarVerticalMargin: m,
            scrollBarOpacity: 0.5,
            scrollBarVisible: f.xc
        };
        b.defaults(o.ob, h.ob);
        o.prototype.ek = function () {
            this.xI = new j(this.vS());
            this.xI.cQ.bind("mousedown touchstart", b.bind(this.lma, this));
            this.ek = Q("xI");
            return this.xI
        };
        o.prototype.fk = function () {
            this.NL = new p(this.vS());
            this.NL.cQ.bind("mousedown touchstart", b.bind(this.Gta, this));
            this.fk = Q("NL");
            return this.NL
        };
        o.prototype.scrollIntoView = function (a) {
            var b = a.da,
            b = Math.min(b,
                    Math.max(b + a.Aa() - this.He, this.Fc)),
            d = a.fa,
            a = Math.min(d, Math.max(d + a.eb() - this.fe, this.kc));
            this.scrollTo(b, a)
        };
        o.prototype.scrollTo = function (a, b) {
            var d = this.Fc;
            a > this.Fc ? this.sH() && (d = Math.min(a, this.Oa - this.He)) : a < this.Fc && this.rH() && (d = Math.max(a, 0));
            var c = this.kc;
            b > this.kc ? this.qH() && (c = Math.min(b, this.Ya - this.fe)) : b < this.kc && this.tH() && (c = Math.max(b, 0));
            this.TD(d, c)
        };
        o.prototype.qea = function () {
            if (this.qH()) {
                for (var a = Math.max(0, this.Ya - this.fe), b = Math.min(a, this.kc + this.fe * 0.5), d = a = Math.min(a,
                            this.kc + this.fe), c = this.Pa().slice(), f = c.shift(); c.length; f = c.shift())
                    if (f.get("visible")) {
                        var h = f.fa;
                        h + f.eb() > this.kc + this.fe && h >= b && h < a && h < d && (d = h)
                    }
                this.TD(this.Fc, d)
            }
        };
        o.prototype.qH = function () {
            return this.R2() && this.kc + this.fe < this.Ya
        };
        o.prototype.sea = function () {
            if (this.tH()) {
                for (var a = Math.max(0, this.kc - this.fe), b = Math.max(0, this.kc - this.fe * 0.5), d = a, c = this.Pa().slice(), f = c.shift(); c.length; f = c.shift())
                    if (f.get("visible")) {
                        var h = f.fa,
                        f = h + f.eb();
                        h < this.kc && f >= a + this.fe && f < b + this.fe && f > d + this.fe &&
                        (d = f - this.fe)
                    }
                this.TD(this.Fc, d)
            }
        };
        o.prototype.tH = function () {
            return this.R2() && this.kc > 0
        };
        o.prototype.rea = function () {
            if (this.sH()) {
                for (var a = Math.max(0, this.Oa - this.He), b = Math.min(a, this.Fc + this.He * 0.5), d = a = Math.min(a, this.Fc + this.He), c = this.Pa().slice(), f = c.shift(); c.length; f = c.shift())
                    if (f.get("visible")) {
                        var h = f.da;
                        h + f.Aa() > this.Fc + this.He && h >= b && h < a && h < d && (d = h)
                    }
                this.TD(d, this.kc)
            }
        };
        o.prototype.sH = function () {
            return this.Q2() && this.Fc + this.He < this.Oa
        };
        o.prototype.scrollLeft = function () {
            if (this.rH()) {
                for (var a =
                        Math.max(0, this.Fc - this.He), b = Math.max(0, this.Fc - this.He * 0.5), d = a, c = this.Pa().slice(), f = c.shift(); c.length; f = c.shift())
                    if (f.get("visible")) {
                        var h = f.da,
                        f = h + f.Aa();
                        h < this.Fc && f >= a + this.He && f < b + this.He && f > d + this.He && (d = f - this.He)
                    }
                this.TD(d, this.kc)
            }
        };
        o.prototype.rH = function () {
            return this.Q2() && this.Fc > 0
        };
        o.prototype.TD = function (a, b) {
            this.ei = this.Fc != a;
            this.fi = this.kc != b;
            this.ln();
            this.gs = new l("cubic_in_out", [new q("hScrollPosition", this.Fc, a), new q("vScrollPosition", this.kc, b)], 500);
            k.Ma(this.NP, this)
        };
        o.prototype.R2 = function () {
            return this.qn && this.fe < this.Ya
        };
        o.prototype.Q2 = function () {
            return this.mr && this.He < this.Oa
        };
        o.prototype.za = function () {
            this.bk(o.ob)
        };
        o.prototype.jja = function () {
            this.sT = n;
            this.ln()
        };
        o.prototype.ija = function () {
            this.sT = y;
            this.ln()
        };
        o.prototype.lma = function () {
            this.ei = n
        };
        o.prototype.Gta = function () {
            this.fi = n
        };
        o.prototype.fja = function (a) {
            if (this.ei || this.fi) {
                this.Ta().bind(e.Mc, this.s3, this);
                this.Ta().bind(e.fc, this.t3, this);
                this.Qq = a.pageX;
                this.Rq = a.pageY;
                this.ln()
            } else
                this.v3(a)
        };
        o.prototype.s3 = function (a) {
            if (this.ei) {
                var b = (a.pageX - this.Qq) * this.Oa / this.ek().ad();
                this.Fc = this.Fc + b
            } else if (this.fi) {
                b = (a.pageY - this.Rq) * this.Ya / this.fk().Pd();
                this.kc = this.kc + b
            }
            this.Qq = a.pageX;
            this.Rq = a.pageY;
            this.Ep()
        };
        o.prototype.t3 = function () {
            this.Ta().unbind(e.Mc, this.s3, this);
            this.Ta().unbind(e.fc, this.t3, this);
            this.fi = this.ei = y;
            this.ln()
        };
        o.prototype.T2 = function (a) {
            return this.qn && (a > 0 && this.kc > 0 || a < 0 && this.kc < this.Ya - this.fe) ? n : y
        };
        o.prototype.hja = function (a) {
            if (this.qn) {
                this.kc = this.kc -
                    a.Jp * this.fe * 0.1;
                this.Ep()
            }
        };
        o.prototype.v3 = function (a) {
            if (this.mr || this.qn) {
                this.Ta().bind(e.Mc, this.w3, this);
                this.Ta().bind(e.fc, this.x3, this);
                this.mT = n;
                this.Qq = a.pageX;
                this.Rq = a.pageY;
                this.ln();
                this.Dma()
            }
        };
        o.prototype.w3 = function (a) {
            var b = a.pageX - this.Qq,
            d = a.pageY - this.Rq;
            if (!this.ei && !this.fi && b * b + d * d > 25) {
                this.ei = this.mr;
                this.fi = this.qn;
                this.ln()
            }
            if (this.ei || this.fi) {
                this.Fc = this.Fc - b;
                this.kc = this.kc - d;
                this.Qq = a.pageX;
                this.Rq = a.pageY;
                this.Ep();
                this.Wsa()
            }
        };
        o.prototype.x3 = function () {
            this.Ta().unbind(e.Mc,
                this.w3, this);
            this.Ta().unbind(e.fc, this.x3, this);
            this.mT = y;
            this.ln();
            var a = Math.max(Math.abs(this.NQ / 0.001), Math.abs(this.OQ / 0.001));
            this.gs = new l("linear", [new q("hScrollPosition", this.Fc, this.Fc - 0.5 * this.NQ * a), new q("vScrollPosition", this.kc, this.kc - 0.5 * this.OQ * a)], a);
            k.Ma(this.NP, this)
        };
        o.prototype.Dma = function () {
            this.LQ = this.Qq;
            this.MQ = this.Rq
        };
        o.prototype.Wsa = function () {
            var a = (new Date).getTime(),
            b = a - this.u3;
            if (b > 10) {
                this.u3 = a;
                this.NQ = (this.Qq - this.LQ) / b;
                this.OQ = (this.Rq - this.MQ) / b;
                this.LQ =
                    this.Qq;
                this.MQ = this.Rq
            }
        };
        o.prototype.NP = function (a) {
            if (this.gs && !this.gs.Re() && (this.ei || this.fi)) {
                this.gs.fb(a);
                if (this.ei) {
                    this.Fc = this.gs.Fb("hScrollPosition");
                    if (this.Fc < 0 || this.Fc > this.Oa - this.He)
                        this.ei = y
                }
                if (this.fi) {
                    this.kc = this.gs.Fb("vScrollPosition");
                    if (this.kc < 0 || this.kc > this.Ya - this.fe)
                        this.fi = y
                }
                this.Ep();
                k.Ma(this.NP, this)
            } else {
                this.fi = this.ei = y;
                this.gs = r;
                this.ln()
            }
        };
        o.prototype.Ep = function () {
            this.Fc = this.mr ? Math.max(0, Math.min(this.Oa - this.He, this.Fc)) : 0;
            this.kc = this.qn ? Math.max(0,
                    Math.min(this.Ya - this.fe, this.kc)) : 0;
            this.ek().Ka(this.Fc);
            this.fk().Ka(this.kc);
            this.Ra().rya(this.Fc);
            this.Ra().oza(this.kc);
            this.Ih();
            if (this.L8 != this.Fc || this.M8 != this.kc) {
                this.L8 !== m && this.M8 !== m && this.trigger(new g(e.bl));
                this.L8 = this.Fc;
                this.M8 = this.kc
            }
        };
        o.prototype.ln = function () {
            var a;
            a = this.get("scrollBarVisible") == f.ALWAYS ? n : this.ik ? this.ei || this.fi || this.mT : this.ei || this.fi || this.sT;
            this.ek().xe(this.mr && a);
            this.fk().xe(this.qn && a);
            this.Ih()
        };
        o.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            if (!this.gja) {
                this.gja = n;
                if (this.ik)
                    this.bind(e.Hb, this.v3, this);
                else {
                    this.bind(e.Hb, this.fja, this);
                    this.bind(e.xc, this.jja, this);
                    this.bind(e.Qb, this.ija, this);
                    this.bind(e.sq, this.hja, this)
                }
            }
        };
        o.prototype.ja = function () {
            if (this.n("overflow")) {
                this.TJ = this.k("overflow");
                this.q("overflow");
                this.Kc()
            }
            if (this.n("scrollBarColor")) {
                this.ek().Tz(this.k("scrollBarColor"));
                this.fk().Tz(this.k("scrollBarColor"));
                this.q("scrollBarColor")
            }
            if (this.n("scrollBarWidth")) {
                this.ek().WF(this.k("scrollBarWidth"));
                this.fk().WF(this.k("scrollBarWidth"));
                this.q("scrollBarWidth")
            }
            if (this.n("scrollBarMargin") || this.n("scrollBarVerticalMargin") || this.n("scrollBarHorizontalMargin")) {
                var a = this.k("scrollBarHorizontalMargin", "scrollBarMargin"),
                b = this.k("scrollBarVerticalMargin", "scrollBarMargin");
                this.ek().Bea(a);
                this.ek().Nea(b);
                this.fk().Bea(a);
                this.fk().Nea(b);
                this.q("scrollBarMargin");
                this.q("scrollBarVerticalMargin");
                this.q("scrollBarHorizontalMargin")
            }
            if (this.n("scrollBarOpacity")) {
                this.ek().Jj(this.k("scrollBarOpacity"));
                this.fk().Jj(this.k("scrollBarOpacity"));
                this.q("scrollBarOpacity")
            }
            h.prototype.ja.call(this)
        };
        o.prototype.Gi = function () {
            h.prototype.Gi.call(this);
            this.Ysa();
            this.kta();
            this.ita();
            this.ln();
            this.Ih()
        };
        o.prototype.Ysa = function () {
            for (var a = 0, b = 0, d = 0, c = 0, f = this.Pa(), h = 0; h < f.length; h++) {
                var e = f[h];
                if (e.get("visible")) {
                    c = Math.min(c, e.da);
                    d = Math.min(d, e.fa);
                    a = Math.max(a, e.da + e.Aa());
                    b = Math.max(b, e.fa + e.eb())
                }
            }
            this.A3 = c;
            this.B3 = d;
            this.Oa = a;
            this.Ya = b
        };
        o.prototype.kta = function () {
            if (this.TJ == d.yt) {
                this.He = this.Oa;
                this.fe = this.Ya
            } else {
                this.He = Math.min(this.Id(),
                        this.Oa);
                this.fe = Math.min(this.Hd(), this.Ya)
            }
        };
        o.prototype.ita = function () {
            var a = this.A3 < 0 || this.B3 < 0 || this.Oa > this.He || this.Ya > this.fe;
            if (this.TJ == d.bl) {
                this.mr = this.He < this.Oa;
                var b = (this.qn = this.fe < this.Ya) && this.mr;
                this.ek().setSize(this.He, this.Oa);
                this.ek().uea(b);
                this.fk().setSize(this.fe, this.Ya);
                this.fk().uea(b);
                this.Ra().Vz(!a)
            } else {
                this.qn = this.mr = y;
                this.TJ == d.yt ? this.Ra().Vz(n) : this.Ra().Vz(!a)
            }
            this.Ep()
        };
        o.prototype.Se = function () {
            this.fk().Se();
            this.ek().Se();
            h.prototype.Se.call(this)
        };
        return o
    });
    define("N", [], function () {
        return {
            of: "vertical",
            Be: "horizontal"
        }
    });
    define("dK", ["require"], function () {
        return {
            Fs: function (a) {
                return !a ? "" : a.split(",").map(function (a) {
                    return a.trim()
                }).filter(function (a) {
                    return "" != a
                }).map(function (a) {
                    "'" != a[0] && '"' != a[0] && (a = "'" + a + "'");
                    return a
                }).join(", ")
            }
        }
    });
    define("gP", "require,jquery.mod,do,fg,jY,N,d,fe,dK".split(","), function (a) {
        function b(a) {
            var b = a.uj.width(),
            d = a.uj.height();
            a.get("fontStyle") == "italic" && (b = b + d * 1 / 5);
            return Math.round(b)
        }
        var c = a("jquery.mod"),
        e = a("do"),
        g = a("fg"),
        d = a("jY"),
        f = a("N"),
        h = a("d");
        a("fe");
        var j = a("dK"),
        a = g.extend(h, function () {
            h.call(this);
            this.Tc("Label");
            this.uj = this.OD = r
        });
        a.ob = {};
        a.prototype.za = function () {
            h.prototype.za.call(this);
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("horizontalAlign", d.qa);
            this.f("verticalAlign", d.vc);
            this.f("direction", f.Be);
            this.f("text", "");
            this.f("textDecoration");
            this.f("textShadowBlurRadius", 3);
            this.f("textShadowColor", "#000000");
            this.f("textShadowHorizontalLength", 0);
            this.f("textShadowOpacity", 0);
            this.f("textShadowVerticalLength", 0)
        };
        a.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            if (!this.uj) {
                this.OD = document.createElement("span");
                this.uj = c(this.OD);
                this.iW({
                    position: "absolute",
                    "text-align": "center",
                    cursor: "inherit",
                    "white-space": "nowrap",
                    transform: "translate3d(0, 0, 0)"
                });
                var a = this.Ra();
                a.Vz(y);
                a.append(this.uj)
            }
        };
        a.prototype.Xo = function () {
            h.prototype.Xo.call(this);
            var a = this.Ra();
            this.di = b(this) + a.wz() + a.yz();
            this.ci = this.uj.height() + a.zz() + a.sz();
            p(this)
        };
        a.prototype.ja = function () {
            var a,
            b = {};
            if (this.n("direction") || this.n("text")) {
                switch (this.k("direction")) {
                case f.of:
                    b["line-height"] = "100%";
                    this.uj.html(this.uj.text(this.k("text")).text().split("").join("<br/>"));
                    break;
                default:
                    b["line-height"] = "normal";
                    this.uj.text(this.k("text"));
                    this.uj.html(this.uj.html().split(" ").join("&nbsp;"))
                }
                this.q("direction");
                this.q("text");
                setTimeout(function () {
                    this.Xa();
                    this.Kc()
                }
                    .bind(this), 0)
            }
            if (this.n("fontFamily")) {
                a = this.k("fontFamily");
                e(a).isString() || (a = "");
                b.fontFamily = j.Fs(a);
                this.q("fontFamily");
                this.Xa();
                this.Kc()
            }
            if (this.n("fontSize")) {
                a = this.k("fontSize");
                e(a).isNumber() ? a = a + "px" : e(a).isString() || (a = "");
                b.fontSize = a;
                this.q("fontSize");
                this.Xa();
                this.Kc()
            }
            if (this.n("fontColor")) {
                a = this.k("fontColor");
                e(a).isString() || (a = "");
                b.color =
                    a;
                this.q("fontColor")
            }
            if (this.n("fontWeight")) {
                a = this.k("fontWeight");
                switch (a) {
                case "bold":
                case "bolder":
                case "lighter":
                case "100":
                case "200":
                case "300":
                case "400":
                case "500":
                case "600":
                case "700":
                case "800":
                case "900":
                case "normal":
                    break;
                default:
                    a = "normal"
                }
                b.fontWeight = a;
                this.q("fontWeight");
                this.Xa();
                this.Kc()
            }
            if (this.n("fontStyle")) {
                a = this.k("fontStyle");
                switch (a) {
                case "italic":
                case "normal":
                    break;
                default:
                    a = "normal"
                }
                b.fontStyle = a;
                this.q("fontStyle");
                this.Xa();
                this.Kc()
            }
            if (this.n("textDecoration")) {
                a =
                    this.k("textDecoration");
                switch (a) {
                case "underline":
                case "overline":
                case "line-through":
                case "none":
                    break;
                default:
                    a = "none"
                }
                b.textDecoration = a;
                this.q("textDecoration");
                this.Xa();
                this.Kc()
            }
            if (this.n("horizontalAlign")) {
                this.Kc();
                this.q("horizontalAlign")
            }
            if (this.n("verticalAlign")) {
                this.Kc();
                this.q("verticalAlign")
            }
            a = ["textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"];
            if (e(a).any(function (a) {
                    return this.n(a)
                }, this)) {
                var d = {};
                e(a).each(function (a) {
                    d[a] =
                        this.k(a);
                    this.q(a)
                }, this);
                b["-moz-text-shadow"] = b["-webkit-text-shadow"] = b["text-shadow"] = [d.textShadowHorizontalLength + "px", d.textShadowVerticalLength + "px", d.textShadowBlurRadius + "px", "rgba(" + parseInt("0x" + d.textShadowColor.substr(1, 2)) + ", " + parseInt("0x" + d.textShadowColor.substr(3, 2)) + ", " + parseInt("0x" + d.textShadowColor.substr(5, 2)) + ", " + d.textShadowOpacity + ")"].join(" ");
                a = d.textShadowVerticalLength == 0 && this.k("textShadowHorizontalLength") == 0 ? 135 : Math.round(4 * Math.atan2(d.textShadowHorizontalLength,
                            -d.textShadowVerticalLength) / Math.PI) * 45;
                b.filter = "progid:DXImageTransform.Microsoft.Shadow(color=#" + ("00" + (255 * d.textShadowOpacity).toString(16)).slice(-2) + d.textShadowColor.substr(1, 6) + ",direction=" + a + ")";
                this.Ra().Vz((d.textShadowHorizontalLength > 0 || d.textShadowVerticalLength > 0 || d.textShadowBlurRadius > 0) && d.textShadowOpacity > 0)
            }
            this.iW(b);
            h.prototype.ja.call(this)
        };
        a.prototype.Gi = function () {
            var a = {
                left: "auto",
                right: "auto",
                top: "auto",
                bottom: "auto"
            };
            switch (this.k("horizontalAlign")) {
            case d.qa:
                a.left =
                    "0";
                break;
            case d.Na:
                this.Se();
                a.left = this.Id() - b(this) + "px";
                break;
            case d.Lc:
                this.Se();
                a.left = Math.max(0, Math.round((this.Id() - b(this)) * 0.5)) + "px"
            }
            switch (this.k("verticalAlign")) {
            case d.nb:
                a.top = "0";
                break;
            case d.mb:
                this.Se();
                a.top = this.Hd() - this.OD.clientHeight + "px";
                break;
            case d.vc:
                this.Se();
                a.top = Math.max(0, Math.round((this.Hd() - this.OD.clientHeight) * 0.5)) + "px"
            }
            this.iW(a)
        };
        a.prototype.iW = function (a) {
            var b = this.OD.style,
            d;
            for (d in a)
                b[d] = a[d]
        };
        var p = function () {
            function a() {
                !h && d() && (h = setTimeout(function () {
                        h =
                            r;
                        var d = (new Date).getTime() - 5E3,
                        c;
                        for (c in f) {
                            var e = f[c];
                            e.timestamp < d && delete f[c];
                            var j = e.label;
                            if (e.width != b(j) || e.height != j.uj.height()) {
                                j.Xa();
                                j.Kc()
                            }
                        }
                        a()
                    }, 500))
            }
            function d() {
                for (var a in f)
                    return n;
                return y
            }
            var c = 1,
            f = {},
            h = r;
            return function (d) {
                d.A6 || (d.A6 = c++);
                f[d.A6] = {
                    label: d,
                    timestamp: (new Date).getTime(),
                    width: b(d),
                    height: d.uj.height()
                };
                a()
            }
        }
        ();
        return a
    });
    define("jb", "require,fg,do,ck,R,ll,bZ,fF,dm,fV,fm,kS,gP".split(","), function (a) {
        var b = a("fg"),
        c = a("do"),
        e = a("ck"),
        g = a("R"),
        d = a("ll"),
        f = a("bZ"),
        h = a("fF"),
        j = a("dm"),
        p = a("fV"),
        k = a("fm"),
        l = a("kS"),
        q = a("gP"),
        o = b.extend(l, function () {
            this.Tc("Button");
            l.call(this);
            this.Qf = this.sa = r;
            this.set("childrenInteractionEnabled", y);
            this.set("contentOpaque", n);
            this.set("creationPolicy", e.ut);
            this.set("overflow", p.f0);
            this.set("autoRolledOver", n);
            this.set("autoPressed", n);
            this.set("cursor", g.Ue)
        });
        o.prototype.za = function () {
            l.prototype.za.call(this);
            this.f("label");
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textDecoration");
            this.f("textShadowBlurRadius");
            this.f("textShadowColor");
            this.f("textShadowHorizontalLength");
            this.f("textShadowOpacity");
            this.f("textShadowVerticalLength");
            this.f("layout", "horizontal");
            this.f("iconWidth");
            this.f("iconHeight");
            this.f("iconBeforeLabel");
            this.f("gap", 5);
            this.f("mode", j.Wc);
            this.f("buttonGroup");
            this.f("paddingLeft", 5);
            this.f("paddingTop", 5);
            this.f("paddingRight", 5);
            this.f("paddingBottom", 5);
            this.f("pressed");
            this.h("rollOverOpacity", k.v, "opacity");
            this.h("rollOverIconWidth", k.v, "iconWidth");
            this.h("rollOverIconHeight", k.v, "iconHeight");
            this.h("rollOverFontSize", k.v, "fontSize");
            this.h("rollOverFontColor", k.v, "fontColor");
            this.h("rollOverFontWeight", k.v, "fontWeight");
            this.h("rollOverFontStyle", k.v, "fontStyle");
            this.h("rollOverTextDecoration", k.v, "textDecoration");
            this.h("rollOverTextShadowBlurRadius", k.v, "textShadowBlurRadius");
            this.h("rollOverTextShadowColor",
                k.v, "textShadowColor");
            this.h("rollOverTextShadowHorizontalLength", k.v, "textShadowHorizontalLength");
            this.h("rollOverTextShadowOpacity", k.v, "textShadowOpacity");
            this.h("rollOverTextShadowVerticalLength", k.v, "textShadowVerticalLength");
            this.h("rollOverBorderSize", k.v, "borderSize");
            this.h("rollOverBorderLeftSize", k.v, "borderLeftSize");
            this.h("rollOverBorderTopSize", k.v, "borderTopSize");
            this.h("rollOverBorderRightSize", k.v, "borderRightSize");
            this.h("rollOverBorderBottomSize", k.v, "borderBottomSize");
            this.h("rollOverBorderColor", k.v, "borderColor");
            this.h("rollOverBorderLeftColor", k.v, "borderLeftColor");
            this.h("rollOverBorderTopColor", k.v, "borderTopColor");
            this.h("rollOverBorderRightColor", k.v, "borderRightColor");
            this.h("rollOverBorderBottomColor", k.v, "borderBottomColor");
            this.h("rollOverShadow", k.v, "shadow");
            this.h("rollOverShadowHorizontalLength", k.v, "shadowHorizontalLength");
            this.h("rollOverShadowVerticalLength", k.v, "shadowVerticalLength");
            this.h("rollOverShadowBlurRadius", k.v, "shadowBlurRadius");
            this.h("rollOverShadowSpread", k.v, "shadowSpread");
            this.h("rollOverShadowOpacity", k.v, "shadowOpacity");
            this.h("rollOverShadowColor", k.v, "shadowColor");
            this.h("rollOverBackgroundOpacity", k.v, "backgroundOpacity");
            this.h("rollOverBackgroundColor", k.v, "backgroundColor");
            this.h("rollOverBackgroundColorRatios", k.v, "backgroundColorRatios");
            this.h("rollOverBackgroundColorDirection", k.v, "backgroundColorDirection");
            this.h("pressedLabel", k.Ca, "label");
            this.h("pressedOpacity", k.Ca, "opacity");
            this.h("pressedIconWidth",
                k.Ca, "iconWidth");
            this.h("pressedIconHeight", k.Ca, "iconHeight");
            this.h("pressedFontSize", k.Ca, "fontSize");
            this.h("pressedFontColor", k.Ca, "fontColor");
            this.h("pressedFontWeight", k.Ca, "fontWeight");
            this.h("pressedFontStyle", k.Ca, "fontStyle");
            this.h("pressedTextDecoration", k.Ca, "textDecoration");
            this.h("pressedTextShadowBlurRadius", k.Ca, "textShadowBlurRadius");
            this.h("pressedTextShadowColor", k.Ca, "textShadowColor");
            this.h("pressedTextShadowHorizontalLength", k.Ca, "textShadowHorizontalLength");
            this.h("pressedTextShadowOpacity",
                k.Ca, "textShadowOpacity");
            this.h("pressedTextShadowVerticalLength", k.Ca, "textShadowVerticalLength");
            this.h("pressedBorderSize", k.Ca, "borderSize");
            this.h("pressedBorderLeftSize", k.Ca, "borderLeftSize");
            this.h("pressedBorderTopSize", k.Ca, "borderTopSize");
            this.h("pressedBorderRightSize", k.Ca, "borderRightSize");
            this.h("pressedBorderBottomSize", k.Ca, "borderBottomSize");
            this.h("pressedBorderColor", k.Ca, "borderColor");
            this.h("pressedBorderLeftColor", k.Ca, "borderLeftColor");
            this.h("pressedBorderTopColor",
                k.Ca, "borderTopColor");
            this.h("pressedBorderRightColor", k.Ca, "borderRightColor");
            this.h("pressedBorderBottomColor", k.Ca, "borderBottomColor");
            this.h("pressedShadow", k.Ca, "shadow");
            this.h("pressedShadowHorizontalLength", k.Ca, "shadowHorizontalLength");
            this.h("pressedShadowVerticalLength", k.Ca, "shadowVerticalLength");
            this.h("pressedShadowBlurRadius", k.Ca, "shadowBlurRadius");
            this.h("pressedShadowSpread", k.Ca, "shadowSpread");
            this.h("pressedShadowOpacity", k.Ca, "shadowOpacity");
            this.h("pressedShadowColor",
                k.Ca, "shadowColor");
            this.h("pressedBackgroundOpacity", k.Ca, "backgroundOpacity");
            this.h("pressedBackgroundColor", k.Ca, "backgroundColor");
            this.h("pressedBackgroundColorRatios", k.Ca, "backgroundColorRatios");
            this.h("pressedBackgroundColorDirection", k.Ca, "backgroundColorDirection");
            this.h("pressedLabel", k.$a, "label");
            this.h("pressedRollOverOpacity", k.$a, "opacity");
            this.h("pressedRollOverIconWidth", k.$a, "iconWidth");
            this.h("pressedRollOverIconHeight", k.$a, "iconHeight");
            this.h("pressedRollOverFontSize",
                k.$a, "fontSize");
            this.h("pressedRollOverFontColor", k.$a, "fontColor");
            this.h("pressedRollOverFontWeight", k.$a, "fontWeight");
            this.h("pressedRollOverFontStyle", k.$a, "fontStyle");
            this.h("pressedRollOverTextDecoration", k.$a, "textDecoration");
            this.h("pressedRollOverTextShadowBlurRadius", k.$a, "textShadowBlurRadius");
            this.h("pressedRollOverTextShadowColor", k.$a, "textShadowColor");
            this.h("pressedRollOverTextShadowHorizontalLength", k.$a, "textShadowHorizontalLength");
            this.h("pressedRollOverTextShadowOpacity",
                k.$a, "textShadowOpacity");
            this.h("pressedRollOverTextShadowVerticalLength", k.$a, "textShadowVerticalLength");
            this.h("pressedRollOverBorderSize", k.$a, "borderSize");
            this.h("pressedRollOverBorderLeftSize", k.$a, "borderLeftSize");
            this.h("pressedRollOverBorderTopSize", k.$a, "borderTopSize");
            this.h("pressedRollOverBorderRightSize", k.$a, "borderRightSize");
            this.h("pressedRollOverBorderBottomSize", k.$a, "borderBottomSize");
            this.h("pressedRollOverBorderColor", k.$a, "borderColor");
            this.h("pressedRollOverBorderLeftColor",
                k.$a, "borderLeftColor");
            this.h("pressedRollOverBorderTopColor", k.$a, "borderTopColor");
            this.h("pressedRollOverBorderRightColor", k.$a, "borderRightColor");
            this.h("pressedRollOverBorderBottomColor", k.$a, "borderBottomColor");
            this.h("pressedRollOverShadow", k.$a, "shadow");
            this.h("pressedRollOverShadowHorizontalLength", k.$a, "shadowHorizontalLength");
            this.h("pressedRollOverShadowVerticalLength", k.$a, "shadowVerticalLength");
            this.h("pressedRollOverShadowBlurRadius", k.$a, "shadowBlurRadius");
            this.h("pressedRollOverShadowSpread",
                k.$a, "shadowSpread");
            this.h("pressedRollOverShadowOpacity", k.$a, "shadowOpacity");
            this.h("pressedRollOverShadowColor", k.$a, "shadowColor");
            this.h("pressedRollOverBackgroundOpacity", k.$a, "backgroundOpacity");
            this.h("pressedRollOverBackgroundColor", k.$a, "backgroundColor");
            this.h("pressedRollOverBackgroundColorRatios", k.$a, "backgroundColorRatios");
            this.h("pressedRollOverBackgroundColorDirection", k.$a, "backgroundColorDirection")
        };
        o.prototype.XQ = D();
        o.prototype.Ga = function () {
            l.prototype.Ga.call(this);
            if (!this.Qf) {
                this.Qf =
                    this.XQ();
                this.la(this.Qf)
            }
            if (!this.sa) {
                this.sa = new q;
                this.la(this.sa)
            }
        };
        o.prototype.QA = function () {
            if (this.get("pressed")) {
                this.set("pressed", y);
                this.trigger(new f(d.Ph))
            } else {
                this.set("pressed", n);
                this.trigger(new f(d.Dg))
            }
        };
        o.prototype.ja = function () {
            var a = y;
            if (this.n("mode")) {
                if (this.k("mode") == j.Wc) {
                    this.unbind(d.U, this.QA, this, n);
                    this.set("autoPressed", n)
                } else {
                    this.bind(d.U, this.QA, this, n);
                    this.set("autoPressed", y)
                }
                this.q("mode");
                a = n
            }
            if (a || this.n("pressed"))
                this.k("mode") == j.Qh ? this.My(this.k("pressed") ==
                    n) : a && this.My(y);
            if (this.n("label")) {
                a = this.k("label");
                this.sa.set("text", a);
                this.sa.set("visible", a ? n : y);
                this.q("label")
            }
            this.ib(o.F1, o.G1, [this.sa], n, n);
            if (this.n("iconBeforeLabel")) {
                this.k("iconBeforeLabel") == y ? this.Hj(this.sa, 0) : this.Hj(this.Qf, 0);
                this.q("iconBeforeLabel")
            }
            if (this.n("iconWidth")) {
                this.Qf.set("width", this.k("iconWidth"));
                this.q("iconWidth")
            }
            if (this.n("iconHeight")) {
                this.Qf.set("height", this.k("iconHeight"));
                this.q("iconHeight")
            }
            if (this.n("buttonGroup")) {
                (a = this.k("buttonGroup")) ?
                h.register(this, a) : h.dG(this);
                this.q("buttonGroup")
            }
            this.ib(["horizontalAlign", "verticalAlign"], {}, [this.Qf], n, y);
            l.prototype.ja.call(this)
        };
        o.F1 = ["fontFamily", "fontSize", "fontColor", "fontWeight", "fontStyle", "textDecoration", "textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"];
        o.G1 = {};
        c(o.F1).each(function (a) {
            o.G1[a] = a
        });
        return o
    });
    define("hq", ["require", "fg", "jb", "dW", "ll"], function (a) {
        var b = a("fg"),
        c = a("jb"),
        e = a("dW"),
        a = a("ll"),
        b = b.extend(c, function () {
            c.call(this)
        });
        e.A("BaseButton", b).B("UIComponent").J({
            label: "string",
            gap: "number",
            horizontalAlign: "enum[center, left, right]",
            iconBeforeLabel: "bool",
            layout: "enum[horizontal, vertical]",
            mode: "enum[push, toggle]",
            buttonGroup: "string",
            verticalAlign: "enum[bottom, middle, top]",
            iconWidth: "or[number, percent]",
            iconHeight: "or[number, percent]",
            fontFamily: "string",
            fontSize: "or[number, size]",
            fontColor: "color",
            fontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            fontStyle: "enum[italic, normal]",
            textDecoration: "enum[underline, overline, line-through, none]",
            textShadowBlurRadius: "number",
            textShadowColor: "color",
            textShadowHorizontalLength: "number",
            textShadowOpacity: "number",
            textShadowVerticalLength: "number",
            rollOverIconWidth: "or[number, percent]",
            rollOverIconHeight: "or[number, percent]",
            rollOverFontFamily: "string",
            rollOverFontSize: "or[number, size]",
            rollOverFontColor: "color",
            rollOverFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            rollOverFontStyle: "enum[italic, normal]",
            rollOverTextDecoration: "enum[underline, overline, line-through, none]",
            rollOverTextShadowBlurRadius: "number",
            rollOverTextShadowColor: "color",
            rollOverTextShadowHorizontalLength: "number",
            rollOverTextShadowOpacity: "number",
            rollOverTextShadowVerticalLength: "number",
            rollOverBorderSize: "number",
            rollOverBorderLeftSize: "number",
            rollOverBorderTopSize: "number",
            rollOverBorderRightSize: "number",
            rollOverBorderBottomSize: "number",
            rollOverBorderColor: "color",
            rollOverBorderLeftColor: "color",
            rollOverBorderTopColor: "color",
            rollOverBorderRightColor: "color",
            rollOverBorderBottomColor: "color",
            rollOverShadow: "bool",
            rollOverShadowHorizontalLength: "number",
            rollOverShadowVerticalLength: "number",
            rollOverShadowBlurRadius: "number",
            rollOverShadowSpread: "number",
            rollOverShadowColor: "color",
            rollOverShadowOpacity: "number",
            rollOverBackgroundOpacity: "number",
            rollOverBackgroundColor: "or[array[color], color]",
            rollOverBackgroundColorRatios: "array[number]",
            rollOverBackgroundColorDirection: "enum[horizontal, vertical]",
            pressed: "bool",
            pressedLabel: "string",
            pressedIconWidth: "or[number, percent]",
            pressedIconHeight: "or[number, percent]",
            pressedFontFamily: "string",
            pressedFontSize: "or[number, size]",
            pressedFontColor: "color",
            pressedFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            pressedFontStyle: "enum[italic, normal]",
            pressedTextDecoration: "enum[underline, overline, line-through, none]",
            pressedTextShadowBlurRadius: "number",
            pressedTextShadowColor: "color",
            pressedTextShadowHorizontalLength: "number",
            pressedTextShadowOpacity: "number",
            pressedTextShadowVerticalLength: "number",
            pressedOpacity: "number",
            pressedBorderSize: "number",
            pressedBorderLeftSize: "number",
            pressedBorderTopSize: "number",
            pressedBorderRightSize: "number",
            pressedBorderBottomSize: "number",
            pressedBorderColor: "color",
            pressedBorderLeftColor: "color",
            pressedBorderTopColor: "color",
            pressedBorderRightColor: "color",
            pressedBorderBottomColor: "color",
            pressedShadow: "bool",
            pressedShadowHorizontalLength: "number",
            pressedShadowVerticalLength: "number",
            pressedShadowBlurRadius: "number",
            pressedShadowSpread: "number",
            pressedShadowOpacity: "number",
            pressedShadowColor: "color",
            pressedBackgroundOpacity: "number",
            pressedBackgroundColor: "or[array[color], color]",
            pressedBackgroundColorRatios: "array[number]",
            pressedBackgroundColorDirection: "enum[horizontal, vertical]",
            pressedRollOverIconWidth: "or[number, percent]",
            pressedRollOverIconHeight: "or[number, percent]",
            pressedRollOverFontFamily: "string",
            pressedRollOverFontSize: "or[number, size]",
            pressedRollOverFontColor: "color",
            pressedRollOverFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            pressedRollOverFontStyle: "enum[italic, normal]",
            pressedRollOverTextDecoration: "enum[underline, overline, line-through, none]",
            pressedRollOverTextShadowBlurRadius: "number",
            pressedRollOverTextShadowColor: "color",
            pressedRollOverTextShadowHorizontalLength: "number",
            pressedRollOverTextShadowOpacity: "number",
            pressedRollOverTextShadowVerticalLength: "number",
            pressedRollOverOpacity: "number",
            pressedRollOverBorderSize: "number",
            pressedRollOverBorderLeftSize: "number",
            pressedRollOverBorderTopSize: "number",
            pressedRollOverBorderRightSize: "number",
            pressedRollOverBorderBottomSize: "number",
            pressedRollOverBorderColor: "color",
            pressedRollOverBorderLeftColor: "color",
            pressedRollOverBorderTopColor: "color",
            pressedRollOverBorderRightColor: "color",
            pressedRollOverBorderBottomColor: "color",
            pressedRollOverShadow: "bool",
            pressedRollOverShadowHorizontalLength: "number",
            pressedRollOverShadowVerticalLength: "number",
            pressedRollOverShadowBlurRadius: "number",
            pressedRollOverShadowSpread: "number",
            pressedRollOverShadowOpacity: "number",
            pressedRollOverShadowColor: "color",
            pressedRollOverBackgroundOpacity: "number",
            pressedRollOverBackgroundColor: "or[array[color], color]",
            pressedRollOverBackgroundColorRatios: "array[number]",
            pressedRollOverBackgroundColorDirection: "enum[horizontal, vertical]"
        }).gq(["fontSize", "rollOverFontSize", "pressedFontSize", "pressedRollOverFontSize"]).Xb([a.Dg, a.Ph]).Hf([a.U]);
        return b
    });
    define("jn", [], function () {
        return {
            NONE: "none",
            Zn: "fill",
            Te: "fit_inside",
            xm: "fit_outside",
            Zk: "fit_to_width",
            kh: "fit_to_height",
            ufa: "custom"
        }
    });
    define("jF", "require,do,jquery.mod,fg,ll,ge,r,jY,jn,d,fe,id".split(","), function (a) {
        function b(a) {
            this.oQ = a;
            this.fd = [];
            this.Th = r
        }
        var c = a("do"),
        e = a("jquery.mod"),
        g = a("fg"),
        d = a("ll"),
        f = a("ge"),
        h = a("r"),
        j = a("jY"),
        p = a("jn"),
        k = a("d"),
        l = a("fe"),
        q = a("id");
        b.ej = document.createElement("a");
        b.prototype.dja = function (a) {
            b.ej.href = a;
            return b.ej.href
        };
        b.prototype.load = function (a, b, h) {
            a = this.dja(a);
            if (this.Th && !this.Th.Sp()) {
                this.Th.cancel();
                this.fd = c(this.fd).without(this.Th)
            }
            if (this.Th = c(this.fd).find(function (b) {
                    return b.Dj() ==
                    a
                }))
                this.fd = c(this.fd).without(this.Th);
            else {
                this.Th = new q(f.W0);
                this.Th.load(a)
            }
            for (this.fd.splice(0, 0, this.Th); this.fd.length > this.oQ; )
                this.fd.pop().cancel();
            if (b) {
                var e = this.Th,
                j = function () {
                    b.call(h || window, e.we(), e.ad(), e.Pd())
                };
                this.Th.Sp() ? j() : this.Th.bind(d.S, j)
            }
        };
        b.prototype.clear = function () {
            this.fd.forEach(function (a) {
                a.cancel()
            });
            this.Th = r
        };
        a = g.extend(k, function (a) {
            k.call(this);
            this.Tc("Image");
            this.oQ = a || 1;
            this.uX = y;
            this.Zh = j.qa;
            this.zI = y;
            this.ti = j.nb;
            this.QL = y;
            this.Ed = p.NONE;
            this.EV = y;
            this.my = this.ny = 0;
            this.bT = this.yU = y;
            this.Ya = this.Oa = 0;
            this.uo = y;
            this.MT = this.$h = this.Ab = this.HI = this.GI = r;
            this.bind(d.yb, this.Bma, this);
            this.bind(d.od, this.Cma, this)
        });
        a.prototype.uS = function () {
            this.MT = new b(this.oQ);
            this.uS = Q("MT");
            return this.MT
        };
        a.prototype.za = function () {
            k.prototype.za.call(this);
            this.f("horizontalAlign", j.qa);
            this.f("verticalAlign", j.nb);
            this.f("scaleMode", p.NONE)
        };
        a.prototype.set = function (a, b) {
            if (a == "url" && this.get("url") != b) {
                this.uX = n;
                this.Dc()
            }
            k.prototype.set.call(this, a, b)
        };
        a.prototype.Uz = function (a) {
            if (this.Zh != a) {
                this.Zh = a;
                this.zI = n;
                this.Dc()
            }
        };
        a.prototype.Yz = function (a) {
            if (this.ti != a) {
                this.ti = a;
                this.QL = n;
                this.Dc()
            }
        };
        a.prototype.Xs = function (a) {
            if (this.Ed != a) {
                this.Ed = a;
                this.EV = n;
                this.Dc();
                this.Xa()
            }
        };
        a.prototype.Bma = function () {
            this.uo = n;
            this.Dc()
        };
        a.prototype.Cma = function () {
            this.Raa()
        };
        var o = {
            position: "static",
            cursor: "inherit",
            display: "inline",
            verticalAlign: "top",
            visibility: "hidden",
            "pointer-events": "none",
            "user-select": "none",
            "-ms-user-select": "none",
            "-moz-user-select": "none",
            "-webkit-user-select": "none",
            "touch-callout": "none",
            "-webkit-touch-callout": "none"
        };
        h.browser() == h.Ii && h.Za() && (o.transform = "translate3d(0,0,0)");
        a.prototype.r2 = function (a, b, c) {
            this.ny = b ? b : 0;
            this.my = c ? c : 0;
            if (this.Ab) {
                this.Ab.remove();
                this.Ab = r
            }
            if (this.$h = a) {
                this.Ab = e(this.$h);
                l.css(this.$h, o);
                this.GI.append(this.Ab)
            }
            this.yU = this.bT = n;
            this.Dc();
            this.Xa();
            this.Ab && this.trigger(d.S)
        };
        a.prototype.Ga = function () {
            k.prototype.Ga.call(this);
            if (!this.GI) {
                this.HI = document.createElement("div");
                this.GI = e(this.HI);
                l.css(this.HI, {
                    position: "static",
                    overflow: "hidden",
                    cursor: "inherit"
                });
                this.Ra().append(this.GI)
            }
        };
        a.prototype.Xo = function () {
            this.di = this.ny + this.xi() + this.Bn();
            this.ci = this.my + this.Cn() + this.uz();
            this.q6 = this.ny == 0 && this.my == 0 ? 0 : this.ny / this.my;
            this.fC = this.gC = 0
        };
        a.prototype.ja = function () {
            if (this.n("scaleMode")) {
                this.Xs(this.k("scaleMode"));
                this.q("scaleMode")
            }
            if (this.n("horizontalAlign")) {
                this.Uz(this.k("horizontalAlign"));
                this.q("horizontalAlign")
            }
            if (this.n("verticalAlign")) {
                this.Yz(this.k("verticalAlign"));
                this.q("verticalAlign")
            }
            if (this.n2())
                this.uo = n;
            k.prototype.ja.call(this);
            this.Raa();
            if (this.awa()) {
                var a = y;
                if (this.EV || this.yU || this.uo) {
                    var b = this.Id(),
                    d = this.Hd(),
                    c = this.ny,
                    f = this.my,
                    h,
                    e;
                    if (c == 0 || f == 0)
                        e = h = 0;
                    else
                        switch (this.Ed) {
                        case p.NONE:
                            h = c;
                            e = f;
                            break;
                        case p.Zn:
                            h = b;
                            e = d;
                            break;
                        case p.Te:
                            if (c * d > f * b) {
                                h = b;
                                e = f * b / c
                            } else {
                                h = c * d / f;
                                e = d
                            }
                            break;
                        case p.xm:
                            if (c * d > f * b) {
                                h = c * d / f;
                                e = d
                            } else {
                                h = b;
                                e = f * b / c
                            }
                            break;
                        case p.Zk:
                            h = b;
                            e = f * b / c;
                            break;
                        case p.kh:
                            h = c * d / f;
                            e = d
                        }
                    if (this.Oa != h || this.Ya != e) {
                        this.Oa = h;
                        this.Ya = e;
                        a = n
                    }
                    this.yU =
                        this.EV = y
                }
                if (a || this.uo || this.bT) {
                    this.QL = this.zI = n;
                    this.$h && l.css(this.$h, {
                        width: this.Oa + "px",
                        height: this.Ya + "px",
                        visibility: "inherit"
                    });
                    l.css(this.HI, {
                        width: this.Id() + "px",
                        height: this.Hd() + "px",
                        "border-top-left-radius": this.vI(this.dla(), this.K4(), this.I4()) + "px",
                        "border-top-right-radius": this.vI(this.ela(), this.K4(), this.J4()) + "px",
                        "border-bottom-left-radius": this.vI(this.bla(), this.H4(), this.I4()) + "px",
                        "border-bottom-right-radius": this.vI(this.cla(), this.H4(), this.J4()) + "px"
                    });
                    this.Xa();
                    this.bT =
                        this.uo = y
                }
                if (this.zI && this.$h) {
                    switch (this.Zh) {
                    case j.qa:
                        l.css(this.$h, {
                            "margin-left": 0,
                            "margin-right": this.Id() - this.Oa + "px"
                        });
                        break;
                    case j.Na:
                        l.css(this.$h, {
                            "margin-left": this.Id() - this.Oa + "px",
                            "margin-right": 0
                        });
                        break;
                    case j.Lc:
                        l.css(this.$h, {
                            "margin-left": Math.floor((this.Id() - this.Oa) * 0.5) + "px",
                            "margin-right": Math.ceil((this.Id() - this.Oa) * 0.5) + "px"
                        })
                    }
                    this.zI = y
                }
                if (this.QL && this.$h) {
                    switch (this.ti) {
                    case j.nb:
                        l.css(this.$h, {
                            "margin-top": 0,
                            "margin-bottom": this.Hd() - this.Ya + "px"
                        });
                        break;
                    case j.mb:
                        l.css(this.$h, {
                            "margin-top": this.Hd() - this.Ya + "px",
                            "margin-bottom": 0
                        });
                        break;
                    case j.vc:
                        l.css(this.$h, {
                            "margin-top": Math.floor((this.Hd() - this.Ya) * 0.5) + "px",
                            "margin-bottom": Math.ceil((this.Hd() - this.Ya) * 0.5) + "px"
                        })
                    }
                    this.QL = y
                }
            }
        };
        a.prototype.Raa = function () {
            if (this.uX) {
                var a = this.get("url");
                if (a)
                    this.uS().load(a, this.r2, this);
                else {
                    this.uS().clear();
                    this.r2(r, 0, 0)
                }
                this.uX = y
            }
        };
        a.prototype.vI = function (a, b, d) {
            if (!a)
                return 0;
            var c = 0;
            b && (c = Math.max(c, b));
            d && (c = Math.max(c, d));
            return Math.max(0, a - c)
        };
        return a
    });
    define("ez", ["fg", "jn", "fm", "jb", "jF"], function (a, b, c, e, g) {
        a = a.extend(e, function () {
            e.call(this)
        });
        a.prototype.za = function () {
            e.prototype.za.call(this);
            this.f("iconURL");
            this.h("rollOverIconURL", c.v, "iconURL");
            this.h("pressedIconURL", c.Ca, "iconURL");
            this.h("pressedRollOverIconURL", c.$a, "iconURL")
        };
        a.prototype.XQ = function () {
            var a = new g(3);
            a.set("scaleMode", b.Te);
            return a
        };
        a.prototype.ja = function () {
            if (this.n("iconURL")) {
                var a = this.k("iconURL");
                this.Qf.set("url", a);
                this.Qf.set("visible", a ? n : y);
                this.q("iconURL")
            }
            e.prototype.ja.call(this)
        };
        return a
    });
    define("ey", ["fg", "ez", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("Button", a).B("BaseButton").J({
            iconURL: "string",
            rollOverIconURL: "string",
            pressedIconURL: "string",
            pressedRollOverIconURL: "string"
        }).hh(["iconURL", "rollOverIconURL", "pressedIconURL", "pressedRollOverIconURL"]);
        return a
    });
    define("gk", ["require", "fg", "jd", "ll", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("angle", 0);
            this.set("rotate", y);
            this.set("inertia", y)
        });
        a.A("CapPanoramaOverlay", b).B("PanoramaOverlay").J({
            angle: "number",
            distance: "number",
            hfov: "number",
            image: "ImageResource",
            inertia: "bool",
            rotate: "bool",
            useHandCursor: "bool"
        }).Xb([e.xc, e.Qb, e.Mh, e.Kf]).Hf([e.U]);
        return b
    });
    define("gb", ["fg", "dW", "gk"], function (a, b, c) {
        a = a.extend(c, function () {
            c.call(this)
        });
        b.A("CeilingCapPanoramaOverlay", a).B("CapPanoramaOverlay");
        return a
    });
    define("bY", "do,jquery.mod,fg,ll,bZ,d".split(","), function (a, b, c, e, g, d) {
        a = c.extend(d, function () {
            d.call(this);
            this.Tc("Canvas");
            this.JR = n;
            this.u = r;
            this.bind(e.yb, this.Cia, this)
        });
        a.prototype.Cia = function () {
            this.WM()
        };
        a.prototype.WM = function () {
            this.JR = n;
            this.Ih()
        };
        a.prototype.Ga = function () {
            d.prototype.Ga.call(this);
            if (!this.u) {
                this.u = b("<canvas/>");
                this.u.css({
                    position: "absolute",
                    left: 0,
                    top: 0,
                    cursor: "inherit"
                });
                this.Ra().append(this.u)
            }
        };
        a.prototype.ja = function () {
            this.n2() && this.WM();
            d.prototype.ja.call(this)
        };
        a.prototype.Se = function () {
            if (this.JR) {
                this.JR = y;
                var a = this.u.get(0);
                a.width = this.Id();
                a.height = this.Hd();
                this.Rza()
            }
            d.prototype.Se.call(this)
        };
        a.prototype.sva = function () {
            return this.u.get(0).width
        };
        a.prototype.rva = function () {
            return this.u.get(0).height
        };
        a.prototype.qva = function () {
            return this.u.get(0).getContext("2d")
        };
        a.prototype.Rza = function () {
            this.trigger(new g(e.aa))
        };
        return a
    });
    define("hJ", ["fg", "ll", "fm", "jb", "bY"], function (a, b, c, e, g) {
        a = a.extend(e, function () {
            e.call(this)
        });
        a.prototype.Gi = function () {
            e.prototype.Gi.call(this)
        };
        a.prototype.za = function () {
            e.prototype.za.call(this);
            this.f("iconColor");
            this.h("rollOverIconColor", c.v, "iconColor");
            this.h("pressedIconColor", c.Ca, "iconColor");
            this.h("pressedRollOverIconColor", c.$a, "iconColor")
        };
        a.prototype.XQ = function () {
            var a = new g;
            a.bind(b.aa, this.ffa, this, n);
            return a
        };
        a.prototype.ja = function () {
            this.n("iconColor") && (this.Qf.WM(),
                this.q("iconColor"));
            e.prototype.ja.call(this)
        };
        a.prototype.ula = function () {
            return this.k("iconColor")
        };
        a.prototype.vla = function () {
            return this.Qf.qva()
        };
        a.prototype.xla = function () {
            return this.Qf.sva()
        };
        a.prototype.wla = function () {
            return this.Qf.rva()
        };
        a.prototype.ffa = D();
        return a
    });
    define("eF", ["fg", "hJ", "jY", "fm"], function (a, b, c, e) {
        a = a.extend(b, function () {
            b.call(this);
            this.M({
                horizontalAlign: c.Lc,
                verticalAlign: c.vc
            })
        });
        a.prototype.za = function () {
            b.prototype.za.call(this);
            this.f("iconLineWidth");
            this.h("rollOverIconLineWidth", e.v, "iconLineWidth");
            this.h("pressedIconLineWidth", e.Ca, "iconLineWidth");
            this.h("pressedRollOverIconLineWidth", e.$a, "iconLineWidth")
        };
        a.prototype.Ela = function () {
            return this.k("iconLineWidth")
        };
        a.prototype.ja = function () {
            this.n("iconLineWidth") && (this.Qf.WM(),
                this.q("iconLineWidth"));
            b.prototype.ja.call(this)
        };
        a.prototype.ffa = function () {
            var a = this.vla(),
            b = this.ula(),
            c = this.xla(),
            h = this.wla(),
            e = this.Ela();
            a.clearRect(0, 0, c, h);
            a.lineWidth = e || 1;
            a.strokeStyle = b || "#000000";
            a.beginPath();
            a.moveTo(0, 0);
            a.lineTo(c, h);
            a.moveTo(0, h);
            a.lineTo(c, 0);
            a.closePath();
            a.stroke()
        };
        return a
    });
    define("hc", ["fg", "eF", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("CloseButton", a).B("BaseButton").J({
            iconColor: "color",
            iconLineWidth: "number",
            rollOverIconColor: "color",
            rollOverIconLineWidth: "number",
            pressedIconColor: "color",
            pressedIconLineWidth: "number",
            pressedRollOverIconColor: "color",
            pressedRollOverIconLineWidth: "number"
        });
        return a
    });
    define("hM", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("CookiesPolicy", b).B("Object").J({
            url: "string",
            geographicArea: "or[array[string], string]"
        }).hh(["url"]);
        return b
    });
    define("jc", "require,do,iN,fg,kS,dW".split(","), function (a) {
        a("do");
        var b = a("iN"),
        c = a("fg"),
        e = a("kS"),
        a = a("dW"),
        c = c.extend(e, function () {
            e.call(this)
        });
        a.A("Container", c).B("UIComponent").J({
            children: "array[UIComponent]",
            contentOpaque: "bool",
            childrenInteractionEnabled: "bool",
            creationPolicy: "enum[inAdvance, delayed]",
            layout: "enum[absolute, vertical, horizontal]",
            gap: "number",
            horizontalAlign: "enum[center, left, right]",
            overflow: "enum[scroll, hidden, visible]",
            scrollBarColor: "color",
            scrollBarWidth: "number",
            scrollBarMargin: "number",
            scrollBarHorizontalMargin: "number",
            scrollBarVerticalMargin: "number",
            scrollBarOpacity: "number",
            scrollBarVisible: "enum[rollOver, always]",
            verticalAlign: "enum[bottom, middle, top]"
        }).Cg({
            scrollTo: function (a, b) {
                e.prototype.scrollTo.call(this, a, b)
            },
            scrollIntoView: function (a) {
                b.nw(function () {
                    e.prototype.scrollIntoView.call(this, a)
                }
                    .bind(this))
            }
        });
        return c
    });
    define("iR", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("dW"),
        a = b.extend(c, function () {
            c.call(this);
            this.N = r
        });
        e.A("PanoramaFrame", a).B("Object").J({
            thumbnailUrl: "string",
            snapshots: "array[PanoramaSnapshot]",
            overlays: "array[PanoramaOverlay]"
        }).hh(["thumbnailUrl"]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "overlays":
                return this.wS();
            case "hfov":
            case "vfov":
            case "pitch":
            case "flipImageHorizontally":
                if (this.N)
                    return this.N.get(a, b)
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.wS =
        function () {
            var a = c.prototype.get.call(this, "overlays");
            a || (a = []);
            return this.gW(a)
        };
        a.prototype.gW = function (a) {
            if (this.Ry === m || this.$I != a) {
                var b = function (a) {
                    return e.tb("PopupPanoramaOverlay", a)
                },
                c = function (a) {
                    return e.tb("LensFlarePanoramaOverlay", a)
                };
                this.$I = a;
                this.Ry = [].concat(a.filter(function (a) {
                        return !(b(a) || c(a))
                    }), a.filter(c), a.filter(b))
            }
            return this.Ry
        };
        a.prototype.jua = P("N");
        a.prototype.xz = Q("N");
        a.prototype.Jh = R(y);
        return a
    });
    define("la", ["require", "fg", "dW", "iR"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("iR"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("CubicPanoramaFrame", a).B("PanoramaFrame").J({
            cube: "ImageResource",
            stereoCube: "ImageResource",
            front: "ImageResource",
            left: "ImageResource",
            back: "ImageResource",
            right: "ImageResource",
            top: "ImageResource",
            bottom: "ImageResource"
        });
        return a
    });
    define("gt", ["require"], function () {
        return {
            "ar-ar": {
                mute: "\u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0635\u0648\u062a",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "\u062a\u063a\u064a\u064a\u0631 \u0648\u0636\u0639 \u0627\u0644\u062a\u062d\u0643\u0645 \u0644\u0644\u0633\u062d\u0628 \u0648\u0627\u0644\u0625\u0641\u0631\u0627\u062c",
                accept: "\u0642\u0628\u0648\u0644",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "\u062a\u063a\u064a\u064a\u0631 \u0648\u0636\u0639 \u0627\u0644\u062a\u062d\u0643\u0645 \u0644\u0644\u0646\u0642\u0631 \u0648\u0627\u0644\u062a\u062d\u0631\u0643",
                yes: "\u0646\u0639\u0645 \u0641\u0639\u0644\u0627",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "\u0627\u0644\u062e\u0631\u0648\u062c \u0645\u0646 \u0648\u0636\u0639 \u0645\u0644\u0626 \u0644\u0644\u0634\u0627\u0634\u0629",
                no: "\u0644\u0627",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "\u062a\u0633\u062a\u062e\u062f\u0645 \u0635\u0641\u062d\u0629 \u0627\u0644\u0648\u064a\u0628 \u0647\u0630\u0647 \u0645\u0644\u0641\u0627\u062a \u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0644\u062c\u0645\u0639 \u0625\u062d\u0635\u0627\u0626\u064a\u0627\u062a \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645. \u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u060c \u064a\u0631\u062c\u0649 \u0632\u064a\u0627\u0631\u0629 <a> \u0633\u064a\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062a \u062a\u0639\u0631\u064a\u0641 \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 </a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "\u064a\u0631\u0641\u0636",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0635\u0648\u062a \u0648\u0627\u0644\u0641\u064a\u062f\u064a\u0648\u061f",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0641\u064a\u062f\u064a\u0648\u061f",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "\u0623\u062f\u062e\u0644 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0635\u0648\u062a",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u0635\u0648\u062a\u061f"
            },
            "bg-bg": {
                mute: "\u0417\u0430\u0433\u043b\u0443\u0448\u0430\u0432\u0430\u043d\u0435",
                "cardboard-v1": "\u0410\u043a\u043e \u043d\u0435 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u043a\u043e\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Cardboard \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b \u043d\u0430 \u0445\u043e\u0442\u0441\u043f\u043e\u0442 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435. \u0421\u043b\u0435\u0434 \u0442\u043e\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0449\u0435 \u043f\u043e\u0433\u043b\u0435\u0434\u043d\u0435\u0442\u0435 \u0445\u043e\u0442\u0441\u043f\u043e\u0442\u0430 \u0438 \u0449\u0435 \u0438\u0437\u0447\u0430\u043a\u0430\u0442\u0435, \u0434\u043e\u043a\u0430\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u0442\u043e \u0441\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430.",
                "download-tour": "\u0418\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u0443\u0440\u0430 \u0437\u0430 \u0432\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043e\u0444\u043b\u0430\u0439\u043d",
                "change-to-drag-and-release": "\u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u041f\u043b\u044a\u0437\u0433\u0430\u043d\u0435 \u0438 \u041f\u0443\u0441\u043a\u0430\u043d\u0435",
                accept: "\u041f\u0440\u0438\u0435\u043c\u0435\u0442\u0435",
                cancel: "\u041e\u0442\u043a\u0430\u0437",
                "storage-not-provided-bookmark": "\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0442\u043e \u0441\u044a\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e. \u041e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0442\u0430\u0437\u0438 \u0443\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0438 \u0434\u0430 \u044f \u043f\u0440\u0435\u0437\u0430\u0440\u0435\u0434\u0438\u0442\u0435.",
                "dont-display-again": "\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u0439 \u0442\u0430\u0437\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0432\u043e",
                "web-server-required": "\u0422\u043e\u0437\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u0435\u043b\u0435\u043d \u0442\u0443\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u044a\u0434\u0435 \u043f\u0443\u0441\u043d\u0430\u0442 \u043e\u0442 \u043b\u043e\u043a\u0430\u043b\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u041c\u043e\u043b\u044f, \u043a\u0430\u0447\u0435\u0442\u0435 \u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043e\u043f\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e.\n\u0410\u043a\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u0435, \u0438\u0437\u0442\u0435\u0433\u043b\u0435\u0442\u0435 htm \u0444\u0430\u0439\u043b\u0430 (\u0438\u043b\u0438 \u0446\u044f\u043b\u0430\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u043d\u0430 \u0442\u0443\u0440\u0430) \u0432\u044a\u0440\u0445\u0443 \u0438\u043a\u043e\u043d\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e TourViewer.",
                download: "\u0418\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435",
                "change-to-click-and-move": "\u041f\u0440\u043e\u043c\u0435\u043d\u0435\u0442\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u041a\u043b\u0438\u043a\u0432\u0430\u043d\u0435 \u0438 \u041f\u0440\u0435\u043c\u0435\u0441\u0442\u0432\u0430\u043d\u0435",
                yes: "\u0434\u0430",
                "delete-downloaded": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435",
                "use-safari-for-vr": "\u041f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0432\u0430\u043c\u0435 Safari, \u0437\u0430 \u0434\u0430 \u0440\u0430\u0437\u0433\u043b\u0435\u0434\u0430\u0442\u0435 \u0442\u043e\u0437\u0438 \u0442\u0443\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c VR",
                "exit-fullscreen": "\u0418\u0437\u043b\u0435\u0437\u0442\u0435 \u043e\u0442 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d",
                no: "\u043d\u0435",
                "download-failed": "\u0418\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435\u0442\u043e \u0441\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438",
                "giroscope-disabled-http": "\u0418\u043c\u0430\u0442\u0435 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u0442\u0430\u0437\u0438 \u0443\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0447\u0440\u0435\u0437 http, \u0442\u0430\u043a\u0430 \u0447\u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u044a\u0442 \u0434\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0440\u0435\u0436\u0438\u043c\u044a\u0442 VR \u0441\u0430 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0438, \u043c\u043e\u043b\u044f, \u043e\u0442\u0432\u043e\u0440\u0435\u0442\u0435 \u0433\u043e \u0447\u0440\u0435\u0437 https, \u0437\u0430 \u0434\u0430 \u0433\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0442\u0435.",
                "cookies-notice": "\u0422\u0430\u0437\u0438 \u0443\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0431\u0438\u0441\u043a\u0432\u0438\u0442\u043a\u0438 \u0437\u0430 \u0441\u044a\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0430\u043d\u043d\u0438 \u0437\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e. \u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043c\u043e\u043b\u044f, \u043f\u043e\u0441\u0435\u0442\u0435\u0442\u0435 <a> \u041f\u0440\u0430\u0432\u0438\u043b\u0430\u0442\u0430 \u0437\u0430 \u0431\u0438\u0441\u043a\u0432\u0438\u0442\u043a\u0438\u0442\u0435 </a>.",
                "use-cardboard": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439 Cardboard",
                "launch-default-browser": "\u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u044a\u0440\u0430 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435",
                "rotate-device": "\u041c\u043e\u043b\u044f \u0437\u0430\u0432\u044a\u0440\u0442\u0435\u0442\u0435 \u0432\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
                "exit-vr": "\u0418\u0437\u043b\u0438\u0437\u0430\u043d\u0435 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c VR",
                "storage-not-provided-launch-from-desktop": "\u041c\u043e\u043b\u044f, \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0439\u0442\u0435 \u043e\u0431\u0438\u043a\u043e\u043b\u043a\u0430\u0442\u0430 \u043e\u0442 \u0438\u043a\u043e\u043d\u0430\u0442\u0430 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430, \u0437\u0430 \u0434\u0430 \u044f \u0438\u0437\u0442\u0435\u0433\u043b\u0438\u0442\u0435.",
                "disable-measure": "Stop measuring",
                downloading: "\u0418\u0437\u0442\u0435\u0433\u043b\u044f\u043d\u0435",
                "cardboard-v2": "\u0410\u043a\u043e \u0438\u043c\u0430\u0442\u0435 \u043e\u0447\u0438\u043b\u0430 Cardboard v2, \u043a\u043e\u0438\u0442\u043e \u0440\u0430\u0437\u043f\u043e\u043b\u0430\u0433\u0430\u0442 \u0441 \u0431\u0443\u0442\u043e\u043d, \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043f\u043e\u0433\u043b\u0435\u0434\u043d\u0435\u0442\u0435 \u0445\u043e\u0442\u0441\u043f\u043e\u0442\u0430 \u0438 \u0434\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 \u0431\u0443\u0442\u043e\u043d\u0430, \u0437\u0430 \u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u0442\u043e \u043c\u0443.",
                "enable-video-audio-prompt": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e?",
                reject: "\u041e\u0442\u0445\u0432\u044a\u0440\u043b\u0435\u0442\u0435",
                downloaded: "\u0422\u043e\u0437\u0438 \u0442\u0443\u0440 \u0435 \u0438\u0437\u0442\u0435\u0433\u043b\u0435\u043d \u0437\u0430 \u0432\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043e\u0444\u043b\u0430\u0439\u043d.",
                "samsung-internet-vr-app-info": "\u0410\u043a\u043e \u0438\u043c\u0430\u0442\u0435 \u043e\u0447\u0438\u043b\u0430 Gear VR, \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 \u0441 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0438 \u0441\u0442\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043b\u0438 Samsung Internet for VR, \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0438 \u0437\u0430 \u043f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u0442\u043e\u0432\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0432\u044a\u0432 VR. \u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 Samsung Internet \u0431\u0440\u0430\u0443\u0437\u044a\u0440 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435.",
                "samsung-internet-vr-info": "\u0410\u043a\u043e \u0438\u043c\u0430\u0442\u0435 \u043e\u0447\u0438\u043b\u0430 Gear VR, \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 \u0441 \u0442\u043e\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0438 \u0441\u0442\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043b\u0438 Samsung Internet for VR, \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0433\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0438 \u0437\u0430 \u043f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u0442\u043e\u0432\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0432\u044a\u0432 VR. \u0421\u0435\u0433\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u043b\u043e\u0436\u0438\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u043d\u0438\u044f \u0441\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432 \u043e\u0447\u0438\u043b\u0430\u0442\u0430 \u0437\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043d\u0430 \u0440\u0435\u0430\u043b\u043d\u043e\u0441\u0442.",
                "enable-video-prompt": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e?",
                "giroscope-disabled-safari-request-permission": ["\u0414\u043e\u0441\u0442\u044a\u043f\u044a\u0442 \u0437\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0440\u0435\u0436\u0438\u043c\u044a\u0442 VR \u0441\u0430 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0438 \u0437\u0430 \u0442\u043e\u0437\u0438 \u0441\u0430\u0439\u0442.",
                    "\u0417\u0430 \u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043d\u043e \u0442\u0430\u0437\u0438 \u0443\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043c\u043e\u043b\u044f, \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438 \u0438 \u043f\u0440\u0438\u0435\u043c\u0435\u0442\u0435 \u0438\u0441\u043a\u0430\u043d\u0435\u0442\u043e \u0437\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435."],
                "storage-not-provided-launch-from-homescreen": "\u041c\u043e\u043b\u044f, \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0439\u0442\u0435 \u043e\u0431\u0438\u043a\u043e\u043b\u043a\u0430\u0442\u0430 \u043e\u0442 \u0438\u043a\u043e\u043d\u0430\u0442\u0430 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043d\u0438\u044f \u0435\u043a\u0440\u0430\u043d, \u0437\u0430 \u0434\u0430 \u044f \u0438\u0437\u0442\u0435\u0433\u043b\u0438\u0442\u0435.",
                "enter-fullscreen": "\u0412\u043b\u0435\u0437\u0442\u0435 \u0432 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d",
                "use-cardboard-v2": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439 Cardboard v2",
                unmute: "\u041f\u0443\u0441\u043a\u0430\u043d\u0435 \u0437\u0432\u0443\u043a",
                "enter-vr": "\u0412\u043b\u0435\u0437 \u0432\u044a\u0432 VR \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u0432\u0441\u044f\u043a\u0430\u043a\u0432\u0438 \u0441\u044a\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0438 Google Cardboard \u043e\u0447\u0438\u043b\u0430, \u0437\u0430 \u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u043e\u0432\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0432\u044a\u0432 VR.",
                "refresh-downloaded": "\u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435",
                "use-default-cardboard": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435",
                "enable-audio-prompt": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0430\u0443\u0434\u0438\u043e?"
            },
            "ca-es": {
                mute: "Silenciar",
                "cardboard-v1": "Si no esteu segurs de quina versi\u00f3 de cartr\u00f3 utilitzeu, seleccioneu el control de punt d'acc\u00e9s per defecte. Despr\u00e9s, simplement veureu un punt d'acc\u00e9s i espereu fins que s'activi l'acci\u00f3.",
                "download-tour": "Descarregueu la visita virtual per a jugar fora de l\u00ednia",
                "change-to-drag-and-release": "Canvieu el mode de control a Arrossegar i deixeu anar",
                accept: "Accepta",
                cancel: "Cancel\u00b7lar",
                "storage-not-provided-bookmark": "S'ha denegat l'emmagatzematge persistent. Proveu de marcar aquesta p\u00e0gina web i torneu-la a carregar.",
                "dont-display-again": "No tornis a mostrar aquesta informaci\u00f3",
                "web-server-required": "Aquesta visita virtual no es pot reproduir des d'una unitat local. Carregueu-lo a Internet i torneu-ho a provar.\nSi ho preferiu, arrossegueu el fitxer htm (o tota la carpeta de la visita virtual) a la icona de l'aplicaci\u00f3 TourViewer.",
                download: "Descarregar",
                "change-to-click-and-move": "Canvieu el mode de control a Fer clic i desplaceu",
                yes: "s\u00ed",
                "delete-downloaded": "Suprimeix",
                "use-safari-for-vr": "Recomanem Safari per a visualitzar aquesta visita virtual en mode VR",
                "exit-fullscreen": "Surt de pantalla completa",
                no: "no",
                "download-failed": "Error de desc\u00e0rrega",
                "giroscope-disabled-http": "Accediu a aquesta p\u00e0gina web a trav\u00e9s de http de manera que el moviment i l\u2019orientaci\u00f3 del dispositiu i el mode VR estan desactivats, accediu-hi mitjan\u00e7ant https per habilitar-les.",
                "cookies-notice": "Aquesta p\u00e0gina web utilitza cookies per recopilar estad\u00edstiques d\u2019\u00fas. Per obtenir m\u00e9s informaci\u00f3, visiteu la <a>Pol\u00edtica de cookies</a>.",
                "use-cardboard": "Utilitzeu Cardboard",
                "launch-default-browser": "Inicieu el navegador per defecte",
                "rotate-device": "Gireu el dispositiu",
                "exit-vr": "Surt de VR",
                "storage-not-provided-launch-from-desktop": "Torneu a iniciar la visita virtual des de la icona de l'escriptori per a descarregar-la.",
                "disable-measure": "Stop measuring",
                downloading: "Baixant",
                "cardboard-v2": "Si teniu unes Cardboard v2, que venen amb un bot\u00f3, podeu mirar cap a un punt de vista i pr\u00e9mer el bot\u00f3 per activar-lo.",
                "enable-video-audio-prompt": "Habilitar v\u00eddeo i \u00e0udio?",
                reject: "Rebutjar",
                downloaded: "Aquesta visita virtual es descarrega per a reproduir-la fora de l\u00ednia.",
                "samsung-internet-vr-app-info": "Si teniu un auricular Gear VR compatible amb aquest dispositiu i heu instal\u00b7lat Samsung Internet per a VR, tamb\u00e9 podeu utilitzar-lo per visualitzar aquest contingut en VR, heu de fer que Samsung Internet sigui el vostre navegador predeterminat.",
                "samsung-internet-vr-info": "Si teniu un auricular Gear VR compatible amb aquest dispositiu i heu instal\u00b7lat Samsung Internet per a VR, tamb\u00e9 podeu utilitzar-lo per visualitzar aquest contingut en VR, nom\u00e9s heu de posar el tel\u00e8fon m\u00f2bil als auriculars.",
                "enable-video-prompt": "Activar v\u00eddeo?",
                "giroscope-disabled-safari-request-permission": ["Aquest lloc web est\u00e0 desactivat en el moviment i en la direcci\u00f3 o en mode VR del dispositiu.", "Per veure correctament aquesta p\u00e0gina web, feu clic a Continuar i accepteu la sol\u00b7licitud de perm\u00eds si se us demana."],
                "storage-not-provided-launch-from-homescreen": "Torneu a iniciar la visita virtual des de la icona de la pantalla inicial.",
                "enter-fullscreen": "Entra a pantalla completa",
                "use-cardboard-v2": "Utilitzeu Cardboard v2",
                unmute: "No activa",
                "enter-vr": "Introdu\u00efu contingut de VR",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Podeu utilitzar qualsevol auricular de Google Cardboard compatible per a visualitzar aquest contingut en VR.",
                "refresh-downloaded": "Actualitzaci\u00f3",
                "use-default-cardboard": "\u00das per defecte",
                "enable-audio-prompt": "Activar \u00e0udio?"
            },
            "da-dk": {
                mute: "Deaktiver lyd",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "Skift kontroltilstand for at tr\u00e6kke og slippe",
                accept: "Acceptere",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "Skift kontroltilstand for at klikke og flytte",
                yes: "Ja",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Afslut fuldsk\u00e6rm",
                no: "ingen",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Denne webside bruger cookies til at indsamle brugsstatistikker. For mere information, se venligst <a> Cookiepolitik </a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Afvise",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Aktiv\u00e9r lyd og video?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Aktiv\u00e9r video?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Indtast fuldsk\u00e6rm",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Aktiv\u00e9r lyd",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Aktiv\u00e9r lyd?"
            },
            "de-de": {
                mute: "Deaktiviere Audio",
                "cardboard-v1": "Wenn Sie sich nicht sicher sind, welche Cardboard-Version Sie verwenden, w\u00e4hlen Sie die Standard-Hotspot-Steuerung. Sie schauen dann einfach auf einen Hotspot und warten, bis die jeweilige Aktion ausgel\u00f6st wird.",
                "download-tour": "Tour zum Offline-Abspielen herunterladen",
                "giroscope-disabled-safari-request-permission": ["Der Bewegungs- und Orientierungszugriff, sowie VR Modus Ihres Ger\u00e4ts ist f\u00fcr diese Seite deaktiviert.", "Um diese Webseite korrekt anzuzeigen, klicken Sie auf Weiter und akzeptieren Sie die Erlaubnisanfrage, wenn Sie dazu aufgefordert werden."],
                accept: "Akzeptieren",
                download: "Download",
                downloading: "Downloading",
                "dont-display-again": "Diese Info nicht mehr anzeigen",
                "web-server-required": "Diese Virtual Tour kann nicht von einem lokalen Laufwerk abgespielt werden. Laden Sie Ihre Tour ins Internet und versuchen Sie es erneut.\nAlternativ, ziehen Sie die htm Datei (oder den ganzen Tour Ordner) auf das Icon der Tour Viewer App, um die Tour direkt lokal abzuspielen.",
                cancel: "Abbrechen",
                "change-to-click-and-move": "\u00c4ndern Sie den Steuerungsmodus, um zu klicken und zu drehen",
                yes: "ja",
                "delete-downloaded": "L\u00f6schen",
                "use-safari-for-vr": "Wir empfehlen Safari, um diese Tour im VR-Modus zu sehen",
                "exit-fullscreen": "Vollbild verlassen",
                no: "nein",
                "storage-not-provided-bookmark": "Dauerhafte Speicherung verweigert. Versuchen Sie, diese Seite als Lesezeichen zu speichern und erneut zu laden.",
                "download-failed": "Download fehlgeschlagen",
                "giroscope-disabled-http": "Der Bewegungs- und Ausrichtungsszugriff Ihres Ger\u00e4ts ist f\u00fcr diese Webseite deaktiviert. Greifen Sie bitte \u00fcber https darauf zu.",
                "cookies-notice": "Diese Webseite verwendet Cookies, um Nutzungsstatistiken zu sammeln. Weitere Informationen finden Sie in der <a>Cookie-Richtlinie</a>.",
                "use-cardboard": "Cardboard verwenden",
                "launch-default-browser": "Im Standardbrowser starten",
                "rotate-device": "Bitte drehen Sie Ihr Ger\u00e4t",
                "exit-vr": "VR verlassen",
                reject: "Ablehnen",
                "disable-measure": "Messung beenden",
                "change-to-drag-and-release": "\u00c4ndern Sie den Steuerungsmodus zu Ziehen und Loslassen",
                "cardboard-v2": "Wenn Sie ein Cardboard v2-Headset haben, das mit einer Taste ausgestattet ist, k\u00f6nnen Sie auf einen Hotspot blicken und die Taste dr\u00fccken, um dessen Aktion auszul\u00f6sen.",
                "enable-video-audio-prompt": "Video und Audio aktivieren?",
                "storage-not-provided-launch-from-desktop": "Bitte starten Sie die Tour erneut \u00fcber das Desktop-Symbol, um sie herunterzuladen.",
                downloaded: "Diese Tour ist zum Offline-Abspielen heruntergeladen.",
                "samsung-internet-vr-app-info": "Wenn Sie ein Gear VR-Headset haben, das mit diesem Ger\u00e4t kompatibel ist, und Sie Samsung Internet f\u00fcr VR installiert haben, k\u00f6nnen Sie es auch verwenden, um diese Inhalte in VR anzusehen. Machen Sie dazu Samsung Internet zu Ihrem Standardbrowser.",
                "samsung-internet-vr-info": "Wenn Sie ein Gear VR-Headset haben, das mit diesem Ger\u00e4t kompatibel ist, und Sie Samsung Internet f\u00fcr VR installiert haben, k\u00f6nnen Sie es auch verwenden, um diese Inhalte in VR zu sehen. Setzen Sie dazu nun das Mobiltelefon auf das Headset.",
                "enable-video-prompt": "Video aktivieren?",
                "storage-not-provided-launch-from-homescreen": "Bitte starten Sie die Tour erneut \u00fcber das Symbol auf dem Startbildschirm, um sie herunterzuladen.",
                "enter-fullscreen": "Vollbildmodus aktivieren",
                "use-cardboard-v2": "Cardboard v2 verwenden",
                unmute: "Audio aktivieren",
                "enter-vr": "VR Inhalt eingeben",
                "enable-measure": "Messung beginnen",
                "use-cardboard-info": "Sie k\u00f6nnen jedes kompatible Google Cardboard-Headset verwenden, um diese Inhalte in VR zu sehen.",
                "refresh-downloaded": "Aktualisieren",
                "use-default-cardboard": "Standard verwenden",
                "enable-audio-prompt": "Audio aktivieren?"
            },
            "el-gr": {
                mute: "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u03ae\u03c7\u03bf",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "\u0391\u03bb\u03bb\u03ac\u03be\u03c4\u03b5 \u03c4\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03cd\u03c1\u03b5\u03c4\u03b5 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03c0\u03b5\u03bb\u03b5\u03c5\u03b8\u03b5\u03c1\u03ce\u03c3\u03b5\u03c4\u03b5",
                accept: "\u0391\u03c0\u03bf\u03b4\u03ad\u03c7\u03bf\u03bc\u03b1\u03b9",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "\u0391\u03bb\u03bb\u03ac\u03be\u03c4\u03b5 \u03c4\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03b5\u03c4\u03b1\u03ba\u03b9\u03bd\u03b7\u03b8\u03b5\u03af\u03c4\u03b5",
                yes: "\u039d\u03b1\u03af",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "\u0388\u03be\u03bf\u03b4\u03bf\u03c2 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c0\u03bb\u03ae\u03c1\u03b7 \u03bf\u03b8\u03cc\u03bd\u03b7",
                no: "\u03cc\u03c7\u03b9",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03b9\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af cookie \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03c3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae \u03c3\u03c4\u03b1\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03ce\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2. \u0393\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2, \u03b5\u03c0\u03b9\u03c3\u03ba\u03b5\u03c6\u03b8\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd <a> \u03a0\u03bf\u03bb\u03b9\u03c4\u03b9\u03ba\u03ae cookie </a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "\u0391\u03c0\u03bf\u03c1\u03c1\u03af\u03c0\u03c4\u03c9",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ae\u03c7\u03bf\u03c5 \u03ba\u03b1\u03b9 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf;",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf;",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03bb\u03ae\u03c1\u03b7 \u03bf\u03b8\u03cc\u03bd\u03b7",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ae\u03c7\u03bf\u03c5",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ae\u03c7\u03bf\u03c5;"
            },
            "en-us": {
                mute: "Mute",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "Change control mode to Drag and Release",
                accept: "Accept",
                cancel: "Cancel",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                download: "Download",
                "change-to-click-and-move": "Change control mode to Click and Move",
                yes: "yes",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Exit fullscreen",
                no: "no",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "This web page uses cookies to collect usage statistics. For more information, please visit the <a>Cookie Policy</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Enable video and audio?",
                reject: "Reject",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Enable video?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Enter fullscreen",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Unmute",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Enable audio?"
            },
            "es-es": {
                mute: "Silenciar",
                "cardboard-v1": "Si no esta seguro de que versi\u00f3n de Cardboard debe usar escoja la selecci\u00f3n de hotspot por defecto. Solo tendr\u00e1 que apuntar al hotspot y esperar para que se ejecute la acci\u00f3n.",
                "download-tour": "Descargar el tour para reproducirlo sin conexi\u00f3n",
                "change-to-drag-and-release": "Cambiar el modo de control a arrastrar y soltar",
                accept: "Aceptar",
                "use-cardboard-v2": "Usar Cardboard v2",
                "storage-not-provided-bookmark": "Almacenamiento persistente denagado. Intente a\u00f1adir la p\u00e1gina a los marcadores y recargarla.",
                "dont-display-again": "No volver a mostrar esta informaci\u00f3n",
                "web-server-required": "Este tour virtual no puede reproducirse desde una unidad local. Por favor s\u00fabalo a internet y pruebe de nuevo.\nSi lo prefiere puede arrastrar el archivo html o la carpeta con el tour sobre el icono de la aplicaci\u00f3n Tour Viewer de su escritorio.",
                download: "Descargar",
                "change-to-click-and-move": "Cambiar el modo de control a pulsar y mover",
                yes: "si",
                "delete-downloaded": "Borrar",
                "use-safari-for-vr": "Recomendamos Safari para ver este tour en modo VR",
                "exit-fullscreen": "Salir de pantalla completa",
                no: "no",
                "download-failed": "La descarga ha fallado",
                "giroscope-disabled-http": "Est\u00e1 accediendo a esta p\u00e1gina web por http por lo que el acceso al movimiento y la orientaci\u00f3n del dispositivo est\u00e1 deshabilitado, por favor acceda por https.",
                "cookies-notice": "Esta p\u00e1gina usa cookies para recolectar estad\u00edsticas de uso. Para m\u00e1s informaci\u00f3n, visite la <a>Pol\u00edtica de Cookies</a>.",
                "use-cardboard": "Usar Cardboard",
                "launch-default-browser": "Lanzar en el navegador por defecto",
                "rotate-device": "Por favor, gire el dispositivo",
                "exit-vr": "Salir de VR",
                "storage-not-provided-launch-from-desktop": "Por favor lance el tour desde el escritorio para descargarlo.",
                "disable-measure": "Stop measuring",
                cancel: "Cancel",
                downloading: "Descargando",
                "cardboard-v2": "Si tiene unas gafas Cardboard v2, que vienen con un bot\u00f3n, puede apuntar al hotspot y pulsar el bot\u00f3n para que se ejecute su acci\u00f3n.",
                "enable-video-audio-prompt": "\u00bfActivar v\u00eddeo y audio?",
                reject: "Rechazar",
                downloaded: "Este tour esta descargado para reproducirlo sin conexi\u00f3n.",
                "samsung-internet-vr-app-info": "Si tiene unas gafas Gear VR compatibles con este dispositivo y tiene instalado Samsung Internet for VR puede usarlo para ver este contenido en VR, necesita hacer Samsung Internet su navegador por defecto.",
                "samsung-internet-vr-info": "Si tiene unas gafas Gear VR compatibles con este dispositivo y tiene instalado Samsung Internet for VR puede usarlo para ver este contenido en VR, solo tiene que poner ahora el dispositivo en las gafas.",
                "enable-video-prompt": "\u00bfActivar v\u00eddeo?",
                "giroscope-disabled-safari-request-permission": ["El acceso al movimiento y la orientaci\u00f3n del dispositivo est\u00e1 deshabiltado para este sitio.", "Para ver correctamente la p\u00e1gina por favor pulse Continuar y acepte la petici\u00f3n de permiso si se muestra."],
                "storage-not-provided-launch-from-homescreen": "Por favor lance el tour desde el icono de la pantalla de inicio para descargarlo.",
                "enter-fullscreen": "Mostrar en pantalla completa",
                unmute: "Habilitar sonido",
                "enter-vr": "Entrar al contenido VR",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Puede usar unas gafas compatibles con Google Cardboard para ver este contenido en VR.",
                "refresh-downloaded": "Actualizar",
                "use-default-cardboard": "Usar versi\u00f3n por defecto",
                "enable-audio-prompt": "\u00bfActivar audio?"
            },
            "fi-fi": {
                mute: "Poista \u00e4\u00e4ni k\u00e4yt\u00f6st\u00e4",
                "cardboard-v1": "Mik\u00e4li et ole varma, mit\u00e4 Cardboard-versiota k\u00e4yt\u00e4t, valitse oletusarvoinen hotspot-hallinta. T\u00e4m\u00e4n j\u00e4lkeen katsomalla hotspotia, toiminto k\u00e4ynnistyy.",
                "download-tour": "Lataa t\u00e4m\u00e4 sis\u00e4lt\u00f6 offline-toistoa varten",
                "change-to-drag-and-release": "Muuta ohjaustilaa vet\u00e4m\u00e4ll\u00e4 ja vapauttamalla",
                accept: "Hyv\u00e4ksy",
                download: "Lataa",
                "storage-not-provided-bookmark": "Tallennus ep\u00e4onnistui. Kokeile lis\u00e4t\u00e4 t\u00e4m\u00e4 verkkosivu kirjanmerkkeihin ja suorita lataus uudelleen.",
                "dont-display-again": "\u00c4l\u00e4 n\u00e4yt\u00e4 t\u00e4t\u00e4 ilmoitusta uudelleen",
                "web-server-required": "T\u00e4t\u00e4 sis\u00e4lt\u00f6\u00e4 ei voi toistaa paikalliselta asemalta. Lataa sis\u00e4lt\u00f6 internet-palvelimelle ja yrit\u00e4 uudelleen.\nVoit my\u00f6s vet\u00e4\u00e4 htm-tiedoston (tai koko kansion) TourViewer-sovelluskuvakkeen p\u00e4\u00e4lle.",
                cancel: "Sulje",
                "change-to-click-and-move": "Muuta ohjaustilaa klikkaamalla ja siirt\u00e4m\u00e4ll\u00e4",
                yes: "Kyll\u00e4",
                "delete-downloaded": "Poista",
                "use-safari-for-vr": "Suosittelemme Safari-selainta t\u00e4m\u00e4n sis\u00e4ll\u00f6n katseluun VR-tilassa.",
                "exit-fullscreen": "Sulje koko n\u00e4yt\u00f6n n\u00e4kym\u00e4",
                no: "Ei",
                "download-failed": "Lataus ep\u00e4onnistui",
                "giroscope-disabled-http": "K\u00e4yt\u00e4t t\u00e4t\u00e4 verkkosivua http:n kautta, joten laitteesi liiketunnistimet sek\u00e4 VR-tila on poistettu k\u00e4yt\u00f6st\u00e4. Ota ne k\u00e4ytt\u00f6\u00f6n siirtym\u00e4ll\u00e4 sivulle https:n kautta.",
                "cookies-notice": "T\u00e4m\u00e4 verkkosivu k\u00e4ytt\u00e4\u00e4 ev\u00e4steit\u00e4 k\u00e4ytt\u00f6tilastojen ker\u00e4\u00e4miseen. Lis\u00e4tietoja <a>ev\u00e4stek\u00e4yt\u00e4nn\u00f6st\u00e4</a>.",
                "use-cardboard": "K\u00e4yt\u00e4 Cardboardia",
                "launch-default-browser": "K\u00e4ynnist\u00e4 oletusselaimessa",
                "rotate-device": "K\u00e4\u00e4nn\u00e4 laitettasi",
                "exit-vr": "Poistu VR-tilasta",
                reject: "Hylk\u00e4\u00e4",
                "disable-measure": "Lopeta mittaaminen",
                downloading: "Ladataan",
                "cardboard-v2": "Mik\u00e4li sinulla on Cardboard v2 -virtuaalilasit, joissa on painike, voit katsoa hotspotia ja aktivoida sen painamalla painiketta.",
                "enable-video-audio-prompt": "Otetaanko \u00e4\u00e4ni ja video k\u00e4ytt\u00f6\u00f6n?",
                "storage-not-provided-launch-from-desktop": "Uudelleenk\u00e4ynnist\u00e4 t\u00e4m\u00e4 sis\u00e4lt\u00f6 ty\u00f6p\u00f6yd\u00e4n kuvakkeesta aloittaaksesi lataamisen.",
                downloaded: "T\u00e4m\u00e4 sis\u00e4lt\u00f6 on ladattu offline-toistoa varten",
                "samsung-internet-vr-app-info": "Mik\u00e4li sinulla on t\u00e4m\u00e4n laitteen kanssa yhteensopivat Gear VR -virtuaalilasit ja olet asentanut Samsung Internet for VR:n, voit k\u00e4ytt\u00e4\u00e4 virtuaalilaseja t\u00e4m\u00e4n sis\u00e4ll\u00f6n katseluun VR-tilassa. Sinun on lis\u00e4ksi m\u00e4\u00e4ritett\u00e4v\u00e4 Samsung Internet oletusselaimeksi.",
                "samsung-internet-vr-info": "Mik\u00e4li sinulla on t\u00e4m\u00e4n laitteen kanssa yhteensopivat Gear VR -virtuaalilasit ja olet asentanut Samsung Internet for VR:n, voit k\u00e4ytt\u00e4\u00e4 virtuaalilaseja t\u00e4m\u00e4n sis\u00e4ll\u00f6n katseluun VR-tilassa. Aseta \u00e4lypuhelin virtuaalilaseihin aloittaaksesi.",
                "enable-video-prompt": "Otetaanko video k\u00e4ytt\u00f6\u00f6n?",
                "giroscope-disabled-safari-request-permission": ["Laitteesi liiketunnistimen k\u00e4ytt\u00f6oikeus ja VR-tila on poistettu k\u00e4yt\u00f6st\u00e4 t\u00e4ll\u00e4 sivustolla.",
                    "N\u00e4hd\u00e4ksesi t\u00e4m\u00e4n verkkosivun oikein, valitse jatka ja hyv\u00e4ksy lupapyynt\u00f6 pyydett\u00e4ess\u00e4."],
                "storage-not-provided-launch-from-homescreen": "Uudelleenk\u00e4ynnist\u00e4 t\u00e4m\u00e4 sis\u00e4lt\u00f6 kotin\u00e4yt\u00f6n kuvakkeesta aloittaaksesi lataamisen",
                "enter-fullscreen": "Avaa koko n\u00e4yt\u00f6n n\u00e4kym\u00e4",
                "use-cardboard-v2": "K\u00e4yt\u00e4 Cardboard v2:sta",
                unmute: "Ota \u00e4\u00e4ni k\u00e4ytt\u00f6\u00f6n",
                "enter-vr": "Siirry VR-tilaan",
                "enable-measure": "Aloita mittaaminen",
                "use-cardboard-info": "Voit k\u00e4ytt\u00e4\u00e4 mit\u00e4 tahansa yhteensopivia Google Cardboard -virtuaalilaseja katsellaksesi t\u00e4t\u00e4 sis\u00e4lt\u00f6\u00e4 VR-tilassa.",
                "refresh-downloaded": "P\u00e4ivit\u00e4",
                "use-default-cardboard": "K\u00e4yt\u00e4 oletuksena",
                "enable-audio-prompt": "Otetaanko \u00e4\u00e4ni k\u00e4ytt\u00f6\u00f6n?"
            },
            "fr-fr": {
                mute: "D\u00e9sactiver l'audio",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "giroscope-disabled-safari-request-permission": ["L'acc\u00e8s aux mouvements et \u00e0 l'orientation de votre appareil est d\u00e9sactiv\u00e9 pour ce site.", "Pour voir correctement cette page Web, veuillez cliquer sur Continuer et accepter la demande d'autorisation si elle est affich\u00e9e."],
                accept: "Accepter",
                download: "Download",
                downloading: "Downloading",
                "dont-display-again": "Ne plus afficher cette information",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "Changer le mode de contr\u00f4le pour cliquer et d\u00e9placer",
                yes: "oui",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Quitter le mode plein \u00e9cran",
                no: "non",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "L'acc\u00e8s aux mouvements et \u00e0 l'orientation de votre appareil est d\u00e9sactiv\u00e9 pour cette page Web. Veuillez y acc\u00e9der via https.",
                "cookies-notice": "Cette page Web utilise des cookies pour collecter des statistiques d'utilisation. Pour plus d'informations, veuillez consulter la <a>Politique relative aux cookies</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Rejeter",
                "disable-measure": "Stop measuring",
                "change-to-drag-and-release": "Changer le mode de contr\u00f4le pour faire glisser et rel\u00e2cher",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Activer l'audio? et la vid\u00e9o?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Activer la vid\u00e9o?",
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Passer en mode plein \u00e9cran",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Activer l'audio",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Activer l'audio?"
            },
            "hr-hr": {
                mute: "nijem",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "Promijenite na\u010din upravljanja u povla\u010denje i otpu\u0161tanje",
                accept: "Prihvatiti",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "Promijenite na\u010din upravljanja na Klik i Premjesti",
                yes: "Da",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Iza\u0111ite s punog zaslona",
                no: "Ne",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Ova web stranica koristi kola\u010di\u0107e za prikupljanje statistike upotrebe. Za vi\u0161e informacija posjetite <a>Pravila o kola\u010di\u0107ima</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Odbiti",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Omogu\u0107iti videozapis i zvuk?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Omogu\u0107ite videozapis?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Unesite cijeli zaslon",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Uklju\u010di mikrofon",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "\u017delite li omogu\u0107iti zvuk?"
            },
            "hu-hu": {
                mute: "N\u00e9m\u00edt\u00e1s",
                "cardboard-v1": "Ha nem vagy biztos benne, hogy milyen VR eszk\u00f6zt haszn\u00e1lsz, akkor v\u00e1laszd az alap\u00e9rtelmezettet \u00e9s az egyes hotspot-ok megtekint\u00e9s\u00e9hez csak tartsd ott a jel\u00f6l\u0151t.",
                "download-tour": "T\u00fara let\u00f6lt\u00e9se offline megtekint\u00e9shez",
                "change-to-drag-and-release": "Ir\u00e1ny\u00edt\u00e1s \u00e1t\u00e1ll\u00edt\u00e1sa: megfog \u00e9s mozgat m\u00f3dra",
                accept: "Elfogad",
                cancel: "M\u00e9gsem",
                "storage-not-provided-bookmark": "Pr\u00f3b\u00e1lja meg az oldalt megjel\u00f6lni \u00e9s \u00fajrat\u00f6lteni!",
                "dont-display-again": "Ne mutasd \u00fajra",
                "web-server-required": "Ez a t\u00fara nem j\u00e1tszat\u00f3 le helyi futtat\u00e1ssal, k\u00e9rlek t\u00f6lsd fel az internetre \u00e9s pr\u00f3b\u00e1ld meg \u00fajra\nM\u00e1sik megold\u00e1s, ha a Tourviewer applik\u00e1ci\u00f3ra h\u00fazod a t\u00fara f\u00e1jlt, vagy az azt tartalmaz\u00f3 t\u00fara mapp\u00e1t.",
                download: "Let\u00f6lt\u00e9s",
                "change-to-click-and-move": "Ir\u00e1ny\u00edt\u00e1s \u00e1t\u00e1ll\u00edt\u00e1sa kattint \u00e9s k\u00f6rben\u00e9z m\u00f3dra",
                yes: "igen",
                "delete-downloaded": "T\u00f6rl\u00e9s",
                "use-safari-for-vr": "Azt javasoljuk, hogy haszn\u00e1lj Safari b\u00f6ng\u00e9sz\u0151t a VR n\u00e9zet megtekint\u00e9s\u00e9hez",
                "exit-fullscreen": "Kil\u00e9p\u00e9s a teljesk\u00e9perny\u0151 m\u00f3db\u00f3l",
                no: "nem",
                "download-failed": "Let\u00f6lt\u00e9s sikertelen",
                "giroscope-disabled-http": "Az oldalt https el\u0151taggal sz\u00fcks\u00e9ges megnyitnod ahhoz, hogy a k\u00e9sz\u00fcl\u00e9ked mozg\u00e1s\u00e1t \u00e9rz\u00e9kelni tudja.",
                "cookies-notice": "Ez a weboldal s\u00fctiket haszn\u00e1l a haszn\u00e1lati statisztik\u00e1k gy\u0171jt\u00e9s\u00e9hez. Tov\u00e1bbi inform\u00e1ci\u00f3\u00e9rt l\u00e1togasson el a <a>s\u00fctikre vonatkoz\u00f3 ir\u00e1nyelvekbe</a>.",
                "use-cardboard": "Cardboard haszn\u00e1lata",
                "launch-default-browser": "Futtat\u00e1s az alap\u00e9rtelmezett b\u00f6ng\u00e9sz\u0151ben",
                "rotate-device": "Forgasd el a telefont!",
                "exit-vr": "Kil\u00e9p\u00e9s a VR m\u00f3db\u00f3l",
                "storage-not-provided-launch-from-desktop": "K\u00e9rlek ind\u00edtsd \u00fajra az oldalt az asztalon tal\u00e1lhat\u00f3 iconra kattintva.",
                "disable-measure": "Stop measuring",
                downloading: "Let\u00f6lt\u00e9s",
                "cardboard-v2": "Ha Cardboard 2.0 t\u00edpus\u00fa eszk\u00f6zt haszn\u00e1lsz, akkor a kapcsol\u00f3kkal ir\u00e1ny\u00edthatod a t\u00far\u00e1t, kattinthatsz az egyes hotspotokra",
                "enable-video-audio-prompt": "Hang \u00e9s vide\u00f3 enged\u00e9lyez\u00e9se",
                reject: "Elutas\u00edt",
                downloaded: "Let\u00f6ltve offline megtekint\u00e9shez",
                "samsung-internet-vr-app-info": "Ha Samsung Gear VR szem\u00fcveget szeretn\u00e9l haszn\u00e1lni, akkor nyisd meg a Samsung internetb\u00f6ng\u00e9sz\u0151ben a t\u00far\u00e1t.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Vide\u00f3 enged\u00e9lyez\u00e9se",
                "giroscope-disabled-safari-request-permission": ["A megjelen\u00edt\u0151 eszk\u00f6z\u00f6d nem adott hozz\u00e1f\u00e9r\u00e9st a mozg\u00e1s \u00e9rz\u00e9kel\u00e9s\u00e9hez ezen az oldalon.", "Ahhoz hogy megfelel\u0151en l\u00e1sd az oldalt k\u00e9rlek enged\u00e9lyezd a hozz\u00e1f\u00e9r\u00e9st."],
                "storage-not-provided-launch-from-homescreen": "Ind\u00edtsd \u00fajra a t\u00far\u00e1t a home ikonra kattintva.",
                "enter-fullscreen": "Teljesk\u00e9perny\u0151",
                "use-cardboard-v2": "Cardboard 2.0 haszn\u00e1lata",
                unmute: "N\u00e9m\u00edt\u00e1s kikapcsol\u00e1sa",
                "enter-vr": "VR tartalom megtekint\u00e9se",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Haszn\u00e1lhatsz b\u00e1rmilyen google cardboard-ot ahhoz, hogy VR m\u00f3dban l\u00e1sd a t\u00far\u00e1t.",
                "refresh-downloaded": "Friss\u00edt\u00e9s",
                "use-default-cardboard": "Alap\u00e9rtelmezett haszn\u00e1lata",
                "enable-audio-prompt": "Hang enged\u00e9lyez\u00e9se"
            },
            "id-id": {
                mute: "Mute",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "Change control mode to Drag and Release",
                accept: "Menerima",
                cancel: "Cancel",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                download: "Download",
                "change-to-click-and-move": "Change control mode to Click and Move",
                yes: "yes",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Exit fullscreen",
                no: "no",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Halaman web ini menggunakan cookie untuk mengumpulkan statistik penggunaan. Untuk informasi lebih lanjut, silakan kunjungi <a>Kebijakan Cookie</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Enable video and audio?",
                reject: "Menolak",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Enable video?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Enter fullscreen",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Unmute",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Enable audio?"
            },
            "it-it": {
                mute: "Disabilita audio",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "Cambia la modalit\u00e0 di controllo per trascinare e rilasciare",
                accept: "Accettare",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "Cambia la modalit\u00e0 di controllo per fare clic e spostare",
                yes: "s\u00ec",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Esci dalla modalit\u00e0 schermo intero",
                no: "no",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Questa pagina web utilizza i cookie per raccogliere statistiche sull'utilizzo. Per ulteriori informazioni, visita la <a>Cookie Policy</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Rifiutare",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Abilita audio e video?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Abilita il video?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Entra a schermo intero",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Abilita audio",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Abilita l'audio?"
            },
            "ja-jp": {
                mute: "\u30df\u30e5\u30fc\u30c8",
                "cardboard-v1": "\u4f7f\u7528\u3057\u3066\u3044\u308bCardboard\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30db\u30c3\u30c8\u30b9\u30dd\u30c3\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u30db\u30c3\u30c8\u30b9\u30dd\u30c3\u30c8\u3092\u6ce8\u8996\u3057\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u52d5\u4f5c\u3059\u308b\u307e\u3067\u5f85\u6a5f\u3057\u307e\u3059\u3002\uff08\u4e00\u90e8\u52d5\u4f5c\u3057\u306a\u3044\u30a2\u30af\u30b7\u30e7\u30f3\u6709\u308a\uff09",
                "download-tour": "\u30aa\u30d5\u30e9\u30a4\u30f3\u518d\u751f\u7528\u30c4\u30a2\u30fc\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b",
                "change-to-drag-and-release": "\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30e2\u30fc\u30c9\u3092\u30c9\u30e9\u30c3\u30b0\uff06\u30ea\u30ea\u30fc\u30b9\u306b\u5909\u66f4",
                accept: "\u53d7\u3051\u5165\u308c\u308b",
                cancel: "\u30ad\u30e3\u30f3\u30bb\u30eb",
                "storage-not-provided-bookmark": "\u6c38\u7d9a\u7684\u306a\u4fdd\u5b58\u304c\u62d2\u5426\u3055\u308c\u305f\u3002\u3053\u306eWeb\u30da\u30fc\u30b8\u3092\u30d6\u30c3\u30af\u30de\u30fc\u30af\u3057\u3001\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044",
                "dont-display-again": "\u4eca\u5f8c\u3053\u306e\u60c5\u5831\u3092\u8868\u793a\u3057\u306a\u3044",
                "web-server-required": "\u3053\u306e\u30d0\u30fc\u30c1\u30e3\u30eb\u30c4\u30a2\u30fc\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30c9\u30e9\u30a4\u30d6\u304b\u3089\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3002\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u63a5\u7d9a\u3057\u3001\u3082\u3046\u4e00\u5ea6\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\n\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3001htm\u30d5\u30a1\u30a4\u30eb\uff08\u307e\u305f\u306f\u30c4\u30a2\u30fc\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u5168\u4f53\uff09\u3092\u300eTourViewer\u300f\u30a2\u30d7\u30ea\u306e\u30a2\u30a4\u30b3\u30f3\u306b\u30c9\u30e9\u30c3\u30b0\u3057\u307e\u3059",
                download: "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
                "change-to-click-and-move": "\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30e2\u30fc\u30c9\u3092\u30af\u30ea\u30c3\u30af\uff06\u30e0\u30fc\u30d6\u306b\u5909\u66f4",
                yes: "\u306f\u3044",
                "delete-downloaded": "\u524a\u9664",
                "use-safari-for-vr": "\u3053\u306e\u30c4\u30a2\u30fc\u3092VR\u30d3\u30e5\u30fc\u3067\u8868\u793a\u3059\u308b\u306b\u306f\u3001Safari\u30d6\u30e9\u30a6\u30b6\u306e\u5229\u7528\u3092\u304a\u52e7\u3081\u3057\u307e\u3059",
                "exit-fullscreen": "\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u3092\u7d42\u4e86\u3059\u308b",
                no: "\u3044\u3044\u3048",
                "download-failed": "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5931\u6557\u3057\u307e\u3057\u305f",
                "giroscope-disabled-http": "\u3053\u306eWeb\u30da\u30fc\u30b8\u306b\u300ehttp\u300f\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u3054\u5229\u7528\u7aef\u672b\u306e\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u753b\u9762\u306e\u5411\u304d\u3078\u30a2\u30af\u30bb\u30b9\u304c\u3067\u304d\u305a\u3001VR\u30e2\u30fc\u30c9\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u300ehttps\u300f\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3057\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044",
                "cookies-notice": "\u3053\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306fCookie\u3092\u4f7f\u7528\u3057\u3066\u4f7f\u7528\u7d71\u8a08\u3092\u53ce\u96c6\u3057\u307e\u3059\u3002 \u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001<a>Cookie\u30dd\u30ea\u30b7\u30fc</a>\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002",
                "use-cardboard": "Cardboard\u5229\u7528",
                "launch-default-browser": "\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u8d77\u52d5",
                "rotate-device": "\u7aef\u672b\u3092\u56de\u8ee2\u3055\u305b\u3066\u304f\u3060\u3055\u3044",
                "exit-vr": "VR\u30d3\u30e5\u30fc \u7d42\u4e86",
                "storage-not-provided-launch-from-desktop": "\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306e\u30a2\u30a4\u30b3\u30f3\u304b\u3089\u30c4\u30a2\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044",
                "disable-measure": "Stop measuring",
                downloading: "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d",
                "cardboard-v2": "\u30dc\u30bf\u30f3\u304c\u4ed8\u5c5e\u3057\u3066\u3044\u308bCardboard v2\u30d8\u30c3\u30c9\u30bb\u30c3\u30c8\u3092\u304a\u6301\u3061\u306e\u5834\u5408\u306f\u3053\u3061\u3089\u3002",
                "enable-video-audio-prompt": "\u30d3\u30c7\u30aa\u3068\u97f3\u58f0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f",
                reject: "\u62d2\u5426\u3059\u308b",
                downloaded: "\u3053\u306e\u30c4\u30a2\u30fc\u306f\u3001\u30aa\u30d5\u30e9\u30a4\u30f3\u3067\u518d\u751f\u3059\u308b\u305f\u3081\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u3059\u308b",
                "samsung-internet-vr-app-info": "\u3053\u306e\u7aef\u672b\u3068\u4e92\u63db\u6027\u306e\u3042\u308bVR\u30d8\u30c3\u30c9\u30bb\u30c3\u30c8\u6a5f\u5668\u3092\u304a\u6301\u3061\u3067\u3001VR\u7528\u306e\u300eSamsung Internet\u300f\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u308b\u5834\u5408\u3002VR\u30d3\u30e5\u30fc\u3067\u3053\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u969b\u3001\u300eSamsung Internet\u300f\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d6\u30e9\u30a6\u30b6\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059",
                "samsung-internet-vr-info": "\u3053\u306e\u7aef\u672b\u3068\u4e92\u63db\u6027\u306e\u3042\u308bVR\u30d8\u30c3\u30c9\u30bb\u30c3\u30c8\u6a5f\u5668\u3092\u304a\u6301\u3061\u3067\u3001VR\u7528\u306e\u300eSamsung Internet\u300f\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u308b\u5834\u5408\u3002VR\u30d3\u30e5\u30fc\u3067\u3053\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u305d\u306e\u969b\u3001\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3092\u30d8\u30c3\u30c9\u30bb\u30c3\u30c8\u306b\u88c5\u7740\u3059\u308b\u3060\u3051\u3067\u3059",
                "enable-video-prompt": "\u30d3\u30c7\u30aa\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f",
                "giroscope-disabled-safari-request-permission": ["\u3054\u5229\u7528\u7aef\u672b\u306e\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u753b\u9762\u306e\u5411\u304d\u3078\u30a2\u30af\u30bb\u30b9\u304c\u3067\u304d\u305a\u3001VR\u30e2\u30fc\u30c9\u304c\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002", "\u3053\u306eWeb\u30da\u30fc\u30b8\u3092\u6b63\u3057\u304f\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u300eOK\u300f\u3092\u30af\u30ea\u30c3\u30af\u3057\u300e\u8a31\u53ef\u300f\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u5165\u308c\u3066\u304f\u3060\u3055\u3044"],
                "storage-not-provided-launch-from-homescreen": "\u30db\u30fc\u30e0\u753b\u9762\u306e\u30a2\u30a4\u30b3\u30f3\u304b\u3089\u30c4\u30a2\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044",
                "enter-fullscreen": "\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u3067\u5165\u529b\u3059\u308b",
                "use-cardboard-v2": "Cardboard v2\u5229\u7528",
                unmute: "\u30df\u30e5\u30fc\u30c8\u89e3\u9664",
                "enter-vr": "VR\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5165\u529b",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "\u3053\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092VR\u30d3\u30e5\u30fc\u3067\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u4e92\u63db\u6027\u306e\u3042\u308b\u4efb\u610f\u306eGoogle Cardboard\u30d8\u30c3\u30c9\u30bb\u30c3\u30c8\u3092\u5229\u7528\u3067\u304d\u307e\u3059",
                "refresh-downloaded": "\u66f4\u65b0",
                "use-default-cardboard": "\u30c7\u30d5\u30a9\u30eb\u30c8\u5229\u7528",
                "enable-audio-prompt": "\u97f3\u58f0\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f"
            },
            "nb-no": {
                mute: "Skru av lyd",
                "cardboard-v1": "Hvis du ikke er sikker, hvilken Cardboard versjon du bruker, velger du standard hotspot-kontrollen. Du vil da bare se p\u00e5 et hotspot og vente til handlingen utl\u00f8ses.",
                "download-tour": "Last ned visningen, s\u00e5 den kan bli sett uten internett",
                "change-to-drag-and-release": "Endre kontrollmodus til Trekk og Slipp",
                accept: "Aksepterer",
                cancel: "Avbryt",
                "storage-not-provided-bookmark": "Vedvarende lagring nektet. Pr\u00f8v \u00e5 bokmerke denne nettsiden og laste den inn p\u00e5 nytt.",
                "dont-display-again": "Ikke vis denne informasjonen igjen",
                "web-server-required": "Denne virtuelle visningen kan ikke spilles av lokalt. Vennligst last den opp til internett, og fors\u00f8k igjen.\ndersom du prefererer det, kan du dra htm filen (eller hele mappen som inneholder visningen) over 'TourViewer' appen.",
                download: "Last ned",
                "change-to-click-and-move": "Endre kontrollmodus til Klikk og Flytt",
                yes: "Ja",
                "delete-downloaded": "Slett",
                "use-safari-for-vr": "Vi anbefaler Safari for \u00e5 se p\u00e5 venne visningen i VR modus",
                "exit-fullscreen": "G\u00e5 ut av full skjerm",
                no: "Nei",
                "download-failed": "Nedlastning feilet",
                "giroscope-disabled-http": "Du er koblet til denne nettsiden via http. Dermed er enhetens bevegelses- og orienteringstilgang og VR-modus deaktivert. Koble til via https for \u00e5 aktivere denne.",
                "cookies-notice": "Denne websiden bruker informasjonskapsler for \u00e5 samle inn bruksstatistikk. For mer informasjon, bes\u00f8k <a>retningslinjer for informasjonskapsler</a>.",
                "use-cardboard": "Bruk Cardboard",
                "launch-default-browser": "\u00c5pne i standard nettleser",
                "rotate-device": "Vennligst roter enheten",
                "exit-vr": "G\u00e5 ut av VR",
                "storage-not-provided-launch-from-desktop": "Start turen p\u00e5 nytt fra skrivebordsikonet for \u00e5 laste ned.",
                "disable-measure": "Stop measuring",
                downloading: "Laster ned",
                "cardboard-v2": "Dersom du har Cardboard versjon 2, hvilket kommer med en knapp, kan du kikke p\u00e5 en klikkbar ting i visningen, og bruke knappen for \u00e5 bruke disse tingene, p\u00e5 samme m\u00e5te som p\u00e5 en laptop eller telefon.",
                "enable-video-audio-prompt": "Aktivere video og lyd?",
                reject: "Avvis",
                downloaded: "Denne visningen er lastet ned, s\u00e5 den kan bli sett uten internett.",
                "samsung-internet-vr-app-info": "Hvis du har et Gear VR-headset som er kompatibelt med denne enheten og har installert Samsung Internet for VR, kan du ogs\u00e5 bruke det til \u00e5 se dette innholdet i VR, du m\u00e5 ogs\u00e5 gj\u00f8re Samsung Internet til standard nettleser.",
                "samsung-internet-vr-info": "Hvis du har et Gear VR-headset som er kompatibelt med denne enheten, og du har installert Samsung Internet for VR, kan du ogs\u00e5 bruke det til \u00e5 se dette innholdet i VR, du trenger bare \u00e5 sette mobiltelefonen p\u00e5 headsettet n\u00e5.",
                "enable-video-prompt": "Aktivere video?",
                "giroscope-disabled-safari-request-permission": ["Din enhet sin bevegelses- og orienterings tilgang, samt VR modus er deaktivert for denne nettsiden.", "For \u00e5 se denne siden korrekt, vennligst klikk p\u00e5 fortsett og godta tillatelsesforesp\u00f8rselen hvis du blir bedt om dette."],
                "storage-not-provided-launch-from-homescreen": "Start turen p\u00e5 nytt fra startskjermikonet for \u00e5 laste ned.",
                "enter-fullscreen": "G\u00e5 til full skjerm",
                "use-cardboard-v2": "Bruk Cardboard Versjon 2",
                unmute: "Skru p\u00e5 lyd",
                "enter-vr": "\u00c5pne VR Modus",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Du kan bruke hvilke some helst Google Cardboard kompatible headsett for \u00e5 se denne visningen i VR.",
                "refresh-downloaded": "Last inn p\u00e5 nytt",
                "use-default-cardboard": "Bruk Standard",
                "enable-audio-prompt": "Aktivere audio?"
            },
            "nl-nl": {
                mute: "Schakel audio uit",
                "cardboard-v1": "Als u niet weet wat voor versie van Cardboard u gebruikt, selecteer dan de default hotspot control. Dan zult u moeten wachten op een hotspot tot er een bepaald actie is gestart.",
                "download-tour": "Download Tour voor offline afspelen",
                "change-to-drag-and-release": "Verander de besturingsmodus om te slepen en los te laten",
                accept: "Aanvaarden",
                download: "Download",
                "storage-not-provided-bookmark": "Aanhoudende inhoud geweigerd. Probeer deze pagina als bookmark op te slaan en te verversen.",
                "dont-display-again": "Niet meer laten zien",
                "web-server-required": "Deze virtuele tour kan niet worden afgespeeld vanaf een lokale schijf. Upload dit alstublieft op het internet. Je kan ook de htm bestand slepen naar het icoon van de TourViewer app.",
                cancel: "Annuleren",
                "change-to-click-and-move": "Verander de bedieningsmodus om te klikken en te verplaatsen",
                yes: "Ja",
                "delete-downloaded": "Verwijderen",
                "use-safari-for-vr": "We raden aan om in Safari deze tour te bekijken in VR mode",
                "exit-fullscreen": "Volledig scherm verlaten",
                no: "Nee",
                "download-failed": "Download mislukt",
                "giroscope-disabled-http": "Jij betreedt deze pagina door http, dus uw toestel's motion en orientation access en VR modus zijn uitgeschakeld. Betreed deze pagina door https om ze weer aan te schakelen.",
                "cookies-notice": "Deze webpagina maakt gebruik van cookies om gebruiksstatistieken te verzamelen. Raadpleeg het <a>Cookiebeleid</a> voor meer informatie.",
                "use-cardboard": "Gebruik Cardboard",
                "launch-default-browser": "Start op in standaard browser",
                "rotate-device": "Draai uw toestel om, alstublieft",
                "exit-vr": "VR verlaten",
                reject: "Weigeren",
                "disable-measure": "Stop meten",
                downloading: "Downloaden",
                "cardboard-v2": "Als u een Cardboard v2 headset heeft, wat met een knop komt, kunt u wachten op een hotspot en een op een knop drukken om een actie te starten.",
                "enable-video-audio-prompt": "Audio en video inschakelen?",
                "storage-not-provided-launch-from-desktop": "Start de tour alstublieft opnieuw up vanaf het bureaublad om te kunnen downloaden.",
                downloaded: "Deze tour is gedownload voor offline afspelen.",
                "samsung-internet-vr-app-info": "Als u een Gear VR headset heeft dat werkt met dit toestel en u Samsung Internet voor VR heeft ge\u00efnstalleerd, kunt u dit ook bekijken in VR. U moet alleen Samsung Internet instellen als uw standaard browser.",
                "samsung-internet-vr-info": "Als u een Gear VR headset heeft dat werkt met dit toestel en u Samsung Internet voor VR heeft ge\u00efnstalleerd, kunt u dit ook bekijken in VR, u moet alleen uw mobiele toestel op uw headset zetten.",
                "enable-video-prompt": "Video inschakelen?",
                "giroscope-disabled-safari-request-permission": ["Uw toestel's motion en orientation access en VR modus zijn uitgeschakeld voor deze site..", "Om deze pagina goed te kunnen zien, druk op doorgaan en geef toestemming als dat gevraagd wordt."],
                "storage-not-provided-launch-from-homescreen": "Start de tour alstublieft opnieuw up vanaf het homescherm om te kunnen downloaden.",
                "enter-fullscreen": "Volledig scherm inschakelen",
                "use-cardboard-v2": "Gebruik Cardboard v2",
                unmute: "Schakel audio in",
                "enter-vr": "Voer VR inhoud in",
                "enable-measure": "Begin meten",
                "use-cardboard-info": "U kunt elk werkend Google Cardboard headset gebruiken om dit te bekijken.",
                "refresh-downloaded": "Verversen",
                "use-default-cardboard": "Standaard gebruiken",
                "enable-audio-prompt": "Audio inschakelen?"
            },
            "nn-no": {
                mute: "Skru av lyd",
                "cardboard-v1": "Hvis du ikke er sikker, hvilken Cardboard versjon du bruker, velger du standard hotspot-kontrollen. Du vil da bare se p\u00e5 et hotspot og vente til handlingen utl\u00f8ses.",
                "download-tour": "Last ned visningen, s\u00e5 den kan bli sett uten internett",
                "change-to-drag-and-release": "Endre kontrollmodus til Trekk og Slipp",
                accept: "Aksepterer",
                cancel: "Avbryt",
                "storage-not-provided-bookmark": "Vedvarende lagring nektet. Pr\u00f8v \u00e5 bokmerke denne nettsiden og laste den inn p\u00e5 nytt.",
                "dont-display-again": "Ikke vis denne informasjonen igjen",
                "web-server-required": "Denne virtuelle visningen kan ikke spilles av lokalt. Vennligst last den opp til internett, og fors\u00f8k igjen.\ndersom du prefererer det, kan du dra htm filen (eller hele mappen som inneholder visningen) over 'TourViewer' appen.",
                download: "Last ned",
                "change-to-click-and-move": "Endre kontrollmodus til Klikk og Flytt",
                yes: "Ja",
                "delete-downloaded": "Slett",
                "use-safari-for-vr": "Vi anbefaler Safari for \u00e5 se p\u00e5 venne visningen i VR modus",
                "exit-fullscreen": "G\u00e5 ut av full skjerm",
                no: "Nei",
                "download-failed": "Nedlastning feilet",
                "giroscope-disabled-http": "Du er koblet til denne nettsiden via http. Dermed er enhetens bevegelses- og orienteringstilgang og VR-modus deaktivert. Koble til via https for \u00e5 aktivere denne.",
                "cookies-notice": "Denne websiden bruker informasjonskapsler for \u00e5 samle inn bruksstatistikk. For mer informasjon, bes\u00f8k <a>retningslinjer for informasjonskapsler</a>.",
                "use-cardboard": "Bruk Cardboard",
                "launch-default-browser": "\u00c5pne i standard nettleser",
                "rotate-device": "Vennligst roter enheten",
                "exit-vr": "G\u00e5 ut av VR",
                "storage-not-provided-launch-from-desktop": "Start turen p\u00e5 nytt fra skrivebordsikonet for \u00e5 laste ned.",
                "disable-measure": "Stop measuring",
                downloading: "Laster ned",
                "cardboard-v2": "Dersom du har Cardboard versjon 2, hvilket kommer med en knapp, kan du kikke p\u00e5 en klikkbar ting i visningen, og bruke knappen for \u00e5 bruke disse tingene, p\u00e5 samme m\u00e5te som p\u00e5 en laptop eller telefon.",
                "enable-video-audio-prompt": "Aktivere video og lyd?",
                reject: "Avvis",
                downloaded: "Denne visningen er lastet ned, s\u00e5 den kan bli sett uten internett.",
                "samsung-internet-vr-app-info": "Hvis du har et Gear VR-headset som er kompatibelt med denne enheten og har installert Samsung Internet for VR, kan du ogs\u00e5 bruke det til \u00e5 se dette innholdet i VR, du m\u00e5 ogs\u00e5 gj\u00f8re Samsung Internet til standard nettleser.",
                "samsung-internet-vr-info": "Hvis du har et Gear VR-headset som er kompatibelt med denne enheten, og du har installert Samsung Internet for VR, kan du ogs\u00e5 bruke det til \u00e5 se dette innholdet i VR, du trenger bare \u00e5 sette mobiltelefonen p\u00e5 headsettet n\u00e5.",
                "enable-video-prompt": "Aktivere video?",
                "giroscope-disabled-safari-request-permission": ["Din enhet sin bevegelses- og orienterings tilgang, samt VR modus er deaktivert for denne nettsiden.", "For \u00e5 se denne siden korrekt, vennligst klikk p\u00e5 fortsett og godta tillatelsesforesp\u00f8rselen hvis du blir bedt om dette."],
                "storage-not-provided-launch-from-homescreen": "Start turen p\u00e5 nytt fra startskjermikonet for \u00e5 laste ned.",
                "enter-fullscreen": "G\u00e5 til full skjerm",
                "use-cardboard-v2": "Bruk Cardboard Versjon 2",
                unmute: "Skru p\u00e5 lyd",
                "enter-vr": "\u00c5pne VR Modus",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Du kan bruke hvilke some helst Google Cardboard kompatible headsett for \u00e5 se denne visningen i VR.",
                "refresh-downloaded": "Last inn p\u00e5 nytt",
                "use-default-cardboard": "Bruk Standard",
                "enable-audio-prompt": "Aktivere audio?"
            },
            "pl-pl": {
                mute: "Wycisz",
                "cardboard-v1": "Je\u015bli nie masz pewno\u015bci, kt\u00f3rej wersji Cardboard u\u017cywasz, wybierz domy\u015blne sterowanie hotspotem. Nast\u0119pnie skieruj wzrok na hotspot i poczekaj na uruchomienie ich dzia\u0142ania.",
                "download-tour": "Pobierz spacer do odtwarzania w trybie offline",
                "change-to-drag-and-release": "Zmie\u0144 tryb na Przeci\u0105gnij i Upu\u015b\u0107",
                accept: "Zaakceptowa\u0107",
                cancel: "Anuluj",
                "storage-not-provided-bookmark": "Odmowa zapisu w pami\u0119ci sta\u0142ej. Spr\u00f3buj doda\u0107 stron\u0119 do zak\u0142adek i za\u0142aduj j\u0105 ponownie.",
                "dont-display-again": "Nie wy\u015bwietlaj tego ponownie",
                "web-server-required": "Nie mo\u017cna odtworzy\u0107 tego spaceru z dysku lokalnego. Prze\u015blij go do internetu i spr\u00f3buj ponownie.\nMo\u017cesz te\u017c przeci\u0105gn\u0105\u0107 plik htm (lub ca\u0142y folder spaceru) na ikon\u0119 aplikacji TourViewer.",
                download: "Pobierz",
                "change-to-click-and-move": "Zmie\u0144 tryb na to Kliknij i Przenie\u015b",
                yes: "tak",
                "delete-downloaded": "Usu\u0144",
                "use-safari-for-vr": "Zalecamy Safari, jako przegl\u0105dark\u0119 spacer\u00f3w w trybie VR",
                "exit-fullscreen": "Wyjd\u017a z trybu pe\u0142nego ekranu",
                no: "nie",
                "download-failed": "Pobieranie nie powiod\u0142o si\u0119",
                "giroscope-disabled-http": "To jest dost\u0119p za po\u015brednictwem protoko\u0142u http, wi\u0119c dost\u0119p do ruchu i orientacji oraz tryb VR s\u0105 wy\u0142\u0105czone. Prze\u0142\u0105cz si\u0119\u00a0na protok\u00f3\u0142 https, aby je w\u0142\u0105czy\u0107.",
                "cookies-notice": "Ta strona u\u017cywa plik\u00f3w cookie do zbierania statystyk u\u017cytkowania. Aby uzyska\u0107 wi\u0119cej informacji, odwied\u017a <a>Zasady dotycz\u0105ce plik\u00f3w cookie</a>.",
                "use-cardboard": "U\u017cyj Cardboard",
                "launch-default-browser": "Uruchom w domy\u015blnej przegl\u0105darce",
                "rotate-device": "Obr\u00f3\u0107 urz\u0105dzenie",
                "exit-vr": "Wyjd\u017a z VR",
                "storage-not-provided-launch-from-desktop": "Aby pobra\u0107, uruchom ponownie spacer klikaj\u0105c ikon\u0119 pulpitu.",
                "disable-measure": "Stop measuring",
                downloading: "Pobieranie",
                "cardboard-v2": "Je\u015bli masz okulary Cardboard v2, kt\u00f3re maj\u0105 przycisk, mo\u017cesz spojrze\u0107 na hotspot i nacisn\u0105\u0107 przycisk, aby uruchomi\u0107 ich dzia\u0142anie.",
                "enable-video-audio-prompt": "W\u0142\u0105czy\u0107 video i d\u017awi\u0119k?",
                reject: "Odrzuca\u0107",
                downloaded: "Spacer jest pobierany do odtwarzania w trybie offline.",
                "samsung-internet-vr-app-info": "Je\u015bli masz okulary zgodne z Gear VR i zainstalowa\u0142e\u015b Samsung Internet for VR, mo\u017cesz je u\u017cy\u0107 do przegl\u0105dania zawarto\u015bci w VR. Musisz w tym przypadku ustawi\u0107 Samsung Internet jako domy\u015bln\u0105 przegl\u0105dark\u0119.",
                "samsung-internet-vr-info": "Je\u015bli masz okulary Gear VR i zainstalowa\u0142e\u015b Samsung Internet for VR, to mo\u017cesz u\u017cy\u0107 ich do przegl\u0105dania zawarto\u015bci w VR. Umie\u015b\u0107 teraz telefon w okularach Gear VR.",
                "enable-video-prompt": "W\u0142\u0105czy\u0107 video?",
                "giroscope-disabled-safari-request-permission": ["Dost\u0119p do funkcji ruchu i orientacji oraz tryb VR s\u0105 wy\u0142\u0105czone dla tej strony.", "Aby poprawnie wy\u015bwietli\u0107 stron\u0119, kliknij kontynuuj i zaakceptuj wszystkie zgody."],
                "storage-not-provided-launch-from-homescreen": "Aby pobra\u0107, uruchom ponownie spacer klikaj\u0105c ikon\u0119 strony g\u0142\u00f3wnej.",
                "enter-fullscreen": "Uruchom pe\u0142ny ekran",
                "use-cardboard-v2": "U\u017cyj Cardboard v2",
                unmute: "Wy\u0142\u0105cz Wycisz",
                "enter-vr": "Wejd\u017a do VR",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Do wy\u015bwietlania w VR mo\u017cesz u\u017cy\u0107 oklular\u00f3w zgodnych z Google Cardboard.",
                "refresh-downloaded": "Od\u015bwie\u017c",
                "use-default-cardboard": "U\u017cyj Domy\u015blnych",
                "enable-audio-prompt": "W\u0142\u0105czy\u0107 d\u017awi\u0119k?"
            },
            "pt-br": {
                mute: "Desativar som",
                "cardboard-v1": "Se voc\u00ea n\u00e3o tiver certeza de qual vers\u00e3o do Cardboard est\u00e1 usando, selecione o controle de ponto de acesso padr\u00e3o. Voc\u00ea simplesmente olha para um ponto de acesso e espera at\u00e9 que a a\u00e7\u00e3o seja acionada.",
                "download-tour": "Download do Tour para reprodu\u00e7\u00e3o offline",
                "change-to-drag-and-release": "Alterar controle para arrastar e soltar",
                accept: "Aceitar",
                cancel: "Cancelar",
                "storage-not-provided-bookmark": "Armazenamento persistente negado. Tente marcar esta p\u00e1gina da Web e recarreg\u00e1-la.",
                "dont-display-again": "N\u00e3o exibir essas informa\u00e7\u00f5es novamente",
                "web-server-required": "Este passeio virtual n\u00e3o pode ser reproduzido a partir de uma unidade local. Envie-o para a Internet e tente novamente.\nSe preferir, arraste o arquivo htm (ou toda a pasta do tour) para o \u00edcone do aplicativo TourViewer.",
                download: "Download",
                "change-to-click-and-move": "Alterar controle para clicar e mover",
                yes: "sim",
                "delete-downloaded": "Apagar",
                "use-safari-for-vr": "Recomendamos o Safari para ver este passeio no modo VR",
                "exit-fullscreen": "Sair tela cheia",
                no: "n\u00e3o",
                "download-failed": "Falha no Download",
                "giroscope-disabled-http": "Voc\u00ea est\u00e1 acessando esta p\u00e1gina da Web por meio do http, para que o acesso \u00e0 orienta\u00e7\u00e3o e movimento do dispositivo e o modo VR sejam desativados, acesse-o atrav\u00e9s de https para ativ\u00e1-los.",
                "cookies-notice": "Esta p\u00e1gina da web usa cookies para coletar estat\u00edsticas de uso. Para obter mais informa\u00e7\u00f5es, visite a <a>Pol\u00edtica de cookies</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Iniciar no navegador padr\u00e3o",
                "rotate-device": "Por favor, gire seu dispositivo",
                "exit-vr": "Sair do VR",
                "storage-not-provided-launch-from-desktop": "Por favor, reinicie o tour no \u00edcone da \u00e1rea de trabalho para fazer o download.",
                "disable-measure": "Stop measuring",
                downloading: "Baixando",
                "cardboard-v2": "Se voc\u00ea tiver um fone de ouvido Cardboard v2, que vem com um bot\u00e3o, poder\u00e1 observar um ponto de acesso e pressionar o bot\u00e3o para acionar sua a\u00e7\u00e3o.",
                "enable-video-audio-prompt": "Ativar \u00e1udio e v\u00eddeo?",
                reject: "Rejeitar",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "Se voc\u00ea possui um fone de ouvido Gear VR compat\u00edvel com este dispositivo e instalou o Samsung Internet for VR, tamb\u00e9m pode us\u00e1-lo para visualizar esse conte\u00fado em VR. Voc\u00ea precisa tornar o Samsung Internet o seu padr\u00e3o. browser.",
                "samsung-internet-vr-info": "Se voc\u00ea possui um fone de ouvido Gear VR compat\u00edvel com este dispositivo e instalou o Samsung Internet for VR, tamb\u00e9m pode us\u00e1-lo para visualizar esse conte\u00fado em VR. Basta colocar o celular no fone de ouvido agora.",
                "enable-video-prompt": "Ativar v\u00eddeo?",
                "giroscope-disabled-safari-request-permission": ["O acesso a movimento e orienta\u00e7\u00e3o do dispositivo e o modo VR est\u00e3o desativados para este site.", "Para ver corretamente esta p\u00e1gina da web, clique em continuar e aceite a solicita\u00e7\u00e3o de permiss\u00e3o, se solicitado."],
                "storage-not-provided-launch-from-homescreen": "Reinicie o tour no \u00edcone da tela inicial para fazer o download.",
                "enter-fullscreen": "Entrar tela cheia",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Ativar som",
                "enter-vr": "Inserir conte\u00fado VR",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Voc\u00ea pode usar qualquer fone de ouvido compat\u00edvel do Google Cardboard para visualizar este conte\u00fado em VR",
                "refresh-downloaded": "Atualizar",
                "use-default-cardboard": "Use o padr\u00e3o",
                "enable-audio-prompt": "Ativar \u00e1udio?"
            },
            "pt-pt": {
                mute: "Desativar som",
                "cardboard-v1": "Se voc\u00ea n\u00e3o tiver certeza de qual vers\u00e3o do Cardboard est\u00e1 usando, selecione o controle de ponto de acesso padr\u00e3o. Voc\u00ea simplesmente olha para um ponto de acesso e espera at\u00e9 que a a\u00e7\u00e3o seja acionada.",
                "download-tour": "Download do Tour para reprodu\u00e7\u00e3o offline",
                "change-to-drag-and-release": "Alterar controle para arrastar e soltar",
                accept: "Aceitar",
                cancel: "Cancelar",
                "storage-not-provided-bookmark": "Armazenamento persistente negado. Tente marcar esta p\u00e1gina da Web e recarreg\u00e1-la.",
                "dont-display-again": "N\u00e3o exibir essas informa\u00e7\u00f5es novamente",
                "web-server-required": "Este passeio virtual n\u00e3o pode ser reproduzido a partir de uma unidade local. Envie-o para a Internet e tente novamente.\nSe preferir, arraste o arquivo htm (ou toda a pasta do tour) para o \u00edcone do aplicativo TourViewer.",
                download: "Download",
                "change-to-click-and-move": "Alterar controle para clicar e mover",
                yes: "sim",
                "delete-downloaded": "Apagar",
                "use-safari-for-vr": "Recomendamos o Safari para ver este passeio no modo VR",
                "exit-fullscreen": "Sair tela cheia",
                no: "n\u00e3o",
                "download-failed": "Falha no Download",
                "giroscope-disabled-http": "Voc\u00ea est\u00e1 acessando esta p\u00e1gina da Web por meio do http, para que o acesso \u00e0 orienta\u00e7\u00e3o e movimento do dispositivo e o modo VR sejam desativados, acesse-o atrav\u00e9s de https para ativ\u00e1-los.",
                "cookies-notice": "Esta p\u00e1gina da web usa cookies para coletar estat\u00edsticas de uso. Para obter mais informa\u00e7\u00f5es, visite a <a>Pol\u00edtica de cookies</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Iniciar no navegador padr\u00e3o",
                "rotate-device": "Por favor, gire seu dispositivo",
                "exit-vr": "Sair do VR",
                "storage-not-provided-launch-from-desktop": "Por favor, reinicie o tour no \u00edcone da \u00e1rea de trabalho para fazer o download.",
                "disable-measure": "Stop measuring",
                downloading: "Baixando",
                "cardboard-v2": "Se voc\u00ea tiver um fone de ouvido Cardboard v2, que vem com um bot\u00e3o, poder\u00e1 observar um ponto de acesso e pressionar o bot\u00e3o para acionar sua a\u00e7\u00e3o.",
                "enable-video-audio-prompt": "Ativar \u00e1udio e v\u00eddeo?",
                reject: "Rejeitar",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "Se voc\u00ea possui um fone de ouvido Gear VR compat\u00edvel com este dispositivo e instalou o Samsung Internet for VR, tamb\u00e9m pode us\u00e1-lo para visualizar esse conte\u00fado em VR. Voc\u00ea precisa tornar o Samsung Internet o seu padr\u00e3o. browser.",
                "samsung-internet-vr-info": "Se voc\u00ea possui um fone de ouvido Gear VR compat\u00edvel com este dispositivo e instalou o Samsung Internet for VR, tamb\u00e9m pode us\u00e1-lo para visualizar esse conte\u00fado em VR. Basta colocar o celular no fone de ouvido agora.",
                "enable-video-prompt": "Ativar v\u00eddeo?",
                "giroscope-disabled-safari-request-permission": ["O acesso a movimento e orienta\u00e7\u00e3o do dispositivo e o modo VR est\u00e3o desativados para este site.", "Para ver corretamente esta p\u00e1gina da web, clique em continuar e aceite a solicita\u00e7\u00e3o de permiss\u00e3o, se solicitado."],
                "storage-not-provided-launch-from-homescreen": "Reinicie o tour no \u00edcone da tela inicial para fazer o download.",
                "enter-fullscreen": "Entrar tela cheia",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Ativar som",
                "enter-vr": "Inserir conte\u00fado VR",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "Voc\u00ea pode usar qualquer fone de ouvido compat\u00edvel do Google Cardboard para visualizar este conte\u00fado em VR",
                "refresh-downloaded": "Atualizar",
                "use-default-cardboard": "Use o padr\u00e3o",
                "enable-audio-prompt": "Ativar \u00e1udio?"
            },
            "ru-ru": {
                mute: "\u0411\u0435\u0437 \u0437\u0432\u0443\u043a\u0430",
                "cardboard-v1": "\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Cardboard \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0445\u043e\u0442\u0441\u043f\u043e\u0442 \u043a\u0430\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0417\u0430\u0442\u0435\u043c \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0445\u043e\u0442\u0441\u043f\u043e\u0442 \u0438 \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.",
                "download-tour": "\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0442\u0443\u0440  \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f",
                "change-to-drag-and-release": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0440\u0435\u0436\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435",
                accept: "\u041f\u0440\u0438\u043d\u044f\u0442\u044c",
                download: "\u0421\u043a\u0430\u0447\u0430\u0442\u044c",
                "storage-not-provided-bookmark": "\u0412 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0435.",
                "dont-display-again": "\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e",
                "web-server-required": "\u042d\u0442\u043e\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0443\u0440 \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.\n\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 htm-\u0444\u0430\u0439\u043b (\u0438\u043b\u0438 \u0432\u0441\u044e \u043f\u0430\u043f\u043a\u0443 \u0442\u0443\u0440\u0430) \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f TourViewer.",
                cancel: "\u041e\u0442\u043c\u0435\u043d\u0430",
                "change-to-click-and-move": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0440\u0435\u0436\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0430\u0436\u0430\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435",
                yes: "\u0434\u0430",
                "delete-downloaded": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c",
                "use-safari-for-vr": "\u041c\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c Safari \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0443\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 VR.",
                "exit-fullscreen": "\u0412\u044b\u0439\u0442\u0438 \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430",
                no: "\u043d\u0435\u0442",
                "download-failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438",
                "giroscope-disabled-http": "\u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u043e\u0439 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0447\u0435\u0440\u0435\u0437 http, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044e \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0440\u0435\u0436\u0438\u043c VR \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u043d\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 https, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445.",
                "cookies-notice": "\u042d\u0442\u0430 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b cookie \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441\u043c. <a>\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 cookie</a>.",
                "use-cardboard": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Cardboard",
                "launch-default-browser": "\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",
                "rotate-device": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",
                "exit-vr": "\u0412\u044b\u0439\u0442\u0438 \u0438\u0437 VR",
                reject: "\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c",
                "disable-measure": "\u041f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f",
                downloading: "\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435",
                "cardboard-v2": "\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0430 Cardboard v2 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0445\u043e\u0442\u0441\u043f\u043e\u0442 \u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.",
                "enable-video-audio-prompt": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e?",
                "storage-not-provided-launch-from-desktop": "\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0442\u0443\u0440 \u0441\u043e \u0437\u043d\u0430\u0447\u043a\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435..",
                downloaded: "\u042d\u0442\u043e\u0442 \u0442\u0443\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.",
                "samsung-internet-vr-app-info": "\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0430 Gear VR, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430\u044f \u0441 \u044d\u0442\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Samsung Internet \u0434\u043b\u044f VR, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432 VR, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c Samsung Internet \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.",
                "samsung-internet-vr-info": "\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0430 Gear VR, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430\u044f \u0441 \u044d\u0442\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Samsung Internet \u0434\u043b\u044f VR, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432 VR, \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0434\u0435\u0442\u044c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0443 \u0441\u0435\u0439\u0447\u0430\u0441.",
                "enable-video-prompt": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e?",
                "giroscope-disabled-safari-request-permission": ["\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044e \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0436\u0438\u043c VR \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.",
                    "\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u0443 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c\u00bb \u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e."],
                "storage-not-provided-launch-from-homescreen": "\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0442\u0443\u0440 \u0441\u043e \u0437\u043d\u0430\u0447\u043a\u0430 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435.",
                "enter-fullscreen": "\u0412\u043e\u0439\u0442\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c",
                "use-cardboard-v2": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Cardboard v2",
                unmute: "\u0421\u043e \u0437\u0432\u0443\u043a\u043e\u043c",
                "enter-vr": "\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c VR \u043a\u043e\u043d\u0442\u0435\u043d\u0442",
                "enable-measure": "\u041d\u0430\u0447\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f",
                "use-cardboard-info": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0443 Google Cardboard \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432 VR.",
                "refresh-downloaded": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",
                "use-default-cardboard": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",
                "enable-audio-prompt": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0443\u0434\u0438\u043e?"
            },
            "sk-sk": {
                mute: "St\u00ed\u0161i\u0165",
                "cardboard-v1": "Ak ste si nie ist\u00ed, ktor\u00fa verziu Cardboardu pou\u017e\u00edvate, vyberte si predvolen\u00e9 ovl\u00e1danie hotspotu. Potom sa jednoducho pozriete na hotspot a po\u010dkajte, k\u00fdm sa akcia nespust\u00ed.",
                "download-tour": "Stiahnu\u0165 prehliadku na hranie v offline re\u017eime",
                "change-to-drag-and-release": "Zmeni\u0165 re\u017eim ovl\u00e1dania na Presun\u00fa\u0165 a Uvo\u013eni\u0165",
                accept: "s\u00fahlasi\u0165",
                cancel: "Zru\u0161i\u0165",
                "storage-not-provided-bookmark": "Trval\u00e9 \u00falo\u017eisko odmietnut\u00e9. Sk\u00faste si t\u00fato webov\u00fa str\u00e1nku ulo\u017ei\u0165 a na\u010d\u00edta\u0165 ju znova.",
                "dont-display-again": "Tieto inform\u00e1cie u\u017e nezobrazova\u0165",
                "web-server-required": "T\u00e1to virtu\u00e1lna prehliadka sa ned\u00e1 prehra\u0165 z lok\u00e1lneho disku. Nahrajte ju na internet a sk\u00faste to znova.\nAk chcete, potiahnite s\u00fabor htm (alebo cel\u00fd prie\u010dinok prehliadky) na ikonu aplik\u00e1cie TourViewer.",
                download: "Stiahnu\u0165",
                "change-to-click-and-move": "Zmeni\u0165 re\u017eim ovl\u00e1dania na Klikn\u00fa\u0165 a Presun\u00fa\u0165",
                yes: "\u00e1no",
                "delete-downloaded": "Zmaza\u0165",
                "use-safari-for-vr": "Odpor\u00fa\u010dame pou\u017e\u00edva\u0165 Safari prehliada\u010d pre t\u00fato prehliadku v re\u017eime VR",
                "exit-fullscreen": "Ukon\u010di\u0165 cel\u00fa obrazovku",
                no: "nie",
                "download-failed": "S\u0165ahovanie zlyhalo",
                "giroscope-disabled-http": "Na t\u00fato webov\u00fa str\u00e1nku pristupujete cez http protokol, preto pr\u00edstup k pohybu a orient\u00e1cii v\u00e1\u0161ho zariadenia a re\u017eim VR s\u00fa deaktivovan\u00e9. Ak ich chcete povoli\u0165, nav\u0161t\u00edvte str\u00e1nku cez https.",
                "cookies-notice": "T\u00e1to webov\u00e1 str\u00e1nka pou\u017e\u00edva s\u00fabory cookie na zhroma\u017e\u010fovanie \u0161tatist\u00edk pou\u017e\u00edvania. \u010eal\u0161ie inform\u00e1cie n\u00e1jdete v <a> pravidl\u00e1ch pou\u017e\u00edvania s\u00faborov cookie </a>.",
                "use-cardboard": "Pou\u017eite Cardboard okuliare.",
                "launch-default-browser": "Spusti\u0165 v predvolenom prehliada\u010di",
                "rotate-device": "Oto\u010dte svoje zariadenie",
                "exit-vr": "Ukon\u010denie VR",
                "storage-not-provided-launch-from-desktop": "Znovu na\u010d\u00edtajte prehliadku pomocou desktop ikony pre jej stiahnite.",
                "disable-measure": "Ukon\u010di\u0165 meranie",
                downloading: "S\u0165ahovanie",
                "cardboard-v2": "Ak m\u00e1te n\u00e1hlavn\u00fa s\u00fapravu Cardboard v2, ktor\u00e1 je dod\u00e1van\u00e1 s tla\u010didlom, m\u00f4\u017eete sa pozrie\u0165 na hotspot a stla\u010den\u00edm tla\u010didla spusti\u0165 akciu.",
                "enable-video-audio-prompt": "Povoli\u0165 video a zvuk?",
                reject: "Odmietnu\u0165",
                downloaded: "T\u00e1to prehliadka je stiahnut\u00e1 na hranie v offline re\u017eime.",
                "samsung-internet-vr-app-info": "Ak m\u00e1te Gear VR sl\u00fachadl\u00e1\u00e1 kompatibiln\u00e9 s t\u00fdmto zariaden\u00edm a m\u00e1te nain\u0161talovan\u00fd program Samsung Internet pre VR, m\u00f4\u017eete ho tie\u017e pou\u017ei\u0165 na prezeranie tohto obsahu vo VR. Mus\u00edte si nastavi\u0165 Samsung Internet ako predvolen\u00fd prehliada\u010d.",
                "samsung-internet-vr-info": "Ak m\u00e1te Gear VR sl\u00fachadl\u00e1 kompatibiln\u00e9 s t\u00fdmto zariaden\u00edm a m\u00e1te nain\u0161talovan\u00fd program Samsung Internet pre VR, m\u00f4\u017eete ho tie\u017e pou\u017ei\u0165 na prezeranie tohto obsahu vo VR. Sta\u010d\u00ed teraz vlo\u017ei\u0165 mobiln\u00fd telef\u00f3n do n\u00e1hlavnej s\u00fapravy.",
                "enable-video-prompt": "Povoli\u0165 video?",
                "giroscope-disabled-safari-request-permission": ["Pre t\u00fato str\u00e1nku s\u00fa pr\u00edstup k pohybu a orient\u00e1cii v\u00e1\u0161ho zariadenia a re\u017eim VR deaktivovan\u00e9.",
                    "Aby ste korektne videli t\u00fato webov\u00fa str\u00e1nku, pros\u00edm kliknite pokra\u010dova\u0165 a akceptujte po\u017eadovan\u00e9 povolenie."],
                "storage-not-provided-launch-from-homescreen": "Znovu na\u010d\u00edtajte prehliadku pomocou ikony na ploche pre jej stiahnite.",
                "enter-fullscreen": "Prejs\u0165 na cel\u00fa obrazovku",
                "use-cardboard-v2": "Pou\u017eite Cardboard v2",
                unmute: "Zapn\u00fa\u0165 zvuk",
                "enter-vr": "Vlo\u017ei\u0165 VR obsah",
                "enable-measure": "Za\u010da\u0165 meranie",
                "use-cardboard-info": "Na zobrazenie tohto obsahu vo VR m\u00f4\u017eete pou\u017ei\u0165 \u013eubovo\u013en\u00fa kompatibiln\u00fa n\u00e1hlavn\u00fa s\u00fapravu Google Cardboard.",
                "refresh-downloaded": "Obnovi\u0165",
                "use-default-cardboard": "Pou\u017ei\u0165 predvolen\u00e9",
                "enable-audio-prompt": "Povoli\u0165 zvuk?"
            },
            "sv-se": {
                mute: "Inaktivera ljud",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "\u00c4ndra kontrolll\u00e4ge f\u00f6r att dra och sl\u00e4ppa",
                accept: "Acceptera",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "\u00c4ndra kontrolll\u00e4ge f\u00f6r att klicka och flytta",
                yes: "ja",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Avsluta fullsk\u00e4rmen",
                no: "Nej",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Denna webbsida anv\u00e4nder cookies f\u00f6r att samla in anv\u00e4ndningsstatistik. F\u00f6r mer information, bes\u00f6k <a>Cookie Policy</a>.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Avvisa",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Aktivera ljud och video?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Aktivera video?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Ange fullsk\u00e4rm",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Aktivera ljud",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Aktivera ljud?"
            },
            "tr-tr": {
                mute: "Sesi devre d\u0131s\u0131 b\u0131rakmak",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "Download Tour for offline playing",
                "change-to-drag-and-release": "S\u00fcr\u00fckleyip b\u0131rakmak i\u00e7in kontrol modunu de\u011fi\u015ftirin",
                accept: "Kabul etmek",
                download: "Download",
                "storage-not-provided-bookmark": "Persistent storage denied. Try bookmarking this webpage and reloading it.",
                "dont-display-again": "Don't display this info again",
                "web-server-required": "This virtual tour cannot be played from a local drive. Please upload it to the internet and try again.\nIf you prefer, drag the htm file (or the entire folder of the tour) onto the icon of the TourViewer app.",
                cancel: "Cancel",
                "change-to-click-and-move": "T\u0131klamak ve ta\u015f\u0131mak i\u00e7in kontrol modunu de\u011fi\u015ftirin",
                yes: "evet",
                "delete-downloaded": "Delete",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "Tam ekrandan \u00e7\u0131k",
                no: "hay\u0131r",
                "download-failed": "Download failed",
                "giroscope-disabled-http": "You are accessing this webpage through http so your device's motion and orientation access and VR mode are disabled, please access it through https to enable them.",
                "cookies-notice": "Bu web sayfas\u0131, kullan\u0131m istatistiklerini toplamak i\u00e7in tan\u0131mlama bilgileri kullan\u0131r. Daha fazla bilgi i\u00e7in l\u00fctfen <a>\u00c7erez Politikas\u0131n\u0131</a> ziyaret edin.",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                reject: "Reddet",
                "disable-measure": "Stop measuring",
                downloading: "Downloading",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "Ses ve video etkinle\u015ftirilsin mi?",
                "storage-not-provided-launch-from-desktop": "Please relaunch the tour from the desktop icon to download.",
                downloaded: "This tour is downloaded for offline playing.",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "Video aktif edilsin mi?",
                "giroscope-disabled-safari-request-permission": ["Your device's motion and orientation access and VR mode are disabled for this site.", "To properly see this webpage, please click continue and accept the permission request if prompted."],
                "storage-not-provided-launch-from-homescreen": "Please relaunch the tour from the home screen icon to download.",
                "enter-fullscreen": "Tam ekran yap",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "Sesi etkinle\u015ftir",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "Refresh",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "Ses aktif edilsin mi?"
            },
            "uk-ua": {
                mute: "\u0412\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u0437\u0432\u0443\u043a",
                "cardboard-v1": "\u042f\u043a\u0449\u043e \u0432\u0438 \u043d\u0435 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u044f\u043a\u0443 \u0432\u0435\u0440\u0441\u0456\u044e Cardboard \u0432\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u0435, \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0443 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c. \u041f\u043e\u0442\u0456\u043c \u0432\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0438\u0432\u0438\u0442\u0435\u0441\u044f \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0442\u0430 \u043f\u043e\u0447\u0435\u043a\u0430\u0439\u0442\u0435, \u0434\u043e\u043a\u0438 \u0434\u0456\u044f \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f.",
                "download-tour": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0442\u0435 \u0442\u0443\u0440 \u0434\u043b\u044f \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456",
                "change-to-drag-and-release": "\u0417\u043c\u0456\u043d\u0456\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u041f\u0435\u0440\u0435\u0442\u044f\u0433\u043d\u0456\u0442\u044c \u0456 \u0432\u0456\u0434\u043f\u0443\u0441\u0442\u0456\u0442\u044c",
                accept: "\u041f\u0440\u0438\u0439\u043c\u0456\u0442\u044c",
                cancel: "\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",
                "storage-not-provided-bookmark": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u043d\u043d\u044f \u0437\u0430\u0431\u043e\u0440\u043e\u043d\u0435\u043d\u043e. \u0421\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u0446\u044e \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0457\u0457.",
                "dont-display-again": "\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u0443\u0439\u0442\u0435 \u0446\u044e \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u0437\u043d\u043e\u0432\u0443",
                "web-server-required": "\u0426\u0435\u0439 \u0432\u0456\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0442\u0443\u0440 \u043d\u0435 \u043c\u043e\u0436\u043d\u0430 \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430. \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0442\u0435 \u0439\u043e\u0433\u043e \u0432 \u0406\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0456 \u043f\u043e\u0432\u0442\u043e\u0440\u0456\u0442\u044c \u0441\u043f\u0440\u043e\u0431\u0443.\n\u042f\u043a\u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435, \u043f\u0435\u0440\u0435\u0442\u044f\u0433\u043d\u0456\u0442\u044c \u0444\u0430\u0439\u043b htm (\u0430\u0431\u043e \u0432\u0441\u044e \u043f\u0430\u043f\u043a\u0443 \u0442\u0443\u0440\u0443) \u043d\u0430 \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 TourViewer.",
                download: "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438",
                "change-to-click-and-move": "\u0417\u043c\u0456\u043d\u0456\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u0456 \u043f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0456\u0442\u044c",
                yes: "\u0442\u0430\u043a",
                "delete-downloaded": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438",
                "use-safari-for-vr": "\u041c\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0454\u043c\u043e Safari \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0446\u044c\u043e\u0433\u043e \u0442\u0443\u0440\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 VR",
                "exit-fullscreen": "\u0412\u0438\u0439\u0442\u0438 \u0437 \u043f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0443",
                no: "\u043d\u0456",
                "download-failed": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438",
                "giroscope-disabled-http": "\u0412\u0438 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0456\u0454\u0457 \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 http, \u0442\u043e\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0440\u0443\u0445\u0443 \u0442\u0430 \u043e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u0457 \u0432\u0430\u0448\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e \u0442\u0430 \u0440\u0435\u0436\u0438\u043c VR \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043e. \u0429\u043e\u0431 \u0443\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0457\u0445, \u043f\u0435\u0440\u0435\u0439\u0434\u0456\u0442\u044c \u0434\u043e \u043d\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 https.",
                "cookies-notice": "\u0426\u044f \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u0444\u0430\u0439\u043b\u0438 cookie \u0434\u043b\u044f \u0437\u0431\u043e\u0440\u0443 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f. \u0414\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0432\u0456\u0434\u0432\u0456\u0434\u0430\u0439\u0442\u0435 <a> \u041f\u043e\u043b\u0456\u0442\u0438\u043a\u0443 \u0449\u043e\u0434\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0444\u0430\u0439\u043b\u0456\u0432 cookie</a>.",
                "use-cardboard": "\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 Cardboard",
                "launch-default-browser": "\u0417\u0430\u043f\u0443\u0441\u0442\u0456\u0442\u044c \u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c",
                "rotate-device": "\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043f\u043e\u0432\u0435\u0440\u043d\u0456\u0442\u044c \u0441\u0432\u0456\u0439 \u043f\u0440\u0438\u0441\u0442\u0440\u0456\u0439",
                "exit-vr": "\u0412\u0438\u0439\u0434\u0456\u0442\u044c \u0456\u0437 VR",
                "storage-not-provided-launch-from-desktop": "\u0429\u043e\u0431 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0456\u0442\u044c \u043e\u0433\u043b\u044f\u0434 \u0456\u0437 \u0437\u043d\u0430\u0447\u043a\u0430 \u043d\u0430 \u0440\u043e\u0431\u043e\u0447\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0456.",
                "disable-measure": "\u041f\u0440\u0438\u043f\u0438\u043d\u0456\u0442\u044c \u0432\u0438\u043c\u0456\u0440\u044e\u0432\u0430\u043d\u043d\u044f",
                downloading: "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f",
                "cardboard-v2": "\u042f\u043a\u0449\u043e \u0443 \u0432\u0430\u0441 \u0454 \u0433\u0430\u0440\u043d\u0456\u0442\u0443\u0440\u0430 Cardboard v2, \u044f\u043a\u0430 \u043f\u043e\u0441\u0442\u0430\u0447\u0430\u0454\u0442\u044c\u0441\u044f \u0437 \u043a\u043d\u043e\u043f\u043a\u043e\u044e, \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u0438\u0432\u0438\u0442\u0438\u0441\u044f \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0442\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0443\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0443, \u0449\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u0457\u0457.",
                "enable-video-audio-prompt": "\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0432\u0456\u0434\u0435\u043e \u0442\u0430 \u0430\u0443\u0434\u0456\u043e?",
                reject: "\u0412\u0456\u0434\u0445\u0438\u043b\u0438\u0442\u0438",
                downloaded: "\u0426\u0435\u0439 \u0442\u0443\u0440 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043e \u0434\u043b\u044f \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0456.",
                "samsung-internet-vr-app-info": "\u042f\u043a\u0449\u043e \u0443 \u0432\u0430\u0441 \u0454 \u0433\u0430\u0440\u043d\u0456\u0442\u0443\u0440\u0430 Gear VR, \u0441\u0443\u043c\u0456\u0441\u043d\u0430 \u0437 \u0446\u0438\u043c \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u0454\u043c, \u0456 \u0432\u0438 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Samsung Internet \u0434\u043b\u044f VR, \u0432\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0457\u0457 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0446\u044c\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443 \u0443 VR, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0440\u043e\u0431\u0438\u0442\u0438 Samsung Internet \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c.",
                "samsung-internet-vr-info": "\u042f\u043a\u0449\u043e \u0443 \u0432\u0430\u0441 \u0454 \u0433\u0430\u0440\u043d\u0456\u0442\u0443\u0440\u0430 Gear VR, \u0441\u0443\u043c\u0456\u0441\u043d\u0430 \u0437 \u0446\u0438\u043c \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u0454\u043c, \u0456 \u0432\u0438 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Samsung Internet \u0434\u043b\u044f \u0432\u0456\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0457 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0456, \u0432\u0438 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0457\u0457 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0446\u044c\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443 \u0443 VR, \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0440\u0430\u0437 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u043f\u0456\u0434\u2019\u0454\u0434\u043d\u0430\u0442\u0438 \u043c\u043e\u0431\u0456\u043b\u044c\u043d\u0438\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0434\u043e \u0433\u0430\u0440\u043d\u0456\u0442\u0443\u0440\u0438.",
                "enable-video-prompt": "\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0432\u0456\u0434\u0435\u043e?",
                "giroscope-disabled-safari-request-permission": ["\u0414\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0440\u0443\u0445\u0443 \u0442\u0430 \u043e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u0457 \u0432\u0430\u0448\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0440\u0435\u0436\u0438\u043c VR \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043e \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443.",
                    "\u0429\u043e\u0431 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u0446\u044e \u0432\u0435\u0431-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443, \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u00ab\u041f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438\u00bb \u0442\u0430 \u043f\u0440\u0438\u0439\u043c\u0456\u0442\u044c \u0437\u0430\u043f\u0438\u0442 \u043d\u0430 \u0434\u043e\u0437\u0432\u0456\u043b, \u044f\u043a\u0449\u043e \u0437\u2019\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0438\u0442."],
                "storage-not-provided-launch-from-homescreen": "\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0456\u0442\u044c \u0442\u0443\u0440 \u0437\u0456 \u0437\u043d\u0430\u0447\u043a\u0430 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u0435\u043a\u0440\u0430\u043d\u0430, \u0449\u043e\u0431 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438.",
                "enter-fullscreen": "\u041f\u0435\u0440\u0435\u0439\u0434\u0456\u0442\u044c \u0443 \u043f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c",
                "use-cardboard-v2": "\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 Cardboard v2",
                unmute: "\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0437\u0432\u0443\u043a",
                "enter-vr": "\u041e\u0431\u0435\u0440\u0456\u0442\u044c \u0432\u043c\u0456\u0441\u0442 VR",
                "enable-measure": "\u041f\u043e\u0447\u043d\u0456\u0442\u044c \u0432\u0438\u043c\u0456\u0440\u044e\u0432\u0430\u0442\u0438",
                "use-cardboard-info": "\u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0431\u0443\u0434\u044c-\u044f\u043a\u0443 \u0441\u0443\u043c\u0456\u0441\u043d\u0443 \u0433\u0430\u0440\u043d\u0456\u0442\u0443\u0440\u0443 Google Cardboard \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0446\u044c\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443 \u0443 VR.",
                "refresh-downloaded": "\u041e\u043d\u043e\u0432\u0438\u0442\u0438",
                "use-default-cardboard": "\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c",
                "enable-audio-prompt": "\u0423\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0430\u0443\u0434\u0456\u043e?"
            },
            "zh-cn": {
                mute: "\u9759\u97f3",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "\u4e0b\u8f7d\u5168\u666f\u6f2b\u6e38\uff0c\u4ee5\u8fdb\u884c\u79bb\u7ebf\u64ad\u653e",
                "change-to-drag-and-release": "\u5c06\u63a7\u5236\u6a21\u5f0f\u66f4\u6539\u4e3a\u201c\u62d6\u653e\u201d",
                accept: "\u63a5\u53d7",
                cancel: "\u53d6\u6d88",
                "storage-not-provided-bookmark": "\u88c5\u7f6e\u5185\u6c38\u4e45\u5b58\u50a8\u88ab\u62d2\u7edd\u3002\u5c1d\u8bd5\u5c06\u6b64\u7f51\u9875\u6dfb\u52a0\u4e3a\u4e66\u7b7e\uff0c \u5e76\u91cd\u65b0\u52a0\u8f7d\u3002",
                "dont-display-again": "\u4e0d\u518d\u663e\u793a\u6b64\u4fe1\u606f",
                "web-server-required": "\u6b64\u5168\u666f\u6f2b\u6e38\u65e0\u6cd5\u4ece\u672c\u5730\u9a71\u52a8\u5668\u4e0a\u64ad\u653e\u3002 \u8bf7\u5c06\u5176\u4e0a\u4f20\u5230\u4e92\u8054\u7f51\u670d\u52a1\u5668\uff0c\u7136\u540e\u91cd\u8bd5\u3002\n\u5982\u679c\u9700\u8981\u672c\u5730\u9884\u89c8\uff0c\u53ef\u4ee5\u5c06htm\u6587\u4ef6\uff08\u6216\u5168\u666f\u6f2b\u6e38\u7684\u6574\u4e2a\u6587\u4ef6\u5939\uff09\u62d6\u5230TourViewer\u5e94\u7528\u7a0b\u5e8f\u7684\u56fe\u6807\u4e0a\u3002",
                download: "\u4e0b\u8f7d",
                "change-to-click-and-move": "\u5c06\u63a7\u5236\u6a21\u5f0f\u66f4\u6539\u4e3a\u201c\u5355\u51fb\u5e76\u79fb\u52a8\u201d",
                yes: "\u662f",
                "delete-downloaded": "\u5220\u9664",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "\u9000\u51fa\u5168\u5c4f",
                no: "\u5426",
                "download-failed": "\u4e0b\u8f7d\u5931\u8d25",
                "giroscope-disabled-http": "\u60a8\u6b63\u5728\u901a\u8fc7http(\u672a\u52a0\u5bc6)\u8bbf\u95ee\u6b64\u7f51\u9875\uff0c\u56e0\u6b64\u8bbe\u5907\u7684\u8fd0\u52a8\u548c\u65b9\u5411\u8bbf\u95ee\u6743\u9650\u4ee5\u53caVR\u6a21\u5f0f\u5747\u5df2\u7981\u7528\uff0c\u8bf7\u901a\u8fc7https(\u52a0\u5bc6)\u5bf9\u5176\u8fdb\u884c\u542f\u7528\u3002",
                "cookies-notice": "\u8be5\u7f51\u9875\u4f7f\u7528cookie\u6765\u6536\u96c6\u4f7f\u7528\u60c5\u51b5\u7edf\u8ba1\u4fe1\u606f\u3002 \u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u8bbf\u95ee<a>Cookie\u653f\u7b56</a>\u3002",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                "storage-not-provided-launch-from-desktop": "\u8bf7\u4ece\u684c\u9762\u70b9\u51fb\u56fe\u6807\uff0c\u91cd\u65b0\u542f\u52a8\u5168\u666f\u6f2b\u6e38\uff0c\u4ee5\u8fdb\u884c\u4e0b\u8f7d\u3002",
                "disable-measure": "Stop measuring",
                downloading: "\u6b63\u5728\u4e0b\u8f7d",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "\u542f\u7528\u89c6\u9891\u548c\u97f3\u9891\uff1f",
                reject: "\u62d2\u7edd",
                downloaded: "\u6b64\u5168\u666f\u6f2b\u6e38\u5df2\u4e0b\u8f7d\uff0c\u53ef\u8fdb\u884c\u79bb\u7ebf\u64ad\u653e\u3002",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "\u542f\u7528\u89c6\u9891\uff1f",
                "giroscope-disabled-safari-request-permission": ["\u8be5\u7ad9\u70b9\u5df2\u7981\u7528\u8bbe\u5907\u7684\u8fd0\u52a8\u548c\u65b9\u5411\u8bbf\u95ee\u6743\u9650\uff0cVR\u6a21\u5f0f\u4e5f\u88ab\u7981\u7528\u3002",
                    "\u8981\u6b63\u786e\u67e5\u770b\u6b64\u7f51\u9875\uff0c\u8bf7\u5355\u51fb\u7ee7\u7eed\uff0c\u5e76\u5728\u51fa\u73b0\u63d0\u793a\u65f6\u63a5\u53d7\u8bb8\u53ef\u8bf7\u6c42"],
                "storage-not-provided-launch-from-homescreen": "\u8bf7\u4ece\u4e3b\u5c4f\u5e55\u70b9\u51fb\u56fe\u6807\uff0c\u91cd\u65b0\u542f\u52a8\u5168\u666f\u6f2b\u6e38\uff0c\u4ee5\u8fdb\u884c\u4e0b\u8f7d\u3002",
                "enter-fullscreen": "\u8fdb\u5165\u5168\u5c4f",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "\u53d6\u6d88\u9759\u97f3",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "\u5237\u65b0",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "\u542f\u7528\u97f3\u9891\uff1f"
            },
            "zh-tw": {
                mute: "\u975c\u97f3",
                "cardboard-v1": "If you are not sure, which Cardboard version you're using, select the default hotspot control. You'll then simply gaze at a hotspot and wait until the action is triggered.",
                "download-tour": "\u4e0b\u8f09\u865b\u64ec\u5c0e\u89bd\uff0c\u4ee5\u9032\u884c\u96e2\u7dda\u64ad\u653e",
                "change-to-drag-and-release": "\u5c07\u63a7\u5236\u6a21\u5f0f\u66f4\u6539\u70ba\u201c\u62d6\u653e\u6a21\u5f0f\u201c",
                accept: "\u63a5\u53d7",
                cancel: "\u53d6\u6d88",
                "storage-not-provided-bookmark": "\u88dd\u7f6e\u5167\u6c38\u4e45\u5b58\u5132\u88ab\u62d2\u7d55\u3002\u8acb\u5617\u8a66\u5c07\u6b64\u7db2\u9801\u65b0\u589e\u70ba\u66f8\u7c64\uff0c\u4e26\u91cd\u65b0\u8f09\u5165\u3002",
                "dont-display-again": "\u4e0d\u518d\u986f\u793a\u672c\u8a0a\u606f",
                "web-server-required": "\u672c\u865b\u64ec\u5c0e\u89bd\u7121\u6cd5\u5728\u672c\u5730\u96fb\u8166\u4e0a\u64ad\u653e\u3002 \u8acb\u5c07\u5176\u4e0a\u50b3\u5230\u7db2\u969b\u7db2\u8def\u4f3a\u670d\u5668\uff0c\u7136\u5f8c\u91cd\u8a66\u3002\n\u5982\u679c\u9700\u8981\u672c\u5730\u9810\u89bd\uff0c\u8acb\u5c07htm\u6a94\u6848\uff08\u6216\u865b\u64ec\u5c0e\u89bd\u7684\u6574\u500b\u8cc7\u6599\u593e\uff09\u62d6\u653e\u5230TourViewer\u61c9\u7528\u7a0b\u793a\u7684\u5716\u793a\u4e0a\u3002",
                download: "\u4e0b\u8f09",
                "change-to-click-and-move": "\u5c07\u63a7\u5236\u6a21\u5f0f\u66f4\u6539\u70ba\u201c\u9ede\u64ca\u4e26\u79fb\u52d5\u201d",
                yes: "\u662f",
                "delete-downloaded": "\u522a\u9664",
                "use-safari-for-vr": "We recommend Safari to view this tour in VR mode",
                "exit-fullscreen": "\u9000\u51fa\u5168\u87a2\u5e55",
                no: "\u5426",
                "download-failed": "\u4e0b\u8f09\u5931\u6557",
                "giroscope-disabled-http": "\u60a8\u6b63\u5728\u901a\u904ehttp(\u672a\u52a0\u5bc6)\u700f\u89bd\u672c\u7db2\u9801\uff0c\u56e0\u6b64\u8a2d\u5099\u7684\u904b\u52d5\u548c\u65b9\u5411\u53d6\u7528\u6b0a\u9650\uff0c\u4ee5\u53caVR\u6a21\u5f0f\u5747\u5df2\u7981\u7528\uff0c\u8acb\u53e6\u901a\u904ehttps(\u52a0\u5bc6)\u7db2\u5740\u5c0d\u5176\u9032\u884c\u555f\u7528\u3002",
                "cookies-notice": "\u8a72\u7db2\u9801\u4f7f\u7528cookie\u4f86\u6536\u96c6\u4f7f\u7528\u60c5\u6cc1\u7d71\u8a08\u4fe1\u606f\u3002 \u6709\u95dc\u66f4\u591a\u4fe1\u606f\uff0c\u8acb\u8a2a\u554f<a> Cookie\u653f\u7b56</a>\u3002",
                "use-cardboard": "Use Cardboard",
                "launch-default-browser": "Launch in default browser",
                "rotate-device": "Please, rotate your device",
                "exit-vr": "Exit VR",
                "storage-not-provided-launch-from-desktop": "\u8acb\u5f9e\u684c\u9762\u9ede\u64ca\u5716\u793a\uff0c\u91cd\u65b0\u555f\u52d5\u865b\u64ec\u5c0e\u89bd\uff0c\u4ee5\u9032\u884c\u4e0b\u8f09\u3002",
                "disable-measure": "Stop measuring",
                downloading: "\u6b63\u5728\u4e0b\u8f09",
                "cardboard-v2": "If you have a Cardboard v2 headset, which comes with a button, you can gaze at a hotspot and press the button to trigger its action.",
                "enable-video-audio-prompt": "\u5141\u8a31\u5f71\u7247\u53ca\u8072\u97f3\u64ad\u653e?",
                reject: "\u62d2\u7d55",
                downloaded: "\u865b\u64ec\u5c0e\u89bd\u5df2\u4e0b\u8f09\uff0c\u53ef\u9032\u884c\u96e2\u7dda\u64ad\u653e\u3002",
                "samsung-internet-vr-app-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you need to make Samsung Internet your default browser.",
                "samsung-internet-vr-info": "If you have a Gear VR headset compatible with this device and you have installed Samsung Internet for VR you can also use it to view this content in VR, you just need to put the mobile phone on the headset now.",
                "enable-video-prompt": "\u5141\u8a31\u5f71\u7247\u64ad\u653e?",
                "giroscope-disabled-safari-request-permission": ["\u8a72\u7db2\u7ad9\u5df2\u7981\u7528\u60a8\u8a2d\u5099\u7684\u904b\u52d5\u548c\u65b9\u5411\u53d6\u7528\u6b0a\u9650\uff0cVR\u6a21\u5f0f\u4e5f\u88ab\u7981\u7528\u3002",
                    "\u8981\u6b63\u78ba\u67e5\u770b\u672c\u7db2\u9801\uff0c\u8acb\u55ae\u64ca\u7e7c\u7e8c\uff0c\u4e26\u5728\u51fa\u73fe\u63d0\u793a\u6642\u63a5\u53d7\u8a31\u53ef\u8acb\u6c42\u3002"],
                "storage-not-provided-launch-from-homescreen": "\u8acb\u4e3b\u9801\u9762\u87a2\u5e55\u9ede\u64ca\u5716\u793a\uff0c\u91cd\u65b0\u555f\u52d5\u865b\u64ec\u5c0e\u89bd\uff0c\u4ee5\u9032\u884c\u4e0b\u8f09\u3002",
                "enter-fullscreen": "\u9032\u5165\u5168\u87a2\u5e55",
                "use-cardboard-v2": "Use Cardboard v2",
                unmute: "\u53d6\u6d88\u975c\u97f3",
                "enter-vr": "Enter VR content",
                "enable-measure": "Start measuring",
                "use-cardboard-info": "You can use any compatible Google Cardboard headset to view this content in VR.",
                "refresh-downloaded": "\u91cd\u65b0\u6574\u7406",
                "use-default-cardboard": "Use Default",
                "enable-audio-prompt": "\u5141\u8a31\u8072\u97f3\u64ad\u653e?"
            }
        }
    });
    define("lk", ["require", "fg", "gt", "jt"], function (a) {
        function b(a) {
            return e[j][a] || e.en[a] || a
        }
        var c = a("fg"),
        e = a("gt"),
        g = a("jt"),
        d;
        for (d in e)
            e[d.substr(0, 2)] = e[d];
        e.en["giroscope-disabled-safari-toggle-on"] = '<div>Your device\'s motion and orientation access and VR mode are disabled for this site.</div>\n<div>To properly see this webpage, please enable it:</div>\n<ul style="display:inline-block; text-align:left;">\n<li>Access you device\'s settings: "Settings > Safari > Privacy & Security" and toggle on: "Motion & Orientation Access".</li>\n<li>Refresh the browser.</li>\n</ul>';
        e["zh-hk"] = e["zh-mo"] = e["zh-tw"];
        e.no = e.nn;
        var f = function () {
            var a = window.navigator,
            b = ["language", "browserLanguage", "systemLanguage", "userLanguage"],
            d,
            c,
            f = [];
            (d = g.Jn("language")) && f.push(d.toLowerCase());
            var h = a.languages;
            if (Array.isArray(h))
                for (d = 0; d < h.length; d++)
                    if ((c = h[d]) && c.length)
                        c = c.toLowerCase(), -1 == f.indexOf(c) && f.push(c);
            for (d = 0; d < b.length; d++)
                if ((c = a[b[d]]) && c.length)
                    c = c.toLowerCase(), -1 == f.indexOf(c) && f.push(c);
            return f
        }
        (),
        h = Object.keys(e),
        j = function () {
            for (var a = 0; a < f.length; a++) {
                var b =
                    f[a];
                if (0 <= h.indexOf(b))
                    return b;
                b = b.substr(0, 2);
                if (0 <= h.indexOf(b))
                    return b
            }
            return "en"
        }
        ();
        b.log = function () {
            c.log("translation lang: " + j);
            c.log("browser lang: " + f.join(", "))
        };
        return b
    });
    define("lw", ["require"], function () {
        var a = {};
        a.src = a.CBa = "data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAC721kYXQhEAUgpBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBSCkG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAsJtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAALwABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAB7HRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAALwAAAAAAAAAAAAAAAQEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAC8AAAAAAAEAAAAAAWRtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAKxEAAAIAFXEAAAAAAAtaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAFNvdW5kSGFuZGxlcgAAAAEPbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADTc3RibAAAAGdzdHNkAAAAAAAAAAEAAABXbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAAKxEAAAAAAAzZXNkcwAAAAADgICAIgACAASAgIAUQBUAAAAAAfQAAAHz+QWAgIACEhAGgICAAQIAAAAYc3R0cwAAAAAAAAABAAAAAgAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAFzAAABdAAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=";
        return a
    });
    define("dj", ["require", "lw", "r"], function (a) {
        function b(a) {
            var b = document.createElement("video");
            b.setAttribute("webkit-playsinline", "true");
            b.setAttribute("playsinline", "true");
            b.src = f.src;
            var d = b.play();
            if (d) {
                var c = y;
                d.then(function () {
                    c = n;
                    b.pause();
                    a(y)
                })["catch"](function () {
                    c || a(n)
                })
            } else
                b.pause(), a(y)
        }
        function c(a) {
            var b = y,
            d = document.createElement("video");
            d.setAttribute("webkit-playsinline", "true");
            d.setAttribute("playsinline", "true");
            d.src = "";
            (d = d.play()) ? d["catch"](function (a) {
                b = "NotAllowedError" !==
                    a.name
            }).then(function () {
                a(!b)
            }) : a(n)
        }
        function e(a) {
            l = a;
            p = n;
            g()
        }
        function g() {
            for (; k.length; )
                k.shift().call(window, l)
        }
        function d() {
            j || (j = n, h.browser() == h.Ji && 11 <= h.HF() ? e(n) : h.browser() == h.If ? b(e) : c(function (a) {
                    a ? b(e) : e(y)
                }))
        }
        var f = a("lw"),
        h = a("r"),
        j = y,
        p = y,
        k = [],
        l;
        return {
            test: function (a) {
                !p && !j && d();
                k.push(a);
                p && g()
            }
        }
    });
    define("bp", ["require", "lk", "jg", "dj"], function (a) {
        function b(a, b) {
            this.Gv = a;
            this.Hp = b;
            this.Ql = this.Ql.bind(this);
            this.Rl = y
        }
        function c() {
            this.Ql = this.Ql.bind(this);
            this.vX = this.vX.bind(this);
            this.m = "not tested";
            this.Y1 = [];
            this.jo = [];
            this.eK = y;
            g.aA(this.vX)
        }
        var e = a("lk"),
        g = a("jg"),
        d = a("dj");
        c.prototype.Kza = function () {
            "not tested" == this.m && (this.m = "testing", d.test(function (a) {
                    this.m = a ? "requires action" : "allowed";
                    this.Kna()
                }
                    .bind(this)))
        };
        c.prototype.Kna = function () {
            "allowed" == this.m ? this.Ql(n) : this.eK &&
            (this.eK = y, this.jo.forEach(function (a) {
                    a.Bg()
                }))
        };
        c.prototype.w_ = function (a) {
            "allowed" == this.m ? a.call(this, n) : this.Y1.push(a)
        };
        c.prototype.Bg = function (a) {
            this.ds(a)
        };
        c.prototype.cancel = function (a) {
            this.qQ(a)
        };
        c.prototype.TX = function () {
            return "allowed" == this.m
        };
        c.prototype.cza = function () {
            "allowed" == this.m && (this.m = "requires action")
        };
        c.prototype.vX = function () {
            setTimeout(this.Bia.bind(this), 300);
            this.Bm(n)
        };
        c.prototype.Bia = function () {
            for (; this.jo.length; )
                this.jo.pop().cancel()
        };
        c.prototype.ds = function (a) {
            "testing" ==
            this.m || "not tested" == this.m ? (this.IP(a), this.eK = n) : "requires action" == this.m && this.IP(a).Bg()
        };
        c.prototype.qQ = function (a) {
            "testing" == this.m || "not tested" == this.m ? this.eK = y : "requires action" == this.m && this.IP(a).cancel()
        };
        c.prototype.Ql = function (a) {
            var b = this.jo;
            this.jo = [];
            b.forEach(function (b) {
                a || b.Gv.set("mute", n);
                b.cancel()
            });
            this.Bm(a)
        };
        c.prototype.Bm = function (a) {
            this.m = "allowed";
            this.Y1.forEach(function (b) {
                b.call(window, a)
            })
        };
        c.prototype.IP = function (a) {
            for (var d = r, c = 0; c < this.jo.length && !d; c++)
                this.jo[c].Gv ==
                a && (d = this.jo[c]);
            d || (d = new b(a, this.Ql), this.jo.push(d));
            return d
        };
        b.prototype.Bg = function () {
            this.Rl || (this.Rl = n, "button" == this.Gv.get("mediaActivationMode") ? this.Gv.cz.Pxa(this.Ql) : this.Gv.gy.show(e("enable-audio-prompt"), this.Ql))
        };
        b.prototype.cancel = function () {
            this.Gv.cz.sua(this.Ql);
            this.Gv.gy.hide(this.Ql)
        };
        b.prototype.Ql = function (a) {
            this.Hp(a !== y);
            this.Rl = y
        };
        return new c
    });
    define("fx", ["require", "ll", "bZ", "eO"], function (a) {
        function b() {
            var a;
            a = g ? !d : !document[h];
            f.visible != a && (f.visible = a, f.trigger(new e(c.aa)))
        }
        var c = a("ll"),
        e = a("bZ"),
        g = y,
        d = y,
        f = new(a("eO"));
        f.visible = n;
        for (var h, j, a = ["hidden", "msHidden", "webkitHidden"], p = ["visibilitychange", "msvisibilitychange", "webkitvisibilitychange"], k = 0; k < a.length; k++)
            "undefined" !== typeof document[a[k]] && (h = a[k], j = p[k]);
        h === m || "undefined" === typeof document[h] ? (h = "hidden", document[h] = y, j = function () {
            document[h] = y;
            b()
        }, a = function () {
            document[h] =
                n;
            b()
        }, document.addEventListener ? (window.addEventListener("focus", j, n), window.addEventListener("blur", a, n)) : (document.attachEvent("onfocusin", j), document.attachEvent("onfocusout", a))) : document.addEventListener(j, b, y);
        f.vN = function (a) {
            (g = a) && (d = y);
            b()
        };
        f.h_ = function (a) {
            d = a;
            b()
        };
        return f
    });
    define("gg", ["require", "ll", "jE", "bp", "fx"], function (a) {
        var b = a("ll"),
        c = a("jE"),
        e = a("bp"),
        g = a("fx");
        if (!c.A_ || "AudioContext" in window === y)
            return r;
        var d = new AudioContext;
        e.w_(function () {
            "running" !== d.state && d.resume()
        });
        g.bind(b.aa, function () {
            g.visible && "interrupted" == d.state && d.resume()
        });
        return d
    });
    define("dn", "require,gg,ll,r,jt,jE,fx".split(","), function (a) {
        function b(a) {
            this.Vf = this.Vf.bind(this);
            this.Tm = this.Tm.bind(this);
            this.t = r;
            this.rd = y;
            this.dm = this.nI = 1;
            this.yI = n;
            this.er = this.hx = r;
            this.t = a;
            this.t.addEventListener("play", this.Vf, n);
            this.t.addEventListener("playing", this.Tm, n);
            this.m$();
            this.xv()
        }
        var c = a("gg");
        a("ll");
        var e = a("r"),
        g = a("jt"),
        d = a("jE");
        a("fx");
        var f;
        b.prototype.clear = function () {
            if (this.t) {
                this.gsa();
                this.t.removeEventListener("play", this.Vf, n);
                this.t.removeEventListener("playing",
                    this.Tm, n);
                this.t = r
            }
        };
        b.prototype.m$ = function () {
            if (d.A_ && e.browser() == e.If && c && !this.hx && this.jr()) {
                if (!f) {
                    f = c.createDelay();
                    f.delayTime.value = 0.3;
                    f.connect(c.destination)
                }
                this.hx = c.createMediaElementSource(this.t);
                this.er = c.createGain();
                this.hx.connect(this.er);
                this.er.connect(f)
            }
        };
        b.prototype.gsa = function () {
            if (this.hx) {
                this.hx.disconnect();
                this.hx = r
            }
            if (this.er) {
                this.er.disconnect();
                this.er = r
            }
        };
        b.prototype.pya = function (a) {
            if (this.yI != a) {
                this.t.log("AudioController", "set hasAudio: " + a);
                this.yI = a;
                this.xv()
            }
        };
        b.prototype.Kd = function (a) {
            if (this.rd != a) {
                this.t.log("AudioController", "set muted: " + a);
                this.rd = a;
                this.xv()
            }
        };
        b.prototype.hq = function (a) {
            if (this.dm != a) {
                this.t.log("AudioController", "set volume: " + a);
                this.dm = a;
                this.xv()
            }
        };
        b.prototype.KF = function (a) {
            if (this.nI != a) {
                this.t.log("AudioController", "set gain: " + a);
                this.nI = Math.max(0, Math.min(1, a));
                this.xv()
            }
        };
        b.prototype.Vf = function () {
            this.xv()
        };
        b.prototype.Tm = function () {
            this.xv()
        };
        b.prototype.xv = function () {
            this.t.log("AudioController", "updateVolume paused: " +
                this.t.paused + " outputVolume: " + (!this.yI || this.rd ? 0 : this.dm * this.nI));
            if (!this.t.paused) {
                var a = !this.yI || this.rd ? 0 : this.dm * this.nI;
                a > 0 && a < 1 && this.m$();
                if (this.er) {
                    this.er.gain.value = a;
                    this.t.volume = 1
                } else
                    this.t.volume = a;
                this.t.muted = a == 0
            }
        };
        b.prototype.jr = function () {
            var a = this.t.currentSrc || this.t.children.length && this.t.children[0].src || "";
            g.cw(a) && (a = m);
            return a
        };
        return b
    });
    define("ga", ["require"], function () {
        return {
            Ni: "video",
            rfa: "audio"
        }
    });
    define("kg", "require,fg,ll,fu,ge,bZ,eO,r,jt,gx,fx".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("ge"),
        d = a("bZ"),
        f = a("eO"),
        h = a("r"),
        j = a("jt"),
        p = a("gx"),
        k = a("fx"),
        l = b.extend(f, function (a) {
            f.call(this);
            this.t = a;
            this.Iu = this.Iu.bind(this);
            this.Yo = this.Yo.bind(this);
            this.gi = this.gi.bind(this);
            this.Mu = this.Mu.bind(this);
            this.Qg = this.Qg.bind(this);
            this.hi = this.hi.bind(this);
            this.Vf = this.Vf.bind(this);
            this.Tm = this.Tm.bind(this);
            this.rE = this.rE.bind(this);
            this.t.addEventListener("ended", this.gi,
                n);
            this.t.addEventListener("pause", this.hi, y);
            this.t.addEventListener("stalled", this.hi, y);
            this.t.addEventListener("waiting", this.hi, y);
            this.t.addEventListener("canplay", this.Iu, n);
            this.t.addEventListener("canplaythrough", this.Yo, y);
            this.t.addEventListener("loadedmetadata", this.Qg, n);
            this.t.addEventListener("play", this.Vf, y);
            this.t.addEventListener("playing", this.Tm, y);
            this.t.addEventListener("error", this.Mu, y);
            this.FR = y;
            this.m = e.H;
            this.ty = this.Ff = r;
            k.bind(c.aa, this.Mta, this)
        });
        l.prototype.clear =
        function () {
            if (this.t) {
                this.t.removeEventListener("ended", this.gi, n);
                this.t.removeEventListener("pause", this.hi, y);
                this.t.removeEventListener("stalled", this.hi, y);
                this.t.removeEventListener("waiting", this.hi, y);
                this.t.removeEventListener("canplay", this.Iu, n);
                this.t.removeEventListener("canplaythrough", this.Yo, y);
                this.t.removeEventListener("loadedmetadata", this.Qg, n);
                this.t.removeEventListener("play", this.Vf, y);
                this.t.removeEventListener("error", this.Mu, y);
                this.t = r
            }
        };
        l.prototype.play = function () {
            this.t.log("PlaybackController",
                "play");
            this.ty = e.P;
            this.oD()
        };
        l.prototype.stop = function () {
            this.t.log("PlaybackController", "stop");
            this.ty = e.H;
            this.oD()
        };
        l.prototype.Qe = function () {
            return this.Ff || this.m
        };
        l.prototype.$v = function () {
            return this.t.readyState == this.t.HAVE_NOTHING || this.t.readyState == this.t.HAVE_METADATA || this.t.currentTime === 0 ? y : n
        };
        l.prototype.oD = function () {
            if (!this.Ff && this.ty) {
                this.Ff = this.ty;
                this.ty = r;
                this.Ff == e.P ? this.nW() : this.mW()
            }
        };
        l.prototype.Mta = function () {
            if (k.visible) {
                this.t.log("PlaybackController", "visibile changed to true, setting state to " +
                    this.m);
                this.Ff = this.m;
                this.Ff == e.P ? this.nW() : this.mW()
            } else if (!this.t.paused) {
                this.t.log("PlaybackController", "paused by visibile changed to false");
                var a = this.t.pause();
                a && a["catch"](this.Mu)
            }
        };
        l.prototype.jr = function () {
            return this.t.currentSrc || this.t.children.length && this.t.children[0].src || ""
        };
        l.prototype.nW = function () {
            var a = this.jr();
            this.TK(a && !j.cw(a));
            this.bH = h.browser() == h.If;
            if (this.t.paused) {
                this.t.log("PlaybackController", "startPlaying calling play");
                this.t.muted = n;
                this.t.log("PlaybackController",
                    "this._media.play()");
                (a = this.t.play()) && a["catch"](this.Mu)
            } else {
                this.t.log("PlaybackController", "startPlaying already playing");
                this.Vf()
            }
        };
        l.prototype.Tm = function () {
            this.t.log("PlaybackController", "onPlaying event received. Visible: " + k.visible)
        };
        l.prototype.Vf = function () {
            if (this.Ff == e.P) {
                this.t.log("PlaybackController", "onPlay event received when waiting to play");
                this.Ff = r;
                this.m = e.P;
                this.trigger(new d(l.EO));
                this.oD()
            } else
                this.t.log("PlaybackController", "onPlay event received. Visible: " + k.visible)
        };
        l.prototype.mW = function () {
            this.TK(y);
            this.bH = y;
            if (this.t.paused) {
                this.t.log("PlaybackController", "startPausing already paused");
                this.hi()
            } else {
                this.t.log("PlaybackController", "startPausing calling pause");
                var a = this.t.pause();
                a && a["catch"](this.Mu)
            }
        };
        l.prototype.hi = function () {
            if (this.Ff == e.H) {
                this.t.log("PlaybackController", "onPause event received when waiting to stop");
                this.Ff = r;
                this.m = e.H;
                this.oD()
            } else if (k.visible) {
                this.t.log("PlaybackController", "onPause event received without calling to pause");
                (this.m == e.P && !this.Ff || this.Ff == e.P) && !this.t.hasAttribute("loop") && !isNaN(this.t.duration) && this.t.currentTime == this.t.duration && this.t.duration > 0 && this.gi();
                this.rE()
            } else
                this.t.log("PlaybackController", "onPause event received when not visible")
        };
        l.prototype.Iu = function () {
            this.t.log("PlaybackController", "on can play");
            this.rE()
        };
        l.prototype.Yo = function () {
            this.t.log("PlaybackController", "can play through");
            this.rE();
            this.TK(y)
        };
        l.prototype.rE = function () {
            if (this.q$()) {
                if (this.bH && this.t.currentTime ==
                    0) {
                    this.t.log("PlaybackController", "updatePlaying applying ios hack");
                    this.bH = y;
                    try {
                        this.t.currentTime = 0.3
                    } catch (a) {}
                }
                h.browser() != h.Dw && this.v9()
            }
        };
        l.prototype.q$ = function () {
            return this.m == e.P && k.visible && this.t.paused && this.t.readyState >= 3
        };
        l.prototype.v9 = function (a) {
            if (!this.w9)
                if (a) {
                    if (this.q$()) {
                        this.t.log("PlaybackController", "updatePlaying retrying play");
                        this.Ff = e.P;
                        this.nW()
                    }
                } else
                    this.w9 = setTimeout(function () {
                        this.w9 = r;
                        this.v9(n)
                    }
                            .bind(this), 500)
        };
        l.prototype.Mu = function () {
            if (this.Ff == e.P) {
                this.t.log("PlaybackController",
                    "onError waiting to play");
                this.Ff = r;
                this.ty ? this.oD() : h.browser() == h.If ? this.trigger(new d(l.kO)) : this.Ff = e.P
            }
        };
        l.prototype.Qg = function () {
            this.t.log("PlaybackController", "on loaded metadata");
            !isNaN(this.t.duration) && this.t.currentTime == this.t.duration && this.t.duration > 0 && this.gi()
        };
        l.prototype.gi = function () {
            this.t.log("PlaybackController", "onEnded");
            this.bH = y;
            if (this.m == e.P && !this.Ff || this.Ff == e.H) {
                this.t.log("PlaybackController", "onEnded finalizing video");
                this.TK(y);
                this.Ff = e.H;
                this.mW();
                this.trigger(new d(l.Pj))
            }
        };
        l.prototype.TK = function (a) {
            if (this.FR != a) {
                this.t.log("PlaybackController", "downloading changed to: " + a);
                (this.FR = a) ? p.Bza(g.k0) : p.Aza(g.k0)
            }
        };
        l.kO = "deactivated";
        l.Pj = "end";
        l.EO = "play";
        return l
    });
    define("x", ["require", "fg", "ll", "bZ", "eO"], function (a) {
        var b = a("fg"),
        c = a("ll");
        a("bZ");
        var e = a("eO"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.Qg = this.Qg.bind(this);
            this.fU = this.fU.bind(this);
            this.Uf = this.Uf.bind(this);
            this.t = a;
            this.Ch = r;
            this.Nc = [];
            this.t.addEventListener("loadedmetadata", this.Qg, n);
            this.t.textTracks.addEventListener("addtrack", this.fU, y)
        });
        a.prototype.set = function (a) {
            a && this.oha(a)
        };
        a.prototype.clear = function () {
            this.Upa()
        };
        a.prototype.bF = function () {
            var a = this.Ch && this.Ch.track.activeCues;
            a && (a = Array.prototype.slice.call(a, 0));
            return a || []
        };
        a.prototype.Qg = function () {
            this.Paa()
        };
        a.prototype.fU = function () {
            this.Paa()
        };
        a.prototype.Uf = function () {
            this.M9(this.Ch.track.activeCues)
        };
        a.prototype.M9 = function (a) {
            a || (a = []);
            0 == this.Nc.length && 0 == a.length || (this.Nc = Array.prototype.slice.call(a), this.trigger(c.Jf, this.Nc))
        };
        a.prototype.oha = function (a) {
            this.t.log("TextTracksController", "add text track src: " + a);
            this.Ch = document.createElement("track");
            this.Ch.kind = "subtitles";
            this.Ch.src = a;
            this.t.appendChild(this.Ch)
        };
        a.prototype.Upa = function () {
            this.Ch && (this.t.log("TextTracksController", "remove text track"), this.Ch.track.removeEventListener("cuechange", this.Uf), this.Ch.track.mode = "disabled", this.Ch.src = "", this.t.removeChild(this.Ch), this.Ch = r, this.M9([]))
        };
        a.prototype.Paa = function () {
            for (var a = 0; a < this.t.textTracks.length; a++) {
                var b = this.t.textTracks[a];
                b.removeEventListener("cuechange", this.Uf);
                b.mode = this.Ch && b == this.Ch.track ? "hidden" : "disabled";
                "hidden" == b.mode && b.addEventListener("cuechange", this.Uf)
            }
        };
        return a
    });
    define("gl", ["require", "do", "jt"], function (a) {
        var b = a("do"),
        c = a("jt"),
        a = {
            is: function (a, g) {
                var d = c.parse(a).Wua;
                return b(g).contains(d)
            },
            cw: function (a, c) {
                return a && b(c).any(function (b) {
                    return 0 === a.indexOf(b)
                })
            },
            TO: [".mp4", ".m4v", ".m4p"],
            Lfa: [".hevc"],
            n0: [".mov"],
            o1: [".webm"],
            F0: [".ogv", ".ogg"],
            cga: [".mpg", ".mpeg"],
            Qfa: [".jpg", ".jpeg"],
            Sj: [".m3u8"],
            E0: [".mpd"],
            jga: [".png"],
            Kfa: [".gif"],
            sfa: [".bmp"]
        };
        a.Nfa = [].concat(a.Qfa, a.jga, a.Kfa, a.sfa);
        a.pfa = [].concat(a.Sj, a.E0);
        a.Ni = [].concat(a.pfa, a.TO, a.o1,
            a.F0, a.cga, a.Sj, a.E0);
        a.Ofa = ["data:image/"];
        return a
    });
    define("dB", "require,fg,ll,bZ,eO,r,gl".split(","), function (a) {
        var b = a("fg");
        a("ll");
        var c = a("bZ"),
        e = a("eO"),
        g = a("r"),
        d = a("gl"),
        f = b.extend(e, function (a) {
            e.call(this);
            this.t = a;
            this.Yo = this.Yo.bind(this);
            this.hi = this.hi.bind(this);
            this.Vf = this.Vf.bind(this);
            this.Qg = this.Qg.bind(this);
            this.gi = this.gi.bind(this);
            this.PJ = this.PJ.bind(this);
            this.hd = this.hd.bind(this);
            this.GT = this.iy = this.pv = m;
            this.EW = 0;
            this.t.addEventListener("ended", this.gi, n);
            this.t.addEventListener("pause", this.hi, y);
            this.t.addEventListener("canplaythrough",
                this.Yo, y);
            this.t.addEventListener("timeupdate", this.PJ, y);
            this.t.addEventListener("play", this.Vf, y);
            this.t.addEventListener("playing", this.Tm, y)
        });
        f.prototype.clear = function () {
            if (this.t) {
                this.t.removeEventListener("ended", this.gi, n);
                this.t.removeEventListener("pause", this.hi, y);
                this.t.removeEventListener("canplaythrough", this.Yo, y);
                this.t.removeEventListener("timeupdate", this.PJ, y);
                this.t.removeEventListener("play", this.Vf, y);
                this.t.removeEventListener("playing", this.Tm, y);
                this.t = r;
                this.pv && clearInterval(this.pv)
            }
        };
        f.prototype.setTime = function (a) {
            this.EW = 0;
            this.aJ = m;
            this.t.log("TimeController", "setTime: " + a);
            this.aH = g.eY() && !d.is(this.jr(), d.Sj) ? a || 0 : m;
            try {
                this.t.currentTime = a
            } catch (b) {}
            if (g.browser() != g.nq && g.browser() != g.Dw && (g.Uc() != g.hA || a != 0)) {
                this.iy = a;
                this.Aaa()
            }
        };
        f.prototype.getTime = function () {
            return this.iy || this.t.currentTime || 0
        };
        f.prototype.Cj = function () {
            return this.t.duration || 0
        };
        f.prototype.Vf = function () {
            this.ZV(n)
        };
        f.prototype.hi = function () {
            this.ZV(y);
            this.aJ = m
        };
        f.prototype.Yo = function () {
            this.t.log("TimeController",
                "on can play through");
            this.Aaa()
        };
        f.prototype.gi = function () {
            this.aH = m;
            this.ZV(y)
        };
        f.prototype.Qg = function () {
            this.trigger(new c(f.cg))
        };
        f.prototype.Aaa = function () {
            if (this.t.readyState >= this.t.HAVE_ENOUGH_DATA && this.iy !== m) {
                this.t.log("TimeController", "updateCurrentTime when can play through set time to: " + this.iy);
                try {
                    this.t.currentTime = this.iy
                } catch (a) {}
                this.iy = m
            }
        };
        f.prototype.hd = function () {
            this.trigger(new c(f.Md))
        };
        f.prototype.PJ = function () {
            if (g.eY() && !g.Lca() && !this.t.paused && this.t.readyState >=
                this.t.HAVE_ENOUGH_DATA) {
                var a = (new Date).getTime();
                this.aJ || (this.aJ = a);
                if (this.GT && a - this.GT > 500) {
                    this.EW++;
                    this.EW / ((a - this.aJ) * 0.001) > 0.4 && g.dza()
                }
                this.GT = a
            }
            if (this.aH !== m && this.t.currentTime > this.aH) {
                this.aH = m;
                try {
                    this.t.currentTime = this.t.currentTime - 0.01
                } catch (b) {}
            }
            this.hd()
        };
        f.prototype.ZV = function (a) {
            if (!!this.pv != a)
                if (this.pv) {
                    clearInterval(this.pv);
                    this.pv = r
                } else
                    this.pv = setInterval(this.hd, 16)
        };
        f.prototype.jr = function () {
            return this.t.currentSrc || this.t.children.length && this.t.children[0].src ||
            ""
        };
        f.Md = "time update";
        f.cg = "duration update";
        return f
    });
    define("iX", "require,jquery.mod,fg,gg,r,jt".split(","), function (a) {
        function b() {}
        a("jquery.mod");
        var c = a("fg"),
        e = a("gg"),
        g = a("r"),
        a = a("jt");
        b.oma = function () {
            window.MediaSource = window.MediaSource || window.WebKitMediaSource;
            return window.MediaSource && typeof window.MediaSource.isTypeSupported === "function" && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')
        };
        b.yma = function () {
            if (g.browser() == g.If) {
                var a = g.bw();
                if (a >= 10 && a < 11 || a >= 11.3)
                    return n
            }
            return y
        };
        b.pma = function () {
            return g.browser() ==
            g.Ji || g.browser() == g.If ? n : y
        };
        var d;
        b.vba = function (a) {
            try {
                d || (d = document.createElement("audio"));
                return !!d.canPlayType(a).replace(/^no$/, "")
            } catch (b) {}
            return y
        };
        var f;
        b.mz = function (a) {
            try {
                if (!f) {
                    f = document.createElement("video");
                    f.setAttribute("webkit-playsinline", "true");
                    f.setAttribute("playsinline", "true")
                }
                return !!f.canPlayType(a).replace(/^no$/, "")
            } catch (b) {}
            return y
        };
        b.nua = function () {
            return g.browser() == g.If ? g.bw() >= 15 || e ? n : y : n
        };
        b.qma = function () {
            try {
                if (document.createElement("canvas").getContext("webgl"))
                    return n
            } catch (a) {}
            try {
                if (document.createElement("canvas").getContext("experimental-webgl"))
                    return n
            } catch (b) {}
            return y
        };
        b.Wea = function (a, b, d) {
            if (g.Rd() == g.Lh)
                if (!d || d > 30) {
                    if (a <= 3168 && b <= 1584)
                        return n
                } else {
                    if (a <= 4096 && b <= 2048)
                        return n
                }
            else if (g.oda())
                if (!d || d > 30) {
                    if (a <= 4096 && b <= 4096 || a <= 5760 && b <= 5760 || a <= 5760 && b <= 2880 || a <= 8192 && b <= 4096)
                        return n
                } else {
                    if (a <= 5760 && b <= 5760 || a <= 8192 && b <= 4096)
                        return n
                }
            else if (g.nda())
                if (!d || d > 30) {
                    if (a <= 2880 && b <= 2880 || a <= 4096 && b <= 2048)
                        return n
                } else {
                    if (a <= 3840 && b <= 3840 || a <= 4096 && b <= 4096 || a <= 5760 && b <= 2880 || a <= 2880 && b <= 5760)
                        return n
                }
            else if (g.Za()) {
                if (a <= 3840 && b <= 2160)
                    return n
            } else if (a <= 4096 &&
                b <= 2048)
                return n;
            return y
        };
        b.Jza = function (a, d) {
            return b.Wea(a, d, 30)
        };
        b.log = function () {
            c.log("webgl: " + b.y_);
            c.log("html5 audio: " + b.Uca);
            c.log("html5 video: " + b.Xca)
        };
        b.bsa = function () {
            return ["webgl:" + b.y_, "html5audio:" + b.Uca, "html5video:" + b.Xca].join(" ")
        };
        b.Wca = b.vba('audio/ogg; codecs="vorbis"');
        b.Vca = b.vba("audio/mpeg");
        b.Uca = b.Wca || b.Vca;
        b.RY = b.mz('video/ogg; codecs="theora"');
        b.oBa = b.mz('video/mp4; codecs="avc1.42E01E"');
        b.SY = b.mz('video/webm; codecs="vp8, vorbis"');
        b.mwa = b.mz('video/mp4; codecs="hev1"');
        b.TM = b.mz("video/mp4");
        b.nwa = b.mz("video/quicktime");
        b.Yca = b.yma();
        b.Fca = b.pma();
        b.dwa = b.Fca || b.TM && b.oma();
        b.Xca = b.RY || b.TM || b.SY;
        b.y_ = b.qma();
        a.zg("debug") && a.zg("capabilities") && b.log();
        b.summary = b.bsa();
        return b
    });
    define("bW", ["require", "jt"], function (a) {
        function b() {
            this.dJ = this.IT = r;
            this.so = [];
            this.Om = y;
            this.zr = m
        }
        var c = a("jt");
        b.prototype.mm = function (a, b) {
            this.IT = c.Zs(a);
            this.dJ = b;
            this.L()
        };
        b.prototype.load = function (a, b) {
            var d = {};
            d.call = a;
            d.context = b || window;
            this.so.push(d);
            this.zr || (this.zr = this.b5());
            this.L()
        };
        b.prototype.Sp = function () {
            return this.zr !== m
        };
        b.prototype.L = function () {
            0 < this.so.length && (this.zr !== m ? this.aka() : this.IT && this.ZB())
        };
        b.prototype.ZB = function () {
            if (!(this.Om || this.zr !== m)) {
                this.Om =
                    n;
                var a = document.createElement("script");
                a.type = "text/javascript";
                a.src = this.IT;
                document.getElementsByTagName("head")[0].appendChild(a);
                this.hba()
            }
        };
        b.prototype.hba = function () {
            var a = this.b5();
            if (a === m) {
                var b = this;
                setTimeout(function () {
                    b.hba()
                }, 250)
            } else
                this.zr = a, this.Om = y, this.L()
        };
        b.prototype.b5 = function () {
            if (this.dJ) {
                for (var a = window, b = 0; b < this.dJ.length && a !== m; b++)
                    a = a[this.dJ[b]];
                return a
            }
        };
        b.prototype.aka = function () {
            for (; 0 < this.so.length; ) {
                var a = this.so.pop();
                a.call.call(a.context, this.zr)
            }
        };
        return {
            p1: new b,
            Sj: new b,
            mm: function (a) {
                this.Sj.mm(a.get(TDV.PlayerSettings.HLS_URL), ["Hls"]);
                this.p1.mm(a.get(TDV.PlayerSettings.WEBVR_POLYFILL_URL), ["WebVRConfig", "FORCE_ENABLE_VR"])
            }
        }
    });
    define("dR", ["require"], function () {
        var a = {
            Eda: "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV"
        };
        a.src =
            a.Eda;
        return a
    });
    define("cS", "require,fg,ll,bZ,eO,iX,jt,jE,gl,bW,dR".split(","), function (a) {
        function b(a, b, d) {
            this.src = a || "";
            this.Nj = b || "";
            this.startTime = d || 0
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("iX"),
        h = a("jt"),
        j = a("jE"),
        p = a("gl"),
        k = a("bW"),
        l = a("dR"),
        a = c.extend(d, function (a, b) {
            d.call(this);
            this.t = a;
            this.yj = b;
            this.NT = y;
            this.dL = [];
            this.qd = this.jd = this.jB = r
        });
        a.prototype.set = function (a, d, c) {
            this.t.log("SrcSetter", "set: " + a + " subtitles: " + d + " startTime: " + c);
            a = new b(a, d, c);
            if (!this.jd || !this.jd.isEqual(a))
                if (!this.jd && this.jB &&
                    this.jB.isEqual(a))
                    this.OW();
                else {
                    this.jd = a;
                    this.nna()
                }
        };
        a.prototype.clear = function () {
            if (this.qd) {
                this.qd.destroy();
                this.qd = r
            }
            this.jB = r;
            this.Tpa();
            this.yj.clear()
        };
        a.prototype.fwa = function () {
            return !!this.jd
        };
        a.prototype.nna = function () {
            this.NT = n;
            if (this.s9(this.jd.src) && !k.Sj.Sp()) {
                this.t.log("SrcSetter", "hls lib required");
                k.Sj.load(this.d6, this)
            } else
                this.d6()
        };
        a.prototype.d6 = function () {
            if (this.NT) {
                this.NT = y;
                this.Nha()
            }
        };
        a.prototype.Nha = function () {
            this.clear();
            this.Iqa(!!this.jd.src && h.eda(this.jd.src));
            this.s9(this.jd.src) ? this.Cha() : this.Oha()
        };
        a.prototype.Cha = function () {
            var a = k.Sj.zr,
            b = (navigator.connection ? Math.max(navigator.connection.downlink, 2) : 2) * 1048576,
            d = b * 0.66;
            this.qd = new a({
                debug: j.H_,
                startPosition: this.jd.startTime === 0 ? -1 : this.jd.startTime,
                levelLoadingTimeOut: 6E4,
                startLevel: -1,
                autoStartLoad: y,
                abrEwmaDefaultEstimate: b
            });
            this.qd.loadSource(this.jd.src);
            this.qd.attachMedia(this.t);
            var c = function () {
                this.qd.off(a.Events.MANIFEST_PARSED, c);
                if (navigator.connection) {
                    var e = this.qd.levels.filter(function (a) {
                        return a.bitrate <=
                        b
                    });
                    if (e.length) {
                        e.sort(function (a, b) {
                            return b.width - a.width
                        });
                        var h = this.qd.levels.indexOf(e[0]);
                        this.qd.startLevel = h
                    }
                    e = this.qd.levels.filter(function (a) {
                        return a.bitrate <= d
                    });
                    if (e.length) {
                        e.sort(function (a, b) {
                            return b.width - a.width
                        });
                        this.qd.config.minAutoBitrate = e[0].bitrate - 1
                    }
                    e = this.qd.levels.filter(function (a) {
                        return f.Jza(a.width, a.height)
                    });
                    if (j.Mfa) {
                        e.sort(function (a, b) {
                            return b.width - a.width
                        });
                        h = this.qd.levels.indexOf(e[0]);
                        this.qd.startLevel = h
                    }
                    if (e.length && e.length < this.qd.levels.length) {
                        e.sort(function (a,
                                b) {
                            return b.width - a.width
                        });
                        this.qd.autoLevelCapping = this.qd.levels.indexOf(e[0])
                    }
                    this.t.log("SrcSetter", "bandwidth: " + b + " lowBandwidth: " + d);
                    this.t.log("SrcSetter", "levels: " + this.qd.levels);
                    this.t.log("SrcSetter", "startLevel: " + this.qd.levels[this.qd.startLevel]);
                    this.t.log("SrcSetter", "minLevel: " + this.qd.levels[this.qd.minAutoLevel])
                }
                this.qd.startLoad(this.jd.startTime === 0 ? -1 : this.jd.startTime);
                this.jd.startTime != 0 && this.l$(this.jd.startTime);
                this.jd.Nj && this.yj.set(this.jd.Nj);
                this.jB = this.jd;
                this.jd = r;
                this.OW()
            }
            .bind(this);
            this.qd.on(a.Events.MANIFEST_PARSED, c);
            this.qd.on(a.Events.gAa, function (b, d) {
                d.fatal && d.type == a.ErrorTypes.kAa && this.qd.recoverMediaError()
            }
                .bind(this))
        };
        a.prototype.Oha = function () {
            this.jd.src ? this.k2(this.jd.src) : this.k2(l.Eda, "audio/mpeg");
            this.jd.Nj && this.yj.set(this.jd.Nj);
            this.t.load();
            this.jd.startTime != 0 && this.l$(this.jd.startTime);
            this.jB = this.jd;
            this.jd = r;
            this.OW()
        };
        a.prototype.OW = function () {
            this.t.log("SrcSetter", "src ready");
            this.trigger(new g(e.Lb))
        };
        a.prototype.s9 =
        function (a) {
            return a && p.is(a, p.Sj) && !f.Fca
        };
        a.prototype.Iqa = function (a) {
            a && !this.t.hasAttribute("crossorigin") ? this.t.setAttribute("crossorigin", "anonymous") : !a && this.t.hasAttribute("crossorigin") && this.t.removeAttribute("crossorigin")
        };
        a.prototype.l$ = function (a) {
            try {
                this.t.currentTime = a
            } catch (b) {}
        };
        a.prototype.k2 = function (a, b) {
            var d = document.createElement("source");
            b || (b = this.kma(a));
            if (b)
                d.type = b;
            h.cw(a) || (a = h.Hv(a, "swbypass=true"));
            d.src = a;
            this.t.appendChild(d);
            this.dL.push(d)
        };
        a.prototype.Tpa =
        function () {
            for (; this.dL && this.dL.length; ) {
                var a = this.dL.shift();
                a.src = "";
                this.t.removeChild(a)
            }
        };
        a.prototype.kma = function (a) {
            switch (h.getExtension(a).toLowerCase()) {
            case ".mp3":
                return "audio/mpeg";
            case ".ogg":
                return "audio/ogg";
            case ".m4v":
            case ".mp4":
                return "video/mp4";
            case ".webm":
                return "video/webm";
            case ".ogv":
                return "video/ogg";
            case ".m3u8":
                return "application/x-mpegURL";
            case ".mov":
                return "video/quicktime"
            }
        };
        b.prototype.isEqual = function (a) {
            return this.src == a.src && this.Nj == a.Nj
        };
        return a
    });
    define("kQ", "require,fg,ll,bZ,eO,r,jE,d,bp,jg,dn,ga,kg,x,dB,cS".split(","), function (a) {
        function b(a) {
            setTimeout(a, 0)
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("r"),
        h = a("jE"),
        j = a("d"),
        p = a("bp"),
        k = a("jg"),
        l = a("dn"),
        q = a("ga"),
        o = a("kg"),
        t = a("x"),
        s = a("dB"),
        v = a("cS"),
        u = 0,
        w = c.extend(d, function (a, b) {
            d.call(this);
            this.Zd = a;
            this.Nta = b;
            this.Qg = this.Qg.bind(this);
            this.Bm = this.Bm.bind(this);
            this.rU = this.rU.bind(this);
            this.Kl = this.Bx = r;
            this.fK = m;
            this.cb = this.ra = r;
            this.Oi = "inactive";
            this.Ck = this.ca = this.nc =
                this.tp = this.yj = r;
            this.rd = y;
            this.n$(document.createElement(this.Zd));
            b && k.aA(this.Bm)
        });
        w.prototype.n$ = function (a) {
            this.S$();
            this.cb = a;
            for (this.cb.parentNode && this.cb.parentNode.removeChild(this.cb); this.cb.children.length; )
                this.cb.removeChild(this.cb.children[0]);
            this.vra();
            this.cb.autoplay = y;
            this.cb.autobuffer = "autobuffer";
            this.cb.Oz = f.browser() == f.If ? "metadata" : "none";
            this.cb.setAttribute("preload", f.browser() == f.If ? "metadata" : "none");
            this.cb.setAttribute("webkit-playsinline", "true");
            this.cb.setAttribute("playsinline",
                "true");
            this.cb.addEventListener("loadedmetadata", this.Qg, n);
            this.yj = new t(this.cb);
            this.yj.bind(e.Jf, this.Uf, this, n);
            this.tp = new v(this.cb, this.yj);
            this.tp.bind(e.Lb, this.e8, this, n);
            this.nc = new l(this.cb);
            this.ca = new o(this.cb);
            this.ca.bind(o.kO, this.Z6, this, n);
            this.ca.bind(o.Pj, this.gi, this, n);
            this.ca.bind(o.EO, this.Vf, this, n);
            this.Ck = new s(this.cb);
            this.Ck.bind(s.Md, this.hd, this, n);
            this.Ck.bind(s.cg, this.hj, this, n)
        };
        w.prototype.vra = function () {
            if (h.H_) {
                var a = "[" + this.Zd + " " + u++ + "]";
                this.cb.log =
                function (b, d) {
                    console.log(a + "[" + (new Date).toISOString().split("T")[1] + "] " + b + " " + d)
                }
            } else
                this.cb.log = D()
        };
        w.prototype.S$ = function () {
            if (this.cb) {
                this.cb.removeEventListener("loadedmetadata", this.Qg, n);
                if (this.tp) {
                    this.tp.unbind(e.Lb, this.e8, this, n);
                    this.tp.clear();
                    this.tp = r
                }
                if (this.yj) {
                    this.yj.unbind(e.Jf, this.Uf, this, n);
                    this.yj.clear();
                    this.yj = r
                }
                if (this.nc) {
                    this.nc.clear();
                    this.nc = r
                }
                if (this.ca) {
                    this.ca.unbind(o.kO, this.Z6, this, n);
                    this.ca.unbind(o.Pj, this.gi, this, n);
                    this.ca.unbind(o.EO, this.Vf, this,
                        n);
                    this.ca.clear();
                    this.ca = r
                }
                if (this.Ck) {
                    this.Ck.unbind(s.Md, this.hd, this, n);
                    this.Ck.unbind(s.cg, this.hj, this, n);
                    this.Ck.clear();
                    this.Ck = r
                }
                this.cb = r
            }
        };
        w.prototype.clear = function () {
            this.S$()
        };
        w.prototype.pz = function (a, b, d) {
            if (this.Jh() && this.$v())
                try {
                    a.drawImage(this.cb, 0, 0, b, d);
                    return n
                } catch (c) {}
            a.fillRect(0, 0, b, d);
            return y
        };
        w.prototype.play = function (a, b, d) {
            this.cb.log("HTMLMediaPlayer", "play src: " + b.src + " subtitlesSrc: " + b.Nj + " hasAudio: " + b.Rp + " gain: " + b.gain);
            this.ra = a;
            this.Bx = r;
            this.Kl = b.clone();
            this.fK = d || 0;
            this.yha()
        };
        w.prototype.ZM = function () {
            return this.Oi == "activated"
        };
        w.prototype.NN = Q("Nta");
        w.prototype.stop = function () {
            this.cb.log("HTMLMediaPlayer", "stop");
            this.ca.stop();
            this.Kl = r
        };
        w.prototype.Qe = function () {
            return this.ca.Qe()
        };
        w.prototype.$v = function () {
            return this.tp.fwa() ? y : this.ca.$v()
        };
        w.prototype.Kd = function (a) {
            this.nc.Kd(a);
            this.rd = a;
            this.ra && this.Oi == "requested" && (this.rd ? p.cancel(this.ra) : p.Bg(this.ra))
        };
        w.prototype.hq = function (a) {
            this.nc.hq(a)
        };
        w.prototype.KF = function (a) {
            this.nc.KF(a)
        };
        w.prototype.sm = function (a) {
            this.Jha(a)
        };
        w.prototype.yi = function () {
            return this.Ck.getTime()
        };
        w.prototype.rw = function (a) {
            return this.Ck.setTime(a)
        };
        w.prototype.Cj = function () {
            return this.Ck.Cj()
        };
        w.prototype.Jh = function () {
            return this.Zd == q.Ni
        };
        w.prototype.wd = Q("Zd");
        w.prototype.ad = function () {
            return this.cb && this.Jh() && this.cb.videoWidth || 0
        };
        w.prototype.Pd = function () {
            return this.cb && this.Jh() && this.cb.videoHeight || 0
        };
        w.prototype.bF = function () {
            return this.yj.bF()
        };
        w.prototype.yha = function () {
            this.cb.log("HTMLMediaPlayer",
                "assert can play");
            if (this.Oi == "activated" || !this.Kl.Rp) {
                this.cb.log("HTMLMediaPlayer", "can play activationState: " + this.Oi + " pending media has audio: " + this.Kl.Rp);
                this.Iu()
            } else if (this.Oi == "inactive") {
                this.cb.log("HTMLMediaPlayer", "needs activation");
                this.ra && this.Zd == q.Ni && this.nma() ? this.Wga() : this.ra && j.qF() ? this.Bm() : this.ra && this.xha()
            }
        };
        w.prototype.nma = function () {
            var a = this.C4();
            return a && (!a.currentSrc || a.paused) && !a.muted ? n : y
        };
        w.prototype.C4 = function () {
            return this.ra.get("settings").get(TDV.PlayerSettings.ACTIVE_VIDEO_ELEMENT)
        };
        w.prototype.Wga = function () {
            this.cb.log("HTMLMediaPlayer", "activate with application parameter");
            this.n$(this.C4());
            this.Bm()
        };
        w.prototype.xha = function () {
            this.cb.log("HTMLMediaPlayer", "ask for activation");
            this.Oi = "requested";
            p.w_(this.Bm);
            this.ra && !this.rd && p.Bg(this.ra)
        };
        w.prototype.Bm = function () {
            if (this.Oi == "inactive" || this.Oi == "requested") {
                this.cb.log("HTMLMediaPlayer", "activate received when state: " + this.Oi + " and has media: " + !!this.Bx);
                if (this.Bx)
                    b(function () {
                        k.aA(this.Bm)
                    }
                        .bind(this));
                else {
                    this.Oi =
                        "activating";
                    this.tp.set("", "", 0)
                }
            }
        };
        w.prototype.Iu = function () {
            this.cb.log("HTMLMediaPlayer", "media can play. Has pending properties: " + !!this.Kl);
            this.Kl && this.tp.set(this.Kl.src, this.Kl.Nj, this.fK)
        };
        w.prototype.e8 = function () {
            this.Oi == "activating" ? this.Coa() : this.Kl && this.moa()
        };
        w.prototype.Coa = function () {
            this.cb.log("HTMLMediaPlayer", "on src ready activating");
            this.ca.play()
        };
        w.prototype.Vf = function () {
            if (this.Oi == "activating") {
                this.cb.log("HTMLMediaPlayer", "on play activating");
                this.ca.stop();
                this.Oi =
                    "activated";
                this.Iu()
            }
        };
        w.prototype.moa = function () {
            this.cb.log("HTMLMediaPlayer", "on pending src ready");
            this.Bx = this.Kl;
            this.Kl = r;
            this.Dha(this.Bx.Rp);
            this.Bha(this.Bx.gain);
            this.Ck.setTime(this.fK);
            this.fK = m;
            this.ca.play()
        };
        w.prototype.Dha = function (a) {
            this.nc.pya(a)
        };
        w.prototype.Bha = function (a) {
            this.nc.KF(a)
        };
        w.prototype.Jha = function (a) {
            a && !this.cb.hasAttribute("loop") ? this.cb.setAttribute("loop", "") : !a && this.cb.hasAttribute("loop") && this.cb.removeAttribute("loop")
        };
        w.prototype.Z6 = function () {
            this.cb.log("HTMLMediaPlayer",
                "on deactivated");
            p.cza();
            k.aA(this.rU);
            this.ra && b(function () {
                p.Bg(this.ra)
            }
                .bind(this))
        };
        w.prototype.rU = function () {
            this.cb.log("HTMLMediaPlayer", "on reactivated");
            this.ca.play()
        };
        w.prototype.Uf = function () {
            this.trigger(e.Jf, this.yj.bF())
        };
        w.prototype.Qg = function () {
            this.trigger(new g(w.Bfa))
        };
        w.prototype.hd = function () {
            this.trigger(new g(w.Md))
        };
        w.prototype.hj = function () {
            this.trigger(new g(w.cg))
        };
        w.prototype.gi = function () {
            this.trigger(new g(w.Pj))
        };
        w.Md = "time update";
        w.cg = "duration update";
        w.Bfa = "size update";
        w.Pj = "end";
        return w
    });
    define("cQ", ["require"], function () {
        return function (a) {
            this.cue = a;
            this.text = a.text
        }
    });
    define("ka", ["require"], function () {
        function a() {
            this.Nj = this.src = m;
            this.Rp = y;
            this.gain = 1
        }
        a.prototype.clone = function () {
            var b = new a;
            b.src = this.src;
            b.Nj = this.Nj;
            b.Rp = this.Rp;
            b.gain = this.gain;
            return b
        };
        return a
    });
    define("bD", "require,fg,do,ll,fu,bZ,eO,iX,r,jt,kQ,ga".split(","), function (a) {
        function b(a) {
            this.JA = a;
            this.Y = r;
            this.xu = (new Date).getTime()
        }
        var c = a("fg"),
        e = a("do"),
        g = a("ll"),
        d = a("fu"),
        f = a("bZ"),
        h = a("eO"),
        j = a("iX"),
        p = a("r"),
        k = a("jt"),
        l = a("kQ"),
        q = a("ga");
        b.prototype.$Y = function () {
            return this.Y == r
        };
        b.prototype.ZM = function () {
            return this.JA.ZM()
        };
        b.prototype.NN = function () {
            return this.JA.NN()
        };
        b.prototype.item = Q("Y");
        b.prototype.fva = function () {
            this.Y.iZ(this.JA);
            this.Y = r
        };
        b.prototype.Uza = function (a) {
            this.Y =
                a;
            this.Y.mY(this.JA);
            this.xu = (new Date).getTime()
        };
        var o = c.extend(h, function () {
            h.call(this);
            this.dn = [];
            for (var a = k.bca("avs", 10), c = k.bca("avpas", j.nua() ? 4 : 1), f = 0; f < a; f++)
                this.dn.push(new b(new l(q.Ni, f < c)));
            this.$f = [];
            this.m = d.H
        });
        o.prototype.Gz = function () {
            return this.m5().length > 0
        };
        o.prototype.mN = function (a) {
            this.$f = [a].concat(e(this.$f).without(a));
            this.LU()
        };
        o.prototype.XX = function (a) {
            this.$f.push(a);
            this.LU()
        };
        o.prototype.Mz = function (a) {
            this.$f = e(this.$f).without(a);
            this.LU()
        };
        o.prototype.LU =
        function () {
            var a = this.Sla();
            if (o.Oca())
                for (; this.dn.length < a.length; )
                    this.dn.push(new b(new l(q.Ni, y)));
            this.m5().forEach(function (b) {
                a.indexOf(b.item()) < 0 && b.fva()
            });
            this.Zb(a.length > 0 ? d.P : d.H);
            a.forEach(function (a) {
                if (!this.yla(a)) {
                    var d = this.ola(a.pN());
                    !d && !a.pN() && this.dn.push(d = new b(new l(q.Ni, y)));
                    d && d.Uza(a)
                }
            }
                .bind(this));
            this.pla().forEach(function (a) {
                a.JA.stop()
            })
        };
        o.prototype.Sla = function () {
            return this.$f.map(function (a, b) {
                var d = {};
                d.index = b;
                d.Td = a.LY();
                d.item = a;
                return d
            }).sort(function (a,
                    b) {
                return a.Td - b.Td || a.index - b.index
            }).map(function (a) {
                return a.item
            })
        };
        o.prototype.Zb = function (a) {
            if (this.m != a) {
                this.m = a;
                this.trigger(new f(this.m == d.H ? g.pe : g.lh))
            }
        };
        o.prototype.ola = function (a) {
            var b = this.dn.filter(function (a) {
                return a.$Y()
            });
            if (b.length) {
                if (a) {
                    a = b.filter(function (a) {
                        return a.ZM()
                    });
                    a.length || (a = b.filter(function (a) {
                            return a.NN()
                        }))
                } else {
                    a = b.filter(function (a) {
                        return !a.NN()
                    });
                    a.length || (a = b.filter(function (a) {
                            return !a.ZM()
                        }))
                }
                a.length && (b = a);
                if (p.browser() == p.Ji) {
                    b.sort(function (a,
                            b) {
                        return b.xu - a.xu
                    });
                    return b[Math.min(2, b.length - 1)]
                }
                return b[0]
            }
            return r
        };
        o.prototype.pla = function () {
            return this.dn.filter(function (a) {
                return a.$Y()
            })
        };
        o.prototype.m5 = function () {
            return this.dn.filter(function (a) {
                return !a.$Y()
            })
        };
        o.prototype.yla = function (a) {
            for (var b = 0; b < this.dn.length; b++)
                if (this.dn[b].item() == a)
                    return this.dn[b];
            return r
        };
        o.gT = r;
        o.bind = function () {
            var a = o.Of();
            a.bind.apply(a, arguments)
        };
        o.unbind = function () {
            var a = o.Of();
            a.unbind.apply(a, arguments)
        };
        var t = [p.eA, p.Fw].indexOf(p.Uc()) >=
        0;
        o.Oca = function () {
            return t
        };
        o.Gz = function () {
            return o.Of().Gz()
        };
        o.XX = function (a) {
            o.Of().XX(a)
        };
        o.mN = function (a) {
            o.Of().mN(a)
        };
        o.Mz = function (a) {
            o.Of().Mz(a)
        };
        o.vo = function () {
            if (o.gT === r)
                o.gT = new o;
            return o.gT
        };
        o.Of = o.vo;
        o.vo();
        return o
    });
    define("z", "require,fg,bZ,eO,ll,fu,kQ,cQ,ka,ga,bD,V,iX".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = a("ll"),
        d = a("fu"),
        f = a("kQ"),
        h = a("cQ"),
        j = a("ka"),
        p = a("ga"),
        k = a("bD"),
        l = a("V"),
        q = a("iX"),
        o = b.extend(e, function (a, b, c) {
            e.call(this);
            this.ra = a;
            this.j = b;
            this.nD = c;
            this.V = r;
            this.ID();
            this.AJ = this.AJ.bind(this);
            this.j.bind(g.D("gain"), this.uC, this, n);
            this.j.bind(g.D("mp3Url"), this.Fl, this, n);
            this.j.bind(g.D("oggUrl"), this.Fl, this, n);
            this.m = d.H;
            this.fj = y;
            this.Vq = this.gb = 0;
            this.rd = y;
            this.dm = 1;
            this.rB = y;
            this.Lx = 1;
            this.$b = r;
            this.Cm = []
        });
        o.prototype.Ta = Q("ra");
        o.prototype.Cc = function (a) {
            if (this.m != a && !(a == d.mc && this.m != d.P)) {
                this.m = a;
                if (this.m == d.P) {
                    this.zia();
                    k.mN(this)
                } else
                    this.Hra();
                this.PW()
            }
        };
        o.prototype.Hra = function () {
            if (!this.rB) {
                this.rB = n;
                this.n4 = this.j.get("fadeOutTime");
                this.n4 == 0 ? this.L$() : this.AJ(0)
            }
        };
        o.prototype.AJ = function (a) {
            if (!this.$b || this.Lx == 0 || !this.rB || this.Tma())
                this.L$();
            else {
                this.Lx = Math.max(0, this.Lx - a / this.n4);
                this.cH();
                l.Ma(this.AJ)
            }
        };
        o.prototype.zia = function () {
            this.rB =
                y;
            this.Lx = 1;
            this.cH()
        };
        o.prototype.L$ = function () {
            this.rB = y;
            this.Lx = 1;
            if (this.$b) {
                k.Mz(this);
                this.m == d.H && this.YV()
            }
        };
        o.prototype.Qe = Q("m");
        o.prototype.Cj = Q("gb");
        o.prototype.rw = function (a) {
            this.Vq = a;
            this.$b && this.$b.play(this.ra, this.V, this.Vq)
        };
        o.prototype.yi = Q("Vq");
        o.prototype.hq = function (a) {
            this.dm = a;
            this.cH()
        };
        o.prototype.cH = function () {
            this.$b && this.$b.hq(this.dm * this.Lx)
        };
        o.prototype.Kd = function (a) {
            this.rd = a;
            this.$b && this.$b.Kd(a)
        };
        o.prototype.sm = function (a) {
            this.fj = a;
            this.$b && this.$b.sm(a)
        };
        o.prototype.pN = function () {
            return !this.rd
        };
        o.prototype.wd = function () {
            return p.rfa
        };
        o.prototype.LY = Q("nD");
        o.prototype.mY = function (a) {
            this.$b = a;
            setTimeout(function () {
                this.$b && this.$b.bind(f.Pj, this.tC, this, n)
            }
                .bind(this), 0);
            this.ID();
            this.$b.bind(f.Md, this.hd, this, n);
            this.$b.bind(f.cg, this.hj, this, n);
            this.$b.bind(g.Jf, this.Uf, this, n);
            this.$b.Kd(this.rd);
            this.cH();
            this.$b.sm(this.fj);
            this.$b.play(this.ra, this.V, this.Vq)
        };
        o.prototype.iZ = function () {
            this.Vq = this.$b.yi();
            this.$b.unbind(f.Pj, this.tC, this,
                n);
            this.$b.unbind(f.Md, this.hd, this, n);
            this.$b.unbind(f.cg, this.hj, this, n);
            this.$b.unbind(g.Jf, this.Uf, this, n);
            this.$b = r
        };
        o.prototype.clear = function () {
            this.Cc(d.H);
            if (this.j) {
                this.j.unbind(g.D("gain"), this.uC, this, n);
                this.j.unbind(g.D("mp3Url"), this.Fl, this, n);
                this.j.unbind(g.D("oggUrl"), this.Fl, this, n);
                this.j = r
            }
        };
        o.prototype.Fl = function () {
            this.av && clearTimeout(this.av);
            this.av = setTimeout(function () {
                this.av = r;
                if (this.$b) {
                    this.V.src = this.jr(this.j);
                    this.$b.play(this.ra, this.V, this.Vq)
                }
            }
                    .bind(this),
                    10)
        };
        o.prototype.uC = function () {
            if (this.$b) {
                var a = this.j.get("gain");
                if (this.V.gain != a) {
                    this.V.gain = a;
                    this.$b.KF(this.V.gain)
                }
            }
        };
        o.prototype.ID = function () {
            this.V = new j;
            this.V.src = this.jr(this.j);
            this.V.Rp = n;
            this.V.gain = this.j.get("gain")
        };
        o.prototype.jr = function (a) {
            var b = a.get("mp3Url");
            if (b && q.Vca)
                return b;
            return (a = a.get("oggUrl")) && q.Wca ? a : b || a
        };
        o.prototype.hj = function () {
            this.gb = this.$b.Cj();
            this.MW()
        };
        o.prototype.hd = function () {
            this.gb != this.$b.Cj() && this.hj();
            this.Vq = this.$b.yi();
            this.jE()
        };
        o.prototype.Uf =
        function () {
            this.Cm = this.$b.bF().map(function (a) {
                for (var b = r, d = 0; d < this.Cm.length && !b; d++)
                    this.Cm[d].cue == a && (b = this.Cm[d]);
                b || (b = new h(a));
                return b
            }
                    .bind(this));
            this.trigger(new c(g.Jf))
        };
        o.prototype.tC = function () {
            this.Cc(d.H);
            this.NW()
        };
        o.prototype.Tma = function () {
            return this.$b && this.$b.yi() && this.$b.yi() == this.$b.Cj()
        };
        o.prototype.YV = function () {
            this.Vq = 0;
            this.jE()
        };
        o.prototype.jE = function () {
            this.trigger(new c(o.Md))
        };
        o.prototype.MW = function () {
            this.trigger(new c(o.cg))
        };
        o.prototype.NW = function () {
            this.trigger(new c(g.Ba))
        };
        o.prototype.PW = function () {
            this.trigger(new c(g.gc))
        };
        o.Md = "time update";
        o.cg = "duration update";
        return o
    });
    define("kn", "require,fg,ll,ge,fu,jd,bZ,dW,z".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("ge"),
        g = a("fu"),
        d = a("jd"),
        f = a("bZ"),
        h = a("dW"),
        j = a("z"),
        a = b.extend(d, function (a) {
            d.call(this);
            this.set("state", g.H);
            this.nD = a || e.vga;
            this.gl = m
        });
        h.A("Audio", a).B("Object").J({
            audio: "AudioResource",
            loop: "bool",
            state: "enum[stopped, playing, paused]"
        }).Cg({
            play: function () {
                this.Rg()
            },
            pause: function () {
                this.rk()
            },
            stop: function () {
                this.vj()
            }
        }).Xb([c.lh, c.Ba, c.gc]);
        a.prototype.Sv = function () {
            if (this.gl == m) {
                var a =
                    this.get("audio");
                if (a) {
                    this.gl = new j(this.get("application"), a, this.nD);
                    a = function () {
                        this.gl.sm(this.get("loop", y))
                    };
                    a.call(this);
                    this.bind(c.D("loop"), a, this);
                    a = function () {
                        this.gl.Kd(this.get("application").get("mute", y))
                    };
                    a.call(this);
                    this.get("application").bind(c.D("mute"), a, this, n);
                    a = function () {
                        this.set("state", this.gl.Qe())
                    };
                    a.call(this);
                    this.gl.bind(c.gc, a, this, n);
                    this.gl.bind(c.Ba, this.Jna, this, n)
                } else
                    this.gl = r
            }
            return this.gl
        };
        a.prototype.set = function (a, b) {
            if (a == "state") {
                var e = this.get("state") ||
                    g.H,
                h = this.gl && this.gl.Qe() || g.H;
                if (h != e) {
                    e == g.H && h == g.P && this.trigger(c.lh);
                    this.trigger(new f(c.gc, {
                            oldState: e,
                            state: h
                        }))
                }
            }
            d.prototype.set.call(this, a, b)
        };
        a.prototype.In = function () {
            return []
        };
        a.prototype.Jna = function () {
            this.trigger(new f(c.Ba))
        };
        a.prototype.Rg = function () {
            var a = this.Sv();
            a && a.Cc(g.P)
        };
        a.prototype.vj = function () {
            var a = this.Sv();
            a && a.Cc(g.H)
        };
        a.prototype.rk = function () {
            var a = this.Sv();
            a && a.Cc(g.mc)
        };
        return a
    });
    define("gN", ["fg", "dW", "kn"], function (a, b, c) {
        a = a.extend(c, function (a) {
            c.call(this, a)
        });
        b.A("MediaAudio", a).B("Audio").J({
            autoplay: "bool"
        });
        return a
    });
    define("lE", "require,fg,ge,dW,gN,z".split(","), function (a) {
        var b = a("fg"),
        c = a("ge"),
        e = a("dW"),
        g = a("gN");
        a("z");
        a = b.extend(g, function () {
            g.call(this, c.ega)
        });
        e.A("PanoramaAudio", a).B("MediaAudio");
        return a
    });
    define("fB", ["fg", "lE", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("DirectionalPanoramaAudio", a).B("PanoramaAudio").J({
            yaw: "number",
            pitch: "number",
            maximumAngle: "number"
        });
        return a
    });
    define("gh", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("DistancePanoramaCameraMovement", b).B("DistanceRotationalCameraMovement");
        return b
    });
    define("fo", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("DistanceRotationalCameraMovement", b).B("RotationalCameraMovement").J({
            hfovDelta: "number",
            pitchDelta: "number",
            yawDelta: "number"
        });
        return b
    });
    define("u", "require,do,ll,fg,bZ,eO".split(","), function (a) {
        function b(a, b, c, j, g) {
            this.$i = r;
            this.bU = a;
            this.Vd = e.D(this.bU);
            this.GS = b;
            this.ka = c || window;
            this.dT = j;
            this.D6 = g;
            this.nT = y
        }
        var c = a("do"),
        e = a("ll"),
        g = a("fg");
        a("bZ");
        a("eO");
        b.prototype.unwatch = function () {
            this.zV(r)
        };
        b.prototype.zV = function (a) {
            c(this.Y4()).each(function (a) {
                a && a.unbind(this.Vd, this.X2, this)
            }, this);
            this.$i = a;
            c(this.Y4()).each(function (a) {
                a && a.bind(this.Vd, this.X2, this, this.dT)
            }, this);
            this.t9()
        };
        b.prototype.Y4 = function () {
            return this.$i ?
            c(this.$i).isArray() ? this.$i : [this.$i] : []
        };
        b.prototype.t9 = function () {
            this.D6 && this.D6.zV(this.tla())
        };
        b.prototype.tla = function () {
            return this.$i == r ? r : c(this.$i).isArray() ? c(this.$i).map(function (a) {
                return a ? a.get(this.bU) : r
            }, this) : this.$i.get(this.bU)
        };
        b.prototype.X2 = function (a) {
            if (!this.nT) {
                try {
                    this.nT = n;
                    this.t9();
                    this.GS.call(this.ka, a)
                } catch (b) {
                    g.bN("ChangeWatcher._changeHandler", b)
                }
                this.nT = y
            }
        };
        b.watch = function (a, f, e, j, g) {
            c.isString(f) && (f = f.split("."));
            typeof g == "undefined" && (g = y);
            if (f.length >
                0) {
                f = new b(f[0], e, j, g, b.watch(r, f.slice(1), e, j, g));
                f.zV(a);
                return f
            }
            return r
        };
        return b
    });
    define("lB", ["jquery.mod", "fg", "ll", "d"], function (a, b, c, e) {
        var g = b.extend(e, function () {
            e.call(this);
            this.Tc("DropDownArrow");
            this.u = r;
            this.uo = n;
            this.bind(c.yb, this.qka, this)
        });
        g.prototype.za = function () {
            e.prototype.za.call(this);
            this.f("color", "#000000");
            this.f("direction", g.dO)
        };
        g.prototype.qka = function () {
            this.uo = n;
            this.Dc()
        };
        g.prototype.Ga = function () {
            e.prototype.Ga.call(this);
            this.u || (this.u = a("<canvas/>"), this.u.css({
                    position: "absolute",
                    left: 0,
                    top: 0
                }), this.Ra().append(this.u))
        };
        g.prototype.ja = function () {
            var a =
                y;
            this.n("color") && (a = n, this.q("color"));
            this.n("direction") && (a = n, this.q("direction"));
            this.uo && (a = n, this.uo = y);
            if (a) {
                var a = this.Id(),
                b = this.Hd(),
                c = this.k("color"),
                j = this.k("direction"),
                p = [0.5 * a, 0, a],
                j = j == g.dO ? [b, 0, 0] : [0, b, b],
                k = this.u.get(0);
                k.width = a;
                k.height = b;
                k = k.getContext("2d");
                k.clearRect(0, 0, a, b);
                k.beginPath();
                k.moveTo(p[0], j[0]);
                k.lineTo(p[1], j[1]);
                k.lineTo(p[2], j[2]);
                k.fillStyle = c;
                k.fill()
            }
            e.prototype.ja.call(this)
        };
        g.dO = "down";
        g.eAa = "up";
        return g
    });
    define("fQ", "fg,bZ,jY,R,ll,c,fm,kS,lB,gP".split(","), function (a, b, c, e, g, d, f, h, j, p) {
        a = a.extend(h, function () {
            h.call(this);
            this.Tc("DropDownButton");
            this.Cq = this.sa = r;
            this.CT = n;
            this.set("autoRolledOver", n);
            this.set("autoPressed", n);
            this.set("childrenInteractionEnabled", y);
            this.set("contentOpaque", n);
            this.set("cursor", e.Ue);
            this.bind(g.U, this.KR, this)
        });
        a.prototype.za = function () {
            h.prototype.za.call(this);
            this.f("arrowColor", "#000000");
            this.f("arrowBeforeLabel");
            this.f("arrowWidth", 9);
            this.f("arrowHeight",
                5);
            this.f("arrowGap", 5);
            this.f("shadow", y);
            this.f("layout", d.Be);
            this.f("verticalAlign", c.vc);
            this.f("borderRadius", 5);
            this.f("borderColor", "#AAAAAA");
            this.f("borderSize", 1);
            this.f("backgroundColor", ["#FAFAFA", "#E5E5E5"]);
            this.f("backgroundColorRatios", [0, 1]);
            this.f("backgroundColorDirection", "vertical");
            this.f("paddingLeft", 5);
            this.f("paddingTop", 5);
            this.f("paddingRight", 5);
            this.f("paddingBottom", 5);
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor", "#555555");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textDecoration");
            this.f("textShadowColor");
            this.f("textShadowHorizontalLength");
            this.f("textShadowVerticalLength");
            this.f("textShadowBlurRadius");
            this.f("textShadowOpacity");
            this.h("rollOverBorderColor", f.v, "borderColor");
            this.h("rollOverArrowColor", f.v, "arrowColor");
            this.h("rollOverBackgroundColor", f.v, "backgroundColor");
            this.h("rollOverBackgroundColorRatios", f.v, "backgroundColorRatios");
            this.h("rollOverShadow", f.v, "shadow");
            this.h("pressedBorderColor", f.Ca, "borderColor");
            this.h("pressedArrowColor",
                f.Ca, "arrowColor");
            this.h("pressedBackgroundColor", f.Ca, "backgroundColor");
            this.h("pressedBackgroundColorRatios", f.Ca, "backgroundColorRatios");
            this.h("pressedShadow", f.Ca, "shadow");
            this.h("pressedRollOverBorderColor", f.$a, "borderColor");
            this.h("pressedRollOverArrowColor", f.$a, "arrowColor");
            this.h("pressedRollOverBackgroundColor", f.$a, "backgroundColor");
            this.h("pressedRollOverBackgroundColorRatios", f.$a, "backgroundColorRatios");
            this.h("pressedRollOverShadow", f.$a, "shadow");
            this.h("pressedBorderColor",
                f.G, "borderColor");
            this.h("pressedArrowColor", f.G, "arrowColor");
            this.h("pressedBackgroundColor", f.G, "backgroundColor");
            this.h("pressedBackgroundColorRatios", f.G, "backgroundColorRatios");
            this.h("pressedShadow", f.G, "shadow")
        };
        a.prototype.set = function (a, b) {
            if (a == "label" && this.get("label") != b) {
                this.CT = n;
                this.Dc()
            }
            h.prototype.set.call(this, a, b)
        };
        a.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            if (!this.sa) {
                this.sa = new p;
                this.sa.set("width", "100%");
                this.la(this.sa)
            }
            if (!this.Cq) {
                this.Cq = new j;
                this.Cq.set("direction",
                    j.dO);
                this.la(this.Cq)
            }
        };
        a.prototype.KR = function () {
            this.open();
            this.trigger(new b(g.OPEN))
        };
        a.prototype.open = function () {
            this.unbind(g.U, this.KR, this);
            this.ED(n)
        };
        a.prototype.close = function () {
            this.bind(g.U, this.KR, this);
            this.ED(y)
        };
        a.prototype.ja = function () {
            if (this.CT) {
                this.sa.set("text", this.get("label"));
                this.CT = y
            }
            this.ib(["horizontalAlign", "fontFamily", "fontSize", "fontColor", "fontWeight", "fontStyle", "textDecoration", "textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius",
                    "textShadowOpacity"], {}, [this.sa], n, n);
            if (this.n("arrowGap")) {
                this.set("gap", this.k("arrowGap"));
                this.q("arrowGap")
            }
            if (this.n("arrowColor")) {
                this.Cq.set("color", this.k("arrowColor"));
                this.q("arrowColor")
            }
            if (this.n("arrowBeforeLabel")) {
                this.k("arrowBeforeLabel") == n ? this.Hj(this.Cq, 0) : this.Hj(this.sa, 0);
                this.q("arrowBeforeLabel")
            }
            if (this.n("arrowWidth")) {
                this.Cq.set("width", this.k("arrowWidth"));
                this.q("arrowWidth")
            }
            if (this.n("arrowHeight")) {
                this.Cq.set("height", this.k("arrowHeight"));
                this.q("arrowHeight")
            }
            h.prototype.ja.call(this)
        };
        return a
    });
    define("fG", ["do", "fg", "kS", "c"], function (a, b, c, e) {
        var g = b.extend(c, function () {
            c.call(this)
        });
        g.ob = {
            layout: e.of
        };
        a.defaults(g.ob, c.ob);
        g.prototype.za = function () {
            this.bk(g.ob)
        };
        return g
    });
    define("iQ", "require,fg,bZ,jY,R,fV,ll,kS,fG,gP".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("jY"),
        g = a("R"),
        d = a("fV"),
        f = a("ll"),
        h = a("kS"),
        j = a("fG"),
        p = a("gP"),
        a = b.extend(h, function () {
            h.call(this);
            this.Tc("DropDownPopup");
            this.yc = r;
            this.jH = y;
            this.Fa = r;
            this.VB = [];
            this.ps = n
        });
        a.prototype.open = function (a) {
            this.yc = a;
            this.jH = n;
            this.Ta().Hj(this, this.Ta().Pa().length - 1);
            this.set("overIndex", -1);
            this.set("visible", n);
            this.bind(f.Hb, this.pc, this);
            this.Ta().bind(f.fc, this.u6, this);
            this.Ta().bind(f.yb,
                this.kb, this)
        };
        a.prototype.close = function () {
            this.yc = r;
            this.jH = n;
            this.set("visible", y);
            this.Fa.set("overflow", d.yt);
            this.Fa.set("contentOpaque", n);
            this.unbind(f.Hb, this.pc, this);
            this.Ta().unbind(f.fc, this.u6, this);
            this.Ta().bind(f.yb, this.kb, this)
        };
        a.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            if (!this.Fa) {
                this.Fa = new j;
                this.Fa.set("overflow", d.yt);
                this.Fa.bind(f.yb, this.kb, this);
                this.Fa.bind(f.bl, this.fs, this);
                this.la(this.Fa)
            }
        };
        a.prototype.kb = function () {
            this.Jaa()
        };
        a.prototype.pc = function () {
            this.FV =
                y
        };
        a.prototype.fs = function () {
            this.FV = n
        };
        a.prototype.u6 = function () {
            this.get("overIndex") == -1 && (!this.FV || !this.ik) && this.trigger(new c(f.ct));
            this.FV = y
        };
        a.prototype.boa = function (a) {
            this.set("overIndex", this.tS(a.source))
        };
        a.prototype.coa = function (a) {
            a = this.tS(a.source);
            this.get("overIndex") == a && this.set("overIndex", -1)
        };
        a.prototype.aoa = function (a) {
            a = this.tS(a.source);
            this.set("overIndex", a);
            this.set("selectedIndex", a);
            this.trigger(new c(f.Mi))
        };
        a.prototype.tS = function (a) {
            for (var b = 0; b < this.VB.length; b++)
                if (this.VB[b] ==
                    a)
                    return b;
            return -1
        };
        a.prototype.za = function () {
            h.prototype.za.call(this);
            this.f("visible", y);
            this.f("width", "100%");
            this.f("height", "100%");
            this.f("includeInLayout", y);
            this.f("items", []);
            this.f("selectedIndex", -1);
            this.f("overIndex", -1);
            this.f("popUpGap", 0);
            this.f("popUpBackgroundColor");
            this.f("popUpBackgroundOpacity");
            this.f("rollOverPopUpBackgroundColor");
            this.f("selectedPopUpBackgroundColor");
            this.f("popUpFontColor");
            this.f("rollOverPopUpFontColor");
            this.f("selectedPopUpFontColor");
            this.f("popUpShadow",
                n);
            this.f("popUpShadowBlurRadius");
            this.f("popUpShadowColor");
            this.f("popUpShadowHorizontalLength");
            this.f("popUpShadowOpacity");
            this.f("popUpShadowSpread");
            this.f("popUpShadowVerticalLength");
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textDecoration");
            this.f("textShadowColor");
            this.f("textShadowHorizontalLength");
            this.f("textShadowVerticalLength");
            this.f("textShadowBlurRadius");
            this.f("textShadowOpacity");
            this.f("buttonWidth")
        };
        a.prototype.ja = function () {
            var a =
                y,
            b = y;
            if (this.n("items")) {
                for (var a = this.k("items") || [], d = this.VB.length; d < a.length; d++) {
                    var c = new p;
                    c.M({
                        width: "100%",
                        paddingLeft: 5,
                        paddingRight: 5,
                        paddingBottom: 2,
                        paddingTop: 2,
                        cursor: g.Ue
                    });
                    c.bind(f.Mh, this.boa, this);
                    c.bind(f.Kf, this.coa, this);
                    c.bind(f.U, this.aoa, this);
                    this.VB.push(c)
                }
                c = this.Fa.Pa();
                for (d = a.length; d < c.length; d++)
                    this.Fa.removeChild(c[d]);
                for (d = c.length; d < a.length; d++)
                    this.Fa.la(this.VB[d]);
                for (d = 0; d < a.length; d++)
                    c[d].set("text", a[d]);
                this.q("items");
                b = a = n
            }
            if (this.n("selectedIndex")) {
                this.q("selectedIndex");
                a = n
            }
            for (var e = ["horizontalAlign", "popUpBackgroundOpacity", "popUpPaddingBottom", "popUpPaddingLeft", "popUpPaddingRight", "popUpPaddingTop", "fontFamily", "fontSize", "fontWeight", "fontStyle", "textDecoration", "textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"], d = 0; d < e.length; d++) {
                c = e[d];
                if (this.n(c)) {
                    this.q(c);
                    b = n
                }
            }
            if (b) {
                e = {
                    fontFamily: this.k("fontFamily"),
                    fontSize: this.k("fontSize"),
                    fontWeight: this.k("fontWeight"),
                    fontStyle: this.k("fontStyle"),
                    horizontalAlign: this.k("horizontalAlign"),
                    textDecoration: this.k("textDecoration"),
                    textShadowColor: this.k("textShadowColor"),
                    textShadowHorizontalLength: this.k("textShadowHorizontalLength"),
                    textShadowVerticalLength: this.k("textShadowVerticalLength"),
                    textShadowBlurRadius: this.k("textShadowBlurRadius"),
                    textShadowOpacity: this.k("textShadowOpacity"),
                    paddingBottom: this.k("popUpPaddingBottom"),
                    paddingLeft: this.k("popUpPaddingLeft"),
                    paddingRight: this.k("popUpPaddingRight"),
                    paddingTop: this.k("popUpPaddingTop"),
                    backgroundOpacity: this.k("popUpBackgroundOpacity")
                };
                c = this.Fa.Pa();
                for (d = 0; d < c.length; d++)
                    c[d].M(e)
            }
            e = ["selectedIndex", "overIndex", "popUpBackgroundColor", "rollOverPopUpBackgroundColor", "selectedPopUpBackgroundColor", "popUpFontColor", "rollOverPopUpFontColor", "selectedPopUpFontColor"];
            for (d = 0; d < e.length; d++) {
                c = e[d];
                if (this.n(c)) {
                    this.q(c);
                    a = n
                }
            }
            if (a)
                for (var a = this.k("popUpBackgroundColor"), e = this.k("rollOverPopUpBackgroundColor") || a, b = this.k("selectedPopUpBackgroundColor") || a, j = this.k("popUpFontColor"),
                    v = this.k("rollOverPopUpFontColor") || j, u = this.k("selectedPopUpFontColor") || j, w = this.k("selectedIndex"), x = this.k("overIndex"), c = this.Fa.Pa(), d = 0; d < c.length; d++)
                    d == w ? c[d].M({
                        fontColor: u,
                        backgroundColor: b
                    }) : d == x ? c[d].M({
                        fontColor: v,
                        backgroundColor: e
                    }) : c[d].M({
                        fontColor: j,
                        backgroundColor: a
                    });
            if (this.jH || this.n("popUpGap") || this.n("buttonWidth")) {
                this.yc && this.Fa.set("minWidth", this.yc.Aa());
                this.q("popUpGap");
                this.Jaa();
                this.jH = y
            }
            this.ib(["popUpShadow", "popUpShadowBlurRadius", "popUpShadowColor", "popUpShadowHorizontalLength",
                    "popUpShadowOpacity", "popUpShadowSpread", "popUpShadowVerticalLength"], {
                popUpShadow: "shadow",
                popUpShadowBlurRadius: "shadowBlurRadius",
                popUpShadowColor: "shadowColor",
                popUpShadowHorizontalLength: "shadowHorizontalLength",
                popUpShadowOpacity: "shadowOpacity",
                popUpShadowSpread: "shadowSpread",
                popUpShadowVerticalLength: "shadowVerticalLength"
            }, [this.Fa], n, n);
            this.xaa();
            h.prototype.ja.call(this)
        };
        a.prototype.Jaa = function () {
            if (this.yc) {
                var a = this.Ta(),
                b = this.yc.Qva(a),
                c = this.yc.Aa(),
                f = this.yc.eb(),
                h = this.k("popUpGap"),
                j = this.Fa.Oa,
                g = this.Fa.Ya,
                p = a.eb() - (b.top + f + h) - 5,
                w = b.top - 5 - h,
                x = this.k("horizontalAlign");
                if (g <= p) {
                    this.ps = n;
                    this.Fa.set("top", b.top + f + h);
                    this.Fa.set("maxHeight", m);
                    this.Fa.set("overflow", d.yt)
                } else if (g <= w) {
                    this.ps = y;
                    this.Fa.set("top", b.top - g - h);
                    this.Fa.set("maxHeight", m);
                    this.Fa.set("overflow", d.yt)
                } else {
                    if (p >= w) {
                        this.ps = n;
                        this.Fa.set("top", b.top + f + h);
                        this.Fa.set("maxHeight", p)
                    } else {
                        this.ps = y;
                        this.Fa.set("top", b.top - w + h);
                        this.Fa.set("maxHeight", w)
                    }
                    this.Fa.set("overflow", d.bl)
                }
                f = x == e.Lc ? b.left + Math.round((c -
                            j) * 0.5) : x == e.Na ? b.left + c - j : b.left;
                f < 0 ? f = b.left : b.left + j > a.Aa() && (f = b.left + c - j);
                this.Fa.set("left", f);
                this.xaa()
            }
        };
        a.prototype.xaa = function () {
            var a = this.k("popUpBorderRadius");
            this.Fa.M({
                borderTopRadius: this.ps ? 0 : a,
                borderBottomRadius: this.ps ? a : 0
            });
            for (var b = this.Fa.Pa(), d = 0; d < b.length; d++) {
                var c = d == 0,
                f = d == b.length - 1;
                b[d].M({
                    borderTopRadius: !this.ps && c ? a : 0,
                    borderBottomRadius: this.ps && f ? a : 0
                })
            }
        };
        return a
    });
    define("lv", "require,fg,bZ,ll,kS,fQ,iQ".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("ll"),
        g = a("kS"),
        d = a("fQ"),
        f = a("iQ"),
        a = b.extend(g, function () {
            g.call(this);
            this.Tc("DropDown");
            this.NB = y;
            this.yc = this.Sg = r;
            this.v$ = n;
            this.td = -1;
            this.Dk = y
        });
        a.prototype.za = function () {
            g.prototype.za.call(this);
            this.f("prompt", "");
            this.f("label", "");
            this.f("items", []);
            this.f("selectedIndex", -1);
            this.f("arrowBeforeLabel");
            this.f("arrowWidth", 9);
            this.f("arrowHeight", 5);
            this.f("arrowGap", 5);
            this.f("borderRadius", 5);
            this.f("borderSize", 1);
            this.f("backgroundColorDirection", "vertical");
            this.f("horizontalAlign", "left");
            this.f("paddingLeft", 5);
            this.f("paddingTop", 5);
            this.f("paddingRight", 5);
            this.f("paddingBottom", 5);
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor", "#555555");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textDecoration");
            this.f("textShadowColor");
            this.f("textShadowHorizontalLength");
            this.f("textShadowVerticalLength");
            this.f("textShadowBlurRadius");
            this.f("textShadowOpacity");
            this.f("popUpGap",
                0);
            this.f("popUpBorderRadius");
            this.f("popUpPaddingBottom", 2);
            this.f("popUpPaddingLeft", 5);
            this.f("popUpPaddingRight", 5);
            this.f("popUpPaddingTop", 2);
            this.f("popUpShadow", n);
            this.f("popUpShadowBlurRadius");
            this.f("popUpShadowColor");
            this.f("popUpShadowHorizontalLength");
            this.f("popUpShadowOpacity");
            this.f("popUpShadowSpread");
            this.f("popUpShadowVerticalLength");
            this.f("popUpBackgroundColor", "#FFFFFF");
            this.f("popUpBackgroundOpacity");
            this.f("rollOverPopUpBackgroundColor");
            this.f("selectedPopUpBackgroundColor");
            this.f("popUpFontColor", "#555555");
            this.f("rollOverPopUpFontColor");
            this.f("selectedPopUpFontColor");
            this.f("borderColor", "#AAAAAA");
            this.f("arrowColor", "#000000");
            this.f("backgroundColor", ["#FAFAFA", "#E5E5E5"]);
            this.f("backgroundColorRatios", [0, 1]);
            this.f("shadow", y);
            this.f("rollOverBorderColor");
            this.f("rollOverArrowColor");
            this.f("rollOverBackgroundColor");
            this.f("rollOverBackgroundColorRatios");
            this.f("rollOverShadow");
            this.f("pressedBorderColor");
            this.f("pressedArrowColor");
            this.f("pressedBackgroundColor");
            this.f("pressedBackgroundColorRatios");
            this.f("pressedShadow");
            this.f("pressedRollOverBorderColor");
            this.f("pressedRollOverArrowColor");
            this.f("pressedRollOverBackgroundColor");
            this.f("pressedRollOverBackgroundColorRatios");
            this.f("pressedRollOverShadow")
        };
        a.prototype.Ga = function () {
            g.prototype.Ga.call(this);
            if (!this.yc) {
                this.yc = new d;
                this.yc.bind(e.yb, this.Ona, this);
                this.yc.bind(e.OPEN, this.koa, this);
                this.yc.bind(e.ct, this.hU, this);
                this.yc.bind(e.zd, this.Nna, this);
                this.yc.set("width", "100%");
                this.yc.set("height",
                    "100%");
                this.la(this.yc)
            }
            if (!this.Sg) {
                this.Sg = new f;
                this.Sg.bind(e.ct, this.hU, this);
                this.Sg.bind(e.Mi, this.zoa, this);
                this.Ta().la(this.Sg)
            }
        };
        a.prototype.Ona = function () {
            this.v$ = n;
            this.Dc()
        };
        a.prototype.koa = function () {
            this.yc.open();
            this.Sg.set("selectedIndex", this.get("selectedIndex"));
            this.Sg.open(this.yc)
        };
        a.prototype.hU = function () {
            this.yc.close();
            this.Sg.close()
        };
        a.prototype.Nna = function () {
            this.yc.close();
            this.Sg.close()
        };
        a.prototype.zoa = function () {
            this.set("selectedIndex", this.Sg.get("selectedIndex"));
            this.hU();
            this.Dk = n
        };
        a.prototype.ja = function () {
            var a = y;
            if (this.n("prompt") || this.n("label")) {
                a = n;
                this.q("label");
                this.q("prompt")
            }
            if (this.n("selectedIndex") || this.n("items")) {
                var a = n,
                b = this.k("selectedIndex"),
                d = this.k("items");
                b >= 0 && b >= d.length && (b = -1);
                this.set("selectedIndex", b);
                this.Sg.set("items", this.k("items"));
                this.Sg.set("selectedIndex", this.k("selectedIndex"));
                this.q("items");
                this.q("selectedIndex");
                if (this.Dk) {
                    this.Dk = y;
                    this.trigger(new c(e.aa))
                }
            }
            if (a) {
                a = this.k("label");
                if (!a) {
                    b = this.k("selectedIndex");
                    a = b < 0 ? this.k("prompt") : this.k("items")[b]
                }
                this.yc.set("label", a)
            }
            if (this.v$) {
                this.Sg.set("minWidth", this.yc.Aa());
                this.Sg.set("buttonWidth", this.yc.Aa())
            }
            this.ib(["fontFamily", "fontSize", "fontColor", "fontWeight", "fontStyle", "textDecoration", "horizontalAlign", "textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"], {}, [this.yc, this.Sg], n, n);
            this.ib(["popUpBorderRadius", "popUpGap", "popUpPaddingBottom", "popUpPaddingLeft", "popUpPaddingRight",
                    "popUpPaddingTop", "popUpBackgroundColor", "popUpBackgroundOpacity", "rollOverPopUpBackgroundColor", "selectedPopUpBackgroundColor", "popUpFontColor", "rollOverPopUpFontColor", "selectedPopUpFontColor", "popUpShadow", "popUpShadowBlurRadius", "popUpShadowColor", "popUpShadowHorizontalLength", "popUpShadowOpacity", "popUpShadowSpread", "popUpShadowVerticalLength"], {}, [this.Sg], n, n);
            this.ib(["arrowBeforeLabel", "arrowWidth", "arrowHeight", "arrowColor", "rollOverArrowColor", "pressedArrowColor", "pressedRollOverArrowColor",
                    "arrowGap", "shadow", "shadowBlurRadius", "shadowColor", "shadowHorizontalLength", "shadowOpacity", "shadowSpread", "shadowVerticalLength", "borderRadius", "borderTopRadius", "borderBottomRadius", "borderLeftRadius", "borderRightRadius", "borderTopLeftRadius", "borderTopRightRadius", "borderBottomLeftRadius", "borderBottomRightRadius", "borderSize", "borderLeftSize", "borderTopSize", "borderRightSize", "borderBottomSize", "borderColor", "borderLeftColor", "borderTopColor", "borderRightColor", "borderBottomColor", "rollOverBorderColor",
                    "pressedBorderColor", "pressedRollOverBorderColor", "backgroundColor", "backgroundColorRatios", "backgroundColorDirection", "backgroundOpacity", "rollOverBackgroundColor", "rollOverBackgroundColorRatios", "rollOverShadow", "pressedBackgroundColor", "pressedBackgroundColorRatios", "pressedShadow", "pressedRollOverBackgroundColor", "pressedRollOverBackgroundColorRatios", "pressedRollOverShadow", "paddingLeft", "paddingTop", "paddingRight", "paddingBottom"], {}, [this.yc], n, n);
            g.prototype.ja.call(this)
        };
        return a
    });
    define("es", "require,fg,u,ll,lv,dW,do".split(","), function (a) {
        var b = a("fg"),
        c = a("u"),
        e = a("ll"),
        g = a("lv"),
        d = a("dW"),
        f = a("do"),
        a = b.extend(g, function () {
            g.call(this);
            this.Yb = r;
            this.Y5 = [];
            this.bind(e.aa, this.Rna, this)
        });
        d.A("DropDown", a).B("UIComponent").J({
            arrowBeforeLabel: "bool",
            arrowColor: "color",
            arrowHeight: "number",
            arrowWidth: "number",
            arrowGap: "number",
            fontFamily: "string",
            fontSize: "or[number, size]",
            fontColor: "color",
            fontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            fontStyle: "enum[italic, normal]",
            gap: "number",
            horizontalAlign: "enum[left, center, right]",
            label: "string",
            playList: "PlayList",
            popUpGap: "number",
            popUpBackgroundColor: "color",
            popUpBackgroundOpacity: "number",
            popUpBorderRadius: "number",
            popUpFontColor: "color",
            popUpPaddingBottom: "number",
            popUpPaddingLeft: "number",
            popUpPaddingRight: "number",
            popUpPaddingTop: "number",
            popUpShadow: "bool",
            popUpShadowBlurRadius: "number",
            popUpShadowColor: "color",
            popUpShadowHorizontalLength: "number",
            popUpShadowOpacity: "number",
            popUpShadowSpread: "number",
            popUpShadowVerticalLength: "number",
            pressedArrowColor: "color",
            pressedShadow: "bool",
            pressedBackgroundColor: "or[array[color], color]",
            pressedBackgroundColorRatios: "array[number]",
            pressedRollOverArrowColor: "color",
            pressedRollOverShadow: "bool",
            pressedRollOverBackgroundColor: "or[array[color], color]",
            pressedRollOverBackgroundColorRatios: "array[number]",
            prompt: "string",
            rollOverArrowColor: "color",
            rollOverBackgroundColor: "or[array[color], color]",
            rollOverBackgroundColorRatios: "array[number]",
            rollOverPopUpBackgroundColor: "color",
            rollOverPopUpFontColor: "color",
            rollOverShadow: "bool",
            selectedPopUpBackgroundColor: "color",
            selectedPopUpFontColor: "color",
            textDecoration: "enum[underline, overline, line-through, none]",
            textShadowBlurRadius: "number",
            textShadowColor: "color",
            textShadowHorizontalLength: "number",
            textShadowOpacity: "number",
            textShadowVerticalLength: "number"
        }).gq(["fontSize"]).Xb([e.aa]);
        a.prototype.set = function (a, b) {
            if (a == "playList") {
                if (this.Yb)
                    for (this.Yb.unbind("change", this.dp, this); this.Y5.length; )
                        this.Y5.shift().unwatch();
                if (this.Yb = b) {
                    c.watch(this.Yb, "items.label", this.DL, this);
                    c.watch(this.Yb, "items.media.label", this.DL, this);
                    this.DL();
                    this.Yb.bind("change", this.dp, this);
                    this.dp()
                } else
                    this.DL()
            }
            g.prototype.set.call(this, a, b)
        };
        a.prototype.DL = function () {
            this.Yb ? this.set("items", f(this.Yb.get("items")).map(function (a) {
                    return a.get("label") || a.get("media") && a.get("media").get("label")
                })) : this.set("items", [])
        };
        a.prototype.dp = function () {
            this.set("selectedIndex", this.Yb.get("selectedIndex"))
        };
        a.prototype.Rna = function () {
            this.Yb &&
            this.Yb.set("selectedIndex", this.get("selectedIndex"))
        };
        return a
    });
    define("cH", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("initialState", "playing");
            this.set("distance", 0.5);
            this.set("intensity", 0.1);
            this.set("speed", 0.2);
            this.set("opacity", 0.1);
            this.set("color", "#ffffff");
            this.set("state", "playing");
            this.set("startDuration", 2E4);
            this.set("stopDuration", 2E4)
        });
        a.A("DustPanoramaOverlay", b).B("PanoramaOverlay").J({
            intensity: "number",
            speed: "number",
            color: "color",
            opacity: "number",
            distance: "number",
            startDuration: "number",
            initialState: "enum[playing, stopped]",
            state: "enum[playing, stopped]",
            stopDuration: "number",
            startState: "enum[playing, stopped]"
        });
        b.prototype.get = function (a, b) {
            "startState" == a && b === m && (b = this.get("initialState"));
            return c.prototype.get.call(this, a, b)
        };
        return b
    });
    define("dy", "fg,jd,ll,bZ,V,kX,bq".split(","), function (a, b, c, e, g, d, f) {
        var h = {},
        j = a.extend(b, function () {
            b.call(this);
            this.gb = m;
            this.Bk = [];
            this.m = "stopped";
            this.set("easing", "linear");
            this.set("duration", 1E3);
            this.set("loop", y);
            this.set("animationDirection", "normal")
        });
        j.prototype.play = function (a) {
            a || (a = h);
            if (!this.Gz(a))
                if (this.m == "stopped" || this.Bk.indexOf(a) < 0) {
                    this.m = "playing";
                    this.Bk.push(a);
                    this.be = 0;
                    this.gb = Math.max(this.get("duration", 1E3), 1);
                    this.Ee = new d(this.get("easing", "linear"), [new f("pos",
                                    0, 1)], this.gb);
                    this.Ee.setTime(this.be);
                    this.Qy();
                    this.rp();
                    this.iD()
                } else
                    this.m = "playing"
        };
        j.prototype.reverse = function (a) {
            a || (a = h);
            if (!this.Mwa(a))
                if (this.m == "stopped" || this.Bk.indexOf(a) < 0) {
                    this.m = "playingReverse";
                    this.Bk.push(a);
                    this.be = this.gb = Math.max(this.get("duration", 1E3), 0);
                    this.Ee = new d(this.get("easing", "linear"), [new f("pos", 0, 1)], this.gb);
                    this.Ee.setTime(this.be);
                    this.Qy();
                    this.rp();
                    this.iD()
                } else
                    this.m = "playingReverse"
        };
        j.prototype.stop = function () {
            this.m = "stopped";
            if (this.be !== 0) {
                this.be =
                    0;
                this.rp();
                this.iD()
            }
        };
        j.prototype.end = function () {
            if (this.m != "stopped") {
                this.be = this.gb;
                this.rp();
                this.iD()
            }
        };
        j.prototype.cancel = function () {
            this.m = "stopped";
            this.be = 0;
            this.Bk = []
        };
        j.prototype.Gz = function (a) {
            return this.m == "playing" && this.Bk.indexOf(a) >= 0
        };
        j.prototype.Mwa = function (a) {
            return this.m == "playingReverse" && this.Bk.indexOf(a) >= 0
        };
        j.prototype.Pg = function (a) {
            if (this.m != "stopped") {
                this.be = this.m == "playing" ? Math.min(this.gb, this.be + a) : Math.max(0, this.be - a);
                this.Ee.setTime(this.be);
                this.rp();
                this.iD()
            }
        };
        j.prototype.Ks = function () {
            return this.Ee && this.Ee.Fb("pos") || 0
        };
        j.prototype.ar = function (a) {
            if (this.Bk)
                for (var b = 0; b < this.Bk.length; b++)
                    a.call(this, this.Bk[b], b)
        };
        j.prototype.Qy = function () {
            this.trigger(new e(this.m == "playingReverse" ? j.X_ : j.Y_))
        };
        j.prototype.rp = function () {
            this.trigger(new e(j.S_))
        };
        j.prototype.Oy = function () {
            this.trigger(new e(j.Pj))
        };
        j.prototype.Py = function () {
            this.trigger(new e(j.Iw))
        };
        j.prototype.iD = function () {
            if (this.m == "playingReverse" && this.be <= 0) {
                this.Py();
                this.Bk = [];
                if (this.m !=
                    "stopped") {
                    this.stop();
                    this.get("loop") && this.play()
                }
            } else if (this.m == "playing" && this.be >= this.gb) {
                this.Oy();
                this.Bk = [];
                if (this.m != "stopped") {
                    this.stop();
                    this.get("animationDirection") == "alternate" ? this.reverse() : this.get("loop") && this.play()
                }
            } else
                this.m != "stopped" && g.Ma(this.Pg, this)
        };
        j.Y_ = "start";
        j.S_ = "frame";
        j.Pj = "end";
        j.X_ = "reverseStart";
        j.Iw = "reverseEnd";
        return j
    });
    define("bm", ["require", "fg", "dW", "dy"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("dy"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("Effect", a).B("Object").J({
            duration: "number",
            easing: "enum[linear, quad_in, quad_out, quad_in_out, cubic_in, cubic_out, cubic_in_out, quart_in, quart_out, quart_in_out, quint_in, quint_out, quint_in_out]",
            animationDirection: "enum[normal, alternate]",
            loop: "bool"
        }).Hf([e.Pj, e.S_, e.Iw, e.X_, e.Y_]).Cg({
            cancel: function () {
                return e.prototype.cancel.apply(this, arguments)
            },
            getPosition: function () {
                return e.prototype.Ks.apply(this,
                    arguments)
            },
            play: function () {
                return e.prototype.play.apply(this, arguments)
            },
            reverse: function () {
                return e.prototype.reverse.apply(this, arguments)
            },
            stop: function () {
                return e.prototype.stop.apply(this, arguments)
            }
        });
        return a
    });
    define("bb", ["fg", "dy"], function (a, b) {
        var c = a.extend(b, function () {
            b.call(this);
            this.LP = this.KP = r
        });
        c.prototype.Qy = function () {
            b.prototype.Qy.call(this);
            this.KP = [];
            this.LP = [];
            this.ar(function (a) {
                this.KP.push(this.get("alphaFrom", a.Hh()));
                this.LP.push(this.get("alphaTo", a.Hh()))
            });
            this.zK()
        };
        c.prototype.rp = function () {
            b.prototype.rp.call(this);
            this.zK()
        };
        c.prototype.zK = function () {
            this.ar(function (a, b) {
                var d = this.KP[b],
                d = d + (this.LP[b] - d) * this.Ks(),
                c = 0 < a.Hh() && a.Ic;
                !c && 0 < d ? (a.Jj(0), a.xe(n), a.Jj(d)) : 0 ==
                d ? (a.xe(y), a.Jj(1)) : a.Jj(d)
            })
        };
        c.prototype.Oy = function () {
            this.zK();
            b.prototype.Oy.call(this)
        };
        c.prototype.Py = function () {
            this.zK();
            b.prototype.Py.call(this)
        };
        return c
    });
    define("ks", ["fg", "bb"], function (a, b) {
        return a.extend(b, function () {
            b.call(this);
            this.set("alphaFrom", 0);
            this.set("alphaTo", 1)
        })
    });
    define("kC", ["fg", "ks", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("FadeInEffect", a).B("Effect");
        return a
    });
    define("kF", ["fg", "bb"], function (a, b) {
        return a.extend(b, function () {
            b.call(this);
            this.set("alphaFrom", 1);
            this.set("alphaTo", 0)
        })
    });
    define("ht", ["fg", "kF", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("FadeOutEffect", a).B("Effect");
        return a
    });
    define("cj", "require,fg,jd,ll,dW,dy".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("dy"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("enabled", n);
            this.set("interactionEnabled", n);
            this.set("enabledInCardboard", y);
            this.set("enabledInStandard", n);
            this.set("enabledInSurfaceSelection", n);
            this.set("items", []);
            this.set("rollOverItems", []);
            this.set("maps", []);
            this.set("rollOverMaps", []);
            this.set("areas", []);
            this.set("fadeInDuration", 200);
            this.set("fadeOutDuration", 200);
            this.set("projected",
                y);
            this.bind(e.od, this.wh, this, n);
            this.bind(e.zd, this.th, this, n);
            this.Mf = [];
            this.Ic = y
        });
        g.A("HotspotPanoramaOverlay", a).B("PanoramaOverlay").J({
            centerOverDisplay: "bool",
            rollOverDisplay: "bool",
            useHandCursor: "bool",
            enabled: "bool",
            enabledInSurfaceSelection: "bool",
            enabledInCardboard: "bool",
            enabledInVR: "bool",
            enabledInStandard: "bool",
            fadeInDuration: "number",
            fadeOutDuration: "number",
            interactionEnabled: "bool",
            projected: "bool",
            effect: "Effect",
            rollOverEffect: "Effect",
            items: "array[or[FlatHotspotPanoramaOverlayImage, HotspotPanoramaOverlayImage, QuadHotspotPanoramaOverlayImage]]",
            rollOverItems: "array[or[FlatHotspotPanoramaOverlayImage, HotspotPanoramaOverlayImage, QuadHotspotPanoramaOverlayImage]]",
            maps: "array[or[FlatHotspotPanoramaOverlayMap, HotspotPanoramaOverlayMap, QuadHotspotPanoramaOverlayMap]]",
            rollOverMaps: "array[or[FlatHotspotPanoramaOverlayMap, HotspotPanoramaOverlayMap, QuadHotspotPanoramaOverlayMap]]",
            areas: "array[or[FlatHotspotPanoramaOverlayArea, HotspotPanoramaOverlayArea, QuadHotspotPanoramaOverlayArea]]"
        });
        a.prototype.set = function (a, b) {
            switch (a) {
            case "enabledInCardboard":
                this.set("enabledInVR",
                    b);
                break;
            case "effect":
            case "rollOverEffect":
            case "areas":
                this.Hpa();
                this.Mf = []
            }
            c.prototype.set.call(this, a, b);
            switch (a) {
            case "enabledInCardboard":
                this.set("enabledInVR", b);
                break;
            case "effect":
            case "rollOverEffect":
            case "areas":
                this.bha()
            }
        };
        a.prototype.bha = function () {
            this.get("effect") && this.get("effect").bind(d.Iw, this.a7, this, n);
            this.get("rollOverEffect") && this.get("rollOverEffect").bind(d.Iw, this.Z7, this, n);
            this.get("areas", []).forEach(function (a) {
                a.bind(e.xc, this.Q6, this, n);
                a.bind(e.Qb, this.P6,
                    this, n)
            }
                .bind(this))
        };
        a.prototype.Hpa = function () {
            this.get("effect") && this.get("effect").unbind(d.Iw, this.a7, this, n);
            this.get("rollOverEffect") && this.get("rollOverEffect").unbind(d.Iw, this.Z7, this, n);
            this.get("areas", []).forEach(function (a) {
                a.unbind(e.xc, this.Q6, this, n);
                a.unbind(e.Qb, this.P6, this, n)
            }
                .bind(this))
        };
        a.prototype.Q6 = function (a) {
            if (this.Mf.indexOf(a.source) < 0) {
                this.Mf.push(a.source);
                this.Mf.length == 1 && this.xoa()
            }
        };
        a.prototype.P6 = function (a) {
            a = this.Mf.indexOf(a.source);
            if (a >= 0) {
                this.Mf.splice(a,
                    1);
                this.Mf.length == 0 && this.woa()
            }
        };
        a.prototype.xoa = function () {
            var a = this.get("effect"),
            b = this.get("rollOverEffect");
            b && (a && a.Ks() > 0 ? a.reverse() : b.play())
        };
        a.prototype.woa = function () {
            var a = this.get("rollOverEffect");
            if (a) {
                var b = this.get("effect");
                a.Ks() > 0 ? a.reverse() : b && b.get("loop") && b.play()
            }
        };
        a.prototype.a7 = function () {
            if (this.Mf.length > 0) {
                var a = this.get("rollOverEffect");
                if (a) {
                    this.get("effect").stop();
                    a.play()
                }
            }
        };
        a.prototype.Z7 = function () {
            if (this.Mf.length == 0) {
                this.get("rollOverEffect").stop();
                var a = this.get("effect");
                a && a.get("loop") && a.play()
            }
        };
        a.prototype.wh = function () {
            var a = this.get("effect");
            a && a.play()
        };
        a.prototype.th = function () {
            var a = this.get("effect");
            a && a.stop();
            (a = this.get("rollOverEffect")) && a.stop()
        };
        return a
    });
    define("jG", ["require", "fg", "dW", "cj"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("cj"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("FlatHotspotPanoramaOverlay", a).B("HotspotPanoramaOverlay");
        return a
    });
    define("q", ["fg", "jd", "dW", "ll"], function (a, b, c, e) {
        a = a.extend(b, function () {
            b.call(this);
            this.set("displayTooltipInTouchScreens", n)
        });
        c.A("HotspotPanoramaOverlayArea", a).B("Object").J({
            mapColor: "or[color,enum[image,transparent,any]]",
            toolTip: "string",
            displayTooltipInTouchScreens: "bool",
            useHandCursor: "bool"
        }).Xb([e.xc, e.Qb, e.Mh, e.Kf]).Hf([e.U]);
        return a
    });
    define("en", ["dW", "q"], function (a, b) {
        a.A("FlatHotspotPanoramaOverlayArea", b).B("HotspotPanoramaOverlayArea");
        return b
    });
    define("bc", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b, d) {
            c.call(this);
            a !== m && this.set("vertices", a);
            this.set("opacity", b !== m ? b : 1);
            d !== m && this.set("timestamp", d)
        });
        a.A("QuadPanoramaOverlayPlaybackPosition", b).B("Object").J({
            opacity: "number",
            timestamp: "number",
            vertices: "array[PanoramaPoint]"
        });
        return b
    });
    define("gy", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b, d, f, h) {
            c.call(this);
            a !== m && this.set("yaw", a);
            b !== m && this.set("pitch", b);
            d !== m && this.set("roll", d);
            this.set("opacity", f !== m ? f : 1);
            h !== m && this.set("timestamp", h)
        });
        a.A("FlatPanoramaOverlayPlaybackPosition", b).B("Object").J({
            opacity: "number",
            pitch: "number",
            roll: "number",
            timestamp: "number",
            yaw: "number"
        });
        return b
    });
    define("eN", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b, d, f, h, j, p, k, l) {
            c.call(this);
            a !== m && this.set("yaw", a);
            b !== m && this.set("pitch", b);
            d !== m && this.set("rotationX", d);
            f !== m && this.set("rotationY", f);
            h !== m && this.set("roll", h);
            j !== m && this.set("hfov", j);
            p !== m && this.set("vfov", p);
            this.set("opacity", k !== m ? k : 1);
            l !== m && this.set("timestamp", l)
        });
        a.A("PanoramaOverlayPlaybackPosition", b).B("Object").J({
            opacity: "number",
            yaw: "number",
            pitch: "number",
            rotationX: "number",
            rotationY: "number",
            roll: "number",
            hfov: "number",
            vfov: "number",
            timestamp: "number"
        });
        return b
    });
    define("cc", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b) {
            c.call(this);
            this.set("yaw", a);
            this.set("pitch", b)
        });
        a.A("PanoramaPoint", b).B("Object").J({
            pitch: "number",
            yaw: "number"
        });
        return b
    });
    define("L", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b, d, f, h, j, p) {
            c.call(this);
            a !== m && this.set("yaw", a);
            b !== m && this.set("pitch", b);
            d !== m && this.set("rotationX", d);
            f !== m && this.set("rotationY", f);
            h !== m && this.set("rotationZ", h);
            j !== m && this.set("hfov", j);
            p !== m && this.set("timestamp", p)
        });
        a.A("PopupPanoramaOverlayPlaybackPosition", b).B("Object").J({
            yaw: "number",
            pitch: "number",
            rotationX: "number",
            rotationY: "number",
            rotationZ: "number",
            hfov: "number",
            timestamp: "number"
        });
        return b
    });
    define("hW", "require,jd,bc,gy,eN,cc,L".split(","), function (a) {
        var b = a("jd"),
        c = a("bc"),
        e = a("gy"),
        g = a("eN"),
        d = a("cc"),
        f = a("L");
        return {
            vva: function (a) {
                return this.uI(a, this.Hka)
            },
            KY: function (a) {
                return this.uI(a, this.epa)
            },
            Nva: function (a) {
                return this.uI(a, this.lpa)
            },
            MY: function (a) {
                return this.uI(a, this.tpa)
            },
            Hka: function (a) {
                return new e(b.prototype.get.call(a, "yaw", 0), b.prototype.get.call(a, "pitch", 0), b.prototype.get.call(a, "roll", 0), b.prototype.get.call(a, "opacity", 1), 0)
            },
            tpa: function (a) {
                var f = b.prototype.get.call(a,
                        "vertices", [r, r, r, r]);
                return new c([f[0] || new d(0, 0), f[1] || new d(0, 0), f[2] || new d(0, 0), f[3] || new d(0, 0)], b.prototype.get.call(a, "opacity", 1), 0)
            },
            epa: function (a) {
                function d(c, f) {
                    return b.prototype.get.call(a, c, f)
                }
                return new g(d("yaw", 0), d("pitch", 0), d("rotationX", 0), d("rotationY", 0), d("roll", 0), d("hfov", d("vfov") === m ? 45 : m), d("vfov"), d("opacity", 1), 0)
            },
            lpa: function (a) {
                function d(c, f) {
                    return b.prototype.get.call(a, c, f)
                }
                return new f(d("yaw", 0), d("pitch", 0), d("rotationX", 0), d("rotationY", 0), d("rotationZ",
                        0), d("hfov", 45), 0)
            },
            uI: function (a, d) {
                var c = b.prototype.get.call(a, "playbackPositions") || [];
                return c.length > 0 ? c.slice().sort(function (a, b) {
                    return a.get("timestamp") - b.get("timestamp") || c.indexOf(a) - c.indexOf(b)
                }) : [d(a)]
            }
        }
    });
    define("gZ", "require,fg,jd,ll,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("opacity", 1);
            this.set("scale", 1);
            this.Sb = m
        });
        g.A("FlatHotspotPanoramaOverlayImageBase", a).B("Object").J({
            distance: "number",
            height: "number",
            horizontalAlign: "enum[center, left, right]",
            image: "ImageResource",
            offsetX: "number",
            offsetY: "number",
            opacity: "number",
            pitch: "number",
            playbackPositions: "array[FlatPanoramaOverlayPlaybackPosition]",
            roll: "number",
            scale: "number",
            scaleMode: "enum[fill, fit_inside, fit_outside, fit_to_width, fit_to_height, none]",
            verticalAlign: "enum[bottom, middle, top]",
            width: "number",
            yaw: "number"
        }).Xb([e.od, e.zd]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = d.vva(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "opacity":
            case "distance":
            case "pitch":
            case "roll":
            case "yaw":
            case "playbackPositions":
                this.Sb = m;
                d = n
            }
            c.prototype.set.call(this,
                a, b);
            d && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        return a
    });
    define("n", ["require", "fg", "dW", "gZ"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("gZ"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("FlatHotspotPanoramaOverlayImage", a).B("FlatHotspotPanoramaOverlayImageBase");
        return a
    });
    define("df", ["require", "fg", "dW", "gZ"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("gZ"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("FlatHotspotPanoramaOverlayMap", a).B("FlatHotspotPanoramaOverlayImageBase");
        return a
    });
    define("jU", "require,fg,jd,ll,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.Sb = m;
            this.set("enabled", n);
            this.set("interactionEnabled", n);
            this.set("contentInteractive", y);
            this.set("transparent", y)
        });
        g.A("FramePanoramaOverlay", a).B("PanoramaOverlay").J({
            contentInteractive: "bool",
            displayTooltipInTouchScreens: "bool",
            enabled: "bool",
            hfov: "number",
            height: "number",
            image: "ImageResource",
            interactionEnabled: "bool",
            pitch: "number",
            roll: "number",
            rotationX: "number",
            rotationY: "number",
            toolTip: "string",
            transparent: "bool",
            url: "string",
            useHandCursor: "bool",
            playbackPositions: "array[PanoramaOverlayPlaybackPosition]",
            vfov: "number",
            width: "number",
            yaw: "number"
        }).Xb([e.zd, e.Mh, e.Kf, e.xc, e.Qb, e.od]).Hf([e.U]).hh(["url"]);
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "hfov":
            case "pitch":
            case "rotationX":
            case "rotationY":
            case "roll":
            case "vfov":
            case "yaw":
            case "playbackPositions":
                this.Sb = m;
                d = n
            }
            c.prototype.set.call(this, a, b);
            d && a !=
            "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = d.KY(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        return a
    });
    define("cE", ["do", "fg", "kS", "c"], function (a, b, c, e) {
        var g = b.extend(c, function () {
            c.call(this)
        });
        g.ob = {
            layout: e.pq
        };
        a.defaults(g.ob, c.ob);
        g.prototype.za = function () {
            this.bk(g.ob)
        };
        return g
    });
    define("hx", ["do", "fg", "cE", "dW"], function (a, b, c, e) {
        a = b.extend(c, function () {
            c.call(this)
        });
        e.A("GridContainer", a).B("UIComponent").J({
            children: "array[UIComponent]",
            contentOpaque: "bool",
            childrenInteractionEnabled: "bool",
            creationPolicy: "enum[inAdvance, delayed]",
            gap: "number",
            horizontalAlign: "enum[center, left, right]",
            itemHeight: "or[number, percent]",
            itemMaxHeight: "number",
            itemMaxWidth: "number",
            itemMinHeight: "number",
            itemMinWidth: "number",
            itemWidth: "or[number, percent]",
            overflow: "enum[scroll, hidden, visible]",
            scrollBarColor: "color",
            scrollBarWidth: "number",
            scrollBarMargin: "number",
            scrollBarHorizontalMargin: "number",
            scrollBarVerticalMargin: "number",
            scrollBarOpacity: "number",
            scrollBarVisible: "enum[rollOver, always]",
            verticalAlign: "enum[bottom, middle, top]"
        });
        return a
    });
    define("hi", "require,do,jquery.mod,bZ,eO,ll,ge,jt,id,gx,fg".split(","), function (a) {
        function b() {}
        function c(a) {
            this.Bxa = a;
            this.Lk = [];
            this.Td = 0
        }
        var e = a("do");
        a("jquery.mod");
        var g = a("bZ"),
        d = a("eO"),
        f = a("ll"),
        h = a("ge"),
        j = a("jt"),
        p = a("id"),
        k = a("gx"),
        l = a("fg").extend(d, function (a) {
            d.call(this);
            this.url = a;
            this.CZ = this.Td = 0;
            this.status = l.gP;
            this.lq = r
        });
        l.prototype.qZ = function (a) {
            this.CZ = this.CZ + a
        };
        l.prototype.Iz = function (a) {
            this.Td = this.Td + a
        };
        l.prototype.start = function () {
            this.status = l.MG;
            p.n_(this.url) ?
            this.Ar() : this.lk = k.add(this.url, h.hG, this.iqa.bind(this), this.S2.bind(this))
        };
        l.prototype.iqa = function () {
            this.lq = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
            this.lq.open("GET", this.url);
            this.lq.onreadystatechange = function () {
                this.lq.readyState > 3 && this.Ar()
            }
            .bind(this);
            this.lq.send()
        };
        l.prototype.S2 = function () {
            if (this.lq) {
                this.lq.abort();
                this.lq = r
            }
        };
        l.prototype.stop = function () {
            if (this.status == l.MG) {
                this.status = l.gP;
                this.S2();
                this.lk && this.lk.cancel()
            }
        };
        l.prototype.Ar =
        function () {
            this.lq = r;
            if (this.lk) {
                this.lk.loaded();
                this.lk = r
            }
            this.status = l.pga;
            this.trigger(new g(f.S))
        };
        l.gP = "not loaded";
        l.MG = "loading";
        l.pga = "loaded";
        c.prototype.dua = function (a) {
            a.forEach(function (a) {
                if (this.Lk.indexOf(a) < 0) {
                    this.Lk.push(a);
                    a.Iz(this.Td);
                    a.qZ(1)
                }
            }
                .bind(this))
        };
        c.prototype.Kxa = function (a) {
            var b = this.Lk;
            this.Lk = [];
            b.forEach(function (b) {
                if (a.indexOf(b) < 0)
                    this.Lk.push(b);
                else {
                    b.Iz(-this.Td);
                    b.qZ(-1)
                }
            }
                .bind(this))
        };
        c.prototype.Dxa = function () {
            this.Lk.forEach(function (a) {
                a.Iz(-this.Td);
                a.qZ(-1)
            }
                .bind(this));
            this.Lk = [];
            this.Td = 0
        };
        c.prototype.Iz = function (a) {
            this.Td = this.Td + a;
            this.Lk.forEach(function (b) {
                b.Iz(a)
            })
        };
        b.Pc = [];
        b.f9 = [];
        b.Qka = 0;
        b.nba = function (a, b) {
            this.vK(a).dua(b.map(function (a) {
                    return this.Y(a)
                }
                    .bind(this)));
            this.cL();
            this.L()
        };
        b.Nxa = function (a, b) {
            this.vK(a).Kxa(b.map(function (a) {
                    return this.Y(a)
                }
                    .bind(this)));
            this.cL();
            this.L()
        };
        b.Exa = function (a) {
            this.vK(a).Dxa();
            this.cL();
            this.L()
        };
        b.eN = function (a, b) {
            this.vK(a).Iz(b);
            this.cL();
            this.L()
        };
        b.cL = function () {
            this.Pc.sort(function (a,
                    b) {
                return b.Td - a.Td
            })
        };
        b.L = function (a) {
            if (this.enabled() && (a || !this.mn))
                if (a) {
                    this.mn && clearTimeout(this.mn);
                    this.mn = r;
                    var a = this.Ala(),
                    b = this.Bla();
                    e(a).difference(b).forEach(function (a) {
                        a.stop()
                    });
                    e(b).difference(a).forEach(function (a) {
                        a.start()
                    })
                } else
                    this.mn = setTimeout(function () {
                        this.mn = r;
                        this.L(n)
                    }
                            .bind(this), 1E3)
        };
        b.mn = r;
        b.Ala = function () {
            return this.Pc.filter(function (a) {
                return a.status == l.MG
            })
        };
        b.Bla = function () {
            for (var a = this.Cla(), b = [], d = 0; d < this.Pc.length && b.length < a; d++) {
                var c = this.Pc[d];
                c.CZ > 0 && (c.status == l.gP || c.status == l.MG) && b.push(c)
            }
            return b
        };
        b.Cla = function () {
            return this.Qka > 0 ? 0 : 1
        };
        b.vK = function (a) {
            var b = e(this.f9).find(function (b) {
                return b.Bxa == a
            });
            if (!b) {
                b = new c(a);
                this.f9.push(b)
            }
            return b
        };
        b.Y = function (a) {
            var b = e(this.Pc).find(function (b) {
                return b.url == a
            });
            if (!b) {
                b = new l(a);
                b.bind(f.S, this.L, this);
                this.Pc.push(b)
            }
            return b
        };
        b.enabled = function (a) {
            if (a === m)
                return b.Zja || b.$ja ? y : b.OR !== m ? b.OR : b.W;
            b.W = a
        };
        b.W = n;
        b.e_ = function (a) {
            b.OR = a.get(TDV.PlayerSettings.BACKGROUND_PRELOAD_ENABLED)
        };
        b.OR = m;
        b.$ja = j.$g("disable-background-preload", y);
        b.Zja = y;
        return b
    });
    define("du", ["fg", "jd", "dW", "hi"], function (a, b, c, e) {
        var g = a.extend(b, function () {
            b.call(this);
            this.hX = a.nm(this.hX, this)
        });
        c.A("Media", g).B("Object").J({
            label: "string",
            thumbnailUrl: "string"
        }).hh(["thumbnailUrl"]);
        g.prototype.hX = function () {
            e.nba(this, this.In())
        };
        g.prototype.In = function () {
            return []
        };
        g.prototype.Mxa = function () {
            e.Exa(this)
        };
        g.prototype.set = function (a, c) {
            b.prototype.set.call(this, a, c);
            this.hX()
        };
        return g
    });
    define("gC", ["require", "do", "fg", "dW", "du"], function (a) {
        a("do");
        var b = a("fg"),
        c = a("dW"),
        e = a("du"),
        a = b.extend(e, function () {
            e.call(this);
            this.$I = this.Ry = m;
            this.set("distanceToFloor", 1.7)
        });
        c.A("Panorama", a).B("Media").J({
            adjacentPanoramas: "array[AdjacentPanorama]",
            audios: "array[PanoramaAudio]",
            cardboardMenu: "Menu",
            flipImageHorizontally: "bool",
            frames: "array[PanoramaFrame]",
            distanceToFloor: "number",
            hfov: "number",
            hfovMax: "number",
            hfovMin: "or[number,percent]",
            mapLocations: "array[PanoramaMapLocation]",
            overlays: "array[PanoramaOverlay]",
            partial: "bool",
            pitch: "number",
            vfov: "number",
            vrMenu: "Menu"
        });
        a.prototype.get = function (a, b) {
            switch (a) {
            case "overlays":
                return this.wS();
            case "frames":
                return this.X4()
            }
            return e.prototype.get.call(this, a, b)
        };
        a.prototype.set = function (a, b) {
            switch (a) {
            case "cardboardMenu":
                this.set("vrMenu", b)
            }
            e.prototype.set.call(this, a, b)
        };
        a.prototype.wS = function () {
            var a = e.prototype.get.call(this, "overlays");
            a || (a = []);
            return this.gW(a)
        };
        a.prototype.gW = function (a) {
            if (this.Ry === m || this.$I != a) {
                var b = function (a) {
                    return c.tb("PopupPanoramaOverlay",
                        a)
                },
                f = function (a) {
                    return c.tb("LensFlarePanoramaOverlay", a)
                };
                this.$I = a;
                this.Ry = [].concat(a.filter(function (a) {
                        return !(b(a) || f(a))
                    }), a.filter(f), a.filter(b))
            }
            return this.Ry
        };
        a.prototype.Nca = function () {
            return 0 < this.get("overlays").filter(function (a) {
                return c.tb("TripodCapPanoramaOverlay", a)
            }).length
        };
        a.prototype.Bca = function () {
            return 0 < this.get("overlays").filter(function (a) {
                return c.tb("CeilingCapPanoramaOverlay", a)
            }).length
        };
        a.prototype.cda = function () {
            if (!this.bda())
                return y;
            var a = this.get("pitch",
                    0),
            b = this.get("vfov", 180);
            if (179.9 <= b)
                return n;
            var c = this.Bca() ? 90 : a + 0.5 * b,
            a = this.Nca() ? -90 : a - 0.5 * b;
            return 179.9 <= c - a ? n : y
        };
        a.prototype.bda = function () {
            return 359.9 <= this.get("hfov") && !this.get("partial")
        };
        a.prototype.Jh = function () {
            var a = this.X4();
            return 0 < a.length && a[0].Jh()
        };
        a.prototype.CM = R(0);
        a.prototype.X4 = function () {
            var a = e.prototype.get.call(this, "frames", []);
            a.forEach(function (a) {
                a.jua(this)
            }
                .bind(this));
            return a
        };
        return a
    });
    define("kl", ["require", "fg", "dW", "gC"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("gC"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("HDRPanorama", a).B("Panorama").J({
            minimumLuminance: "number",
            maximumLuminance: "number",
            luminanceChangeTime: "number",
            maxLuminanceChangeSpeed: "number"
        });
        a.prototype.CM = function () {
            var a = this.get("frames") || [];
            return Math.floor((a.length - 1) / 2)
        };
        return a
    });
    define("jh", ["fg", "jd", "dW", "ll"], function (a, b, c, e) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("HotspotMapOverlayArea", a).B("Object").J({
            mapColor: "or[color,enum[image,transparent,any]]",
            toolTip: "string",
            useHandCursor: "bool"
        }).Xb([e.xc, e.Qb]).Hf([e.U]);
        return a
    });
    define("jj", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        e = b.extend(c, function () {
            c.call(this)
        });
        a.A("ImageResourceLevel", e).B("Object").J({
            url: "string",
            width: "number",
            height: "number",
            grayscale: "bool",
            premultipliedAlpha: "bool",
            tags: "or[array[enum[preload,mobile,ipadpro,oculusgo,mobilevr,mobilevr2gen,ondemand]], enum[preload,mobile,ipadpro,oculusgo,mobilevr,mobilevr2gen,ondemand]]"
        }).hh(["url"]);
        e.prototype.get = function (a, b) {
            switch (a) {
            case "tags":
                var f = c.prototype.get.call(this,
                        a);
                f || (f = []);
                Array.isArray(f) || (f = [f]);
                0 > f.indexOf(e.Am) && c.prototype.get.call(this, "grayscale") && (f = f.concat([e.Am]));
                return f
            }
            return c.prototype.get.call(this, a, b)
        };
        e.prototype.Mca = function (a) {
            return 0 <= this.get("tags").indexOf(a)
        };
        e.Am = "preload";
        e.$0 = "mobile";
        e.Z0 = "ipadpro";
        e.jP = "mobilevr";
        e.a1 = "mobilevr2gen";
        e.kP = "ondemand";
        return e
    });
    define("eH", ["require", "jj", "r", "jt"], function (a) {
        var b = a("jj"),
        c = a("r"),
        e = a("jt");
        return {
            jm: function (a) {
                return this.ah(a, "load")
            },
            Vv: function (a) {
                return this.ah(a, "preload")
            },
            Bz: function (a) {
                return this.jm(a) != this.Vv(a)
            },
            ah: function (a, b) {
                var c = a.get("levels") || [],
                e = this.Yka(c),
                e = this.Qla(b, e),
                c = this.Eka(c, b),
                j = this.f5(c, e[0], e[1], this.Ola(b));
                j || (j = this.f5(c, e[0], e[1], m));
                return j
            },
            Eka: function (a, d) {
                "preload" == d ? a = this.sB(a, b.Am) : "load" == d && (a = this.Dka(a, b.Am));
                c.Tp() && (a = this.sB(a, b.Z0));
                c.dZ() &&
                (a = this.sB(a, b.a1));
                c.le() && (a = this.sB(a, b.jP));
                c.Za() && (a = this.sB(a, b.$0));
                return a
            },
            Yka: function (a) {
                if (0 == a.length)
                    return 1;
                a.sort(function (a, b) {
                    return b.get("width") - a.get("width")
                });
                return a[0].get("width") / a[0].get("height")
            },
            Qla: function (a, b) {
                if ("preload" == a)
                    return [0, 0];
                var f = 1E4;
                this.Jka() || (c.le() ? f = 2048 : c.Tp() ? f = 2048 : c.Za() && (f = 1024));
                return 1 > b ? [f * b, f] : [f, f / b]
            },
            Ola: function (a) {
                if ("load" == a)
                    return y
            },
            Jka: function () {
                return c.Tp() && e.$g("recent_ipad_use_max_res", y)
            },
            sB: function (a, b) {
                var c =
                    a.filter(function (a) {
                        return a.Mca(b)
                    });
                0 == c.length && (c = a);
                return c
            },
            Dka: function (a, b) {
                var c = a.filter(function (a) {
                    return !a.Mca(b)
                });
                0 == c.length && (c = a);
                return c
            },
            f5: function (a, b, c, e) {
                function j(a) {
                    return Math.abs(a.get("width") * a.get("height") - b * c)
                }
                a = a.filter(function (a) {
                    return e !== m && e != a.get("grayscale", y) ? y : n
                });
                if (0 == a.length)
                    return r;
                a.sort(function (a, b) {
                    return j(a) - j(b)
                });
                return a[0]
            }
        }
    });
    define("C", "require,fg,jd,dW,eH,jY,jn".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("dW"),
        g = a("eH"),
        d = a("jY"),
        f = a("jn"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("x", 0);
            this.set("y", 0);
            this.set("offsetX", 0);
            this.set("offsetY", 0);
            this.set("width", 0);
            this.set("height", 0);
            this.set("scaleMode", f.Zn);
            this.set("horizontalAlign", d.Lc);
            this.set("verticalAlign", d.vc)
        });
        e.A("HotspotMapOverlayImageBase", a).B("Object").J({
            height: "number",
            horizontalAlign: "enum[center, left, right]",
            image: "ImageResource",
            offsetX: "number",
            offsetY: "number",
            scaleMode: "enum[none, fill, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            verticalAlign: "enum[bottom, middle, top]",
            width: "number",
            x: "number",
            y: "number"
        });
        a.prototype.jm = function () {
            return this.get("image") ? g.jm(this.get("image")) : r
        };
        a.prototype.Vv = function () {
            return this.get("image") ? g.Vv(this.get("image")) : r
        };
        return a
    });
    define("iL", ["fg", "bZ"], function (a, b) {
        return a.extend(b, function (a, e) {
            b.call(this, a);
            this.Kh = e
        })
    });
    define("bS", ["require", "fg", "jd", "ll", "iL"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("iL"),
        a = b.extend(c, function () {
            c.call(this);
            this.wE = [];
            this.Yd = m;
            this.m = "initial"
        });
        a.prototype.Kn = Q("wE");
        a.prototype.g_ = function (a) {
            this.wE != a && (this.wE = a, this.Ar = this.Yd = m)
        };
        a.prototype.Kya = function (a) {
            this.Yd !== a && (this.m = "loading", this.Yd = a, this.trigger(new g(e.wc, this.Yd)))
        };
        a.prototype.WZ = function () {
            "loaded" !== this.m && (this.m = "loaded", this.trigger(e.S))
        };
        a.prototype.mya = function () {
            "loaded" !== this.m &&
            (this.m = "error", this.trigger(e.oe))
        };
        return a
    });
    define("cD", ["fg", "bS"], function (a, b) {
        var c = a.extend(b, function (a) {
            b.call(this);
            this.Zd = a;
            this.j = m
        });
        c.prototype.wd = Q("Zd");
        c.prototype.gwa = function (a) {
            return this.j !== m && this.j === a.j
        };
        c.i1 = "map";
        c.j1 = "overlay";
        return c
    });
    define("hC", ["fg", "cD"], function (a, b) {
        var c = a.extend(b, function (a, c, d) {
            b.call(this, b.j1);
            this.Uoa = a;
            this.da = c;
            this.fa = d
        });
        c.prototype.getX = Q("da");
        c.prototype.getY = Q("fa");
        c.h1 = "image";
        c.g1 = "fov";
        return c
    });
    define("jf", ["fg", "hC"], function (a, b) {
        var c = a.extend(b, function (a, c, d, f, h, j, p, k, l, q, o, t) {
            b.call(this, b.h1, d, f);
            this.j = a;
            this.Od = c;
            this.A9 = h;
            this.Fu = j;
            this.Gu = p;
            this.X = k;
            this.ia = l;
            this.Ed = q;
            this.Zh = o;
            this.ti = t;
            this.wE = [c]
        });
        c.prototype.Dj = Q("Od");
        c.prototype.ad = Q("X");
        c.prototype.Pd = Q("ia");
        return c
    });
    define("fy", "require,fg,dW,C,eH,jf".split(","), function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("C"),
        g = a("eH"),
        d = a("jf"),
        a = b.extend(e, function () {
            e.call(this);
            this.Uo = m
        });
        c.A("HotspotMapOverlayImage", a).B("HotspotMapOverlayImageBase");
        a.prototype.getItem = function () {
            return this.bh()
        };
        a.prototype.bh = function (a) {
            if (this.Uo === m)
                this.Uo = this.kM(a);
            return this.Uo
        };
        a.prototype.kM = function (a) {
            var b = this.get("image");
            if (b) {
                b = g.jm(b);
                return new d(this, b.get("url"), this.get("x"), this.get("y"), a, this.get("offsetX"), this.get("offsetY"),
                    this.get("width"), this.get("height"), this.get("scaleMode"), this.get("horizontalAlign"), this.get("verticalAlign"))
            }
            return r
        };
        return a
    });
    define("F", ["require", "fg", "dW", "C"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("C"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("HotspotMapOverlayMap", a).B("HotspotMapOverlayImageBase");
        return a
    });
    define("eM", "require,fg,jd,ll,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("opacity", 1);
            this.set("scale", 1);
            this.Sb = m
        });
        g.A("HotspotPanoramaOverlayImageBase", a).B("Object").J({
            yaw: "number",
            pitch: "number",
            roll: "number",
            rotationX: "number",
            rotationY: "number",
            hfov: "number",
            vfov: "number",
            distance: "number",
            horizontalAlign: "enum[center, left, right]",
            verticalAlign: "enum[bottom, middle, top]",
            scaleMode: "enum[fill, fit_inside, fit_outside, fit_to_width, fit_to_height, none]",
            opacity: "number",
            scale: "number",
            image: "ImageResource",
            playbackPositions: "array[PanoramaOverlayPlaybackPosition]"
        }).Xb([e.od, e.zd]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = d.KY(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "distance":
            case "hfov":
            case "vfov":
            case "pitch":
            case "rotationX":
            case "rotationY":
            case "roll":
            case "yaw":
            case "opacity":
            case "playbackPositions":
                this.Sb = m;
                d = n
            }
            c.prototype.set.call(this,
                a, b);
            d && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        return a
    });
    define("iW", ["require", "fg", "dW", "eM"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("eM"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("HotspotPanoramaOverlayImage", a).B("HotspotPanoramaOverlayImageBase");
        return a
    });
    define("P", ["require", "fg", "dW", "eM"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("eM"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("HotspotPanoramaOverlayMap", a).B("HotspotPanoramaOverlayImageBase");
        return a
    });
    define("iM", [], function () {
        function a(a) {
            for (var b = {}, a = a.split(","), d = 0; d < a.length; d++)
                b[a[d]] = n;
            return b
        }
        var b = /^<([-A-Za-z0-9_]+\:?[-A-Za-z0-9_]*)((?:\s+[-A-Za-z0-9_]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
        c = /^<\/([-A-Za-z0-9_]+\:?[-A-Za-z0-9_]*)[^>]*>/,
        e = /([-A-Za-z0-9_]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,
        g = a("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed"),
        d = a("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"),
        f = a("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"),
        h = a("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"),
        j = a("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),
        p = a("script,style");
        return function (a, l) {
            function q(a, b, c, k) {
                b = b.toLowerCase();
                if (d[b])
                    for (; v.last() && f[v.last()]; )
                        o(0, v.last());
                h[b] &&
                v.last() == b && o(0, b);
                (k = g[b] || !!k) || v.push(b);
                if (l.start) {
                    var p = [];
                    c.replace(e, function (a, b, d, c, f) {
                        a = d ? d : c ? c : f ? f : j[b] ? b : "";
                        p.push({
                            name: b,
                            value: a,
                            nY: a.replace(/(^|[^\\])"/g, '$1\\"')
                        })
                    });
                    l.start && l.start(b, p, k)
                }
            }
            function o(a, b) {
                if (b) {
                    b = b.toLowerCase();
                    for (d = v.length - 1; 0 <= d && v[d] != b; d--);
                } else
                    var d = 0;
                if (0 <= d) {
                    for (var c = v.length - 1; c >= d; c--)
                        l.end && l.end(v[c]);
                    v.length = d
                }
            }
            var t,
            s,
            v = [],
            u = a;
            for (v.last = function () {
                return this[this.length - 1]
            }; a; ) {
                s = n;
                if (!v.last() || !p[v.last()]) {
                    if (0 == a.indexOf("<\!--"))
                        t = a.indexOf("--\>"),
                        0 <= t && (l.Bua && l.Bua(a.substring(4, t)), a = a.substring(t + 3), s = y);
                    else if (0 == a.indexOf("</")) {
                        if (t = a.match(c))
                            a = a.substring(t[0].length), t[0].replace(c, o), s = y
                    } else if (0 == a.indexOf("<") && (t = a.match(b)))
                        a = a.substring(t[0].length), t[0].replace(b, q), s = y;
                    s && (t = a.indexOf("<"), s = 0 > t ? a : a.substring(0, t), a = 0 > t ? "" : a.substring(t), l.QE && l.QE(s))
                } else
                    a = a.replace(RegExp("(.*?)</" + v.last() + "[^>]*>"), function (a, b) {
                        b = b.replace(/<\!--(.*?)--\>/g, "$1").replace(/<!\[CDATA\[(.*?)]]\>/g, "$1");
                        l.QE && l.QE(b);
                        return ""
                    }), o(0,
                        v.last());
                a == u && i("Parse Error: " + a);
                u = a
            }
            o()
        }
    });
    define("ej", "require,jquery.mod,do,fg,ll,bZ,eO,r,iM".split(","), function (a) {
        var b = a("jquery.mod");
        a("do");
        var c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("r"),
        h = a("iM"),
        j = c.extend(d, function (a) {
            d.call(this);
            this.Bd = b(a);
            this.yD = [];
            this.Xq = r
        });
        j.prototype.vwa = function (a) {
            a && a.toLowerCase().indexOf("<script") >= 0 ? f.iz() == f.iA ? this.Hma(a) : this.Gma(a) : this.Fma(a)
        };
        j.prototype.Fma = function (a) {
            this.Bd.empty();
            a && this.Bd.append(a);
            this.iaa()
        };
        j.prototype.Hma = function (a) {
            this.Bd.empty();
            var d = this.Bd,
            c = r,
            f = [],
            e = r;
            new h(a, {
                start: function (a, f, h) {
                    if (a == "script") {
                        for (var h = m, j = 0; j < f.length && h === m; j++) {
                            var g = f[j];
                            if (g.name == "src")
                                h = g.value
                        }
                        e = {
                            parent: d,
                            previousSibling: c,
                            src: h,
                            content: ""
                        }
                    } else {
                        for (var p = {}, j = 0; j < f.length; j++) {
                            g = f[j];
                            p[g.name] = g.value
                        }
                        f = b("<" + a + "/>");
                        f.attr(p);
                        d.append(f);
                        if (h)
                            c = f;
                        else {
                            d = f;
                            c = r
                        }
                    }
                },
                QE: function (a) {
                    e ? e.content = e.content + a : d.append(a)
                },
                end: function (a) {
                    if (a == "script") {
                        f.push(e);
                        e = r
                    } else {
                        c = d;
                        d = d.parent()
                    }
                }
            });
            this.yD = f;
            this.eJ()
        };
        j.prototype.Gma = function (a) {
            function d() {
                e++;
                return f +
                e
            }
            this.Bd.empty();
            var f = "fragment_" + c.Wda(6) + "_",
            e = 0,
            j = d(),
            g = [j],
            s = m,
            v = [],
            u = r,
            w = "";
            new h(a, {
                start: function (a, b, c) {
                    if (a == "script") {
                        c = m;
                        for (a = 0; a < b.length && c === m; a++) {
                            var f = b[a];
                            if (f.name == "src")
                                c = f.value
                        }
                        u = {
                            parentClsName: g[g.length - 1],
                            previousSiblingClsName: s,
                            src: c,
                            content: ""
                        }
                    } else {
                        w = w + ("<" + a);
                        for (var e = d(), h = y, a = 0; a < b.length; a++) {
                            f = b[a];
                            if (f.name == "class") {
                                f.nY = f.nY + (" " + e);
                                h = n
                            }
                            w = w + (" " + f.name + '="' + f.nY + '"')
                        }
                        h || (w = w + (' class="' + e + '"'));
                        if (c) {
                            w = w + "/>";
                            s = e
                        } else {
                            w = w + ">";
                            g.push(e);
                            s = m
                        }
                    }
                },
                QE: function (a) {
                    u ?
                    u.content = u.content + a : w = w + a
                },
                end: function (a) {
                    if (a == "script") {
                        v.push(u);
                        u = r
                    } else {
                        s = g[g.length - 1];
                        g.pop()
                    }
                }
            });
            this.Bd.get(0).innerHTML = w;
            this.Bd.addClass(j);
            for (a = 0; a < v.length; a++) {
                var x = v[a],
                z = x.parentClsName;
                delete x.parentClsName;
                s = x.previousSiblingClsName;
                delete x.previousSiblingClsName;
                x.parent = b("." + z);
                x.previousSibling = s ? b("." + s) : r
            }
            this.Bd.removeClass(j);
            this.yD = v;
            this.eJ()
        };
        j.prototype.eJ = function () {
            if (!this.Xq)
                if (this.yD.length > 0) {
                    this.Xq = this.yD[0];
                    this.yD.splice(0, 1);
                    var a = this.Xq.src;
                    if (a) {
                        var d =
                            this;
                        j.kna(a, function () {
                            d.i6()
                        }, function () {
                            d.qna()
                        })
                    } else {
                        var c = this.Xq.parent,
                        a = this.Xq.previousSibling,
                        f;
                        f = a ? a.next() : c.children(":first");
                        a = document.write;
                        document.write = f.length ? function (a) {
                            f.before(a)
                        }
                         : function (a) {
                            c.append(a)
                        };
                        b.globalEval(this.Xq.content);
                        document.write = a;
                        this.i6()
                    }
                } else
                    this.iaa()
        };
        j.prototype.qna = function () {
            this.Xq = r;
            this.eJ()
        };
        j.prototype.i6 = function () {
            this.Xq = r;
            this.eJ()
        };
        j.prototype.iaa = function () {
            this.trigger(new g(e.Ba))
        };
        j.g6 = {};
        j.kna = function (a, d, c) {
            j.g6[a] ? d.call(window) :
            b.ajax({
                url: a,
                async: y,
                dataType: "script",
                error: c,
                success: function () {
                    j.g6[a] = n;
                    d.call(window)
                }
            })
        };
        return j
    });
    define("jM", ["fg", "ll", "bZ", "eO"], function (a, b, c, e) {
        a = a.extend(e, function (a, b) {
            e.call(this);
            this.Pma = a;
            this.W = b;
            this.ug = r
        });
        a.prototype.bind = function () {
            var a = e.prototype.bind.apply(this, arguments);
            this.sE();
            return a
        };
        a.prototype.unbind = function () {
            var a = e.prototype.unbind.apply(this, arguments);
            this.sE();
            return a
        };
        a.prototype.start = function () {
            this.W = n;
            this.sE()
        };
        a.prototype.stop = function () {
            this.W = y;
            this.sE()
        };
        a.prototype.MC = function () {
            this.trigger(new c(b.dd))
        };
        a.prototype.sE = function () {
            if (this.W &&
                this.Aca(b.dd)) {
                if (this.ug == r) {
                    var a = this;
                    this.ug = setTimeout(function () {
                        a.ug = r;
                        a.MC();
                        a.sE()
                    }, this.Pma)
                }
            } else
                this.ug != r && (clearTimeout(this.ug), this.ug = r)
        };
        return a
    });
    define("iI", "require,jquery.mod,do,fg,ll,gr,jY,d,ej,dK,jM".split(","), function (a) {
        var b = a("jquery.mod"),
        c = a("do"),
        e = a("fg"),
        g = a("ll"),
        d = a("gr"),
        f = a("jY"),
        h = a("d"),
        j = a("ej"),
        p = a("dK"),
        a = a("jM"),
        k = e.extend(h, function () {
            h.call(this);
            this.Tc("HTML");
            this.Rt = k.QG;
            this.O8 = this.P8 = 0;
            this.w$ = (new Date).getTime();
            this.UH = this.Hg = r;
            this.cx = this.cx.bind(this);
            this.QP = []
        });
        k.prototype.za = function () {
            h.prototype.za.call(this);
            this.f("content");
            this.f("horizontalAlign", f.qa);
            this.f("verticalAlign", f.vc);
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textAlign");
            this.f("textDecoration");
            this.f("textShadowBlurRadius", 3);
            this.f("textShadowColor", "#000000");
            this.f("textShadowHorizontalLength", 0);
            this.f("textShadowOpacity", 0);
            this.f("textShadowVerticalLength", 0)
        };
        k.prototype.cn = function (a) {
            this.ra && d.get(this.ra).Gxa(this.cx);
            h.prototype.cn.call(this, a);
            if (this.ra) {
                d.get(this.ra).$ta(this.cx);
                d.get(this.ra).lz(this.cx)
            }
        };
        k.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            if (!this.UH) {
                this.Hg = document.createElement("div");
                this.UH = b(this.Hg);
                this.zR({
                    position: "absolute",
                    display: "inline",
                    left: 0,
                    top: 0,
                    "box-sizing": "border-box"
                });
                var a = this.Ra();
                a.Vz(y);
                a.append(this.UH);
                this.A5 = new j(this.UH);
                this.A5.bind(g.Ba, this.vma, this, n);
                this.bind(g.yb, this.B5, this)
            }
        };
        k.prototype.ja = function () {
            var a = {},
            b = y;
            this.n("visible") && (b = n);
            if (this.n("content")) {
                this.A5.vwa(this.k("content"));
                this.q("content");
                b = n
            }
            if (this.n("fontFamily")) {
                b = this.k("fontFamily");
                c(b).isString() || (b = "");
                a.fontFamily =
                    p.Fs(b);
                this.q("fontFamily");
                b = n
            }
            if (this.n("fontSize")) {
                b = this.k("fontSize");
                c(b).isNumber() ? b = b + "px" : c(b).isString() || (b = "");
                a.fontSize = b;
                this.q("fontSize");
                b = n
            }
            if (this.n("fontColor")) {
                b = this.k("fontColor");
                c(b).isString() || (b = "");
                a.color = b;
                this.q("fontColor");
                b = n
            }
            if (this.n("fontWeight")) {
                b = this.k("fontWeight");
                switch (b) {
                case "bold":
                case "bolder":
                case "lighter":
                case "100":
                case "200":
                case "300":
                case "400":
                case "500":
                case "600":
                case "700":
                case "800":
                case "900":
                case "normal":
                    break;
                default:
                    b = "normal"
                }
                a.fontWeight =
                    b;
                this.q("fontWeight");
                b = n
            }
            if (this.n("fontStyle")) {
                b = this.k("fontStyle");
                switch (b) {
                case "italic":
                case "normal":
                    break;
                default:
                    b = "normal"
                }
                a.fontStyle = b;
                this.q("fontStyle");
                b = n
            }
            if (this.n("textDecoration")) {
                b = this.k("textDecoration");
                switch (b) {
                case "underline":
                case "overline":
                case "line-through":
                case "none":
                    break;
                default:
                    b = "none"
                }
                a.textDecoration = b;
                this.q("textDecoration");
                b = n
            }
            if (this.n("textAlign")) {
                b = this.k("textAlign");
                switch (b) {
                case "left":
                case "right":
                case "center":
                case "justify":
                    break;
                default:
                    b =
                        ""
                }
                a["text-align"] = b;
                this.q("textAlign");
                b = n
            }
            var d = ["textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"];
            if (c(d).any(function (a) {
                    return this.n(a)
                }, this)) {
                var f = {};
                c(d).each(function (a) {
                    f[a] = this.k(a);
                    this.q(a)
                }, this);
                a["-moz-text-shadow"] = a["-webkit-text-shadow"] = a["text-shadow"] = [f.textShadowHorizontalLength + "px", f.textShadowVerticalLength + "px", f.textShadowBlurRadius + "px", "rgba(" + parseInt("0x" + f.textShadowColor.substr(1, 2)) + ", " + parseInt("0x" +
                            f.textShadowColor.substr(3, 2)) + ", " + parseInt("0x" + f.textShadowColor.substr(5, 2)) + ", " + f.textShadowOpacity + ")"].join(" ");
                d = f.textShadowVerticalLength == 0 && this.k("textShadowHorizontalLength") == 0 ? 135 : Math.round(4 * Math.atan2(f.textShadowHorizontalLength, -f.textShadowVerticalLength) / Math.PI) * 45;
                a.filter = "progid:DXImageTransform.Microsoft.Shadow(color=#" + ("00" + (255 * f.textShadowOpacity).toString(16)).slice(-2) + f.textShadowColor.substr(1, 6) + ",direction=" + d + ")"
            }
            c(["paddingTop", "paddingRight", "paddingBottom",
                    "paddingLeft"]).any(function (a) {
                return this.n(a)
            }, this) && (b = n);
            this.zR(a);
            b && this.C6();
            h.prototype.ja.call(this)
        };
        k.prototype.C6 = function () {
            this.B5();
            this.Xa();
            this.k("visible") && this.k("content") ? this.BD(k.u1) : this.BD(k.QG)
        };
        k.prototype.qs = function (a) {
            for (var b = a.target; b && b.tagName != "A" && b.tagName != "BUTTON"; )
                b = b.parentElement;
            h.prototype.qs.call(this, a, !b)
        };
        k.prototype.Xo = function () {
            h.prototype.Xo.call(this);
            var a = this.Ra();
            this.di = this.Hg.clientWidth + a.wz() + a.yz();
            this.ci = this.Hg.clientHeight +
                a.zz() + a.sz()
        };
        k.prototype.e$ = function (a) {
            if (this.yS() != a) {
                this.Hg.style.paddingLeft = a + "px";
                this.Xa()
            }
        };
        k.prototype.yS = function () {
            return parseInt(this.Hg.style.paddingLeft) || 0
        };
        k.prototype.g$ = function (a) {
            if (this.AS() != a) {
                this.Hg.style.paddingTop = a + "px";
                this.Xa()
            }
        };
        k.prototype.AS = function () {
            return parseInt(this.Hg.style.paddingTop) || 0
        };
        k.prototype.f$ = function (a) {
            if (this.zS != a) {
                this.Hg.style.paddingRight = a + "px";
                this.Xa()
            }
        };
        k.prototype.zS = function () {
            return parseInt(this.Hg.style.paddingRight) || 0
        };
        k.prototype.d$ =
        function (a) {
            if (this.xS() != a) {
                this.Hg.style.paddingBottom = a + "px";
                this.Xa()
            }
        };
        k.prototype.xS = function () {
            return parseInt(this.Hg.style.paddingBottom) || 0
        };
        k.prototype.vma = function () {
            this.QP = Array.prototype.slice.call(this.Hg.querySelectorAll("*[style]")).map(function (a) {
                var b = {};
                b.Sua = a;
                b.style = a.getAttribute("style");
                return b
            }).filter(function (a) {
                return l.test(a.style)
            }).map(function (a) {
                for (var b = a.style, d = []; ; ) {
                    var c = l.exec(b);
                    if (c) {
                        d.push(function (a) {
                            return function () {
                                return a
                            }
                        }
                            (b.substr(0, c.index +
                                    1)));
                        d.push(function (a, b) {
                            switch (b) {
                            case "vw":
                                return function (b) {
                                    return Math.round(b * a) + "px"
                                };
                            case "vh":
                                return function (b, d) {
                                    return Math.round(d * a) + "px"
                                };
                            case "vmin":
                                return function (b, d, c) {
                                    return Math.round(c * a) + "px"
                                };
                            case "vmax":
                                return function (b, d, c) {
                                    return Math.round(c * a) + "px"
                                }
                            }
                        }
                            (parseFloat(c[1]), c[3].toLowerCase()));
                        b = b.substr(c.index + c[0].length)
                    } else {
                        d.push(function (a) {
                            return function () {
                                return a
                            }
                        }
                            (b));
                        a.functions = d;
                        return a
                    }
                }
            });
            this.ra && d.get(this.ra).lz(this.cx)
        };
        k.prototype.cx = function (a,
            b, d, c) {
            if (this.QP.length != 0) {
                this.QP.forEach(function (f) {
                    var e = f.functions.map(function (f) {
                        return f(a, b, d, c)
                    }).join("");
                    f.Sua.setAttribute("style", e)
                });
                this.C6()
            }
        };
        k.prototype.B5 = function () {
            var a = {
                width: "auto",
                height: "auto"
            },
            b = this.Ra();
            if (!this.JS()) {
                this.di != this.X && this.Xa();
                var d = this.X - (b.wz() + b.yz());
                d > 0 && (a.width = d + "px")
            }
            if (!this.v5()) {
                this.ci != this.ia && this.Xa();
                b = this.ia - (b.zz() + b.sz());
                b > 0 && (a.height = b + "px")
            }
            this.zR(a)
        };
        k.prototype.V6 = function () {
            var a = this.Hg.clientWidth,
            b = this.Hg.clientHeight;
            if (this.P8 != a || this.O8 != b) {
                this.P8 = a;
                this.O8 = b;
                this.Xa();
                this.BD(k.u1)
            } else {
                a = (new Date).getTime() - this.w$;
                a > k.Sga ? this.BD(k.Hga) : a > k.Rga && this.BD(k.Gga)
            }
        };
        k.prototype.Ypa = function () {
            this.w$ = (new Date).getTime()
        };
        k.prototype.BD = function (a) {
            this.Rt == k.cAa && this.Ypa();
            if (this.Rt != a) {
                this.Rt != k.QG && k.a3[this.Rt].unbind(g.dd, this.V6, this);
                this.Rt = a;
                this.Rt != k.QG && k.a3[this.Rt].bind(g.dd, this.V6, this, n)
            }
        };
        k.prototype.zR = function (a) {
            var b = this.Hg.style,
            d;
            for (d in a)
                b[d] = a[d]
        };
        var l = /[^\d]((\d*\.)?\d+)\s*(vmin|vmax|vw|vh)/i;
        k.QG = "stopped";
        k.Hga = "slow";
        k.Gga = "normal";
        k.u1 = "fast";
        k.Sga = 3E4;
        k.Rga = 5E3;
        k.a3 = {
            slow: new a(2E3, n),
            normal: new a(500, n),
            fast: new a(100, n)
        };
        return k
    });
    define("hR", ["fg", "iI", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("HTML", a).B("UIComponent").J({
            content: "string",
            fontColor: "color",
            fontFamily: "string",
            fontSize: "or[number, size]",
            fontStyle: "enum[italic, normal]",
            fontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            textAlign: "enum[center, justify, left, right]",
            textDecoration: "enum[underline, overline, line-through, none]",
            textShadowBlurRadius: "number",
            textShadowColor: "color",
            textShadowHorizontalLength: "number",
            textShadowOpacity: "number",
            textShadowVerticalLength: "number"
        }).gq(["fontSize"]);
        return a
    });
    define("b", ["do", "fg", "kS", "c"], function (a, b, c, e) {
        var g = b.extend(c, function () {
            c.call(this)
        });
        g.ob = {
            layout: e.gG
        };
        a.defaults(g.ob, c.ob);
        g.prototype.za = function () {
            this.bk(g.ob)
        };
        return g
    });
    define("gJ", ["fg", "fV", "b", "iI"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this);
            this.pr = r;
            this.set("contentOpaque", n)
        });
        a.prototype.za = function () {
            c.prototype.za.call(this);
            this.f("overflow", b.bl);
            this.f("html")
        };
        a.prototype.Ga = function () {
            c.prototype.Ga.call(this);
            this.pr == r && (this.pr = new e, this.pr.M({
                    left: 0
                }), this.la(this.pr))
        };
        a.prototype.ja = function () {
            this.pr.set("width", this.JS() ? m : "100%");
            this.n("html") && (this.pr.set("content", this.k("html")), this.q("html"));
            this.ib(["paddingLeft", "paddingTop",
                    "paddingRight", "paddingBottom"], {}, [this.pr], n, n);
            this.ib(["cursor"], {}, [this.pr], n, y);
            c.prototype.ja.call(this)
        };
        return a
    });
    define("bk", ["require", "fg", "gJ", "dW"], function (a) {
        var b = a("fg"),
        c = a("gJ"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("HTMLText", b).B("UIComponent").J({
            html: "string",
            overflow: "enum[scroll, hidden, visible]",
            scrollBarColor: "color",
            scrollBarWidth: "number",
            scrollBarMargin: "number",
            scrollBarHorizontalMargin: "number",
            scrollBarVerticalMargin: "number",
            scrollBarOpacity: "number",
            scrollBarVisible: "enum[rollOver, always]"
        });
        return b
    });
    define("hO", "require,jquery.mod,fg,ll,bZ,jt,fF,R,jn,fm,dm,jF".split(","), function (a) {
        function b(a, b, d) {
            return function (c) {
                var f;
                f = b == "mouse" ? this.mu(c) : this.BB(c);
                this.R5(f) ? a.call(this, c) : d == "release" ? a.call(this, c) : this.Rka(f, c)
            }
        }
        var c = a("jquery.mod"),
        e = a("fg"),
        g = a("ll"),
        d = a("bZ"),
        f = a("jt"),
        h = a("fF"),
        j = a("R"),
        p = a("jn"),
        k = a("fm"),
        l = a("dm"),
        q = a("jF"),
        o = f.zg("debug"),
        a = e.extend(q, function () {
            this.Tc("Button");
            q.call(this, 3);
            this.set("autoRolledOver", n);
            this.set("autoPressed", n);
            this.set("cursor", j.Ue);
            this.set("scaleMode", p.Te);
            this.HQ = document.createElement("canvas");
            this.HQ.width = 1;
            this.HQ.height = 1;
            this.IQ = this.HQ.getContext("2d");
            this.IQ.globalCompositeOperation = "copy";
            this.WR = y;
            this.bind(g.Qb, this.zma, this)
        });
        a.prototype.za = function () {
            q.prototype.za.call(this);
            this.f("buttonGroup");
            this.f("mode", l.Wc);
            this.f("pressed");
            this.f("iconURL");
            this.f("transparencyActive");
            this.h("rollOverOpacity", k.v, "opacity");
            this.h("rollOverIconURL", k.v, "iconURL");
            this.h("pressedOpacity", k.Ca, "opacity");
            this.h("pressedIconURL",
                k.Ca, "iconURL");
            this.h("pressedRollOverOpacity", k.$a, "opacity");
            this.h("pressedRollOverIconURL", k.$a, "iconURL")
        };
        a.prototype.eS = b(q.prototype.eS, "touch", "capture");
        a.prototype.y4 = b(q.prototype.Vka, "touch");
        a.prototype.A4 = b(q.prototype.Vka, "touch", "release");
        a.prototype.JW = b(q.prototype.JW, "touch", "capture");
        a.prototype.IW = b(q.prototype.IW, "touch");
        a.prototype.qs = b(q.prototype.qs, "touch", "release");
        a.prototype.YT = b(q.prototype.YT, "mouse", "capture");
        a.prototype.ZT = function (a) {
            var b = this.mu(a);
            if (this.R5(b) ||
                this.WR) {
                q.prototype.ZT.call(this, a);
                q.prototype.set.call(this, "cursor", this.Q3)
            } else {
                this.WR = n;
                if (b = this.W4(b)) {
                    c(b).trigger(this.o3(a));
                    a.preventDefault();
                    a.stopImmediatePropagation()
                }
                this.R4(b) == "pointer" ? q.prototype.set.call(this, "cursor", j.Ue) : q.prototype.set.call(this, "cursor", j.dd);
                this.WR = y
            }
        };
        a.prototype.zma = function () {
            q.prototype.set.call(this, "cursor", this.Q3)
        };
        a.prototype.rJ = b(q.prototype.rJ, "mouse", "release");
        a.prototype.R5 = function (a) {
            if (!this.Ab)
                return y;
            if (this.get("transparencyActive"))
                return n;
            var b = this.Ab.offset(),
            d = a.Jda - b.left,
            c = this.Ab.width(),
            a = a.Kda - b.top,
            b = this.Ab.height();
            if (d >= 0 && a >= 0 && d < c && a < b) {
                if (o)
                    return n;
                d = d * this.ny / c;
                c = a * this.my / b;
                this.IQ.drawImage(this.Ab.get(0), d, c, 1, 1, 0, 0, 1, 1);
                if (this.IQ.getImageData(0, 0, 1, 1).data[3] > 0)
                    return n
            }
            return y
        };
        a.prototype.Rka = function (a, b) {
            var d = this.W4(a);
            if (d) {
                c(d).trigger(this.o3(b));
                b.preventDefault();
                b.stopImmediatePropagation()
            }
        };
        a.prototype.W4 = function (a) {
            this.Lm().style.pointerEvents = "none";
            a = document.elementFromPoint(a.Jda, a.Kda);
            setTimeout(function () {
                this.Lm().style.pointerEvents = this.k5()
            }
                .bind(this), 0);
            return a
        };
        a.prototype.o3 = function (a) {
            return c.extend(c.Event(a.type), {
                originalEvent: a.originalEvent,
                wheelDelta: a.wheelDelta,
                detail: a.detail,
                which: 1,
                clientX: a.clientX,
                clientY: a.clientY,
                pageX: a.pageX,
                pageY: a.pageY,
                screenX: a.screenX,
                screenY: a.screenY
            })
        };
        a.prototype.R4 = function (a) {
            if (a) {
                var b = a.style.cursor;
                b == "inherit" && (b = this.R4(a.parentElement))
            } else
                b = "default";
            return b
        };
        a.prototype.QA = function () {
            if (this.get("pressed")) {
                this.set("pressed",
                    y);
                this.trigger(new d(g.Ph))
            } else {
                this.set("pressed", n);
                this.trigger(new d(g.Dg))
            }
        };
        a.prototype.set = function (a, b) {
            if (a === "cursor")
                this.Q3 = b;
            return q.prototype.set.call(this, a, b)
        };
        a.prototype.ja = function () {
            var a = y;
            if (this.n("backgroundOpacityy") || this.n("backgroundColor"))
                a = n;
            if (this.n("iconURL")) {
                this.set("url", this.k("iconURL"));
                this.q("iconURL")
            }
            var b = y;
            if (this.n("mode")) {
                if (this.k("mode") == l.Wc) {
                    this.unbind(g.U, this.QA, this, n);
                    this.set("autoPressed", n)
                } else {
                    this.bind(g.U, this.QA, this, n);
                    this.set("autoPressed",
                        y)
                }
                this.q("mode");
                b = n
            }
            if (b || this.n("pressed"))
                this.k("mode") == l.Qh ? this.My(this.k("pressed") == n) : b && this.My(y);
            if (this.n("buttonGroup")) {
                (b = this.k("buttonGroup")) ? h.register(this, b) : h.dG(this);
                this.q("buttonGroup")
            }
            q.prototype.ja.call(this);
            if (a) {
                a = this.Jb();
                if (a.Hh() == 0 || a.Vt.length == 0) {
                    a.Jj(0.001);
                    a.wea(["#000000"])
                }
            }
        };
        return a
    });
    define("Z", ["fg", "hO", "dW", "ll"], function (a, b, c, e) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("IconButton", a).B("UIComponent").J({
            buttonGroup: "string",
            iconURL: "string",
            mode: "enum[push, toggle]",
            horizontalAlign: "enum[left, center, right]",
            verticalAlign: "enum[bottom, middle, top]",
            rollOverIconURL: "string",
            rollOverOpacity: "number",
            pressed: "bool",
            pressedIconURL: "string",
            pressedOpacity: "number",
            pressedRollOverIconURL: "string",
            pressedRollOverOpacity: "number",
            transparencyActive: "bool"
        }).hh(["iconURL", "rollOverIconURL",
                "pressedIconURL"]).Xb([e.Dg, e.Ph]).Hf([e.U]);
        return a
    });
    define("kk", ["fg", "dW", "gs"], function (a, b, c) {
        a = a.extend(c, function () {
            c.call(this, y)
        });
        b.A("IconHotspotMapOverlay", a).B("HotspotMapOverlay");
        return a
    });
    define("kR", ["require", "fg", "ll", "jF", "dW"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("jF"),
        a = a("dW"),
        b = b.extend(e, function () {
            e.call(this)
        });
        a.A("Image", b).B("UIComponent").J({
            horizontalAlign: "enum[center, left, right]",
            scaleMode: "enum[none, fill, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            url: "string",
            verticalAlign: "enum[bottom, middle, top]"
        }).hh(["url"]).Hf([c.U]);
        return b
    });
    define("gX", ["fg", "gP", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("Label", a).B("UIComponent").J({
            fontFamily: "string",
            fontSize: "or[number, size]",
            fontColor: "color",
            fontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            fontStyle: "enum[italic, normal]",
            horizontalAlign: "enum[left, center, right]",
            verticalAlign: "enum[top, middle, bottom]",
            text: "string",
            textDecoration: "enum[underline, overline, line-through, none]",
            textShadowBlurRadius: "number",
            textShadowColor: "color",
            textShadowHorizontalLength: "number",
            textShadowOpacity: "number",
            textShadowVerticalLength: "number"
        }).gq(["fontSize"]);
        return a
    });
    define("bu", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("bleaching", 0);
            this.set("bleachingDistance", 0.4)
        });
        a.A("LensFlarePanoramaOverlay", b).B("PanoramaOverlay").J({
            yaw: "number",
            pitch: "number",
            bleaching: "number",
            bleachingDistance: "number"
        });
        return b
    });
    define("kV", ["require", "fg", "dW", "gC"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("gC"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("LivePanorama", a).B("Panorama").J({
            frameDisplayTime: "number",
            frameTransitionTime: "number",
            initialFrameIndex: "number"
        });
        a.prototype.CM = function () {
            return this.get("initialFrameIndex", 0)
        };
        return a
    });
    define("ih", ["require", "do", "fg", "u"], function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("u");
        return {
            jx: [],
            Eb: function (a, b, c, e) {
                this.b2(a, b, c, e, y)
            },
            Zta: function (a, b, c, e) {
                this.b2(a, b, c, e, n)
            },
            b2: function (a, d, f, h, j) {
                function p() {
                    for (var b = [], e = 0; e < d.length; e++)
                        try {
                            b.push(a.get(d[e]))
                        } catch (h) {
                            b.push(m),
                            c.bN("BindingsHandler._addBinding", h)
                        }
                    f.apply(this, b)
                }
                b.isArray(d) || (d = [d]);
                var p = j ? c.nm(p, this.ka) : p.bind(this.ka),
                k = [];
                b.forEach(d, function (b) {
                    k.push(e.watch(a, b, p))
                }, this);
                this.jx.push({
                    Yza: k,
                    host: a,
                    Xp: d,
                    zca: f
                });
                h && p()
            },
            Pb: function (a, d, c) {
                var e = b(this.jx).select(function (e) {
                    return e.zca == c && e.host == a && b.isEqual(e.Xp, d)
                });
                b(e).forEach(function (a) {
                    b(a.Yza).forEach(function (a) {
                        a.unwatch()
                    })
                });
                this.jx = b.difference(this.jx, e)
            },
            JBa: function () {
                for (; 0 < this.jx.length; ) {
                    var a = b.first(this.jx);
                    this.Pb(a.host, a.Xp, a.zca)
                }
            }
        }
    });
    define("cp", ["fg", "cD"], function (a, b) {
        var c = a.extend(b, function (a, c, d, f, h, j, p) {
            b.call(this, b.i1);
            this.j = a;
            this.Od = c;
            this.X = d;
            this.ia = f;
            this.Ed = h;
            this.VR = j;
            this.qk = p.slice()
        });
        c.prototype.Kn = function () {
            for (var a = [this.Od], b = 0; b < this.qk.length; b++)
                a = a.concat(this.qk[b].Kn());
            return a
        };
        c.prototype.Dj = Q("Od");
        c.prototype.ad = Q("X");
        c.prototype.Pd = Q("ia");
        return c
    });
    define("kh", "require,do,fg,ih,dW,jn,du,eH,cp".split(","), function (a) {
        var b = a("do"),
        c = a("fg");
        a("ih");
        var e = a("dW"),
        g = a("jn"),
        d = a("du"),
        f = a("eH"),
        h = a("cp"),
        a = c.extend(d, function () {
            d.call(this);
            this.Uo = this.rK = m
        });
        e.A("Map", a).B("Media").J({
            fieldOfViewOverlayInsideColor: "color",
            fieldOfViewOverlayInsideOpacity: "number",
            fieldOfViewOverlayOutsideColor: "color",
            fieldOfViewOverlayOutsideOpacity: "number",
            fieldOfViewOverlayRadiusScale: "number",
            flipImageHorizontally: "bool",
            height: "number",
            image: "ImageResource",
            initialZoomFactor: "number",
            maximumZoomFactor: "number",
            minimumZoomFactor: "number",
            overlays: "array[MapOverlay]",
            scaleMode: "enum[none, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            width: "number"
        });
        a.prototype.Sxa = function () {
            this.Uo = this.rK = m
        };
        a.prototype.Bz = function () {
            return !(!this.get("image") || !f.Bz(this.get("image")))
        };
        a.prototype.Vv = function () {
            return this.get("image") && f.Vv(this.get("image"))
        };
        a.prototype.jm = function () {
            return this.get("image") && f.jm(this.get("image"))
        };
        a.prototype.mca =
        function () {
            if (this.rK == m)
                this.rK = this.Bz() ? new h(this, this.Vv().get("url"), this.get("width"), this.get("height"), this.get("scaleMode", g.dt), this.get("flipImageHorizontally", y), []) : r;
            return this.rK
        };
        a.prototype.bh = function () {
            if (this.Uo == m)
                if (this.get("image")) {
                    var a = Array.prototype.concat.apply([], b(this.get("overlays", [])).map(function (a) {
                                return a.Eva()
                            }));
                    this.Uo = new h(this, this.jm().get("url"), this.get("width"), this.get("height"), this.get("scaleMode", g.dt), this.get("flipImageHorizontally", y), a)
                } else
                    this.Uo =
                        r;
            return this.Uo
        };
        a.prototype.In = function () {
            return [].concat(this.rI(this.mca()), this.rI(this.bh()))
        };
        a.prototype.rI = function (a) {
            return a ? a.Kn() : []
        };
        return a
    });
    define("ix", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("MapOverlay", a).B("Object");
        return a
    });
    define("jT", "require,fg,do,ll,bZ,eO,dm,fm".split(","), function (a) {
        var b = a("fg"),
        c = a("do"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("dm"),
        h = a("fm"),
        a = b.extend(d, function (a, b, c) {
            d.call(this);
            this.r3 = a;
            this.rpa = b;
            this.D2 = c || f.Wc;
            this.gg = [];
            this.Ot = [];
            this.Jq = {};
            this.Jq.mode = this.D2;
            this.D2 == f.Qh && (this.Jq.pressed = y);
            this.r3.bind(e.D(b), this.a9, this);
            this.a9()
        });
        a.prototype.a9 = function () {
            var a = this.r3.get(this.rpa);
            a || (a = []);
            c.isArray(a) || (a = [a]);
            this.Dqa(a)
        };
        a.prototype.Dqa = function (a) {
            var b = c.difference(this.gg,
                    a);
            c(b).each(function (a) {
                a.unbind(e.Dg, this.J2, this, n);
                a.unbind(e.Ph, this.K2, this, n);
                a.unbind(e.U, this.C2, this, n);
                a.unbind(e.Hb, this.E2, this, n);
                a.unbind(e.fc, this.F2, this, n);
                a.unbind(e.xc, this.M2, this, n);
                a.unbind(e.Qb, this.L2, this, n)
            }, this);
            b = c.difference(a, this.gg);
            c(b).each(function (a) {
                a.M(this.Jq);
                a.bind(e.Dg, this.J2, this, n);
                a.bind(e.Ph, this.K2, this, n);
                a.bind(e.U, this.C2, this, n);
                a.bind(e.Hb, this.E2, this, n);
                a.bind(e.fc, this.F2, this, n);
                a.bind(e.xc, this.M2, this, n);
                a.bind(e.Qb, this.L2, this, n)
            }, this);
            this.gg = a;
            this.Ot = this.Ot.filter(function (a) {
                return this.gg.indexOf(a) >= 0
            }
                    .bind(this))
        };
        a.prototype.J2 = function () {
            this.trigger(new g(e.Dg))
        };
        a.prototype.K2 = function () {
            this.trigger(new g(e.Ph))
        };
        a.prototype.C2 = function () {
            this.trigger(new g(e.U))
        };
        a.prototype.E2 = function () {
            this.trigger(new g(e.Hb))
        };
        a.prototype.F2 = function () {
            this.trigger(new g(e.fc))
        };
        a.prototype.M2 = function (a) {
            this.Ot.push(a.source);
            this.wg()
        };
        a.prototype.L2 = function (a) {
            this.Ot = this.Ot.filter(function (b) {
                return b != a.source
            });
            this.wg()
        };
        a.prototype.set = function (a, b) {
            this.Jq[a] = b;
            this.gg.forEach(function (a) {
                a.M(this.Jq)
            }
                .bind(this));
            this.wg()
        };
        a.prototype.wg = function () {
            this.gg.forEach(function (a) {
                a.get("state") == h.Ca && this.Ot.indexOf(a) >= 0 ? a.set("state", h.$a) : a.get("state") == h.$a && this.Ot.indexOf(a) < 0 && a.set("state", h.Ca)
            }
                .bind(this))
        };
        return a
    });
    define("eT", "require,do,fg,ll,bZ,fm,R,b,d,ks,kF".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("fm"),
        f = a("R"),
        h = a("b"),
        j = a("d");
        a("ks");
        a("kF");
        var p = c.extend(h, function () {
            h.call(this);
            this.Tc("PlaybackBar");
            this.li = this.Yd = r;
            this.Le = [];
            this.oK = y;
            this.RU = this.Xu = m;
            this.qW = y
        });
        p.ob = {
            cursor: f.Ue,
            overflow: "visible",
            height: 20,
            position: 0,
            duration: 100,
            steps: m,
            selectedStep: m,
            backgroundColor: "#000000",
            barBackgroundColor: "#FFFFFF",
            barBackgroundColorDirection: m,
            barBackgroundColorRatios: m,
            barBorderColor: m,
            barBorderRadius: m,
            barBorderSize: m,
            barOpacity: m,
            liveDragging: m,
            playheadBackgroundColor: "#FFFFFF",
            playheadBackgroundColorDirection: m,
            playheadBackgroundColorRatios: m,
            playheadBorderColor: m,
            playheadBorderRadius: m,
            playheadBorderSize: m,
            playheadOpacity: m,
            playheadWidth: 5,
            playheadHeight: 30,
            playheadShadow: n,
            playheadShadowBlurRadius: 3,
            playheadShadowColor: "#000000",
            playheadShadowHorizontalLength: 0,
            playheadShadowOpacity: m,
            playheadShadowSpread: 0,
            playheadShadowVerticalLength: 3,
            stepBackgroundColor: "#FFFFFF",
            stepBackgroundColorDirection: m,
            stepBackgroundColorRatios: m,
            stepBorderColor: m,
            stepBorderRadius: 6,
            stepBorderSize: 0,
            stepOpacity: 1,
            stepWidth: 12,
            stepHeight: 12,
            stepShadow: n,
            stepShadowBlurRadius: 6,
            stepShadowColor: "#000000",
            stepShadowHorizontalLength: 0,
            stepShadowOpacity: m,
            stepShadowSpread: 0,
            stepShadowVerticalLength: 0,
            selectedStepBackgroundColor: "#3399FF",
            selectedStepBackgroundColorDirection: m,
            selectedStepBackgroundColorRatios: m,
            selectedStepBorderColor: "#ffffff",
            selectedStepBorderRadius: 10,
            selectedStepBorderSize: 2,
            selectedStepOpacity: 1,
            selectedStepWidth: 20,
            selectedStepHeight: 20,
            selectedStepShadow: n,
            selectedStepShadowBlurRadius: 3,
            selectedStepShadowColor: "#000000",
            selectedStepShadowHorizontalLength: 0,
            selectedStepShadowOpacity: m,
            selectedStepShadowSpread: 0,
            selectedStepShadowVerticalLength: 0
        };
        b.defaults(p.ob, h.ob);
        p.prototype.za = function () {
            this.bk(p.ob)
        };
        p.prototype.Ga = function () {
            h.prototype.Ga.call(this);
            (!this.Yd || !this.li) && this.bind(e.yb, this.fpa, this, n);
            if (this.Yd == r) {
                this.Yd = new j;
                this.Yd.M({
                    left: "0",
                    height: "100%",
                    cursor: f.Ue
                });
                this.la(this.Yd)
            }
            if (this.li == r) {
                this.li = new j;
                this.li.M({
                    left: "0",
                    cursor: f.Ue
                });
                this.li.bind(e.yb, this.ipa, this, n);
                this.li.bind(e.Hb, this.gpa, this, n);
                this.Ta().bind(e.Mc, this.H8, this, n);
                this.bind(e.U, this.dpa, this, n);
                this.li.bind(e.fc, this.hpa, this, n);
                this.la(this.li)
            }
            var a = this.get("steps") || 0;
            if (this.Le.length != a) {
                for (; this.Le.length > a; )
                    this.Yja(this.Le.pop());
                for (; this.Le.length < a; )
                    this.Le.push(this.Pja());
                this.ib(p.R1, p.AP, this.Le, y, n);
                this.Oaa();
                this.lX();
                this.Hj(this.li, this.Pa().length -
                    1)
            }
        };
        p.prototype.Pja = function () {
            var a = new k;
            a.M({
                cursor: f.Ue
            });
            a.bind(e.U, this.D$, this, n);
            a.bind(e.yb, this.E$, this, n);
            this.la(a);
            return a
        };
        p.prototype.Yja = function (a) {
            a.unbind(e.U, this.D$, this, n);
            a.unbind(e.yb, this.E$, this, n);
            this.removeChild(a)
        };
        p.prototype.ja = function () {
            var a = y;
            if (this.n("position") || this.n("duration")) {
                this.q("position");
                this.q("duration");
                a = n
            }
            if (this.n("selectedStep")) {
                this.q("selectedStep");
                this.Oaa()
            }
            if (this.n("steps")) {
                this.q("steps");
                this.mF()
            }
            this.ib(p.tP, p.wA, [this.Yd],
                n, n);
            this.ib(p.Oga, p.N1, [this.li], n, n);
            this.ib(p.R1, p.AP, this.Le, n, n);
            h.prototype.ja.call(this);
            a && this.IL()
        };
        p.prototype.Oaa = function () {
            var a = this.get("selectedStep");
            this.Le.forEach(function (b, d) {
                b.VF(d === a)
            });
            this.li.set("visible", a === m)
        };
        p.prototype.IL = function () {
            var a = this.Aa(),
            b = this.li.Aa(),
            d = this.li.eb(),
            c = this.fr(),
            f = this.ir(),
            e = f * a / c,
            a = Math.round((this.oK ? this.Xu : f) * a / c - b * 0.5),
            a = Math.max(0, Math.min(a, this.Id() - b)),
            b = Math.round(this.Hd() * 0.5 - d * 0.5);
            this.li.M({
                left: a,
                top: b
            });
            this.Yd.set("width",
                Math.round(e))
        };
        p.prototype.ipa = function () {
            this.IL()
        };
        p.prototype.gpa = function (a) {
            this.oK = n;
            this.RU = a.pageX;
            this.Xu = this.k("position")
        };
        p.prototype.H8 = function (a) {
            if (this.oK) {
                var b = a.pageX - this.RU;
                this.RU = a.pageX;
                var a = this.Aa(),
                d = this.fr();
                this.Xu = Math.max(0, Math.min(d, this.Xu + d * b / a));
                this.IL();
                if (this.get("liveDragging")) {
                    this.set("position", this.Xu);
                    this.trigger(new g(e.aa))
                }
            }
        };
        p.prototype.hpa = function (a) {
            this.H8(a);
            this.oK = y;
            if (!this.get("liveDragging")) {
                this.set("position", this.Xu);
                this.trigger(new g(e.aa))
            }
            this.Xu =
                m
        };
        p.prototype.dpa = function (a) {
            if (!this.qW) {
                var b = this.Aa();
                this.set("position", this.fr() * a.x / b);
                this.trigger(new g(e.aa))
            }
        };
        p.prototype.E$ = function () {
            this.lX()
        };
        p.prototype.fpa = function () {
            this.lX();
            this.IL()
        };
        p.prototype.lX = function () {
            for (var a = this.Aa(), b = this.eb(), d = this.da, c = this.getParent().Aa() - (d + a), f = 0, e = this.Le.length; f < e; f++) {
                var h = this.Le[f],
                j = h.Aa();
                h.M({
                    left: f == 0 && d == 0 ? 0 : f == e - 1 && c == 0 ? a - j : Math.round(a * f / (e - 1) - j * 0.5),
                    top: Math.round(b * 0.5 - h.eb() * 0.5)
                })
            }
        };
        p.prototype.D$ = function (a) {
            a = this.Le.indexOf(a.source);
            this.set("position", this.fr() * a / (this.Le.length - 1));
            this.qW = n;
            this.trigger(new g(e.aa));
            setTimeout(function () {
                this.qW = y
            }
                .bind(this), 0)
        };
        p.prototype.fr = function () {
            var a = this.k("duration");
            return !a ? 1 : a
        };
        p.prototype.ir = function () {
            return Math.max(0, Math.min(this.fr(), this.k("position")))
        };
        p.wA = {
            barBackgroundColor: "backgroundColor",
            barBackgroundColorDirection: "backgroundColorDirection",
            barBackgroundColorRatios: "backgroundColorRatios",
            barBorderColor: "borderColor",
            barBorderRadius: "borderRadius",
            barBorderSize: "borderSize",
            barOpacity: "opacity"
        };
        p.tP = b(p.wA).keys();
        p.N1 = {
            playheadBackgroundColor: "backgroundColor",
            playheadBackgroundColorDirection: "backgroundColorDirection",
            playheadBackgroundColorRatios: "backgroundColorRatios",
            playheadBorderColor: "borderColor",
            playheadBorderRadius: "borderRadius",
            playheadBorderSize: "borderSize",
            playheadOpacity: "opacity",
            playheadWidth: "width",
            playheadHeight: "height",
            playheadShadow: "shadow",
            playheadShadowBlurRadius: "shadowBlurRadius",
            playheadShadowColor: "shadowColor",
            playheadShadowHorizontalLength: "shadowHorizontalLength",
            playheadShadowOpacity: "shadowOpacity",
            playheadShadowSpread: "shadowSpread",
            playheadShadowVerticalLength: "shadowVerticalLength"
        };
        p.Oga = b(p.N1).keys();
        p.AP = {
            stepBackgroundColor: "backgroundColor",
            stepBackgroundColorDirection: "backgroundColorDirection",
            stepBackgroundColorRatios: "backgroundColorRatios",
            stepBorderColor: "borderColor",
            stepBorderRadius: "borderRadius",
            stepBorderSize: "borderSize",
            stepOpacity: "opacity",
            stepWidth: "width",
            stepHeight: "height",
            stepShadow: "shadow",
            stepShadowBlurRadius: "shadowBlurRadius",
            stepShadowColor: "shadowColor",
            stepShadowHorizontalLength: "shadowHorizontalLength",
            stepShadowOpacity: "shadowOpacity",
            stepShadowSpread: "shadowSpread",
            stepShadowVerticalLength: "shadowVerticalLength",
            selectedStepBackgroundColor: "selectedBackgroundColor",
            selectedStepBackgroundColorDirection: "selectedBackgroundColorDirection",
            selectedStepBackgroundColorRatios: "selectedBackgroundColorRatios",
            selectedStepBorderColor: "selectedBorderColor",
            selectedStepBorderRadius: "selectedBorderRadius",
            selectedStepBorderSize: "selectedBorderSize",
            selectedStepOpacity: "selectedOpacity",
            selectedStepWidth: "selectedWidth",
            selectedStepHeight: "selectedHeight",
            selectedStepShadow: "selectedShadow",
            selectedStepShadowBlurRadius: "selectedShadowBlurRadius",
            selectedStepShadowColor: "selectedShadowColor",
            selectedStepShadowHorizontalLength: "selectedShadowHorizontalLength",
            selectedStepShadowOpacity: "selectedShadowOpacity",
            selectedStepShadowSpread: "selectedShadowSpread",
            selectedStepShadowVerticalLength: "selectedShadowVerticalLength"
        };
        p.R1 = b(p.AP).keys();
        var k =
            c.extend(j, function () {
                j.call(this)
            });
        k.prototype.VF = function (a) {
            this.ED(a)
        };
        k.prototype.za = function () {
            j.prototype.za.call(this);
            this.f("backgroundColor");
            this.f("backgroundColorDirection");
            this.f("backgroundColorRatios");
            this.f("borderColor");
            this.f("borderRadius");
            this.f("borderSize");
            this.f("opacity");
            this.f("width");
            this.f("height");
            this.f("shadow");
            this.f("shadowBlurRadius");
            this.f("shadowColor");
            this.f("shadowHorizontalLength");
            this.f("shadowOpacity");
            this.f("shadowSpread");
            this.f("shadowVerticalLength");
            this.h("selectedBackgroundColor", d.G, "backgroundColor");
            this.h("selectedBackgroundColorDirection", d.G, "backgroundColorDirection");
            this.h("selectedBackgroundColorRatios", d.G, "backgroundColorRatios");
            this.h("selectedBorderColor", d.G, "borderColor");
            this.h("selectedBorderRadius", d.G, "borderRadius");
            this.h("selectedBorderSize", d.G, "borderSize");
            this.h("selectedOpacity", d.G, "opacity");
            this.h("selectedWidth", d.G, "width");
            this.h("selectedHeight", d.G, "height");
            this.h("selectedShadow", d.G, "shadow");
            this.h("selectedShadowBlurRadius",
                d.G, "shadowBlurRadius");
            this.h("selectedShadowColor", d.G, "shadowColor");
            this.h("selectedShadowHorizontalLength", d.G, "shadowHorizontalLength");
            this.h("selectedShadowOpacity", d.G, "shadowOpacity");
            this.h("selectedShadowSpread", d.G, "shadowSpread");
            this.h("selectedShadowVerticalLength", d.G, "shadowVerticalLength")
        };
        k.prototype.ja = function () {
            j.prototype.ja.call(this)
        };
        return p
    });
    define("cr", ["do", "fg", "b", "d"], function (a, b, c, e) {
        var g = b.extend(c, function () {
            c.call(this);
            this.Tc("ProgressBar")
        });
        g.ob = {
            percent: 0,
            backgroundColor: "#000000",
            barBackgroundColor: "#FFFFFF",
            barBackgroundColorDirection: m,
            barBackgroundColorRatios: m,
            barBorderColor: m,
            barBorderRadius: m,
            barBorderSize: m,
            barOpacity: m
        };
        a.defaults(g.ob, c.ob);
        g.prototype.za = function () {
            this.bk(g.ob)
        };
        g.prototype.Ga = function () {
            c.prototype.Ga.call(this);
            this.Yd == r && (this.Yd = new e, this.Yd.M({
                    left: "0",
                    width: "0%",
                    height: "100%"
                }), this.la(this.Yd))
        };
        g.prototype.ja = function () {
            this.n("percent") && (this.Yd.set("width", Math.round(this.k("percent")) + "%"), this.q("percent"));
            this.ib(g.tP, g.wA, [this.Yd], n, n);
            c.prototype.ja.call(this)
        };
        g.wA = {
            barBackgroundColor: "backgroundColor",
            barBackgroundColorDirection: "backgroundColorDirection",
            barBackgroundColorRatios: "backgroundColorRatios",
            barBorderColor: "borderColor",
            barBorderRadius: "borderRadius",
            barBorderSize: "borderSize",
            barOpacity: "opacity"
        };
        g.tP = a(g.wA).keys();
        return g
    });
    define("ku", ["require"], function () {
        var a = Math.PI / 180,
        b = 180 / Math.PI;
        return {
            create: function () {
                return {
                    x: 0,
                    y: 0,
                    z: 0,
                    w: 0
                }
            },
            Sba: function (b, e, g) {
                var e = e * a,
                b = -b * a,
                d = g * a,
                g = Math.cos(b / 2),
                b = Math.sin(b / 2),
                f = Math.cos(d / 2),
                d = Math.sin(d / 2),
                h = Math.cos(e / 2),
                e = Math.sin(e / 2),
                j = {};
                j.w = g * f * h - b * d * e;
                j.x = g * f * e + b * d * h;
                j.y = b * f * h + g * d * e;
                j.z = g * d * h - b * f * e;
                return j
            },
            q_: function (a) {
                var e = a.x * a.y + a.z * a.w,
                g = {};
                if (0.499 < e)
                    g.ma = -2 * Math.atan2(a.x, a.w), g.md = -Math.PI / 2, g.pitch = 0;
                else if (-0.499 > e)
                    g.ma = 2 * Math.atan2(a.x, a.w), g.md = Math.PI / 2,
                    g.pitch = 0;
                else {
                    var d = a.x * a.x,
                    f = a.z * a.z;
                    g.ma = -Math.atan2(2 * a.y * a.w - 2 * a.x * a.z, 1 - 2 * a.y * a.y - 2 * f);
                    g.md = -Math.asin(2 * e);
                    g.pitch = Math.atan2(2 * a.x * a.w - 2 * a.y * a.z, 1 - 2 * d - 2 * f);
                    g.pitch = Math.min(Math.PI / 2, Math.max(-Math.PI / 2, g.pitch))
                }
                g.ma *= b;
                g.pitch *= b;
                g.md *= -b;
                return g
            },
            ma: function (a) {
                var e = a.x * a.y + a.z * a.w;
                return 0.499 < e ? -2 * Math.atan2(a.x, a.w) * b : -0.499 > e ? 2 * Math.atan2(a.x, a.w) * b : -Math.atan2(2 * a.y * a.w - 2 * a.x * a.z, 1 - 2 * a.y * a.y - 2 * a.z * a.z) * b
            }
        }
    });
    define("kD", ["require"], function () {
        var a = {};
        a.degToRad = Math.PI / 180;
        a.radToDeg = 180 / Math.PI;
        a.Vector2 = function (a, c) {
            this.x = a || 0;
            this.y = c || 0
        };
        a.Vector2.prototype = {
            constructor: a.Vector2,
            set: function (a, c) {
                this.x = a;
                this.y = c;
                return this
            },
            copy: function (a) {
                this.x = a.x;
                this.y = a.y;
                return this
            }
        };
        a.Vector3 = function (a, c, e) {
            this.x = a || 0;
            this.y = c || 0;
            this.z = e || 0
        };
        a.Vector3.prototype = {
            constructor: a.Vector3,
            set: function (a, c, e) {
                this.x = a;
                this.y = c;
                this.z = e;
                return this
            },
            copy: function (a) {
                this.x = a.x;
                this.y = a.y;
                this.z = a.z;
                return this
            },
            length: function () {
                return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
            },
            normalize: function () {
                var a = this.length();
                0 !== a ? this.Gda(1 / a) : this.z = this.y = this.x = 0;
                return this
            },
            Gda: function (a) {
                this.x *= a;
                this.y *= a;
                this.z *= a
            },
            applyQuaternion: function (a) {
                var c = this.x,
                e = this.y,
                g = this.z,
                d = a.x,
                f = a.y,
                h = a.z,
                a = a.w,
                j = a * c + f * g - h * e,
                p = a * e + h * c - d * g,
                k = a * g + d * e - f * c,
                c = -d * c - f * e - h * g;
                this.x = j * a + c * -d + p * -h - k * -f;
                this.y = p * a + c * -f + k * -d - j * -h;
                this.z = k * a + c * -h + j * -f - p * -d;
                return this
            },
            Pua: function (a) {
                return this.x * a.x + this.y * a.y + this.z *
                a.z
            },
            Lua: function (a, c) {
                var e = a.x,
                g = a.y,
                d = a.z,
                f = c.x,
                h = c.y,
                j = c.z;
                this.x = g * j - d * h;
                this.y = d * f - e * j;
                this.z = e * h - g * f;
                return this
            }
        };
        a.Quaternion = function (a, c, e, g) {
            this.x = a || 0;
            this.y = c || 0;
            this.z = e || 0;
            this.w = g !== m ? g : 1
        };
        a.Quaternion.prototype = {
            constructor: a.Quaternion,
            set: function (a, c, e, g) {
                this.x = a;
                this.y = c;
                this.z = e;
                this.w = g;
                return this
            },
            copy: function (a) {
                this.x = a.x;
                this.y = a.y;
                this.z = a.z;
                this.w = a.w;
                return this
            },
            yea: function (a, c, e) {
                var g = Math.cos(a / 2),
                d = Math.cos(c / 2),
                f = Math.cos(e / 2),
                a = Math.sin(a / 2),
                c = Math.sin(c /
                        2),
                e = Math.sin(e / 2);
                this.x = a * d * f + g * c * e;
                this.y = g * c * f - a * d * e;
                this.z = g * d * e - a * c * f;
                this.w = g * d * f + a * c * e;
                return this
            },
            setFromAxisAngle: function (a, c) {
                var e = c / 2,
                g = Math.sin(e);
                this.x = a.x * g;
                this.y = a.y * g;
                this.z = a.z * g;
                this.w = Math.cos(e);
                return this
            },
            multiply: function (a) {
                return this.Fda(this, a)
            },
            Fda: function (a, c) {
                var e = a.x,
                g = a.y,
                d = a.z,
                f = a.w,
                h = c.x,
                j = c.y,
                p = c.z,
                k = c.w;
                this.x = e * k + f * h + g * p - d * j;
                this.y = g * k + f * j + d * h - e * p;
                this.z = d * k + f * p + e * j - g * h;
                this.w = f * k - e * h - g * j - d * p;
                return this
            },
            inverse: function () {
                this.x *= -1;
                this.y *= -1;
                this.z *=
                -1;
                this.normalize();
                return this
            },
            normalize: function () {
                var a = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);
                0 === a ? (this.z = this.y = this.x = 0, this.w = 1) : (a = 1 / a, this.x *= a, this.y *= a, this.z *= a, this.w *= a);
                return this
            },
            tza: function (a, c) {
                if (0 === c)
                    return this;
                if (1 === c)
                    return this.copy(a);
                var e = this.x,
                g = this.y,
                d = this.z,
                f = this.w,
                h = f * a.w + e * a.x + g * a.y + d * a.z;
                0 > h ? (this.w = -a.w, this.x = -a.x, this.y = -a.y, this.z = -a.z, h = -h) : this.copy(a);
                if (1 <= h)
                    return this.w = f, this.x = e, this.y = g, this.z = d, this;
                var j = Math.acos(h),
                p = Math.sqrt(1 - h * h);
                if (0.001 > Math.abs(p))
                    return this.w = 0.5 * (f + this.w), this.x = 0.5 * (e + this.x), this.y = 0.5 * (g + this.y), this.z = 0.5 * (d + this.z), this;
                h = Math.sin((1 - c) * j) / p;
                j = Math.sin(c * j) / p;
                this.w = f * h + this.w * j;
                this.x = e * h + this.x * j;
                this.y = g * h + this.y * j;
                this.z = d * h + this.z * j;
                return this
            },
            zea: function () {
                var b,
                c;
                return function (e, g) {
                    b === m && (b = new a.Vector3);
                    c = e.Pua(g) + 1;
                    1.0E-6 > c ? (c = 0, Math.abs(e.x) > Math.abs(e.z) ? b.set(-e.y, e.x, 0) : b.set(0, -e.z, e.y)) : b.Lua(e, g);
                    this.x = b.x;
                    this.y = b.y;
                    this.z = b.z;
                    this.w = c;
                    this.normalize();
                    return this
                }
            }
            ()
        };
        return a
    });
    define("ef", ["require", "ll", "bZ", "eO", "kD"], function (a) {
        function b() {
            p || (p = n, o = new j.Vector3(0, 0, 1), t = new j.Quaternion, s = new j.Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)), v = new j.Quaternion, e(), window.addEventListener("orientationchange", e, y), window.addEventListener("deviceorientation", g, y), c())
        }
        function c() {
            if (u && !(l === m || q === m)) {
                u = y;
                var a = j.degToRad * q;
                v.yea(j.degToRad * l.beta, j.degToRad * l.alpha,  - (j.degToRad * l.gamma));
                v.multiply(s);
                v.multiply(t.setFromAxisAngle(o, -a));
                w || (x++, 5 <= x && (w = n, k.trigger(new f(d.Lb))));
                k.trigger(new f(d.aa))
            }
        }
        function e() {
            q = window.orientation || 0;
            u = n;
            c()
        }
        function g(a) {
            l = a;
            u = n;
            c()
        }
        var d = a("ll"),
        f = a("bZ"),
        h = a("eO"),
        j = a("kD"),
        p = y,
        k = new h,
        l,
        q,
        o,
        t,
        s,
        v,
        u,
        w = y,
        x = 0;
        b.prototype.Fn = function () {
            c();
            return v
        };
        b.prototype.bind = function () {
            k.bind.apply(k, arguments)
        };
        b.prototype.unbind = function () {
            k.unbind.apply(k, arguments)
        };
        b.prototype.stop = function () {
            window.removeEventListener("orientationchange", e, y);
            window.removeEventListener("deviceorientation", g, y)
        };
        return b
    });
    define("gO", "require,ll,bZ,eO,r,kD".split(","), function (a) {
        function b(a) {
            this.Rwa = a;
            this.iY = new g;
            this.mM = new g;
            this.zZ = new g;
            this.Ov = new p.Quaternion;
            this.yZ = new p.Quaternion;
            this.kba = new p.Quaternion;
            this.kda = y;
            this.pM = new p.Vector3;
            this.mZ = new p.Vector3;
            this.Zva = new p.Quaternion
        }
        function c() {
            this.Cda = y;
            this.Bda = 0;
            this.NE = new p.Vector3;
            this.JM = new p.Vector3;
            this.filter = new b(l);
            this.uxa = new e(q);
            this.Ez = o.Ez();
            this.Fj = o.Fj();
            o.vY();
            this.gZ = o.zwa();
            this.rM = new p.Quaternion;
            o.Fj() ? this.rM.setFromAxisAngle(new p.Vector3(1,
                    0, 0), Math.PI / 2) : this.rM.setFromAxisAngle(new p.Vector3(1, 0, 0), -Math.PI / 2);
            this.YY = new p.Quaternion;
            this.bA = new p.Quaternion;
            this.jxa = new p.Quaternion;
            this.jxa.setFromAxisAngle(new p.Vector3(0, 0, 1), -window.orientation * Math.PI / 180);
            this.Lea();
            o.Ewa() && this.rM.multiply(this.YY);
            this.eea = new p.Quaternion;
            this.Ez = o.Ez();
            this.Fj = o.Fj();
            this.ywa = o.vY() >= 66;
            this.fw = this.fw.bind(this);
            this.zF = this.zF.bind(this);
            this.yF = this.yF.bind(this);
            screen && screen.orientation && screen.orientation.addEventListener ? screen.orientation.addEventListener("change",
                this.fw) : window.addEventListener("orientationchange", this.fw);
            this.gZ ? window.addEventListener("deviceorientation", this.zF) : window.addEventListener("devicemotion", this.yF)
        }
        function e(a) {
            this.vxa = a;
            this.jN = new p.Quaternion;
            this.Pz = r;
            this.Iba = new p.Quaternion;
            this.BF = new p.Quaternion
        }
        function g(a, b) {
            this.set(a, b)
        }
        var d = a("ll"),
        f = a("bZ"),
        h = a("eO"),
        j = a("r"),
        p = a("kD"),
        k = new h,
        l = 0.98,
        q = 0.04;
        b.prototype.Yta = function (a, b) {
            this.iY.set(a, b)
        };
        b.prototype.bua = function (a, b) {
            this.mM.set(a, b);
            o.Owa(b - this.zZ.GN) &&
            this.Txa();
            this.zZ.copy(this.mM)
        };
        b.prototype.Txa = function () {
            if (this.kda) {
                var a = this.$va(this.mM.sample, this.mM.GN - this.zZ.GN);
                this.Zva.multiply(a);
                this.Ov.copy(this.yZ);
                this.Ov.multiply(a);
                a = new p.Quaternion;
                a.copy(this.Ov);
                a.inverse();
                this.pM.set(0, 0, -1);
                this.pM.applyQuaternion(a);
                this.pM.normalize();
                this.mZ.copy(this.iY.sample);
                this.mZ.normalize();
                a = new p.Quaternion;
                a.zea(this.pM, this.mZ);
                a.inverse();
                var b = new p.Quaternion;
                b.copy(this.Ov);
                b.multiply(a);
                this.Ov.tza(b, 1 - this.Rwa);
                this.yZ.copy(this.Ov)
            } else {
                this.kba =
                    this.Xta(this.iY.sample);
                this.yZ.copy(this.kba);
                this.kda = n
            }
        };
        b.prototype.Fn = Q("Ov");
        b.prototype.Xta = function (a) {
            var b = new p.Vector3;
            b.copy(a);
            b.normalize();
            a = new p.Quaternion;
            a.zea(new p.Vector3(0, 0, -1), b);
            a.inverse();
            return a
        };
        b.prototype.$va = function (a, b) {
            var d = new p.Quaternion,
            c = new p.Vector3;
            c.copy(a);
            c.normalize();
            d.setFromAxisAngle(c, a.length() * b);
            return d
        };
        c.prototype.stop = function () {
            screen && screen.orientation && screen.orientation.addEventListener && screen.orientation.removeEventListener("change",
                this.fw);
            window.removeEventListener("orientationchange", this.fw);
            window.removeEventListener("deviceorientation", this.zF);
            window.removeEventListener("devicemotion", this.yF)
        };
        c.prototype.Ks = R(r);
        c.prototype.Fn = function () {
            var a = m;
            if (this.gZ && this.RH) {
                this.Kba = this.Kba || function () {
                    var a = (new p.Quaternion).setFromAxisAngle(new p.Vector3(0, 0, -1), 0),
                    b = new p.Quaternion;
                    this.PK == "landscape-secondary" ? b.setFromAxisAngle(new p.Vector3(0, 1, 0), Math.PI / -2) : b.setFromAxisAngle(new p.Vector3(0, 1, 0), Math.PI / 2);
                    return a.multiply(b)
                }
                ();
                this.Jba = this.Jba || function () {
                    var a = new p.Quaternion;
                    a.setFromAxisAngle(new p.Vector3(1, 0, 0), -Math.PI / 2);
                    return a
                }
                ();
                var a = this.RH,
                b = new p.Quaternion;
                b.copy(a);
                b.multiply(this.Jba);
                b.multiply(this.eea);
                b.multiply(this.bA);
                b.Fda(this.Kba, b);
                if (this.YBa) {
                    b.x = 0;
                    b.z = 0;
                    b.normalize()
                }
                this.gN[0] = b.x;
                this.gN[1] = b.y;
                this.gN[2] = b.z;
                this.gN[3] = b.w;
                return this.gN
            }
            a = this.uxa.Ova(this.filter.Fn(), this.JM, this.Pz);
            b = new p.Quaternion;
            b.copy(this.rM);
            b.multiply(this.eea);
            b.multiply(a);
            b.multiply(this.bA);
            return b
        };
        c.prototype.zF = function (a) {
            this.RH = this.RH || new p.Quaternion;
            var b = a.alpha,
            d = a.TAa,
            a = a.iBa,
            b = (b || 0) * Math.PI / 180,
            d = (d || 0) * Math.PI / 180,
            a = (a || 0) * Math.PI / 180;
            this.RH.yea(d, b, -a)
        };
        c.prototype.yF = function (a) {
            var b = a.rotationRate;
            if (b) {
                var c = a.accelerationIncludingGravity,
                a = a.timeStamp / 1E3;
                this.Ez && (a = a / 1E3);
                var e = a - this.Pz;
                if (e <= o.l0 || e > o.j0)
                    this.Pz = a;
                else {
                    this.NE.set(-c.x, -c.y, -c.z);
                    this.JM.set(b.alpha, b.beta, b.gamma);
                    (this.Fj || this.Ez || this.ywa) && this.JM.Gda(Math.PI / 180);
                    this.filter.Yta(this.NE, a);
                    this.filter.bua(this.JM,
                        a);
                    this.Pz = a;
                    if (!this.Cda) {
                        this.Bda++;
                        if (this.Bda >= 5) {
                            this.Cda = n;
                            k.trigger(new f(d.Lb))
                        }
                    }
                    this.PK != this.Uba() && this.fw();
                    k.trigger(new f(d.aa))
                }
            } else {
                this.gZ = n;
                window.addEventListener("deviceorientation", this.zF);
                window.removeEventListener("devicemotion", this.yF)
            }
        };
        c.prototype.bind = function () {
            k.bind.apply(k, arguments)
        };
        c.prototype.unbind = function () {
            k.unbind.apply(k, arguments)
        };
        c.prototype.fw = function () {
            this.Lea();
            k.trigger(new f(d.aa))
        };
        c.prototype.Lea = function () {
            this.bA.set(0, 0, 0, 1);
            this.PK = this.Uba();
            switch (this.PK) {
            case "landscape-primary":
                this.bA.setFromAxisAngle(new p.Vector3(0, 0, 1), -Math.PI / 2);
                break;
            case "landscape-secondary":
                this.bA.setFromAxisAngle(new p.Vector3(0, 0, 1), Math.PI / 2)
            }
            this.YY.copy(this.bA);
            this.YY.inverse()
        };
        c.prototype.Uba = function () {
            var a = screen.orientation && screen.orientation.type;
            if (!a)
                switch (window.orientation) {
                case 0:
                    a = "portrait-primary";
                    break;
                case 90:
                    a = "landscape-primary";
                    break;
                case -90:
                    a = "landscape-secondary";
                    break;
                case 180:
                    a = "portrait-secondary"
                }
            a == "landscape-primary" &&
            (this.NE.z > 4.9 || this.NE.z < -4.9 ? a = this.PK || a : this.NE.x > 0 && (a = "landscape-secondary"));
            return a
        };
        e.prototype.Ova = function (a, b, d) {
            if (!this.Pz) {
                this.jN.copy(a);
                this.Pz = d;
                return a
            }
            d = new p.Vector3;
            d.copy(b);
            d.normalize();
            b = b.length();
            if (b < p.degToRad * 20) {
                this.BF.copy(a);
                this.jN.copy(a);
                return this.BF
            }
            this.Iba.setFromAxisAngle(d, b * this.vxa);
            this.BF.copy(this.jN);
            this.BF.multiply(this.Iba);
            this.jN.copy(a);
            return this.BF
        };
        g.prototype.set = function (a, b) {
            this.sample = a;
            this.GN = b
        };
        g.prototype.copy = function (a) {
            this.set(a.sample,
                a.GN)
        };
        var o = {
            l0: 0.001,
            j0: 1,
            Owa: function (a) {
                return isNaN(a) || a <= o.l0 || a > o.j0 ? y : n
            }
        };
        o.Fj = function () {
            var a = /iPad|iPhone|iPod/.test(navigator.platform);
            return function () {
                return a
            }
        }
        ();
        o.uBa = function () {
            var a = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
            return function () {
                return a
            }
        }
        ();
        o.Ez = function () {
            var a = navigator.userAgent.indexOf("Firefox") !== -1 && navigator.userAgent.indexOf("Android") !== -1;
            return function () {
                return a
            }
        }
        ();
        o.vY = function () {
            var a = navigator.userAgent.match(/.*Chrome\/([0-9]+)/),
            b = a ? parseInt(a[1], 10) : r;
            return function () {
                return b
            }
        }
        ();
        o.zwa = function () {
            var a = y;
            if (o.vY() === 65) {
                var b = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/);
                if (b)
                    var b = b[1].split("."), d = b[3], a = parseInt(b[2], 10) === 3325 && parseInt(d, 10) < 148
            } else
                "getVRDisplays" in navigator && j.browser() == j.Ii && j.aF() && j.Uc() == j.lG && (a = n);
            return function () {
                return a
            }
        }
        ();
        o.Ewa = function () {
            return window.orientation == 90 || window.orientation == -90
        };
        return c
    });
    define("fT", "require,fg,ll,bZ,eO,ku,r,ef,gO,jt".split(","), function (a) {
        function b() {
            function a() {
                q = n;
                k.trigger(new e(c.aa))
            }
            function b() {
                var f;
                s && (d || !l) ? f = t : l && (f = g);
                if (o != f) {
                    if (o) {
                        o.unbind(c.aa, a);
                        o.stop()
                    }
                    if (o = f) {
                        o.bind(c.aa, a, this, n);
                        a()
                    }
                }
            }
            var d = f.Rd() == f.Lh || p.zg("debug") && p.Jn("sensor") == "deviceorientation",
            g = new j,
            l = y;
            g.bind(c.Lb, function () {
                l = n;
                b()
            }, this, n);
            var t = new h,
            s = y;
            t.bind(c.Lb, function () {
                s = n;
                b()
            }, this, n)
        }
        a("fg");
        var c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("ku"),
        f = a("r"),
        h = a("ef"),
        j = a("gO"),
        p = a("jt"),
        k = new g,
        l = {},
        q = y,
        o,
        t = [],
        s = y,
        v = y;
        l.DZ = function (a) {
            a && t.push(a);
            if (l.disabled) {
                if (f.Rd() == f.Lh && window.DeviceMotionEvent && DeviceMotionEvent.requestPermission) {
                    DeviceOrientationEvent.requestPermission().then(function (a) {
                        if (a === "granted") {
                            v = n;
                            d()
                        }
                    })["catch"](D());
                    DeviceMotionEvent.requestPermission().then(function (a) {
                        if (a === "granted") {
                            s = n;
                            d()
                        }
                    })["catch"](D());
                    var d = function () {
                        if (l.disabled && s && v) {
                            l.disabled = y;
                            for (b(); t.length; )
                                t.pop()()
                        }
                    };
                    d()
                }
            } else
                for (; t.length; )
                    t.pop()()
        };
        l.bind = function (a,
            b) {
            k.bind(c.aa, a, b)
        };
        l.unbind = function (a, b) {
            k.unbind(c.aa, a, b)
        };
        l.ixa = function () {
            return q
        };
        l.Fn = function () {
            q = y;
            if (o) {
                var a = o.Fn(),
                a = d.q_(a);
                return {
                    yaw: a.ma,
                    pitch: a.pitch,
                    roll: a.md
                }
            }
            return {
                yaw: 0,
                pitch: 0,
                roll: 0
            }
        };
        if (f.Rd() == f.oP || f.Rd() == f.Ufa) {
            l.available = y;
            l.disabled = y
        } else if (f.Rd() == f.z_ && f.browser() == f.Ii && window.location.protocol != "https:" && window.location.hostname != "localhost") {
            l.available = n;
            l.disabled = n
        } else if (f.Rd() == f.Lh) {
            l.available = n;
            l.disabled = n;
            if (!window.DeviceMotionEvent || !DeviceMotionEvent.requestPermission) {
                var u =
                function () {
                    window.removeEventListener("deviceorientation", u, y);
                    l.disabled = y;
                    b()
                };
                window.addEventListener("deviceorientation", u, y)
            } else
                l.DZ()
        } else {
            l.available = window.DeviceMotionEvent != m;
            l.disabled = y
        }
        l.available && !l.disabled && b();
        return l
    });
    define("jL", ["require"], function () {
        return {
            vAa: "single",
            FRONT: "front",
            qa: "left",
            BACK: "back",
            Na: "right",
            nb: "top",
            mb: "bottom"
        }
    });
    define("gW", ["require", "jL"], function (a) {
        var a = a("jL"),
        b = {},
        c = Math.PI / 180,
        e = new THREE.Matrix4;
        new THREE.Matrix4;
        var g = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
        b.Ld = Math.pow(10, 3);
        b.$N = 0.5 * b.Ld;
        b.oga = b.Ld;
        b.b1 = [a.FRONT, a.Na, a.BACK, a.qa, a.nb, a.mb];
        b.Dba = function (a, c) {
            for (var e = b.Ld, j = b.$N, g = a * c, k = this.vo(), l = [], q = 0, o = 6 * g; q < o; q++)
                l.push(q);
            var q = [],
            t = g;
            q.push(this.$w(k, a, c, -j, +j, -j, +e, 0, -e, 0, l.slice(0, t)));
            o = t;
            t += g;
            q.push(this.$w(k,
                    a, c, +j, +j, -j, 0, +e, -e, 0, l.slice(o, t)));
            o = t;
            t += g;
            q.push(this.$w(k, a, c, +j, +j, +j, -e, 0, -e, 0, l.slice(o, t)));
            o = t;
            t += g;
            q.push(this.$w(k, a, c, -j, +j, +j, 0, -e, -e, 0, l.slice(o, t)));
            o = t;
            t += g;
            q.push(this.$w(k, a, c, -j, +j, +j, +e, 0, 0, -e, l.slice(o, t)));
            o = t;
            q.push(this.$w(k, a, c, -j, -j, -j, +e, 0, 0, +e, l.slice(o, t + g)));
            k.mergeVertices();
            k.computeFaceNormals();
            k.userData.type = "cube";
            k.userData.Tca = a;
            k.userData.jfa = c;
            k.userData.qxa = q;
            return b.dE(k)
        };
        b.oz = function () {
            var a = this.vo();
            this.j2(a, -0.5, 0.5, 0, 1, 0, 0, 0, -1, 0, 0);
            a.mergeVertices();
            a.computeFaceNormals();
            a.userData.type = "plane";
            return b.dE(a)
        };
        b.Cba = function (a, c, e, j, g, k, l, q, o, t, s, v) {
            var u = this.vo();
            u.vertices.push(new THREE.Vector3(a, c, e));
            u.vertices.push(new THREE.Vector3(j, g, k));
            u.vertices.push(new THREE.Vector3(l, q, o));
            u.vertices.push(new THREE.Vector3(t, s, v));
            u.faces.push(new THREE.Face3(0, 2, 1, r, r, 0));
            u.faceVertexUvs[0].push([new THREE.Vector2(0, 1), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1)]);
            u.faces.push(new THREE.Face3(0, 3, 2, r, r, 0));
            u.faceVertexUvs[0].push([new THREE.Vector2(0,
                        1), new THREE.Vector2(0, 0), new THREE.Vector2(1, 0)]);
            u.mergeVertices();
            u.computeFaceNormals();
            u.userData.type = "quad";
            return b.dE(u)
        };
        b.Kea = function (a, c, e, j, g) {
            var a = b.HW(a),
            k = a.faceVertexUvs[0][0];
            k[0].x = c;
            k[0].y = e + g;
            k[1].x = c;
            k[1].y = e;
            k[2].x = c + j;
            k[2].y = e;
            k = a.faceVertexUvs[0][1];
            k[0].x = c;
            k[0].y = e + g;
            k[1].x = c + j;
            k[1].y = e;
            k[2].x = c + j;
            k[2].y = e + g;
            a.uvsNeedUpdate = n;
            return b.dE(a, n)
        };
        b.Np = function () {
            return b.$N
        };
        b.IY = function (a, b) {
            return 2 * a * Math.tan(0.5 * b * c)
        };
        b.JY = function (a, b) {
            return 2 * a * Math.tan(0.5 * b * c)
        };
        b.Uv = function (a) {
            return Math.max(Math.min(3.539647 * a - 6.669366 * a * a + 4.7454 * a * a * a, b.$N), 0.1)
        };
        b.vo = function () {
            var a = new THREE.Geometry;
            a.userData = {};
            return a
        };
        b.dE = function (a, b) {
            if (a.isBufferGeometry)
                return a;
            if (a.isGeometry) {
                if (!a.userData.sba || b) {
                    var c = a.toBufferGeometry();
                    (c.userData = {}).geometry = a;
                    a.userData.sba = c
                }
                return a.userData.sba
            }
            return r
        };
        b.HW = function (a) {
            return a.isGeometry ? a : a.isBufferGeometry && a.userData && a.userData.geometry ? a.userData.geometry : r
        };
        b.$w = function (a, b, c, e, g, k, l, q, o, t, s) {
            for (var v = {}, u = 0, w = 0; w < c; w++) {
                v[w] = {};
                for (var x = 0; x < b; x++)
                    this.j2(a, e + l * x / b + 0 * w / c, g + 0 * x / b + o * w / c, k + q * x / b + t * w / c, l / b, 0 / b, q / b, 0 / c, o / c, t / c, s[u]), v[w][x] = a.faces.slice(a.faces.length - 2, a.faces.length), u += 1
            }
            return v
        };
        b.nBa = function (a, b, c) {
            b = 0.5 * b / Math.tan(0.5 * c);
            e.copy(a);
            a = g[0];
            a.x = 0;
            a.y = 0;
            a.z = 0;
            a.applyMatrix4(e);
            var c = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z),
            j = b / a.z,
            p = g[1];
            p.x = a.x * j;
            p.y = a.y * j;
            p.z = b;
            return c / Math.sqrt(p.x * p.x + p.y * p.y + p.z * p.z)
        };
        b.Fva = function (a, c, h) {
            a = b.HW(a);
            e.copy(c.matrixWorldInverse).multiply(h);
            switch (a.userData.type) {
            case "cube":
                return b.cma(a,
                    e, c.projectionMatrix);
            default:
                return b.dma(a)
            }
        };
        b.Bva = function (a, c, e) {
            a = b.HW(a);
            switch (a.userData.type) {
            case "plane":
                return b.Kla(a, c, e);
            case "quad":
                return b.V4(a, 1, c, e) || b.V4(a, 0, c, e);
            default:
                return r
            }
        };
        b.j2 = function (a, b, c, e, g, k, l, q, o, t, s) {
            var v = a.vertices.length;
            a.vertices.push(new THREE.Vector3(b, c, e));
            a.vertices.push(new THREE.Vector3(b + q, c + o, e + t));
            a.vertices.push(new THREE.Vector3(b + g + q, c + k + o, e + l + t));
            a.vertices.push(new THREE.Vector3(b + g, c + k, e + l));
            a.faces.push(new THREE.Face3(v, v + 1, v + 2, r, r, s));
            a.faceVertexUvs[0].push([new THREE.Vector2(0, 1), new THREE.Vector2(0, 0), new THREE.Vector2(1, 0)]);
            a.faces.push(new THREE.Face3(v, v + 2, v + 3, r, r, s));
            a.faceVertexUvs[0].push([new THREE.Vector2(0, 1), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1)])
        };
        b.Kla = function (a, b, c) {
            var e = a.faces[0],
            p = a.faces[1],
            k = g[0],
            l = g[1],
            q = g[2];
            k.copy(a.vertices[e.a]).applyMatrix4(b);
            l.copy(a.vertices[p.c]).applyMatrix4(b);
            q.copy(a.vertices[e.b]).applyMatrix4(b);
            var b = l.x - k.x,
            p = l.y - k.y,
            o = l.z - k.z,
            l = q.x - k.x,
            t = q.y - k.y,
            q = q.z - k.z,
            s = p *
                q - o * t,
            v = o * l - b * q,
            u = b * t - p * l,
            w = c.direction.x * s + c.direction.y * v + c.direction.z * u;
            if (0 != w && (u =  - (s * (c.origin.x - k.x) + v * (c.origin.y - k.y) + u * (c.origin.z - k.z)) / w, !(0 >= u)))
                return s = c.origin.x + c.direction.x * u - k.x, v = c.origin.y + c.direction.y * u - k.y, k = c.origin.z + c.direction.z * u - k.z, c = (b * s + p * v + o * k) / (b * b + p * p + o * o), k = (l * s + t * v + q * k) / (l * l + t * t + q * q), b = a.faceVertexUvs[0][0][0], p = a.faceVertexUvs[0][1][2], l = a.faceVertexUvs[0][0][1], a = b.x + (p.x - b.x) * c + (l.x - b.x) * k, b = b.y + (p.y - b.y) * c + (l.y - b.y) * k, 0 > c || 1 < c || 0 > k || 1 < k ? m : {
                    dfa: a,
                    gfa: b,
                    materialIndex: e.materialIndex
                }
        };
        b.V4 = function (a, b, c, e) {
            var p = a.faces[b],
            k = g[0],
            l = g[1],
            q = g[2];
            k.copy(a.vertices[p.a]).applyMatrix4(c);
            l.copy(a.vertices[p.b]).applyMatrix4(c);
            q.copy(a.vertices[p.c]).applyMatrix4(c);
            var c = l.x - k.x,
            o = l.y - k.y,
            t = l.z - k.z,
            l = q.x - k.x,
            s = q.y - k.y,
            q = q.z - k.z,
            v = o * q - t * s,
            u = t * l - c * q,
            w = c * s - o * l,
            x = e.direction.x * v + e.direction.y * u + e.direction.z * w;
            if (0 != x && (w =  - (v * (e.origin.x - k.x) + u * (e.origin.y - k.y) + w * (e.origin.z - k.z)) / x, !(0 >= w))) {
                v = e.origin.x + e.direction.x * w - k.x;
                u = e.origin.y + e.direction.y * w - k.y;
                e = e.origin.z + e.direction.z *
                    w - k.z;
                if (0 != (k = s * c - l * o))
                    c = (u * c - v * o) / k, o = (u * l - v * s) / -k;
                else if (0 != (k = q * c - l * t))
                    c = (u * c - v * o) / k, o = (u * l - v * s) / -k;
                else if (0 != (k = q * o - s * t))
                    c = (e * o - u * t) / k, o = (e * s - u * q) / -k;
                else
                    return;
                if (!(0 > o || 1 < o || 0 > c || 1 < c || 1 < o + c))
                    return l = a.faceVertexUvs[0][b][0], s = a.faceVertexUvs[0][b][1], a = a.faceVertexUvs[0][b][2], {
                        dfa: l.x + (s.x - l.x) * o + (a.x - l.x) * c,
                        gfa: l.y + (s.y - l.y) * o + (a.y - l.y) * c,
                        materialIndex: p.materialIndex
                    }
            }
        };
        b.cma = function (a, c, e) {
            var j = Array.prototype.concat.apply([], a.userData.qxa.map(function (j) {
                        return b.j5(c, e, j, a.vertices,
                            0, 0, a.userData.Tca, a.userData.jfa).map(function (a) {
                            return a.materialIndex
                        })
                    }));
            return b.r5(j)
        };
        b.dma = function (a) {
            a = a.faces.map(function (a) {
                return a.materialIndex
            });
            return b.r5(a)
        };
        b.r5 = function (a) {
            var b = {};
            a.forEach(function (a) {
                b[a] = n
            });
            var a = [],
            c;
            for (c in b)
                a.push(c);
            return a
        };
        b.j5 = function (a, c, e, j, g, k, l, q) {
            var o = [];
            if (b.jsa(a, c, j[e[k][g][0].a], j[e[k + q - 1][g][0].b], j[e[k + q - 1][g + l - 1][0].c], j[e[k][g + l - 1][1].c]))
                if (1 == l && 1 == q)
                    o.push(e[k][g][0]);
                else {
                    k = 1 < q ? [k, k + Math.ceil(0.5 * q), k + q] : [k, k + q];
                    g = 1 < l ? [g,
                            g + Math.ceil(0.5 * l), g + l] : [g, g + l];
                    for (l = 1; l < k.length; l++)
                        for (var q = k[l - 1], t = k[l] - q, s = 1; s < g.length; s++)
                            var v = g[s - 1], o = o.concat(b.j5(a, c, e, j, v, q, g[s] - v, t))
                }
            return o
        };
        b.jsa = function (a, b, c, e, p, k) {
            var l = [r, r, r, r, r];
            g[0].copy(c).applyMatrix4(a);
            g[1].copy(e).applyMatrix4(a);
            g[2].copy(p).applyMatrix4(a);
            g[3].copy(k).applyMatrix4(a);
            c = 0;
            e = 4;
            for (a = 0; 4 > a; a++) {
                var p = g[(a + 3) % 4],
                k = g[a],
                q = g[(a + 1) % 4];
                if (0 >= k.z)
                    l[c++] = k;
                else {
                    if (0 >= p.z) {
                        var o = g[e++],
                        t = p.z / (p.z - k.z);
                        o.x = p.x + (k.x - p.x) * t;
                        o.y = p.y + (k.y - p.y) * t;
                        o.z = -1.0E-5;
                        l[c++] = o
                    }
                    0 >= q.z && (o = g[e++], t = k.z / (k.z - q.z), o.x = k.x + (q.x - k.x) * t, o.y = k.y + (q.y - k.y) * t, o.z = -1.0E-5, l[c++] = o)
                }
            }
            if (2 < c) {
                for (a = 0; a < c; a++)
                    l[a].applyMatrix4(b);
                a = 0;
                for (b = c - 2; a < b; a++)
                    if (c = l[a], e = l[a + 1], p = l[a + 2], !(1 < c.x && 1 < e.x && 1 < p.x || -1 > c.x && -1 > e.x && -1 > p.x || 1 < c.y && 1 < e.y && 1 < p.y || -1 > c.y && -1 > e.y && -1 > p.y))
                        return n
            }
            return y
        };
        b.Eba = function (a, e, h, j, g, k, l, q, o) {
            for (var t = a * c, s = 0.5 * -t + 0.5 * Math.PI, v = e * c, u = 0.5 * (Math.PI - v) - h * c, w = 0.5 * b.oga, x = 64 / Math.PI, z = Math.max(2, Math.ceil(t / j * x)), x = Math.max(2, Math.ceil(v / g * x)), C = j * z,
                A = g * x, K = this.vo(), F = 0, J = [], B = 0; B <= A; B++) {
                for (var O = [], N = u + B * v / A, I = 0; I <= C; I++) {
                    var L =  - (s + I * t / C);
                    K.vertices.push(new THREE.Vector3(-w * Math.cos(L) * Math.sin(N), +w * Math.cos(N), +w * Math.sin(L) * Math.sin(N)));
                    O.push(F++)
                }
                J.push(O)
            }
            for (s = t = 0; s < g; s++) {
                v = s * x;
                for (u = 0; u < j; u++) {
                    w = u * z;
                    for (B = 0; B < x; B++) {
                        C = l + (1 - B / x) * o;
                        A = l + (1 - (B + 1) / x) * o;
                        for (I = 0; I < z; I++) {
                            var F = k + I / z * q,
                            O = k + (I + 1) / z * q,
                            N = J[v + B][w + I],
                            L = J[v + B + 1][w + I + 1],
                            G = J[v + B][w + I + 1];
                            K.faces.push(new THREE.Face3(N, J[v + B + 1][w + I], L, r, r, t));
                            K.faceVertexUvs[0].push([new THREE.Vector2(F,
                                        C), new THREE.Vector2(F, A), new THREE.Vector2(O, A)]);
                            K.faces.push(new THREE.Face3(N, L, G, r, r, t));
                            K.faceVertexUvs[0].push([new THREE.Vector2(F, C), new THREE.Vector2(O, A), new THREE.Vector2(O, C)])
                        }
                    }
                    t++
                }
            }
            K.mergeVertices();
            K.computeFaceNormals();
            K.userData.type = "sphere";
            K.userData.bd = a;
            K.userData.um = e;
            K.userData.pitch = h;
            K.userData.Tca = j;
            K.userData.jfa = g;
            return b.dE(K)
        };
        return b
    });
    define("bK", ["require"], function () {
        return {
            Oj: "data:image/png;base64, ",
            Hfa: "data:image/png;base64, ",
            mga: "data:image/png;base64, ",
            pA: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAE4CAMAAADW5D7KAAAAM1BMVEUAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBprCkqAAAAEHRSTlMAQIC/758wECDPYK/fcFCPt8VnWAAABehJREFUeNrt3N2WmzAMRWHABmx+/f5P20672kwSIBYI8MA+110T+sUWQnGSZeQyqZu2C1+xxpiiaPIak7kUNrzFjH2FzPuy8mEupsjxibT6szHbhj35PyZ8jMfrb/oQlXaAKstsiExX3H55DUGQ0t0bqwwBLsXyDpe4ZH3jqsGKj+3ZhoL4ezb2bViX8Y57sVmJFbobLq7artUKxQ3HM6uxgr9dF1F367Xs7bZitX4jhtCjJelQb7cT2w1a/nY9RFV2lHnJ8sq/MhRFa4Tb0t77g406L1qLlmRr9i1akhXWtGhJvPoOLUEGQwchSG7Q0uVqUXpsxo+1awTpUeo/DnMakL51Xp5boiAjRV5S6C0Dm/i45a3IWZvnOr94OsKyEQWFi27rJQ0bUUmrYyMKtGjkJVoOnpcsPPsYdF6z0EHwRYO3eJaWoDu1jB8EQ4j59gGct/R0poIYqpZgBGG5ISpsRAZbkv6BNv49OadzFRp5uoepGk+JV3iipsQLnnosNIKqRRcvqFrsw6m03A+391qcfJhKx1dVNncPjB4kJV7vBZrSh6Pj236XB1y/axPfHA+154/wFDsWraYLZ8aqTwSq3Q6JVD6cHfUvg08/8vjtyyqkEOXF1e5T4cuQRnQfRvpdKnwqVsqnzvI9PmwdQzpRXVs7bPYmpBTNuuXVV6+zSWFpTn5L9Qcek5aV5hCl0H6BIaQWvbnAoN07dMlh2b1vh+ozsjOjdpDKKX8uXSaI5XfuHVbfQmyCWHpHEnSxUtyFivtQF6tIEmt1G18Vz5n588//qI8dpbVJYplj33obue1NklhBddepreQOrPiVHC6Ftfat709pRGZuufPpVbFW/vRdmSWEddwDySqtMrsn1hqtMrsrllyrzO6LJdWS9L/Xw5JpiZ4VLogl0ZI9V10RK15L+Ax6SaxYLenz+jWx4rTEs42LYsVoyedAV8X6rLViZnZZrE9aa+aL18Va1lo1i70w1pLWurn1lbHmtVbO+C+NNae19vOQa2NNa63+7OjiWFNa64/LXR3rXWvD0cLLY71qbTmGeX2sZ61NR1ZvgPVda9vx3jtgPbQ2HoW+BdY/ra3Hxu+B9Vdr8xH7m2BlrjTbz/XeBUslYIEFFlhggQUWWGCBBRZYYIEFFlhggQUWWGCBBRZYYIEFFlhggQUWWGCBBRZYYIEFFlhggQUWWGCBBRZYYIEFFlhgCbAqc1DGYnA/HevQ367vRgeWICYHS8LlwIqPbcBa+auvYAm0wBJogfU5I1iCDGAJ7ok1WOKNCFZUHFjSOyJYgqoFVlwasIT7EKzI8RZYgtRgxScHS/bIA1Zkih+G5YpD0l0C66AYsMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssJIIWGCBBRZYYIEFFlhggbUnli/yOqvz3oP1kerxLJkbsBYzPr1WD9ZCmpcXa8CKXFdKa+uiWD765cCanBM6sCbTTb5eC9bc33hPA1b8tN6BNRU3/YJgCf5XYE2lPhArP/PR/gvL/qCadSpWr9A/Hnk3HM7EyhWw/C59lpn8q8WZWJXGBezSwZfpYaksbbNHA9/v81ywdQfVQf8/tn1G4wT39GMyKr1dr/Osyqq8jfr9yNaSpXKLeV5bjQ377MLq7F34O932P2Ue28YpFBZb79OPKOwelWtom6916hqVGjzdu2XleVaPQZQPaWVmYWlsgbUZkqgFy1eWSslqU2n2IhvSLBsTWeplQlZ+bnJy2i601fOFpFO2fC071nxCWajb1K1OW/12SKkiPNWrWSt30hV11eSwyJ5OZZv5We9JN6F25t2ri2SX1e+LO+Wt9AvfNKmL8/o+O7qlDxHOqBLtpy/l5OMZcxA/DsuXdXjF6trGRX0U5PJj45K7pMmi/gv70+gtsjuKIwAAAABJRU5ErkJggg==",
            rga: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAADcCAMAAADA8VqlAAAAM1BMVEUAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBprCkqAAAAEHRSTlMAQL8QgO/fn89gMHAgUI+vkrzZGQAAB8pJREFUeNrtXduW2yAM5H63zf9/bdukjdYBjI0t4KHz1Obsnp0INJKQjMl//MeM4I7MDaM4mRk6xo1MDB9/Q5BpYeMLlEwKJ98E5aTbMMj4F4bMCG7iByuZEFv8gYVMBx1/Qk6n1zbuYSZzFBq/oclMcDIm8GQecBUzmGgbmpjDPGmDjnkwMgdElt08aYPNcpsnbXDxADKQ0Qgyy2yatIHnHXietIHFGixpALLAzJM2OPZBBMyZNnzb7SUw9IUpCa5kNsybKGQJSjIb6JxpAoDOmCUcEKT5sLgIT8kApASzP8Le23OMdWktReB6rHLTSkXHzeDYQisF3fZmtrJRMk6PfWT5hL/wMmUgvRF2BJMlVFDkcTmmqt/VmxkDglkt/ERPHMYR/dNoHGzcE4epjNodyJkh5d6RE/O9dushsVAdODHda7cY4CVQPYGIFBnRIekOO4jEsKYgSaQ39IHKsK9lH+LGoqQy4LZD3RgIQrOuaDE24vyVHqTT33tONOhMV4J2hBtzIGiPCIIu9gYQpDWCfIjOmDJBCZV88kE/MCBY00HCRnTzBASSKsF1hBv7CwQ9qGU/0DLB7du16YikmmcJgjCPd+M6QYAaEY3ZBYLbCC9ZswQhtA33Ep8czJRTaNr/kBPcmJUJAj6VgVvZq1clmUCPLUWCLlUV9laeRe0KfkvwAIWdylNPN6zmW9JTQbQiDM4cE4TDEGU6d878IcFQkHVmX1ZznqF3WCgQrARjyM7Uj48Dw55nuUJwzZ21euR5FlYiuKWba8mWLxZ38EskBMtlHIcKNWEoN+EpRqhe4Hy1SpCYUlgEmKfFmycp/0HoXWE1088Bag2Pb0JajXVgbn1ijEnz5zbhBYK8FHZCOlVgn1VCm/+beUu5oq/JQP329KyfLLQ6cwRFSfS4gpNkLuSjzSl9QDBkzc3Kw1bqTXd9kqEFcTsOJRB4eCEvgr1C5XOrzMEodYKsGDbsPrMM5rkmOUs8s9x5EOXsRe5HM7iE/92Er8Y6gIOdlucOy+rk26CO0ps0Q5mgLtgpHPQmA3xxgNKUtMNUlDpNwe1Bdi4KU2ys3Y6+SNAUUnB9kHfI4qC2vbPGPu/dheFNVpL8PQ/21PAVOw4lqd7Jo9xSJSYU3N4rDSwQ/KLiCu0pkoWQ0WhP03alg73RBC6PQ0kqyPRa0cg+v+hb4zHLe6UvqMly+pvDvqSy3VMoEKw2l9SVbM/+HK2zN8ZPFasoNcCLJVyoef6YzXgOdNseFxDgek83sSkNez/f2qQQ/o15bL41O0ruayEcm3PVOoyfc0uMgSgKi3wfDONcXzz2xAUI4fOLbEgz8Lvsy63Epkfjgd1UB/RpHnrThPjTPOzeF8ef5qE3HRl/msc8VdQzpB6DfS3NtDrzt3oR8+oMIeKG0mBP84A+2Hl1hhDdrDT4+QwoTZg0n3lB3anjewz/+nv9e/zhXy4fcZNlt5cndBOHN0jhXm4ya7rwLyCv06YLjW5C/eKQyxIAvxxN3PvoTwcCEMk6POsm20XHf4OFshsPjCY+AgSyG0M08dfCmmHQqiy58ZCkC+IutwoY4rkxJEvuemLgX5vRF914gBQCQWhiSY7pxlCbyIsEIQwJVDcGKVxacj/xMiGmG8MG0i1hF5Kh1I0HrDEQ3Km8QnVjqD+XiwRBASimG4Mh9PnAo/Y7csN0YwilsumsbXntPVQ3hjVuKD8gUKZuPGiNoYCDgTGTbUaMWGPw1r2bBPwZ/rpWp08QA2OPcQaXavV60tQqyQ8Z4hlc/eHvdIo7rQs5+kMGvJpzgdPazEf4T+6aeiQAc6W1P7bOwFaqq6DJkbbIOgO2qedaPveh5LgE4XH/uhq5bF1ocBMuCCZ1V8q7dtQIp5ipwrWdlnODfKUeWCe0tQ2dxCUIQmPbCBKHQLAeJK4MeNjqLbf4m/A4p/K4V0rBJmzWIo1KEDZhe4FqotSOYGKtp1z24M7s4AgylnpPkN9skOL3BPW4a8fPlRWhcWSp3wjR2i53fVpuXLUOH/bqnNPO95Ndf4BeD7wJWJ7501y2jTr0G4BZWoJa10E71vUSuobrbILsc+1N+0CvH3ZV8dm1M2MiHmRc04rhenZz6QY/6TrCwEf5iTp7FuwHxRN/ever7hdYwdL59iFdfKynDcPG5F3htHvSQa8qMadXTo9Z5PW0XbhsYdhzko02HHfgF5/pkRHr7ClA8CxDeahLQwkSK6s3Bo0lSJyJL5hi2BtKEO4iwLdi++VtjjVQ7Dv3Tj8UBbJHg1C3UpQ6EERAqGunGNlCMphgLNjp5KobBOg7eWhY4dWFNtmNUzzBwb2Ci4P3HKd52o7q+AHzgbww1/OK3BvgqPTynCHDYydrblURoLR1jwQRA7XkUxwBRt/ek/rpAw0nTNxhs/f4IZS6fFl3JNVygx/WkRVfBJNgRX6HnyNYCFarGy9Z4Qz44WFhrQydAX6ooKrpXU9eAj9k8IZ7rALDvIc0ZXjVF4XsW92GayZcVPc3bK0X4illsX158Z8PsSo2mw9/VhGyXxZIX4i60nALJQ4lveEqSRO3WxxBD6AOVNd5Fj/QjgzBkv/rYZdUROU5GQX9bwGZ+AvN9qmjXMcYDxgeQenxL4u3ssSO+TlevAmuCmDaz/DeZoCji/gLP8t7Xv/jP87hF6zG3Qlg7TIVAAAAAElFTkSuQmCC",
            YN: "data:image/png;base64, ",
            vt: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAAB0CAMAAACBmP1sAAAAmVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRkZHz8/M8PDzLy8ufn5/u7u4UFBT8/PxmZmbz8/NNTU07Ozuvr6/i4uJwcHDm5uZfX1/o6Oi8vLy9vb2AgIAoKCj29vbT09OsrKzZ2dkoKCiGhoagoKDb29vJycnQ0NDHx8f4+Pj///9ot3XMAAAAMnRSTlOyALYLBLrAvRUiGsMxKS004vxC8WfNyPNP2tLP6rXa+NbBgu3eyeibdvTMWuWojp2P5xSTSb8AAAbBSURBVGje5NfrUuJAEAVg1l0SNTEJAUK4KRdRvLu8/8NtTyeHw5CKEwzln21rt7RK+ep09wyh8+vn62TzT7Ucf9HKpPIb5YBbmrAqRfu85oF3ab5Q+sOhex6TILDr60v5ksL/aoNtZ1IEqMTVcRFG2HZmCZqA4G6OC7CyTdSOSwRYcFEUSr0MUHloKipgYRH22yZEyaCe0d7fhqPdYf0dvq3yWN2mascRsoxowPx9Sc6u0XyVxsJqWHT4dJOigun7GECvv05Q/f7eXZYs1cYmSYrxYF5y62SSBYHHCoLNIukjbV6oQJubDFmK26G+5N3rdM/5RcENFrNeEXYgKqICdZkkNaTJqGJvZkBqfrfbxbclu1Z1KFkdUWHaJEKGca7i3W1mQLUqtWefEw37lsbRjUQF6jRJasiPkYoaEeCFVXvXqJmqoy2iAnWZIG+iOB+briYiAqRlu1RfdaxpGBF1mhil9HVlQq4ziAA7VlmsUadmix9epL9Aa02mBDk3IRcmJEVaVXev3puoqzgk+oVJMgpTszz9IiTB2rLU6ZP87ZzoVybJODWj1ElqRogutkSzmUHTGrRTT/ZkXRESYkM1CBJBx4rqkak3i40FOUVfm4ryj+gtUY6Upr2ysj4kbbF5VM9TdBlHV0Atk51tR1IlOheUI62aIOPlEXnRAn3kSGmSxP58yK9OQLoAJ7qtjBQmOxsP5BdvSX5LBSpHZpRLdxWtmvthyoU3I/ktkahcDsOYQWlax0SG+RQErVIyabDpcaQVE53d6v4wZZukvqALmVSuuytBaZK8CtOH3e5eSL9NSiySdnct3WXQqqk7+6TDxLlsjWbS3a1ZIwbtYGk1Zq7HpG1n7ZHey7spgtJkzLns7JlIjvRO3kytiXYQU0yNufE8DvMs3Z3IBwwEhcmlrYnZtrt9K6hlRumIMVntg8p5GTOoMbFBN+GnienY2Qutk4LqRAeRbWKDxrK0jpjFA15ztQgqqzuXoDguNMMXeXrGNOtfYuHz2cEplkEzuepjBu2wtW9yBTlj+rv+ptmaMaheRtuwakbxg2yQ49XkBeQ4vWZUnUGxRWyumBhnrtceYtaZnn5Iuw+wa46ymlsxw5U8z3ou01dTBj/Brdy4uS8YqJgY59Jsrd91mMGurPUzGtxwcz/DqinjdLZWTVSSuVVculN57sRAxcQlJJ9OvJNMedDHWN3NxZuLZQ5kHz2/kcnqO8aKzdU7N42OzXc5nWiV02TNMFbHQGe8/tTU97FHs0KI6TbZ4CRjg+vNpHxvoSkrNNQbobnJultwrLUndGKe/2BibcX0TjQ5Vjwp1qE0Lw/NcQtTxlo2uNbcFI9/tomjcqLJsQKtGaiYOCznMHEdej9ncqyb7n9g/uvVDloTBoIwDBcPkWI0l0K1pZdSELzU///rOpnk6+u6LmucmL0UCuVh1nTdzHzRvZ3/Gdok5lL/K5iLnglm8v8ZPfua+84+PxM4b597xq/9jG+vv1eW/C7TFezR72zEsqnvbEzuJpvJd5Nmwt2ky+4m3YN3sLLII5Tewbj3dc+/a9pjm5rtedqdGvHeO7Ue24t7/BLvDph8oKcJ70iI9TL7dyQ9Qm7qA+3fBTfPexf0jxPTTyJ/58UMv/NCJlu70Lv95kdbK5PNpYfxMlMPg67UW7sdmzWYhnrr9kSh8cUTdGBrzcxab5jzkENPSoeQTG2u994oNE4OZX7YWasyE3PuHiNleo9RT1DS16RQHt0ZyLGX2tHuw0x7xmvQ8M56z5gyZVKoeuPsbsCkN86niUmhwwwg3hxPZwA3+/EMAYZZB2iwdXuynf1VmZl5NdNZx1D7W2Y6hfkKu6vZVQB1ktmVyKL52vqM7jOEOrkeZ3TpzsoEZRYZQP/H2j6L7MmSCeqTZdBVhPzKB725aegO9MmzZQrt0fdk1LuaXuQ4Q4fMzAzdH3RNp9SpWQHIsglKJkIo6pRMREqWTaF59uMe0YtU9iMjMQuoMi6ViIvALOOSk5gllCwPKm7iIZLlKZOYoASIlFlqXIVlAY4BLTJLkLlZRq3U45DNyqNZrFI2C7Jsgt7MoDVpBs2xYgatnZRBA1WpZO0auYJLWTuyYEbWTVAyhd9kCuVq3cwUWpGQBbOe1kyzk8092UnIukmpqMYGMqKBLGy3P1eysCYGsrCgZH53xna3Mr9Hz/w6iAgZyjb7Hveru8g2d87ttg66SJE1s64qUm2yLddNM848gYjBrDqsu/mqZNWjmXxl5N3uf+IhhkxUZwUny34BiBgwYXF9YeEBxk1YX0BwgLOauKyqFzdZWA+sP5AziIxB81g8AAAAAElFTkSuQmCC",
            iga: 115,
            mAa: 115,
            zga: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAAB1CAMAAABKxC7JAAAAh1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJBMTEwAAADz8/M8PDzLy8ugoKDu7u5wcHA6Ojr8/PxmZmYUFBTz8/Pi4uKvr6+AgIAnJyfo6Oi8vLzm5ua9vb1fX1/S0tL4+PjZ2dmPj4/JycmsrKyGhoafn58UFBTb29v///9i05URAAAALHRSTlO0AL0KwyYRGDMuHuPUyfxC8WbN29DzT8jaterfzMGC+e3XnOf15Y52W+fOqAzih28AAAcuSURBVGje1JWJcqpAEEUJkrxBZHHfUNEY1/n/73s9wzQ31ACiUq/qXVKpklKPp7uncT7+ff4TZs/6s9IJEzT9j5O/ArlrZk9ddQG1OybkvnT+mEsHzt0xWTCn2dFoYN9lAmhw/X7/sxy6Y7igvsYEEUDg7PQZi86+xASx4Pm+L4S4DDkzQfH9HEtcyD7JBJEV+zmPaKf7aCp/53t03yqy5oL6KlMhWZF4s9MGuHKmy21MWFCh+gyTq9rPDePTggFRkgWcJJGcDWF9H9QXmKaPueJwaXBZMJh75aT7IGFbKrKhQrUlE2XVxPNIquyuE0K4VhR4v4py2aGhKtXWnqirIQ41MVoBWIPNNHVErlBtwcS8fhnkTBN343kJ6HBK2DTQsvfYqPYorT11XbXkYaqJUDSo4lIBda6p07MQqG8rJuo6W6iqBgWxoHH4JbDzq26rVtX1bcEEUoitksx0VQGsir7L1EmiNsWlqG8DE71k5FJJ7kGs5sHX4QqvJWUrBKDNTIOkJaCGJzGSUGwIqJMjfXYJaDOzVyBVKwOWBK8Nlbq6UtC4BurUI6MxSyKtqQFBFwqKc1rDLCEnjHyOaqBjQGuY0KTxARLEZwLoRvhcXZuJkS0jQXyuvgxdAlrJZKTYAPlaXEAPQu2Gcksdu5kHeusAli8F0LPdUsdq5pDeOIblW6YrWr4zVNdicjNp4a3etIQpLYeROqVVTFSWmnmE5bumaWRaylAwoXlW8wPLt0331ClTXTBLmiL+lnJtbZ93WppRdSFqMfOZPaKZXYjOI5pdFgUTmjN9TGDZhelaym8WBROaS5rZjiwxuzsptyzKTAyt0kyh2ZHoAKLMxNB2qwnTBKIlptKMp9DsiMjnZcGizOx95Jqnek233VUjSh0dKtGCiQla8NBavLaxqa4Z3aUWNUyU9iLljjXtz7WIxlaJzmnVC78oroMJupsVZFuug7YZu5U/ODN7wTC5nb6gtZdWaLpuItsncCu3LooLz/xwHqu66U7kE4lct7a4YHI7t1IGlcyBfCae1RtT3IvPj1GnaOeGplYj3S6YCC/dk+CGOnw6VTsrJ8h7mQlRj/qzMQ2Fpx9LmVSclPeYEOWdCya1cyjl1SNk9568c2OfmTxCJzqd0Ozcc0Xrj7cCMfPn2IFHqEtPNDTIny1l5ggbodbzOE5v+0SWkw1uk3VUzYQofcmBN5HTA9N74JmFYeiF4aqEHIcqt2OjJ5hf7KmOysIw6z2jW+hRwnD32zLMb04eeKZSjgomH08pkwee19DTCztcS2SgbxI0afb0iCkKzx6YzZ57Zg4kEvLNn3pPMD9RWzCdBs8f/vq9RNK/tJnbTsMwDEDFijTESlXYG1TqyxBi4v+/D9eLdZTaklct9QtlgbnHcRxf7MPPlBOdNSeYnnOUnVvMWDnRV7HtddjA2eWcuKi6i/yODNPtw9+/LZxP+X4CJXJWosv01uvD3C9HRVRu5eSshJxQjeOsD/NVNJXzcRlH0Z5wTtF+fiTn0wQzq68ieRzSs0LsU51TwonMonJpd8GXcMY6LcbnnFa7aeS+i5MYfyTG212WcXJq5C9LcZnfn9xl3CvdkTs74QTTXj/nrO/sjjyB3MS9ZO8xy7sBmnL63ERT6tBx0ekwAU046xyMvI9ccy0upyZeybetQYcovyXXhNMqwdNzwOlqh76adaxAT+6tXU5NHv9C7VCL1Ujfi8hPM4YxnFkMayT1b6sd0EmNBGj9T8jqrXQRoQ6IayTqsrgWRHxhy5JfjMuVH9tOOMW4Yc3rxzcbFzFt2U5q+1dq+/greUgWHSa1faXT9TDaSelKvWNa+iZiXO3VANq0V4PXis69Wm9gak8Kr1WdeO6OvTc6GHCKF+3ZY3T9PryofS9VpoSKiQehU+MfPeMWoAd6xmC6PjW98Rag9MbZTXQSFxrNALCszgDCfjwB8NFZB8Ksg7DndDaZ6UDJTEdDkNdJd7PMrh4edxxEdHaFZcN5GTO6/1btXbVhIIqiKKhNm5RJ4f//yIixLgtxjY9Ho3GVNMtHeWCY/f1Et5WV23FH5xco3EWuociHC9DXd66ueQu9PnKrO1dPltmvs6HXpiJ/kWcTCf1xh35hpDt0pMOEjtJEKzA3tcgvpHypm/5KWxMxM1ITUWRoIqDaD1Mn2w9kaFwKbY1LUHvj4sEG0/+G1vLsryxqeazMXY2AqJolkVS57aNtb5asjCb03GZt2PPrXZuVezBqBWH71FODBg4NGhLazY5eb+20YMRger5HxfinKeTyFptCaGgnab2dHCOFuNHs6shgP2pEpanK1GB21NaPWtgsMnNlXEHs6+b38Wx+d5CIzGafSj3c1jaLm2fa5qxih+wM7gBLRE6aVGNbOn5ww8tgNqkS+R0esqPJJ66bxpZb9NDK20HiomlssWxf1hu70bS2Bjve0v2mn234zs0miTV//gHyyprZmiIc9wAAAABJRU5ErkJggg==",
            Bga: 115,
            AAa: 117
        }
    });
    define("ke", "require,jquery.mod,fg,ll,bZ,eO,r".split(","), function (a) {
        var b = a("jquery.mod"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        a = a("r");
        if (a.Uc() != a.gA) {
            var f = function (a) {
                return a.requestFullscreen || a.msRequestFullscreen || a.mozRequestFullScreen || a.webkitRequestFullscreen
            },
            h = function () {
                return document.exitFullscreen || document.msExitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen
            },
            j = document.createElement("div");
            if (a = !(f(j) || h())) {
                var p;
                try {
                    p = window.self === window.top
                } catch (k) {
                    p =
                        y
                }
                a = !p
            }
            if (a) {
                var l = c.extend(d, function (a) {
                    d.call(this);
                    this.K = a
                }),
                q = n;
                l.UZ = function (a) {
                    q = a == "out_of_frame"
                };
                l.prototype.available = function () {
                    return q
                };
                l.prototype.Fh = function () {
                    this.toggle()
                };
                l.prototype.$d = D();
                l.prototype.toggle = function () {
                    q && window.open(window.self.location.href, "_blank")
                };
                l.prototype.enabled = function () {
                    return l.enabled()
                };
                l.enabled = R(y);
                l.gm = R(r);
                l.$d = D();
                return l
            }
            l = c.extend(d, function (a) {
                d.call(this);
                this.K = a;
                this.ds = f(a);
                this.qQ = h();
                this.W = this.jS();
                var c = this;
                b(document).bind("msfullscreenchange webkitfullscreenchange mozfullscreenchange fullscreenchange",
                    function () {
                    c.wW()
                });
                b(window).bind("resize", function () {
                    c.wW()
                })
            });
            l.UZ = D();
            l.prototype.available = function () {
                return !(!f(this.K || j) && !h())
            };
            l.prototype.Fh = function () {
                this.enabled() || this.toggle()
            };
            l.prototype.$d = function () {
                this.enabled() && this.toggle()
            };
            l.prototype.toggle = function () {
                this.enabled() ? this.qQ.call(document) : this.ds.call(this.K);
                this.wW()
            };
            l.prototype.enabled = function () {
                return this.W && this.jS()
            };
            l.prototype.jS = function () {
                return this.K === l.gm()
            };
            l.prototype.wW = function () {
                var a = this.jS();
                if (this.W != a) {
                    this.W = a;
                    this.trigger(new g(e.aa))
                }
            };
            l.enabled = function () {
                return !!l.gm()
            };
            l.gm = function () {
                return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement
            };
            l.$d = function () {
                l.enabled() && h().call(document)
            }
        } else {
            l = c.extend(d, function (a) {
                d.call(this);
                this.K = a
            });
            l.prototype.available = R(n);
            l.prototype.Fh = function () {
                this.enabled() || this.toggle()
            };
            l.prototype.$d = function () {
                this.enabled() && this.toggle()
            };
            l.prototype.toggle = function () {
                if (this.enabled()) {
                    o();
                    l.dr = r
                } else {
                    l.dr && l.dr.$d();
                    o();
                    var a = t();
                    a.push("fullscreen");
                    s(a);
                    l.dr = this
                }
                this.trigger(new g(e.aa))
            };
            l.prototype.enabled = function () {
                return this == l.dr
            };
            l.enabled = function () {
                return !!l.gm()
            };
            l.gm = function () {
                return l.dr && l.dr.K
            };
            l.$d = function () {
                l.enabled() && l.dr.$d()
            };
            l.UZ = D();
            l.dr = r;
            var o = function () {
                for (var a = t(), b = [], d = 0; d < a.length; d++)
                    a[d] != "fullscreen" && b.push(a[d]);
                s(b)
            },
            t = function () {
                var a = window.location.hash.substring(1);
                return a.length ? a.split("&") : []
            },
            s = function (a) {
                window.location.hash = "#" +
                    (a.length ? a.join("&") : "")
            }
        }
        return l
    });
    define("gL", "require,jquery.mod,fg,lk,r,jt,lC,bK,ke,cJ".split(","), function (a) {
        function b(a, b) {
            this.Qta = a;
            this.kja = b;
            this.uW = [];
            this.Eg = r;
            this.KD = y
        }
        var c = a("jquery.mod"),
        e = a("fg"),
        g = a("lk"),
        d = a("r"),
        f = a("jt"),
        h = a("lC"),
        j = a("bK"),
        p = a("ke"),
        k = a("cJ"),
        l = "color:#000; font-family:Arial, Helvetica, sans-serif;",
        q = "",
        o = "border-color:#b2b2b2;",
        t = o,
        s = "background-color:#009adb; border:none; box-sizing:border-box; color:#fff; cursor:pointer; font-family:Arial, Helvetica, sans-serif; text-align:center;",
        v = "vertical-align:middle; padding:0;",
        u = '<img style="width:33vmin;" src="' + j.Oj + '"/>',
        w = '<img style="width:24vmin;" src="' + j.Oj + '"/>',
        x = '<img style="width:34vmin;" src="' + j.YN + '"/>',
        z = '<img style="width:34vmin;" src="' + j.Hfa + '"/>',
        C = '<img style="width:24vmin;" src="' + j.mga + '"/>';
        if (d.Za()) {
            s = s + " margin:0 1vmin; min-width:20vmin; padding:2.2vmin 4vmin; font-size:3.6vmin; font-weight:bold; min-width:30vmin;";
            l = l + " font-size:3.6vmin; line-height:4.3vmin;";
            q = q + " margin:5vmin 0;";
            o = o + "  margin:5vmin 0;";
            t = t + "  margin:3vmin 0;";
            v = v + " height:4vmin; margin:0 1vmin 0 0; width:4vmin;"
        } else
            s =
                s + " font-size:19px; padding:17px 34px;";
        q = q + l;
        b.prototype.WQ = function () {
            if (!this.Eg) {
                this.Eg = c("<div/>");
                this.Eg.css({
                    position: "fixed",
                    "z-index": h.Pfa,
                    left: 0,
                    top: 0,
                    margin: 0,
                    padding: 0,
                    height: "100%",
                    width: "100%",
                    "background-color": "rgba(255, 255, 255, 0.99)"
                });
                this.Eg.html(this.kja);
                c(this.Eg).find("button").on("click", function (a) {
                    this.Mna(c(a.currentTarget).attr("id"))
                }
                    .bind(this))
            }
        };
        b.prototype.PV = function (a, b) {
            var d = {},
            c;
            for (c in b)
                d[c] = a.css(c);
            this.uW.push({
                $el: a,
                css: d
            });
            a.css(b)
        };
        b.prototype.Zpa =
        function () {
            for (; this.uW.length; ) {
                var a = this.uW.pop();
                a.$el.css(a.css)
            }
        };
        b.prototype.show = function (a, b, d) {
            a || (a = D());
            b || (b = D());
            if (this.KD) {
                var e = this.HH;
                this.HH = function () {
                    e();
                    a()
                };
                var f = this.uH;
                this.uH = function () {
                    f();
                    b()
                }
            } else {
                this.WQ();
                this.HH = a;
                this.uH = b;
                var h = this.nla();
                if (h === m) {
                    this.KD = n;
                    var j = this,
                    h = c(p.gm() || document.body);
                    if (d !== n)
                        h.children().each(function () {
                            j.PV(c(this), {
                                visibility: "hidden"
                            })
                        });
                    else {
                        this.PV(h, {
                            overflow: "hidden"
                        });
                        h.children().each(function () {
                            j.PV(c(this), {
                                position: "absolute",
                                "z-index": 0
                            })
                        })
                    }
                    h.append(this.Eg)
                } else {
                    this.KD = y;
                    h ? this.HH() : this.uH()
                }
            }
        };
        b.prototype.hide = function () {
            if (this.KD) {
                this.KD = y;
                this.Eg.detach();
                this.Zpa()
            }
        };
        b.prototype.nla = function () {
            var a = k.getItem(this.Q4());
            if (a == "true")
                return n;
            if (a == "false")
                return y
        };
        b.prototype.T9 = function (a) {
            k.setItem(this.Q4(), a ? "true" : "false")
        };
        b.prototype.Q4 = function () {
            return this.Qta + "DontDisplay:" + window.location.pathname
        };
        b.prototype.Mna = function (a) {
            var b = c("#tdvvriw_dontdisplay").is(":checked");
            this.hide();
            if (a == "tdvvriw_continue") {
                this.HH();
                b && this.T9(n)
            } else if (a == "tdvvriw_cancel") {
                this.uH();
                b && this.T9(y)
            }
        };
        var a = e.extend(b, function () {
            var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>', u, '<div style="' + q + '">' + g("use-cardboard-info") + "</div>", '<div><button style="' + s + '" id="tdvvriw_continue">' + g("use-cardboard") + "</button></div>", "</div>", '<hr style="' + o + '">', "<div>", '<div style="' + q + '">', '<div style="margin-bottom:2vmin;">' +
                g("samsung-internet-vr-app-info") + "</div>", '<div><button style="' + s + '" id="tdvvriw_cancel">' + g("launch-default-browser") + "</button></div>", "</div>", z, "</div>\n</div></div>", '<div style="position:absolute; left:12vmin; right:12vmin; bottom:6vmin; ' + q + '">', '<input type="checkbox" id="tdvvriw_dontdisplay" name="tdvvriw_dontdisplay" value="true" style="' + v + '"><label for="tdvvriw_dontdisplay">' + g("dont-display-again") + "</label>", "</div>"].join("\n");
            b.call(this, "ChromeAppInfoWindow", a)
        }),
        A = e.extend(b,
                function () {
                var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>', u, '<div style="' + q + '">' + g("use-cardboard-info") + "</div>", '<div><button style="' + s + '" id="tdvvriw_continue">OK</button></div>', "</div>", '<hr style="' + o + '">', "<div>", '<div style="' + q + '">', '<div style="margin-bottom:2vmin;">' + g("samsung-internet-vr-info") + "</div>", "</div>", z, "</div>\n</div></div>",
                    '<div style="position:absolute; left:12vmin; right:12vmin; bottom:6vmin; ' + q + '">', '<input type="checkbox" id="tdvvriw_dontdisplay" name="tdvvriw_dontdisplay" value="true" style="' + v + '"><label for="tdvvriw_dontdisplay">' + g("dont-display-again") + "</label>", "</div>"].join("\n");
                b.call(this, "SamsungInternetInfoWindow", a)
            }),
        K = e.extend(b, function () {
            b.call(this, "SamsungInternetForGearVRInfoWindow", ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>',
                    z, '<div style="' + q + '">This content requires access to the WebVR API.<br>To enable WebVR open the "More" menu you\'ll find above this window and then click on the "Labs" item.</div>', '<div><button style="' + s + '" id="tdvvriw_cancel">OK</button></div>', "</div>\n</div></div>"].join("\n"))
        }),
        F = e.extend(b, function () {
            var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">', '<div style="' +
                q + '"></div>', '<div style="text-align:center;"><button style="' + s + ' box-shadow:0 0 4px rgba(0, 0, 0, 0.5);" id="tdvvriw_continue">' + g("exit-vr") + "</button></div>", "</div></div>"].join("\n");
            b.call(this, "ExternalVRDisplayVRInfoWindow", a)
        });
        F.prototype.WQ = function () {
            b.prototype.WQ.call(this);
            f.$g("vrv") === n && this.Eg.css({
                background: "none"
            })
        };
        var J = e.extend(b, function () {
            var a;
            a = d.browser() == d.If ? window.location.protocol != "https:" ? "<div>" + g("giroscope-disabled-http") + "</div>" : window.DeviceMotionEvent.requestPermission ?
                g("giroscope-disabled-safari-request-permission").map(function (a) {
                    return "<div>" + a + "</div>"
                }).join("\n") : g("giroscope-disabled-safari-toggle-on") : "<div>" + g("giroscope-disabled-http") + "</div>";
            a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>', '<div style="' + q + '">', a, "</div>", '<div><button style="' + s + '" id="tdvvriw_continue">OK</button></div>', "</div>\n</div></div>",
                '<div style="position:absolute; left:12vmin; right:12vmin; bottom:6vmin; ' + q + '">', '<input type="checkbox" id="tdvvriw_dontdisplay" name="tdvvriw_dontdisplay" value="true" style="' + v + '"><label for="tdvvriw_dontdisplay">' + g("dont-display-again") + "</label>", "</div>"].join("\n");
            b.call(this, "GiroscopeDisabledInfoWindow", a)
        }),
        B = e.extend(b, function () {
            var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>',
                u, '<div style="' + q + '">' + g("use-cardboard-info") + '</div><div><button style="' + s + '" id="tdvvriw_continue">' + g("use-cardboard") + "</button></div>", "</div>", '<hr style="' + o + '">', "<div>", z, '<div style="' + q + '">It looks like this device is compatible with Gear VR. If you have a Gear VR headset you can view this content using the Carmel Web Browser (by Oculus).</div>', '<div><button style="' + s + '" id="tdvvriw_cancel">Use Carmel web browser</button></div>', "</div>\n</div></div>"].join("\n");
            b.call(this, "CarmelInstallationPromptVRInfoWindow",
                a)
        }),
        O = e.extend(b, function () {
            var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">\n<div>', u, '<div style="' + l + ' margin:2vmin 0;">' + g("cardboard-v1") + "</div>", '<div><button style="' + s + '" id="tdvvriw_cancel">' + g("use-default-cardboard") + "</button></div>", "</div>", '<hr style="' + t + '">', "<div>", '<div style="' + l + ' margin-bottom:2vmin;">' + g("cardboard-v2") + "</div>", '<div><button style="' +
                s + '" id="tdvvriw_continue">' + g("use-cardboard-v2") + "</button></div>", x, "</div>\n</div></div>", '<div style="position:absolute; left:12vmin; right:12vmin; bottom:6vmin; ' + q + '">', '<input type="checkbox" id="tdvvriw_dontdisplay" name="tdvvriw_dontdisplay" value="true" style="' + v + '"><label for="tdvvriw_dontdisplay">' + g("dont-display-again") + "</label>", "</div>"].join("\n");
            b.call(this, "CardboardV2InfoWindow", a)
        }),
        N = e.extend(b, function () {
            var a = ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">',
                '<div style="' + q + '"></div>', '<div style="text-align:center;"><button style="' + s + '" id="tdvvriw_continue">' + g("enter-vr") + "</button></div>", "</div></div>"].join("\n");
            b.call(this, "EnterVRInfoWindow", a)
        }),
        I = e.extend(b, function () {
            b.call(this, "PreparingVRInfoWindow", ['<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">', '<div style="' + q + '">Preparing VR...</div>', "</div></div>"].join("\n"))
        }),
        L = e.extend(b, function () {
            var a = ['<div style="position: absolute; top: 7vmin; right:5vmin; ">', w, '</div>\n<div style="box-sizing:border-box; margin:0; padding:0 12vmin; display:table; height:100%; width:100%;"><div style="vertical-align:middle; text-align:center; display:table-cell;">', C, '<div style="' + q + '">' + g("use-safari-for-vr") + "</div>", '<div style="text-align:center;"><button style="' + s + '" id="tdvvriw_continue">OK</button></div>', "</div></div>", '<div style="position:absolute; left:12vmin; right:12vmin; bottom:6vmin; ' +
                q + '">', '<input type="checkbox" id="tdvvriw_dontdisplay" name="tdvvriw_dontdisplay" value="true" style="' + v + '"><label for="tdvvriw_dontdisplay">' + g("dont-display-again") + "</label>", "</div>"].join("\n");
            b.call(this, "UseSafariVRInfoWindow", a)
        }),
        e = e.extend(b, function () {
            var a = ['<div style="position: absolute; top: 5vmin; right:5vmin;">', '<img style="width:24vmin" src="' + j.Oj + '"/>', '</div>\n<div style="box-sizing:border-box; padding:0 10vmin; display:table; height:100%; width:100vw;">\n<div style="vertical-align:middle; text-align:center; display:table-cell;">',
                '<img style="width:22vmin" src="' + j.pA + '"/>', '<div style="color:#000; font-family:Arial, Helvetica, sans-serif; font-size:3.6vmin; line-height:4.3vmin; margin:5vmin 0; text-align:center;">' + g("rotate-device") + "</div>", "</div>\n</div>"].join("\n");
            b.call(this, "RotateVRInfoWindow", a)
        }),
        G = {};
        G.nga = new A;
        G.uAa = new K;
        G.$_ = new F;
        G.bAa = new B;
        G.fAa = new N;
        G.oAa = new I;
        G.m1 = new L;
        G.pA = new e;
        G.e0 = new J;
        G.tfa = new a;
        G.YN = new O;
        return G
    });
    define("cw", ["require"], function () {
        return {
            Oj: "Cardboard",
            Dga: "WebVR",
            Ega: "WebXR"
        }
    });
    define("fK", "require,iX,r,gl,jt,V".split(","), function (a) {
        var b = a("iX"),
        c = a("r"),
        e = a("gl"),
        g = a("jt");
        a("V");
        var d = {
            Pwa: function (a) {
                return this.sF(a) || this.pda(a) ? n : y
            },
            bo: function () {
                var a = c.wxa();
                d.bo = function () {
                    return a
                };
                return a
            },
            pda: function (a) {
                return typeof a == "string" && e.is(a, e.Ni) ? n : y
            },
            tBa: function (a) {
                return this.bZ(a) || this.cZ(a) ? n : y
            },
            cZ: function (a) {
                return typeof a == "string" && (e.is(a, e.Nfa) || e.cw(a, e.Ofa)) ? n : y
            },
            sF: function (a) {
                return !!a && !!a.tagName && a.tagName == "VIDEO"
            },
            Ls: function (a) {
                return typeof a ==
                "string" && e.is(a, e.Sj) || this.sF(a) && e.is(a.currentSrc, e.Sj) ? n : y
            },
            Jh: function (a) {
                return typeof a == "string" && e.is(a, e.Ni) || this.sF(a) && e.is(a.currentSrc, e.Ni) ? n : y
            },
            bZ: function (a) {
                return !!a && !!a.tagName && a.tagName == "IMG"
            },
            dda: function (a) {
                return !!a && !!a.tagName && a.tagName == "CANVAS"
            },
            lca: function (a) {
                return Math.pow(2, Math.round(Math.log(a) / Math.LN2))
            },
            mda: function (a) {
                return a !== 0 && (a & a - 1) === 0
            },
            fda: function () {
                return c.browser() == c.Ji
            },
            Hwa: function () {
                return c.browser() == c.nq
            },
            Fj: function () {
                return c.Rd() ==
                c.Lh
            },
            kfa: function (a) {
                if (h)
                    return n;
                if (c.eY() && c.HF() < 15.1)
                    if (c.HF() >= 15) {
                        if (c.Lca())
                            return n
                    } else if (d.Ls(a))
                        return n;
                if (d.Hwa())
                    return n;
                if (d.Fj()) {
                    if (c.Es() == c.Gw && c.bw() >= 15)
                        return y;
                    if (d.Ls(a)) {
                        if (!b.Yca || c.bw() >= 14 && c.bw() < 14.6)
                            return n
                    } else if (c.bw() < 12 || a && a.videoWidth && a.videoHeight && a.videoWidth * a.videoHeight <= 262144)
                        return n
                }
                return y
            },
            Qca: function () {
                return d.fda() || d.Fj()
            },
            Pca: function () {
                return d.Fj() && b.Yca && c.bw() < 11
            }
        },
        f = y;
        d.$ca = function () {
            f = y
        };
        d.xwa = function () {
            return f
        };
        d.cya = function () {
            f =
                n
        };
        var h = g.zg("vic");
        d.sxa = function () {
            d.Fj() && (h = n)
        };
        d.hY = function (a, b) {
            var e = {
                alpha: n,
                depth: n,
                stencil: n,
                antialias: c.nda() || c.Bwa() || c.aZ() || c.ida() || c.Jwa() || c.Lwa() || c.qda() ? y : b || y,
                premultipliedAlpha: n,
                preserveDrawingBuffer: y,
                powerPreference: "default",
                failIfMajorPerformanceCaveat: y,
                xrCompatible: !d.fda()
            };
            return a.getContext("webgl", e) || a.getContext("experimental-webgl", e)
        };
        d.getPixelRatio = function () {
            if (c.Za()) {
                var a = 0,
                b = 0;
                try {
                    a = window.top.innerWidth;
                    b = window.top.innerHeight
                } catch (d) {}
                var e = window.devicePixelRatio ||
                    1,
                a = [Math.max(document.documentElement.clientWidth, a), Math.max(document.documentElement.clientHeight, b)].sort(function (a, b) {
                    return b - a
                }),
                e = [screen.width * e, screen.height * e].sort(function (a, b) {
                    return b - a
                }),
                e = [e[0] / a[0], e[1] / a[1]].sort()[0];
                if (e !== Infinity)
                    return e
            } else if (c.Rd() == c.Rfa && c.browser() == c.Ii)
                return 1;
            return window.devicePixelRatio
        };
        return d
    });
    define("dc", "require,fg,jquery.mod,do,lk,bK,ll,r,d,ks,kF".split(","), function (a) {
        function b() {
            this.Ic = y;
            this.aE = r;
            this.ia = this.X = 100;
            this.YS = this.Qf = m;
            this.ZS = 100;
            this.K = document.createElement("div");
            this.K.style.opacity = 0;
            this.K.style.display = "none";
            this.K.style.RBa = "opacity 0.3s";
            this.K.addEventListener("transitionend", this.KW.bind(this));
            this.Ad = document.createElement("div");
            this.JZ(n);
            this.Ad.style.position = "absolute";
            this.Ad.style.left = 0;
            this.Ad.style.top = 0;
            this.Ad.style.right = 0;
            this.Ad.style.bottom =
                0;
            this.K.appendChild(this.Ad);
            this.Ab = document.createElement("img");
            this.Ab.style.cursor = "pointer";
            this.Ab.style.position = "absolute";
            this.Ab.style.left = "50%";
            this.Ab.style.top = "50%";
            this.Ab.style.transform = "translate(-50%, -50%)";
            this.K.appendChild(this.Ab);
            this.rP = g(this.K)
        }
        function c(a, b) {
            this.reason = a;
            this.Hp = b
        }
        var e = a("fg"),
        g = a("jquery.mod");
        a("do");
        a("lk");
        var d = a("bK"),
        f = a("ll"),
        h = a("r"),
        j = a("d"),
        p = a("ks"),
        k = a("kF"),
        l = e.extend(j, function () {
            j.call(this);
            this.Tc("UserInteractionWindow");
            this.Ha =
                r;
            this.Zm = [];
            var a = new p;
            a.set("duration", 500);
            a.set("easing", "cubic_in");
            var b = new k;
            b.set("duration", 500);
            b.set("easing", "cubic_out");
            this.M({
                contentOpaque: n,
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                hideEffect: b,
                showEffect: a,
                visible: y
            });
            this.bind(f.yb, this.xX, this, n);
            this.bind(f.U, this.Fta, this, n)
        });
        l.prototype.xX = function () {
            this.Ha && this.Ha.setSize(this.Id(), this.Hd())
        };
        l.prototype.Fta = function () {
            var a = this.Zm.slice();
            this.Zm = [];
            this.JL();
            a.forEach(function (a) {
                a.Hp.call(a.context)
            })
        };
        l.prototype.Ga = function () {
            j.prototype.Ga.call(this);
            if (!this.Ha) {
                this.Ha = new b;
                this.Ha.setSize(this.Id(), this.Hd());
                this.Ha.xe(n);
                this.Ra().append(this.Ha.Gb().css({
                        position: "absolute",
                        left: 0,
                        top: 0,
                        right: 0,
                        bottom: 0,
                        overflow: "hidden"
                    }));
                this.JL()
            }
        };
        l.prototype.el = function () {
            j.prototype.el.call(this);
            this.getParent().bind(f.yb, this.xX, this, n);
            l.gha(this)
        };
        l.prototype.qj = function () {
            this.getParent().unbind(f.yb, this.xX, this, n);
            j.prototype.qj.call(this);
            l.Lpa(this)
        };
        l.prototype.Pxa = function (a) {
            this.ds(o, a)
        };
        l.prototype.EZ = function (a) {
            this.ds(q, a)
        };
        l.prototype.ds =
        function (a, b) {
            this.Zm.push(new c(a, b));
            this.Zm.sort(function (a, b) {
                return t[a.reason] - t[b.reason]
            });
            this.JL()
        };
        l.prototype.sua = function (a) {
            this.cancel(o, a)
        };
        l.prototype.qua = function () {
            this.cancel(q, m)
        };
        l.prototype.cancel = function (a, b) {
            var d = this.Wla(a, b);
            d >= 0 && this.Spa(d)
        };
        l.prototype.G2 = function () {
            this.$G(n)
        };
        l.prototype.iH = function () {
            this.$G(y)
        };
        l.prototype.Wla = function (a, b) {
            for (var d = 0; d < this.Zm.length; d++) {
                var c = this.Zm[d];
                if (c.reason == a && c.Hp == b)
                    return d
            }
            return -1
        };
        l.prototype.JL = function () {
            if (this.Ha) {
                var a =
                    this.ema();
                if (a) {
                    switch (a.reason) {
                    case q:
                        this.Ha.uN(b.g0);
                        break;
                    case o:
                        this.Ha.uN(b.BG)
                    }
                    this.set("visible", n)
                } else
                    this.set("visible", y)
            }
        };
        l.prototype.Spa = function (a) {
            this.Zm.splice(a, 1);
            a == this.Zm.length && this.JL()
        };
        l.prototype.ema = function () {
            return this.Zm.length > 0 ? this.Zm[0] : r
        };
        var q = "vr",
        o = "play",
        t = {};
        t[q] = 0;
        t[o] = 1;
        b.prototype.Gb = Q("rP");
        b.prototype.setSize = function (a, b) {
            if (this.X !== a || this.ia !== b) {
                this.X = a;
                this.ia = b;
                this.KL()
            }
        };
        b.prototype.JZ = function (a) {
            this.Ad.style.backdropFilter = a ? "blur(8px)" :
                "none"
        };
        b.prototype.xe = function (a) {
            if (this.Ic != a) {
                this.Ic = a;
                if (this.aE) {
                    clearTimeout(this.aE);
                    this.aE = r
                }
                if (this.Ic) {
                    this.K.style.display = "block";
                    this.K.style.opacity = 0;
                    this.aE = setTimeout(function () {
                        this.aE = r;
                        this.K.style.opacity = 1
                    }
                            .bind(this), 30)
                } else
                    this.K.style.opacity = 0
            }
        };
        b.prototype.uN = function (a) {
            if (this.Qf != a) {
                this.Qf = a;
                this.dta()
            }
        };
        b.prototype.KW = function () {
            if (!this.Ic)
                this.K.style.display = "none"
        };
        b.prototype.dta = function () {
            switch (this.Qf) {
            case b.BG:
                this.YS = d.vt;
                this.ZS = d.iga;
                break;
            case b.g0:
                this.YS =
                    d.zga;
                this.ZS = d.Bga
            }
            this.Ab.src = this.YS;
            this.KL()
        };
        b.prototype.KL = function () {
            if (h.Za()) {
                this.Ab.style.maxWidth = Math.round(this.X * 0.5) + "px";
                this.Ab.style.width = "20vmin"
            } else {
                this.Ab.style.maxWidth = Math.round(this.X * 0.33) + "px";
                this.Ab.style.width = this.ZS + "px"
            }
        };
        b.BG = "play";
        b.g0 = "vr";
        l.HG = b;
        l.Yc = [];
        l.IU = [];
        l.gha = function (a) {
            l.Yc.push(a);
            l.IU.forEach(function (b) {
                l.K5(a, b)
            });
            l.IU = []
        };
        l.Lpa = function (a) {
            l.Yc.splice(l.Yc.indexOf(a), 1)
        };
        l.ready = function () {
            return l.Yc.length > 0
        };
        l.EZ = function (a) {
            l.Yc.length ?
            l.Yc.forEach(function (b) {
                l.K5(b, a)
            }) : l.IU.push(a)
        };
        l.K5 = function (a, b) {
            a.EZ(function () {
                l.Yc.forEach(function (b) {
                    b != a && b.qua()
                });
                b()
            })
        };
        return l
    });
    define("lb", ["require"], function () {
        var a = {
            Rj: {}
        };
        a.Rj.NONE = "none";
        a.Rj.qa = "left";
        a.Rj.Na = "right";
        a.mh = function () {
            this.y = this.x = 0;
            this.height = this.width = 1
        };
        a.n1 = function () {
            this.eye = a.Rj.NONE;
            this.viewport = new a.mh;
            this.position = new THREE.Vector3;
            this.orientation = new THREE.Quaternion;
            this.projectionMatrix = new THREE.Matrix4
        };
        a.Gfa = function () {
            this.position = new THREE.Vector3;
            this.orientation = new THREE.Quaternion;
            this.views = [];
            this.yM = []
        };
        a.Tfa = function () {
            this.$E = r;
            this.Ik = 200;
            this.Bj = 100;
            this.uM = 1
        };
        return a
    });
    define("dh", ["require"], function () {
        return {
            vG: "gaze",
            NO: "gaze_click"
        }
    });
    define("fA", "require,fg,ll,fK,eO,dc,lb,r,gL,jt,dh".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fK"),
        g = a("eO"),
        d = a("dc"),
        f = a("lb"),
        h = a("r"),
        j = a("gL"),
        p = a("jt"),
        k = a("dh"),
        a = b.extend(g, function () {
            g.call(this);
            this.G9 = k.vG;
            this.wk = [];
            this.jc = new f.Gfa;
            this.og = new f.n1;
            this.og.eye = f.Rj.qa;
            this.sg = new f.n1;
            this.sg.eye = f.Rj.Na;
            this.jc.views = [this.og, this.sg];
            this.Qc = new f.Tfa;
            this.bind(c.aa, this.Ju, this, y)
        });
        a.prototype.mm = D();
        a.prototype.Fh = D();
        a.prototype.$d = D();
        a.prototype.EM = Q("Qc");
        a.prototype.Dn =
            Q("jc");
        a.prototype.Ma = D();
        a.prototype.isPresenting = D();
        a.prototype.wd = D();
        a.prototype.HM = Q("G9");
        a.prototype.Wv = D();
        a.prototype.gz = function (a) {
            this.wk.indexOf(a) < 0 && this.wk.push(a)
        };
        a.prototype.nN = function (a) {
            this.wk.splice(this.wk.indexOf(a), 1);
            this.Wv() == a && this.$d()
        };
        a.prototype.yN = function (a) {
            var b = this.wk.indexOf(a);
            if (!(b < 0 || b == this.wk.length - 1)) {
                this.wk.splice(b, 1);
                this.wk.splice(this.wk.length, 0, a)
            }
        };
        a.prototype.Pla = function () {
            return this.wk.length > 0 ? this.wk[this.wk.length - 1] : r
        };
        a.prototype.GV =
        function () {
            var a = this.Pla();
            if (a == r) {
                a = document.createElement("canvas");
                a = e.hY(a);
                this.gz(a)
            }
            return a
        };
        a.prototype.CK = function (a) {
            d.EZ(a)
        };
        a.prototype.eW = function (a) {
            if (h.Uc() == h.Ew) {
                this.qV();
                j.tfa.show(a, function () {
                    this.f2()
                }
                    .bind(this))
            } else
                h.aF() && h.Uc() == h.hA ? j.nga.show(a) : h.Uc() == h.jG ? j.m1.show(a) : h.Uc() == h.kG ? j.m1.show() : a()
        };
        a.prototype.HV = function (a) {
            var b = function (b) {
                this.G9 = b;
                a()
            }
            .bind(this);
            !h.Za() || h.le() ? b(k.vG) : p.Jn("cardboard_version") == "1" ? b(k.vG) : p.Jn("cardboard_version") == "2" ?
            b(k.NO) : j.YN.show(function () {
                b(k.NO)
            }
                .bind(this), function () {
                b(k.vG)
            }
                .bind(this))
        };
        a.prototype.Ju = function () {
            h.Za() || (this.isPresenting() ? j.$_.show(this.$d.bind(this)) : j.$_.hide())
        };
        a.prototype.f2 = function () {
            this.qV();
            var a = this.w5();
            a.push("vr");
            this.p2(a)
        };
        a.prototype.qV = function () {
            this.p2(this.w5().filter(function (a) {
                    return a != "vr"
                }))
        };
        a.prototype.w5 = function () {
            var a = window.location.hash.substring(1);
            return a.length ? a.split("&") : []
        };
        a.prototype.p2 = function (a) {
            window.location.hash = "#" + (a.length ?
                    a.join("&") : "")
        };
        return a
    });
    define("p", ["require", "jquery.mod", "ke"], function (a) {
        function b() {
            k.get(0) == document.body && f.height(window.innerHeight)
        }
        function c(a, b) {
            var d = {},
            c;
            for (c in b)
                d[c] = a.css(c);
            l.push({
                $el: a,
                css: d
            });
            a.css(b)
        }
        function e(a) {
            this.K = a
        }
        var g = a("jquery.mod"),
        d = a("ke");
        e.prototype.Fh = function () {
            this.enabled() || this.toggle()
        };
        e.prototype.$d = function () {
            this.enabled() && this.toggle()
        };
        e.prototype.toggle = function () {
            this.enabled() ? e.cancel() : e.Bg(this.K)
        };
        e.prototype.enabled = function () {
            return e.enabled(this.K)
        };
        var f =
            g("<div/>").css({
                position: "fixed",
                bottom: 0,
                left: 0,
                height: "100vh",
                width: "100vw"
            }),
        h = g("<div/>"),
        j = r,
        p = r,
        k = r,
        l = [],
        q = r;
        e.Bg = function (a) {
            if (a !== j) {
                e.cancel();
                j = a;
                var l = d.gm() || document.body;
                p = g(a);
                k = g(l);
                h.insertAfter(p);
                p.appendTo(f);
                k.children().each(function () {
                    c(g(this), {
                        visibility: "hidden"
                    })
                });
                c(p, {
                    position: "absolute",
                    left: 0,
                    top: 0,
                    width: "100%",
                    height: "100%"
                });
                l == document.body ? c(f, {
                    position: "fixed",
                    left: 0,
                    top: "",
                    right: "",
                    bottom: 0,
                    height: "100vh",
                    width: "100vw",
                    margin: 0,
                    padding: 0
                }) : c(f, {
                    position: "absolute",
                    left: 0,
                    top: 0,
                    right: "",
                    bottom: "",
                    width: "100%",
                    height: "100%",
                    margin: 0,
                    padding: 0
                });
                f.appendTo(k);
                b();
                q = setInterval(b, 300)
            }
        };
        e.cancel = function () {
            if (j) {
                f.detach();
                p.insertBefore(h);
                for (h.detach(); l.length; ) {
                    var a = l.pop();
                    a.$el.css(a.css)
                }
                k = p = j = r;
                l = [];
                clearInterval(q)
            }
        };
        e.enabled = function (a) {
            return j == a
        };
        return e
    });
    define("iD", "require,fg,ll,bZ,eO,lk,bK".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("lk"),
        a = a("bK"),
        f = ['<div style="position: absolute; top: 5vmin; right:5vmin;">', '<img style="width:24vmin" src="' + a.Oj + '"/>', '</div>\n<div style="box-sizing:border-box; padding:0 10vmin; display:table; height:100%; width:100vw;">\n<div style="vertical-align:middle; text-align:center; display:table-cell;">'].join("\n"),
        h = f + ['<img style="width:22vmin" src="' + a.pA + '"/>', '<div style="color:#000; font-family:Arial, Helvetica, sans-serif; font-size:3.6vmin; line-height:4.3vmin; margin:5vmin 0; text-align:center;">' +
                d("rotate-device") + "</div>"].join("\n") + "</div>\n</div>",
        j = f + ['<img style="width:13vmin; vertical-align:middle;" src="' + a.rga + '"/>', '<div style="color:#000; font-family:Arial, Helvetica, sans-serif; font-size:3.6vmin; line-height:4.3vmin; text-align:left; display:inline-block; vertical-align:middle; margin:5vmin 0 0 2vmin;">Please, swipe up to<br>enter Fullscreen Mode</div>'].join("\n") + "</div>\n</div>",
        b = b.extend(g, function () {
            g.call(this);
            this.ii = this.Zj = this.$j = this.WB = this.XB = this.ET = this.FT = m;
            this.LI = y;
            this.fs = this.SU = this.DT = this.Bd = r;
            this.x4 = [];
            this.fT = this.Rl = y;
            this.kb = this.kb.bind(this)
        });
        b.prototype.Bg = function () {
            if (!this.Rl) {
                this.Rl = n;
                this.VQ();
                window.addEventListener("resize", this.kb);
                document.body.appendChild(this.Bd);
                document.body.appendChild(this.fs);
                this.$ra = document.documentElement.style.overflow;
                this.Zra = document.body.style.overflow;
                document.documentElement.style.overflow = "auto";
                document.body.style.overflow = "auto";
                this.LC()
            }
        };
        b.prototype.cancel = function () {
            if (this.Rl) {
                this.Rl =
                    y;
                window.removeEventListener("resize", this.kb);
                document.body.style.overflow = this.Zra;
                document.documentElement.style.overflow = this.$ra;
                document.body.removeChild(this.Bd);
                document.body.removeChild(this.fs);
                this.V9(y)
            }
        };
        b.prototype.enabled = Q("LI");
        b.prototype.VQ = function () {
            if (!this.Bd) {
                this.Bd = this.LH({
                    position: "fixed",
                    top: 0,
                    left: 0,
                    zIndex: 9999998
                }, n);
                this.Bd.id = "tdvminuictr";
                this.SU = this.LH({
                    position: "fixed",
                    backgroundColor: "#fff",
                    top: 0,
                    left: 0,
                    textAlign: "center"
                }, n, h);
                this.Bd.appendChild(this.SU);
                this.DT =
                    this.LH({
                        position: "fixed",
                        backgroundColor: "#fff",
                        top: 0,
                        left: 0,
                        textAlign: "center"
                    }, n, j);
                this.Bd.appendChild(this.DT);
                this.fs = this.LH({
                    position: "absolute",
                    top: 0,
                    left: 0,
                    right: 0,
                    height: "999999999vmax",
                    zIndex: 9999999
                }, y);
                this.fs.id = "tdvminuiscrl";
                this.fs.addEventListener("touchend", this.kb)
            }
        };
        b.prototype.LH = function (a, b, d) {
            var c = document.createElement("div");
            this.CD(c, a);
            d !== m && this.Sqa(c, d);
            b && this.x4.push(c);
            return c
        };
        b.prototype.kb = function () {
            [0, 250, 1E3, 2E3].forEach(function (a) {
                setTimeout(this.sU.bind(this),
                    a)
            }
                .bind(this))
        };
        b.prototype.sU = function () {
            (this.$j != window.innerWidth || this.Zj != window.innerHeight) && this.LC()
        };
        b.prototype.LC = function () {
            this.$j = window.innerWidth;
            this.Zj = window.innerHeight;
            this.ii = this.$j > this.Zj ? "landscape" : "portrait";
            var a;
            if (this.ii == "landscape") {
                if (this.FT && this.ET && this.ena(this.FT, this.ET) && (!this.XB && !this.WB || this.fna(this.XB, this.WB))) {
                    this.XB = this.$j;
                    this.WB = this.Zj
                }
                if (this.ana()) {
                    this.XB = this.$j;
                    this.WB = this.Zj
                }
                this.FT = this.$j;
                this.ET = this.Zj;
                a = this.XB == this.$j && this.WB ==
                    this.Zj
            } else
                a = y;
            this.x4.forEach(function (a) {
                a.style.height = this.Zj + "px";
                a.style.width = this.$j + "px"
            }
                .bind(this));
            var b = this.Rl && this.ii == "portrait",
            d = this.Rl && this.ii == "landscape" && !a,
            c = this.Rl && this.ii == "landscape";
            this.CD(this.Bd, {
                display: b || d ? "block" : "none"
            });
            this.CD(this.SU, {
                display: b ? "block" : "none"
            });
            this.CD(this.DT, {
                display: d ? "block" : "none"
            });
            this.CD(this.fs, {
                display: c ? "block" : "none",
                right: d ? 0 : "99.9%"
            });
            this.V9(a)
        };
        b.prototype.V9 = function (a) {
            if (this.UK != r) {
                clearTimeout(this.UK);
                this.UK = r
            }
            if (this.LI !=
                a)
                this.UK = setTimeout(function () {
                    this.UK = r;
                    (this.LI = a) ? this.trigger(new e(c.Sk)) : this.trigger(new e(c.Ba));
                    this.trigger(new e(c.aa))
                }
                        .bind(this), a ? 1E3 : 0)
        };
        b.prototype.ana = function () {
            var a = window.innerWidth,
            b = window.innerHeight,
            d = Infinity;
            [[480, 320], [960, 640], [1136, 640], [1334, 750], [1920, 1080], [2001, 1125], [2048, 1536], [2172, 1125], [2208, 1242], [2732, 2048], [2436, 1125]].forEach(function (c) {
                d = Math.min(d, Math.abs(100 - 100 * a * c[1] / (b * c[0])))
            });
            return d <= 1 ? n : y
        };
        b.prototype.ena = function (a, b) {
            return a * window.innerHeight >
            b * window.innerWidth
        };
        b.prototype.fna = function (a, b) {
            return a * window.innerHeight >= b * window.innerWidth
        };
        b.prototype.CD = function (a, b) {
            for (var d in b)
                a.style[d] = b[d]
        };
        b.prototype.Sqa = function (a, b) {
            a.innerHTML = b
        };
        return new b
    });
    define("lq", "require,ge,r,ka,ga,bD".split(","), function (a) {
        var b = a("ge"),
        c = a("r"),
        e = a("ka"),
        g = a("ga"),
        d = a("bD");
        if (c.browser() == c.Ii) {
            a = function () {
                this.V = new e;
                this.V.src = "data:video/mp4;base64, ";
                this.V.loop =
                    n;
                this.V.Rp = n;
                this.Ja = r
            };
            a.prototype.pN = R(n);
            a.prototype.wd = function () {
                return g.Ni
            };
            a.prototype.LY = function () {
                return b.yga
            };
            a.prototype.mY = function (a) {
                this.Ja = a;
                this.Ja.play(r, this.V, 0)
            };
            a.prototype.iZ = function () {
                this.Ja = r
            };
            var f = y,
            h = new a;
            return {
                enable: function () {
                    if (!f) {
                        f = n;
                        d.XX(h)
                    }
                },
                disable: function () {
                    if (f) {
                        f = y;
                        d.Mz(h)
                    }
                }
            }
        }
        return {
            enable: D(),
            disable: D()
        }
    });
    define("ia", ["require", "jquery.mod", "lk", "bK"], function (a) {
        function b() {
            this.Eg = r;
            this.W = y;
            this.kb = this.kb.bind(this);
            this.Zj = this.$j = this.ii = m
        }
        var c = a("jquery.mod"),
        e = a("lk"),
        g = a("bK");
        b.prototype.vo = function () {
            this.Eg || (this.Eg = c("<div/>"), this.Eg.css({
                    position: "fixed",
                    "z-index": 1E6,
                    left: 0,
                    top: 0,
                    margin: 0,
                    padding: 0,
                    height: "100%",
                    width: "100%",
                    "background-color": "rgba(255, 255, 255, 0.99)"
                }), this.Eg.html(['<div style="position: absolute; top: 5vmin; right:5vmin;">', '<img style="width:24vmin" src="' +
                        g.Oj + '"/>', '</div>\n<div style="box-sizing:border-box; padding:0 10vmin; display:table; height:100%; width:100vw;">\n<div style="vertical-align:middle; text-align:center; display:table-cell;">', '<img style="width:22vmin" src="' + g.pA + '"/>', '<div style="color:#000; font-family:Arial, Helvetica, sans-serif; font-size:3.6vmin; line-height:4.3vmin; margin:5vmin 0; text-align:center;">' + e("rotate-device") + "</div>", "</div>\n</div>"].join("\n")))
        };
        b.prototype.show = function (a) {
            this.W || (this.W = n, this.vo(),
                c(a).append(this.Eg), c(window).on("resize", this.kb), this.LC())
        };
        b.prototype.hide = function () {
            this.W && (this.W = y, c(window).off("resize", this.kb), this.Eg.detach())
        };
        b.prototype.kb = function () {
            [0, 250, 1E3, 2E3].forEach(function (a) {
                setTimeout(this.sU.bind(this), a)
            }
                .bind(this))
        };
        b.prototype.sU = function () {
            (this.$j != window.innerWidth || this.Zj != window.innerHeight) && this.LC()
        };
        b.prototype.LC = function () {
            this.$j = window.innerWidth;
            this.Zj = window.innerHeight;
            this.ii = this.$j > this.Zj ? "landscape" : "portrait";
            this.Eg.toggle("landscape" !=
                this.ii)
        };
        return new b
    });
    define("is", "require,fg,ll,bZ,gW,iX,r,fT,gL,bW,cw,fA,d,V,ke,p,iD,lq,ia".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("gW"),
        d = a("iX"),
        f = a("r"),
        h = a("fT"),
        j = a("gL"),
        p = a("bW"),
        k = a("cw"),
        l = a("fA"),
        q = a("d"),
        o = a("V"),
        t = a("ke"),
        s = a("p"),
        v = a("iD"),
        u = a("lq"),
        w = a("ia"),
        x = b.extend(l, function () {
            l.call(this);
            this.Ug = this.Ke = this.Ef = this.wD = this.To = this.Dh = this.lc = r;
            this.Zd = k.Oj;
            this.Ma = this.Ma.bind(this)
        });
        x.prototype.mm = function (a) {
            if (this.LB()) {
                var b = function (b) {
                    if (this.lc = b.length ? b[0] : r) {
                        this.lc.depthNear =
                            0.1;
                        this.lc.depthFar = 2 * g.Ld;
                        this.Dh = "VRFrameData" in window ? new VRFrameData : r;
                        window.addEventListener("vrdisplaypresentchange", this.XU.bind(this), y);
                        v.bind(c.Ba, this.$d.bind(this))
                    }
                    a(!!this.lc)
                }
                .bind(this),
                d = window.WebVRConfig || (window.WebVRConfig = {});
                d.BUFFER_SCALE = x.jz;
                d.ALWAYS_APPEND_POLYFILL_DISPLAY = n;
                d.LOCK_ORIENTATION = y;
                p.p1.load(function () {
                    navigator.getVRDisplays().then(b)["catch"](function () {
                        b([])
                    })
                }
                    .bind(this))
            } else
                a(y)
        };
        x.prototype.Fh = function () {
            !this.isPresenting() && !this.Ke && this.lv(function () {
                this.eW(function () {
                    this.HV(function () {
                        if (!this.isPresenting() &&
                            !this.Ke) {
                            this.Ke = this.GV();
                            this.bW();
                            this.lc.requestPresent([{
                                        source: this.Ke.canvas
                                    }
                                ]).then(function () {
                                this.Ug = this.Ke;
                                this.Ke = r;
                                f.Uc() != f.fA && w.show(t.gm());
                                this.Dy();
                                this.HE()
                            }
                                .bind(this))["catch"](function () {
                                this.Ke = r;
                                this.$D()
                            }
                                .bind(this))
                        }
                    }
                        .bind(this))
                }
                    .bind(this))
            }
                .bind(this))
        };
        x.prototype.$d = function () {
            this.isPresenting() && this.lc.exitPresent()
        };
        x.prototype.Ma = function (a) {
            return this.lc.requestAnimationFrame(function (b) {
                var d = this.Dy();
                d && this.Ev();
                a(b);
                d && this.lc.submitFrame()
            }
                .bind(this))
        };
        x.prototype.isPresenting = function () {
            return !!this.lc && this.lc.isPresenting
        };
        x.prototype.Wv = Q("Ug");
        x.prototype.wd = Q("Zd");
        x.prototype.XU = function () {
            if (this.isPresenting())
                o.zN(this.Ma, this.lc.cancelAnimationFrame.bind(this.lc));
            else {
                o.FZ();
                (this.Ug || this.Ke) && this.$D()
            }
            this.trigger(new e(c.aa))
        };
        x.prototype.LB = function () {
            return h.available && d.y_ && f.Za() && f.Es() != f.Gw
        };
        x.prototype.lv = function (a) {
            if (h.disabled)
                j.e0.show(function () {
                    h.DZ(function () {
                        this.lv(a)
                    }
                        .bind(this))
                });
            else if (t.enabled() || !q.qF()) {
                t.$d();
                this.CK(function () {
                    this.lv(a)
                }
                    .bind(this))
            } else
                a()
        };
        x.prototype.bW = function () {
            s.Bg(this.Ke.canvas);
            f.Uc() == f.gA ? this.f2() : u.enable();
            f.Uc() == f.fA && v.Bg()
        };
        x.prototype.Dy = function () {
            this.lc.getFrameData(this.Dh);
            if (!this.Dh.pose || !this.Dh.pose.orientation)
                return y;
            this.To = this.lc.getEyeParameters("left");
            this.wD = this.lc.getEyeParameters("right");
            var a = this.lc.getLayers();
            this.Ef = a && a.length && a[0] || r;
            return !this.Ef ? y : n
        };
        x.prototype.HE = function () {
            this.Qc.$E = r;
            this.Qc.Ik = this.To.renderWidth * 2;
            this.Qc.Bj =
                this.To.renderHeight;
            this.Qc.uM = 1
        };
        x.prototype.Ev = function () {
            var a = this.Dh.pose;
            this.jc.orientation.fromArray(a && a.orientation || z);
            this.jc.position.fromArray(a && a.position || C);
            this.MX()
        };
        x.prototype.MX = function () {
            this.og.position.fromArray(this.To.offset);
            this.og.orientation.fromArray(z);
            this.og.projectionMatrix.fromArray(this.Dh.leftProjectionMatrix);
            this.og.viewport.x = Math.round(this.Qc.Ik * this.Ef.leftBounds[0]);
            this.og.viewport.y = Math.round(this.Qc.Bj * this.Ef.leftBounds[1]);
            this.og.viewport.width =
                Math.round(this.Qc.Ik * this.Ef.leftBounds[2]);
            this.og.viewport.height = Math.round(this.Qc.Bj * this.Ef.leftBounds[3]);
            this.sg.position.fromArray(this.wD.offset);
            this.sg.orientation.fromArray(z);
            this.sg.projectionMatrix.fromArray(this.Dh.rightProjectionMatrix);
            this.sg.viewport.x = Math.round(this.Qc.Ik * this.Ef.rightBounds[0]);
            this.sg.viewport.y = Math.round(this.Qc.Bj * this.Ef.rightBounds[1]);
            this.sg.viewport.width = Math.round(this.Qc.Ik * this.Ef.rightBounds[2]);
            this.sg.viewport.height = Math.round(this.Qc.Bj *
                    this.Ef.rightBounds[3])
        };
        x.prototype.$D = function () {
            this.qV();
            this.Ug = this.Ke = r;
            v.cancel();
            s.cancel();
            u.disable();
            w.hide()
        };
        x.jz = Math.min(1, 1280 / (Math.max(screen.width, screen.height) * window.devicePixelRatio));
        var z = [0, 0, 0, 1],
        C = [0, 0, 0];
        return x
    });
    define("gS", "require,fg,bZ,ll,r,cw,fA,gW,d,V,p".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("ll"),
        g = a("r"),
        d = a("cw"),
        f = a("fA"),
        h = a("gW"),
        j = a("d"),
        p = a("V"),
        k = a("p"),
        a = b.extend(f, function () {
            f.call(this);
            this.Ug = this.Ke = this.Ef = this.wD = this.To = this.Dh = this.lc = r;
            this.Ma = this.Ma.bind(this)
        });
        a.prototype.mm = function (a) {
            if (this.LB()) {
                var b = function (b) {
                    if (this.lc = b.length ? b[0] : r) {
                        this.lc.depthNear = 0.1;
                        this.lc.depthFar = 2 * h.Ld;
                        this.Dh = "VRFrameData" in window ? new VRFrameData : r;
                        window.addEventListener("vrdisplaypresentchange",
                            this.XU.bind(this), y);
                        window.addEventListener("vrdisplayactivate", this.J8.bind(this));
                        window.addEventListener("vrdisplaydeactivate", this.$d.bind(this))
                    }
                    a(!!this.lc)
                }
                .bind(this);
                navigator.getVRDisplays().then(b)["catch"](function () {
                    b([])
                })
            } else
                a(y)
        };
        a.prototype.Fh = function (a) {
            !this.isPresenting() && !this.Ke && this.lv(a, function () {
                this.eW(function () {
                    this.HV(function () {
                        !this.isPresenting() && !this.Ke && this.J8()
                    }
                        .bind(this))
                }
                    .bind(this))
            }
                .bind(this))
        };
        a.prototype.$d = function () {
            this.isPresenting() && this.lc.exitPresent()
        };
        a.prototype.Ma = function (a) {
            return this.lc.requestAnimationFrame(function (b) {
                var d = this.Dy();
                d && this.Ev();
                a(b);
                d && this.lc.submitFrame()
            }
                .bind(this))
        };
        a.prototype.isPresenting = function () {
            return !!this.lc && this.lc.isPresenting
        };
        a.prototype.Wv = Q("Ug");
        a.prototype.wd = function () {
            return d.Dga
        };
        a.prototype.LB = function () {
            return "getVRDisplays" in navigator && !window.WebVRConfig
        };
        a.prototype.XU = function () {
            if (this.isPresenting()) {
                p.zN(this.Ma, this.lc.cancelAnimationFrame.bind(this.lc));
                this.Dy() && this.Ev()
            } else {
                p.FZ();
                (this.Ug || this.Ke) && this.$D()
            }
            this.trigger(new c(e.aa))
        };
        a.prototype.lv = function (a, b) {
            a || j.qF() ? b() : this.CK(function () {
                b()
            })
        };
        a.prototype.J8 = function () {
            this.Ke = this.GV();
            this.bW();
            this.lc.requestPresent([{
                        source: this.Ke.canvas,
                        attributes: {
                            foveationLevel: 3
                        }
                    }
                ]).then(function () {
                this.Ug = this.Ke;
                this.Ke = r;
                this.Dy() && this.Ev()
            }
                .bind(this))["catch"](function () {
                this.Ke = r;
                this.$D()
            }
                .bind(this))
        };
        a.prototype.bW = function () {
            k.Bg(this.Ke.canvas)
        };
        a.prototype.Dy = function () {
            this.lc.getFrameData(this.Dh);
            if (!this.Dh.pose ||
                !this.Dh.pose.orientation)
                return y;
            this.To = this.lc.getEyeParameters("left");
            this.wD = this.lc.getEyeParameters("right");
            var a = this.lc.getLayers();
            this.Ef = a && a.length && a[0] || r;
            return !this.Ef ? y : n
        };
        a.prototype.Ev = function () {
            this.HE();
            var a = this.Dh.pose;
            this.jc.orientation.fromArray(a && a.orientation || l);
            this.jc.position.fromArray(a && a.position || q);
            this.MX()
        };
        a.prototype.HE = function () {
            this.Qc.$E = r;
            this.Qc.Ik = this.To.renderWidth * 2;
            this.Qc.Bj = this.To.renderHeight;
            this.Qc.uM = g.le() ? 2048 / this.Qc.Bj : 1
        };
        a.prototype.MX =
        function () {
            this.og.position.fromArray(this.To.offset);
            this.og.orientation.fromArray(l);
            this.og.projectionMatrix.fromArray(this.Dh.leftProjectionMatrix);
            var a = this.Ef.leftBounds && this.Ef.leftBounds.length == 4 ? this.Ef.leftBounds : o;
            this.og.viewport.x = Math.round(this.Qc.Ik * a[0]);
            this.og.viewport.y = Math.round(this.Qc.Bj * a[1]);
            this.og.viewport.width = Math.round(this.Qc.Ik * a[2]);
            this.og.viewport.height = Math.round(this.Qc.Bj * a[3]);
            this.sg.position.fromArray(this.wD.offset);
            this.sg.orientation.fromArray(l);
            this.sg.projectionMatrix.fromArray(this.Dh.rightProjectionMatrix);
            a = this.Ef.rightBounds && this.Ef.rightBounds.length == 4 ? this.Ef.rightBounds : t;
            this.sg.viewport.x = Math.round(this.Qc.Ik * a[0]);
            this.sg.viewport.y = Math.round(this.Qc.Bj * a[1]);
            this.sg.viewport.width = Math.round(this.Qc.Ik * a[2]);
            this.sg.viewport.height = Math.round(this.Qc.Bj * a[3])
        };
        a.prototype.$D = function () {
            this.Ug = this.Ke = r;
            k.cancel()
        };
        var l = [0, 0, 0, 1],
        q = [0, 0, 0],
        o = [0, 0, 0.5, 1],
        t = [0.5, 0, 0.5, 1];
        return a
    });
    define("ik", "require,fg,bZ,ll,r,jE,cw,fA,gW,d,V,p,jg,fx".split(","), function (a) {
        function b(a) {
            setTimeout(a, 10)
        }
        var c = a("fg"),
        e = a("bZ"),
        g = a("ll"),
        d = a("r"),
        f = a("jE"),
        h = a("cw"),
        j = a("fA"),
        p = a("gW"),
        k = a("d"),
        l = a("V"),
        q = a("p"),
        o = a("jg"),
        t = a("fx"),
        s = c.extend(j, function () {
            j.call(this);
            this.Fv = this.JE = this.xg = this.Ug = r;
            this.Ly = "stopped";
            this.Ma = this.Ma.bind(this);
            this.LV = this.LV.bind(this);
            this.MV = this.MV.bind(this);
            this.NV = this.NV.bind(this);
            this.vs = y;
            o.aA(function () {
                b(function () {
                    this.vs = n
                }
                    .bind(this))
            }
                .bind(this))
        });
        s.prototype.mm = function (a) {
            if (this.LB())
                this.msa().then(function (b) {
                    b ? a(n) : a(y)
                })["catch"](function () {
                    a(y)
                });
            else
                a(y)
        };
        s.prototype.Fh = function () {
            this.Ly == "stopped" && this.lv(function () {
                this.eW(function () {
                    this.HV(function () {
                        setTimeout(function () {
                            this.Rra()
                        }
                            .bind(this), 200)
                    }
                        .bind(this))
                }
                    .bind(this))
            }
                .bind(this))
        };
        s.prototype.Rra = function () {
            if (this.Ly == "stopped") {
                this.Ly = "starting";
                this.trigger(new e(g.aa));
                l.$Z(n);
                navigator.xr.requestSession("immersive-vr").then(function (a) {
                    this.xg = a;
                    this.xg.addEventListener("end",
                        this.LV);
                    this.xg.addEventListener("select", this.MV);
                    this.xg.addEventListener("visibilitychange", this.NV);
                    return this.xg.requestReferenceSpace("local")
                }
                    .bind(this)).then(function (a) {
                    this.JE = a;
                    this.Ug = this.GV();
                    return this.Ug.makeXRCompatible()
                }
                    .bind(this)).then(function () {
                    d.Za() && q.Bg(this.Ug.canvas);
                    var a = XRWebGLLayer.getNativeFramebufferScaleFactor(this.xg),
                    a = Math.max(a, 1);
                    d.aZ() ? a = a * 1 : d.le() ? a = a * 1.42222 : d.Za() && (a = a * s.jz);
                    this.Fv = new XRWebGLLayer(this.xg, this.Ug, {
                        antialias: y,
                        framebufferScaleFactor: a
                    });
                    this.xg.updateRenderState({
                        baseLayer: this.Fv,
                        depthNear: 0.1,
                        depthFar: 2 * p.Ld
                    });
                    this.HE();
                    this.Ly = "started";
                    l.zN(this.Ma, this.xg.cancelAnimationFrame.bind(this.xg));
                    l.$Z(y)
                }
                    .bind(this))["catch"](function () {
                    l.$Z(y);
                    this.L9();
                    this.trigger(new e(g.aa))
                }
                    .bind(this))
            }
        };
        s.prototype.$d = function () {
            this.isPresenting() && this.xg.end()
        };
        s.prototype.Ma = function (a) {
            return this.xg.requestAnimationFrame(function (b, d) {
                this.OX = d;
                this.Ev();
                a(b)
            }
                .bind(this))
        };
        s.prototype.isPresenting = function () {
            return this.Ly != "stopped"
        };
        s.prototype.wd = function () {
            return h.Ega
        };
        s.prototype.Wv = Q("Ug");
        s.prototype.LB = function () {
            return "xr" in navigator
        };
        s.prototype.msa = function () {
            return "isSessionSupported" in navigator.xr ? navigator.xr.isSessionSupported("immersive-vr") : "supportsSession" in navigator.xr ? navigator.xr.supportsSession("immersive-vr") : Promise.reject()
        };
        s.prototype.lv = function (a) {
            d.Uc() == d.Vn ? this.vs ? a() : k.qF() ? b(a) : this.CK(function () {
                b(a)
            }) : k.qF() ? a() : this.CK(function () {
                a()
            })
        };
        s.prototype.LV = function () {
            l.FZ();
            this.L9();
            this.trigger(new e(g.aa))
        };
        s.prototype.MV = function () {
            this.trigger(new e(g.Mi))
        };
        s.prototype.NV = function () {
            t.h_(!this.xg || this.xg.visibilityState != "visible");
            f.Dfa && this.xg.visibilityState != "visible" && this.$d()
        };
        s.prototype.L9 = function () {
            this.Fv = this.JE = this.xg = this.Ug = r;
            this.Ly = "stopped";
            q.cancel()
        };
        s.prototype.HE = function () {
            this.Qc.$E = this.Fv.framebuffer;
            this.Qc.Ik = this.Fv.framebufferWidth;
            this.Qc.Bj = (d.Uc() == d.Vn ? 2 : 1) * this.Fv.framebufferHeight;
            this.Qc.uM = 1
        };
        s.prototype.Ev = function () {
            var a = this.OX.getViewerPose(this.JE);
            if (a) {
                var b =
                    a && a.transform.orientation || v;
                this.jc.orientation.set(b.x, b.y, b.z, b.w);
                b = a && a.transform.position || u;
                this.jc.position.set(b.x, b.y, b.z);
                for (var a = this.OX.getViewerPose(this.JE.getOffsetReferenceSpace(a.transform)), d = 0; d < a.views.length; d++) {
                    var c = a.views[d],
                    e;
                    if (c.eye == "left")
                        e = this.og;
                    else if (c.eye == "right")
                        e = this.sg;
                    else
                        continue;
                    b = c.transform.position;
                    e.position.set(b.x, b.y, b.z);
                    b = c.transform.orientation;
                    e.orientation.set(b.x, b.y, b.z, b.w);
                    e.projectionMatrix.fromArray(c.projectionMatrix);
                    c = this.Fv.getViewport(c);
                    e.viewport.x = c.x;
                    e.viewport.y = c.y;
                    e.viewport.width = c.width;
                    e.viewport.height = c.height
                }
                var f = [];
                this.xg.inputSources.forEach(function (a) {
                    if (a.targetRayMode == "tracked-pointer" && a.gamepad) {
                        var b = a.gamepad;
                        if (!b.pose)
                            b.WY = this.OX.getPose(a.targetRaySpace, this.JE);
                        if (!b.hand)
                            b.twa = a.handedness;
                        if (!b.id)
                            b.uwa = b.mapping + " " + a.handedness;
                        f.push(b)
                    }
                }
                    .bind(this));
                this.jc.yM = f
            }
        };
        s.jz = Math.min(1, 1280 / (Math.max(screen.width, screen.height) * window.devicePixelRatio));
        var v = {
            x: 0,
            y: 0,
            z: 0,
            w: 1
        },
        u = {
            x: 0,
            y: 0,
            z: 0
        };
        return s
    });
    define("bi", "require,fg,ll,eO,r,fT,jt,is,dh,cw,lb,gS,ik,fx".split(","), function (a) {
        function b(a, d) {
            if (a.length) {
                var c = new a[0];
                c.mm(function (e) {
                    e ? d(c) : b(a.slice(1), d)
                })
            } else
                d(r)
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("eO"),
        d = a("r"),
        f = a("fT"),
        h = a("jt"),
        j = a("is"),
        p = a("dh"),
        k = a("cw"),
        l = a("lb"),
        q = a("gS"),
        o = a("ik"),
        t = a("fx"),
        s = y,
        v = [],
        u = new g;
        u.Rj = l.Rj;
        u.sga = p;
        u.vA = k;
        u.available = R(n);
        u.Dn = R(r);
        u.EM = R(r);
        u.isPresenting = R(y);
        u.Fh = function () {
            s = n
        };
        u.$d = function () {
            s = y
        };
        u.lBa = R(r);
        u.gz = function (a) {
            v.indexOf(a) < 0 && v.push(a)
        };
        u.nN = function (a) {
            a = v.indexOf(a);
            a == -1 || v.splice(a, 1)
        };
        u.yN = D();
        u.aza = function (a) {
            j.jz = a;
            o.jz = a
        };
        u.Lva = function () {
            return j.jz
        };
        u.wd = R(r);
        u.HM = R(r);
        u.log = function () {
            u.available() ? u.wd() ? c.log("VR: " + u.wd()) : c.log("VR: not ready") : c.log("VR: not available");
            c.log("gyroscope: " + f.available)
        };
        var w;
        w = d.browser() == d.Ii && !d.Za() ? [o, q, j] : d.aZ() ? [o, q] : h.Jn("vr_mode") == "cardboard" ? [j] : [q, o, j];
        u.mm = function (a) {
            var c = setTimeout(function () {
                c = r;
                a()
            }, 250);
            b(w, function (b) {
                var f = b;
                if (f) {
                    f.bind(e.aa, function () {
                        u.trigger(e.aa)
                    },
                        u, n);
                    f.bind(e.Mi, function () {
                        u.trigger(e.Mi)
                    }, u, n);
                    u.available = R(n);
                    u.EM = function () {
                        return f.EM()
                    };
                    u.Dn = function () {
                        return f.Dn()
                    };
                    u.isPresenting = function () {
                        return f.isPresenting()
                    };
                    u.Fh = function () {
                        f.Fh()
                    };
                    u.$d = function () {
                        f.$d()
                    };
                    u.Wv = function () {
                        return f.Wv()
                    };
                    u.gz = function (a) {
                        f.gz(a)
                    };
                    u.nN = function (a) {
                        f.nN(a)
                    };
                    u.yN = function (a) {
                        f.yN(a)
                    };
                    u.wd = function () {
                        return f.wd()
                    };
                    u.HM = function () {
                        return f.HM()
                    };
                    v.forEach(function (a) {
                        f.gz(a)
                    });
                    d.Uc() == d.Fw ? function () {
                        function a() {
                            c++;
                            d = setTimeout(b, c * 1E3)
                        }
                        function b() {
                            d =
                                r;
                            if (c > 5)
                                window.location.reload();
                            else if (!document.hidden && !f.isPresenting()) {
                                f.Fh(n);
                                a()
                            }
                        }
                        var d,
                        c;
                        document.addEventListener("visibilitychange", function () {
                            if (!document.hidden) {
                                if (d) {
                                    clearTimeout(d);
                                    d = r
                                }
                                c = 0;
                                a()
                            }
                        }, y);
                        if (d) {
                            clearTimeout(d);
                            d = r
                        }
                        c = 0;
                        a()
                    }
                    () : s && f.Fh()
                } else
                    u.available = R(y);
                if (c) {
                    clearTimeout(c);
                    c = r;
                    a()
                }
            })
        };
        u.bind(e.aa, function () {
            t.vN(u.isPresenting())
        }, window, n);
        window.addEventListener("vrdisplayblur", function () {
            t.h_(n)
        }, n);
        window.addEventListener("vrdisplayfocus", function () {
            t.h_(y)
        }, n);
        return u
    });
    define("db", "require,ll,iN,eO,V,bi".split(","), function (a) {
        function b(a) {
            this.FH = a;
            this.Jg = r;
            this.mQ = {};
            for (a = 0; a < this.FH.buttons.length; a++)
                this.mQ[this.FH.buttons[a]] = y;
            this.lQ = 0;
            this.Xr = r;
            this.bv = [new THREE.Quaternion, new THREE.Quaternion];
            this.Bh = this.bv[0];
            this.Tg = [new THREE.Vector3, new THREE.Vector3];
            this.va = this.Tg[0];
            this.Ay = new THREE.Vector3;
            this.Zu = new THREE.Quaternion;
            this.Y2 = 0
        }
        function c(a, b, d) {
            this.owa = a;
            this.buttons = b;
            this.xxa = d
        }
        function e() {
            if (!(C || x == k.vd)) {
                x = k.vd;
                var a,
                d = l.isPresenting() &&
                    l.Dn();
                if (a = d && d.yM && d.yM.length ? d.yM : navigator.getGamepads && navigator.getGamepads()) {
                    for (d = 0; d < v.length; d++)
                        v[d].Aea(r);
                    for (d = 0; d < a.length; d++) {
                        var c = a[d];
                        if (c && (c.pose || c.WY)) {
                            var e = c.id || c.uwa,
                            f = e + (c.hand ? "-" + c.hand : ""),
                            h = w[f];
                            if (!h) {
                                a: {
                                    for (var p = 0; p < q.length; p++) {
                                        var s = q[p];
                                        if (e.indexOf(t[s].owa) == 0) {
                                            e = s;
                                            break a
                                        }
                                    }
                                    e = m
                                }
                                e && v.push(h = w[f] = new b(t[e]))
                            }
                            h && w[f].Aea(c)
                        }
                    }
                    (a = u) && !u.eZ() && (u = r);
                    for (d = 0; d < v.length; d++) {
                        h = v[d];
                        if (h.eZ() && h.pressed()) {
                            u = h;
                            break
                        }
                    }
                    if (!u)
                        for (d = 0; d < v.length; d++) {
                            h = v[d];
                            if (h.eZ()) {
                                if (h.hand() ==
                                    o) {
                                    u = h;
                                    break
                                }
                                u || (u = h)
                            }
                        }
                    a != u && j.nw(g)
                }
            }
        }
        function g() {
            s.trigger(h.aa)
        }
        function d() {
            e()
        }
        function f() {
            if (l.isPresenting()) {
                if (z) {
                    clearInterval(z);
                    z = r
                }
                e();
                z = setInterval(d, 500)
            } else if (z) {
                clearInterval(z);
                z = r
            }
        }
        var h = a("ll"),
        j = a("iN"),
        p = a("eO"),
        k = a("V"),
        l = a("bi"),
        q = ["oculus go", "oculus touch", "xr-standard", "gear vr", "daydream", "vive", "vive focus", "microsoft", "unknown"],
        o = "right",
        t = {};
        t["oculus go"] = new c("Oculus Go", ["trackpad", "trigger"], "trigger");
        t["oculus touch"] = new c("Oculus Touch", ["thumbstick", "trigger",
                    "grip", "abutton", "bbutton", "surface"], "trigger");
        t["xr-standard"] = new c("xr-standard", ["trigger", "grip", "unknow_button_0", "thumbstick", "abutton", "bbutton", "unknow_button"], "trigger");
        t["gear vr"] = new c("Gear VR", ["trackpad", "trigger"], "trigger");
        t.daydream = new c("Daydream Controller", ["trackpad", "menu", "system"], "trackpad");
        t.vive = new c("OpenVR", ["trackpad", "trigger", "grip", "menu", "system"], "trigger");
        t["vive focus"] = new c("HTC Vive Focus", ["trackpad", "trigger", "grip"], "trigger");
        t.microsoft = new c("Spatial Controller (Spatial Interaction Source)",
                ["thumbstick", "trigger", "grip", "menu", "thumbpad"], "trigger");
        t.unknown = new c("", [], m);
        b.prototype.Aea = function (a) {
            if (this.Jg = a) {
                this.mma = this.Jg.hand || this.Jg.twa;
                if (this.Jg.pose) {
                    this.Xr = this.Jg.pose;
                    if (this.Xr.orientation) {
                        this.Bh = this.bv[0] == this.Bh ? this.bv[1] : this.bv[0];
                        this.Bh.fromArray(this.Xr.orientation)
                    }
                    if (this.Xr.position) {
                        this.va = this.Tg[0] == this.va ? this.Tg[1] : this.Tg[0];
                        this.va.fromArray(this.Xr.position)
                    } else
                        this.va = r
                } else if (this.Jg.WY) {
                    this.Xr = this.Jg.WY.transform;
                    this.Bh = this.bv[0] ==
                        this.Bh ? this.bv[1] : this.bv[0];
                    this.Bh.copy(this.Xr.orientation);
                    this.va = this.Tg[0] == this.va ? this.Tg[1] : this.Tg[0];
                    this.va.copy(this.Xr.position)
                }
                for (var a = 0, b = Math.min(this.Jg.buttons.length, this.Jg.buttons.length); a < b; a++)
                    this.mQ[this.FH.buttons[a]] = this.Jg.buttons[a].pressed;
                for (a = this.lQ = 0; a < this.Jg.buttons.length; a++)
                    this.Jg.buttons[a].pressed && this.lQ++;
                (a = !!this.Ay != !!this.va || this.va && this.Ay.x != this.va.x && this.Ay.y != this.va.y && this.Ay.z != this.va.z) && (this.va ? this.Ay.copy(this.va) : this.Ay.set(0,
                        0, 0, 0));
                (b = !!this.Zu != !!this.Bh || this.Bh && (this.Zu.x != this.Bh.x || this.Zu.y != this.Bh.y || this.Zu.z != this.Bh.z || this.Zu.w != this.Bh.w)) && (this.Bh ? this.Zu.copy(this.Bh) : this.Zu.set(0, 0, 0));
                if (a || b)
                    this.Y2 = k.vd
            }
        };
        b.prototype.pulse = function (a, b) {
            var d = this.Jg && this.Jg.hapticActuators;
            (d = d && d.length && d[0]) && d.pulse && d.pulse(a, b)
        };
        b.prototype.eZ = function () {
            return !!this.Jg
        };
        b.prototype.Dwa = function () {
            return k.vd - this.Y2 > 500
        };
        b.prototype.hand = Q("mma");
        b.prototype.quaternion = Q("Bh");
        b.prototype.position = Q("va");
        b.prototype.pressed = function (a) {
            a || (a = this.FH.xxa);
            return !a ? this.lQ > 0 : this.mQ[a]
        };
        var s = new p;
        s.all = function () {
            e();
            return v
        };
        s.cN = function () {
            e();
            return u
        };
        s.qa = "left";
        s.Na = o;
        var v = [],
        u = r,
        w = {},
        x = m,
        z = r,
        C = URL.$g("disable-controller", y);
        l.bind(h.aa, f);
        f();
        return s
    });
    define("cB", ["require", "fk", "a"], function (a) {
        function b(a, b) {
            this.Sd = a || new c(0, 0, 0);
            this.Ag = b || new c(1, 0, 0)
        }
        var c = a("fk"),
        e = a("a");
        b.prototype.clone = function () {
            return new b(this.Sd.clone(), this.Ag.clone())
        };
        b.prototype.apply = function (a) {
            a.hz(this.Sd);
            a.hz(this.Ag)
        };
        b.prototype.tca = function () {
            return e.Gs(this.Sd, this.Ag)
        };
        return b
    });
    define("gm", ["cB", "fk"], function (a, b) {
        function c(a, b, d) {
            this.X = a || 100;
            this.ia = b || 100;
            this.ba = d || Math.PI;
            this.bV = m;
            this.Fm = n
        }
        c.prototype.sw = function (a) {
            this.ba != a && (this.ba = a, this.Fm = n)
        };
        c.prototype.Op = Q("ba");
        c.prototype.WF = function (a) {
            this.X != a && (this.X = a, this.Fm = n)
        };
        c.prototype.ad = Q("X");
        c.prototype.Cea = function (a) {
            this.ia != a && (this.ia = a, this.Fm = n)
        };
        c.prototype.Pd = Q("ia");
        c.prototype.project = function (a) {
            if (0 != a.z) {
                this.Laa();
                var b = 1 / a.z,
                d = this.bV * b;
                a.x = 0.5 * this.X - a.x * d;
                a.y = 0.5 * this.ia - a.y * d;
                a.z =
                    b
            }
        };
        c.prototype.unproject = function (c) {
            this.Laa();
            return new a(new b(0, 0, 0), new b(0.5 * this.X - c.x, 0.5 * this.ia - c.y, this.bV))
        };
        c.prototype.Laa = function () {
            this.Fm && (this.bV = 0.5 * this.X / Math.tan(0.5 * this.ba), this.Fm = y)
        };
        return c
    });
    define("dS", ["require", "jquery.mod"], function (a) {
        function b() {
            this.K = c("<div/>");
            this.K.css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                "z-index": 0,
                "pointer-events": "none",
                "background-color": "#ffffff"
            });
            this.K.hide()
        }
        var c = a("jquery.mod");
        b.prototype.Gb = Q("K");
        b.prototype.trigger = function () {
            this.K.fadeIn(100).fadeOut(100)
        };
        return b
    });
    define("lr", ["require"], function () {
        function a() {
            this.md = this.pitch = this.ma = 0;
            this.Gf = this.bd = 90;
            this.PE = this.gM = this.height = this.width = 100;
            this.eh = 1;
            this.lF = this.sb = y;
            this.Ei = 0;
            this.xM = this.aM = this.fN = y;
            this.aw = this.DF = n;
            this.Jc = this.WE = this.VE = this.ye = r;
            this.enabled = y;
            this.vd = 0;
            this.XF = m
        }
        a.prototype.clone = function () {
            var b = new a;
            b.ma = this.ma;
            b.pitch = this.pitch;
            b.md = this.md;
            b.bd = this.bd;
            b.Gf = this.Gf;
            b.width = this.width;
            b.height = this.height;
            b.gM = this.gM;
            b.PE = this.PE;
            b.eh = this.eh;
            b.sb = this.sb;
            b.lF = this.lF;
            b.Ei = this.Ei;
            b.fN = this.fN;
            b.xM = this.xM;
            b.aM = this.aM;
            b.DF = this.DF;
            b.aw = this.aw;
            b.ye = this.ye;
            b.VE = this.VE;
            b.WE = this.WE;
            b.Jc = this.Jc;
            b.enabled = this.enabled;
            b.vd = this.vd;
            b.XF = this.XF;
            return b
        };
        return a
    });
    define("cR", "require,jquery.mod,do,ll,jY,V,dK".split(","), function (a) {
        function b(a) {
            this.j_ = a;
            this.element = document.createElement("div");
            this.o_ = document.createElement("span");
            this.element.appendChild(this.o_);
            this.o_.innerHTML = a.text.split("<br>").join("\n").split("\n").map(e).join("<br>");
            this.iM = y
        }
        function c(a) {
            this.C = a;
            this.oE = d.throttle(this.oE.bind(this), 100);
            this.pE = d.throttle(this.pE.bind(this), 100);
            this.K = document.createElement("div");
            this.K.style.position = "absolute";
            this.K.style.left = 0;
            this.K.style.top = 0;
            this.K.style.right = 0;
            this.K.style.bottom = 0;
            this.K.style.zIndex = 1;
            this.K.style.cursor = "inherit";
            this.K.style.display = "none";
            this.rP = g(this.K);
            this.ki = document.createElement("div");
            this.ki.style.position = "absolute";
            this.ki.style.left = 0;
            this.ki.style.right = 0;
            this.ki.style.zIndex = 1;
            this.ki.style.cursor = "inherit";
            this.K.appendChild(this.ki);
            this.ms = r;
            this.Uy = [];
            this.zf = [];
            this.EU = {};
            this.dz = h.mb;
            this.C.bind(f.D("subtitlesEnabled"), this.YW, this);
            c.K0.forEach(function (a) {
                this.C.bind(f.D(a),
                    this.oE, this)
            }
                .bind(this));
            c.L0.forEach(function (a) {
                this.C.bind(f.D(a), this.pE, this)
            }
                .bind(this));
            this.YW();
            this.oE();
            this.pE()
        }
        function e(a) {
            k.innerHTML = a;
            return k.innerText
        }
        var g = a("jquery.mod"),
        d = a("do"),
        f = a("ll"),
        h = a("jY"),
        j = a("V"),
        p = a("dK");
        c.prototype.clear = function () {
            this.f_(r);
            if (this.C) {
                this.C.unbind(f.D("subtitlesEnabled"), this.YW, this);
                c.K0.forEach(function (a) {
                    this.C.unbind(f.D(a), this.oE, this)
                }
                    .bind(this));
                c.L0.forEach(function (a) {
                    this.C.unbind(f.D(a), this.pE, this)
                }
                    .bind(this));
                this.C =
                    r
            }
        };
        c.prototype.Gb = Q("rP");
        c.prototype.f_ = function (a) {
            if (this.ms != a) {
                this.ms && this.ms.unbind(f.D("activeSubtitles"), this.eU, this, n);
                (this.ms = a) && this.ms.bind(f.D("activeSubtitles"), this.eU, this, n);
                this.eU()
            }
        };
        c.prototype.eU = function () {
            this.qra(this.ms && this.ms.get("activeSubtitles") || [])
        };
        c.prototype.YW = function () {
            this.W = this.C.get("subtitlesEnabled");
            this.mX()
        };
        c.prototype.oE = function () {
            this.dz = this.xB("subtitlesVerticalAlign", [h.nb, h.vc, h.mb], h.mb);
            this.ki.style["text-align"] = this.xB("subtitlesHorizontalAlign",
                    [h.qa, h.Na, h.Lc], h.Lc);
            this.ki.style.bottom = this.dz == h.mb ? this.rh("subtitlesBottom", 0) : "";
            this.ki.style.top = this.dz == h.nb ? this.rh("subtitlesTop", 0) : this.dz == h.vc ? "50%" : "";
            this.ki.style.transform = this.dz == h.vc ? "translate(0, -50%)" : "";
            this.mX()
        };
        c.prototype.pE = function () {
            var a = {};
            a["background-color"] = this.CS("subtitlesBackgroundColor", "subtitlesBackgroundOpacity");
            a.border = [this.rh("subtitlesBorderSize"), "solid", this.Of("subtitlesBorderColor")].join(" ");
            a["box-shadow"] = this.Of("subtitlesShadow", y) ?
                [this.rh("subtitlesShadowHorizontalLength"), this.rh("subtitlesShadowVerticalLength"), this.rh("subtitlesShadowBlurRadius"), this.CS("subtitlesShadowColor", "subtitlesShadowOpacity", "#000000", 0)].join(" ") : "";
            a.display = "inline-block";
            a["font-family"] = p.Fs(this.Of("subtitlesFontFamily"));
            a["font-size"] = this.rh("subtitlesFontSize");
            a.color = this.Of("subtitlesFontColor");
            a["font-weight"] = this.xB("subtitlesFontWeight", ["bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "normal"],
                    "normal");
            a["font-style"] = this.xB("subtitlesFontStyle", ["italic", "normal"], "normal");
            a["margin-bottom"] = this.rh("subtitlesGap");
            a.opacity = this.Of("subtitlesOpacity");
            a["padding-top"] = this.rh("subtitlesPaddingTop");
            a["padding-bottom"] = this.rh("subtitlesPaddingBottom");
            a["padding-left"] = this.rh("subtitlesPaddingLeft");
            a["padding-right"] = this.rh("subtitlesPaddingRight");
            a.position = "relative";
            a["text-align"] = this.xB("subtitlesHorizontalAlign", ["left", "right", "center"], "center");
            a["text-decoration"] = this.Of("subtitlesTextDecoration",
                    ["underline", "overline", "line-through", "none"], "none");
            a["text-shadow"] = [this.rh("subtitlesTextShadowHorizontalLength"), this.rh("subtitlesTextShadowVerticalLength"), this.rh("subtitlesTextShadowBlurRadius"), this.CS("subtitlesTextShadowColor", "subtitlesTextShadowOpacity", "#000000", 0)].join(" ");
            this.EU = a;
            this.Lha()
        };
        c.prototype.qra = function (a) {
            this.Uy = a;
            this.mX()
        };
        c.prototype.mX = function () {
            for (var a = this.W ? this.Uy : [], d = this.zf.length - 1; d >= 0; d--) {
                var c = this.zf[d];
                if (a.indexOf(c.j_) >= 0)
                    break;
                this.ki.removeChild(c.element)
            }
            for (var e =
                    [], f = y; d >= 0; d--) {
                c = this.zf[d];
                if (!c.iM && a.indexOf(c.j_) < 0) {
                    c.iM = n;
                    c.element.style.visibility = "hidden";
                    f = n
                }
                e.splice(0, 0, c)
            }
            f && j.Ma(this.q3, this);
            this.zf = e;
            var g = this.zf.filter(function (a) {
                return !a.iM
            }).map(function (a) {
                return a.j_
            });
            a.filter(function (a) {
                return g.indexOf(a) < 0
            }).forEach(function (a) {
                a = new b(a);
                this.s2(a);
                this.dz == h.mb && this.zf.length > 0 ? this.ki.insertBefore(a.element, this.zf[this.zf.length - 1].element) : this.ki.appendChild(a.element);
                this.zf.push(a)
            }
                .bind(this));
            this.K.style.display = this.zf.length >
                0 ? "block" : "none"
        };
        c.prototype.q3 = function (a) {
            for (var b = y, a = Math.round(200 * a / 1E3), d = 0; d < this.zf.length; d++) {
                var c = this.zf[d];
                if (c.iM) {
                    b = n;
                    if (a >= c.element.clientHeight) {
                        a = a - c.element.clientHeight;
                        this.ki.removeChild(c.element);
                        this.zf.splice(d, 1);
                        d--
                    } else {
                        c.element.style.height = c.element.clientHeight - a + "px";
                        break
                    }
                }
            }
            b && j.Ma(this.q3, this)
        };
        c.prototype.Lha = function () {
            this.zf.forEach(this.s2.bind(this))
        };
        c.prototype.s2 = function (a) {
            for (var b in this.EU)
                a.o_.style[b] = this.EU[b]
        };
        c.prototype.Of = function (a,
            b) {
            return this.C.get(a, b)
        };
        c.prototype.rh = function (a, b) {
            var d = this.C.get(a, b);
            isNaN(d) || (d = Math.round(d) + "px");
            return d
        };
        c.prototype.xB = function (a, b, d) {
            a = this.C.get(a);
            return b.indexOf(a) < 0 ? d : a
        };
        c.prototype.CS = function (a, b, d, c) {
            a = this.C.get(a, d);
            b = this.C.get(b, c);
            return "rgba(" + parseInt("0x" + a.substr(1, 2)) + ", " + parseInt("0x" + a.substr(3, 2)) + ", " + parseInt("0x" + a.substr(5, 2)) + ", " + b + ")"
        };
        c.K0 = ["subtitlesHorizontalAlign", "subtitlesVerticalAlign", "subtitlesTop", "subtitlesBottom"];
        c.L0 = ["subtitlesBackgroundColor",
            "subtitlesBackgroundOpacity", "subtitlesBorderColor", "subtitlesBorderSize", "subtitlesFontFamily", "subtitlesFontColor", "subtitlesFontSize", "subtitlesFontStyle", "subtitlesFontWeight", "subtitlesGap", "subtitlesOpacity", "subtitlesPaddingTop", "subtitlesPaddingBottom", "subtitlesPaddingLeft", "subtitlesPaddingRight", "subtitlesShadow", "subtitlesShadowBlurRadius", "subtitlesShadowHorizontalLength", "subtitlesShadowVerticalLength", "subtitlesShadowColor", "subtitlesTextDecoration", "subtitlesTextShadowBlurRadius",
            "subtitlesTextShadowColor", "subtitlesTextShadowHorizontalLength", "subtitlesTextShadowOpacity", "subtitlesTextShadowVerticalLength"];
        var k = document.createElement("div");
        return c
    });
    define("hy", ["require", "fg", "ll", "cR"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("cR"),
        a = b.extend(e, function (a, b) {
            e.call(this, a);
            this.Vb = b;
            this.Vb.bind(c.D("panorama"), this.oU, this);
            this.oU()
        });
        a.prototype.clear = function () {
            this.Vb && (this.Vb.unbind(c.D("panorama"), this.oU, this), this.Vb = r);
            e.prototype.clear.call(this)
        };
        a.prototype.oU = function () {
            this.f_(this.Vb.get("panorama"))
        };
        return a
    });
    define("it", ["require", "r"], function (a) {
        var b = a("r"),
        a = {},
        c = 180 / Math.PI,
        e = Math.PI / 180;
        a.Kk = function (a, b, c) {
            return this.Jv(a, b, c)
        };
        a.Sn = function (a, b, c) {
            return this.Jv(a, c, b)
        };
        a.Jv = function (a, b, f) {
            return 2 * Math.atan(f * Math.tan(0.5 * a * e) / b) * c
        };
        a.mBa = function (a) {
            return b.browser() == b.dA ? Math.max(a, 20) : a
        };
        return a
    });
    define("cT", ["require"], function () {
        return {
            Un: 0,
            qa: 1,
            Na: 2
        }
    });
    define("hI", ["require"], function () {
        THREE.CopyShader = {
            uniforms: {
                tDiffuse: {
                    value: r
                },
                opacity: {
                    value: 1
                }
            },
            vertexShader: "varying vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",
            fragmentShader: "uniform float opacity;\nuniform sampler2D tDiffuse;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texel = texture2D( tDiffuse, vUv );\n\tgl_FragColor = opacity * texel;\n}"
        };
        return THREE.CopyShader
    });
    define("gM", ["require"], function () {
        THREE.Pass = function () {
            this.rZ = this.enabled = n;
            this.Zp = this.clear = y
        };
        Object.assign(THREE.Pass.prototype, {
            setSize: D(),
            render: function () {
                console.error("THREE.Pass: .render() must be implemented in derived pass.")
            }
        });
        return THREE.Pass
    });
    define("ig", ["require", "gM"], function (a) {
        a("gM");
        THREE.Pass.FullScreenQuad = function () {
            function a(b) {
                this.mJ = new THREE.Mesh(e, b)
            }
            var c = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1),
            e = new THREE.PlaneBufferGeometry(2, 2);
            Object.defineProperty(a.prototype, "material", {
                get: function () {
                    return this.mJ.material
                },
                set: function (a) {
                    this.mJ.material = a
                }
            });
            Object.assign(a.prototype, {
                dispose: function () {
                    this.mJ.geometry.dispose()
                },
                render: function (a) {
                    a.render(this.mJ, c)
                }
            });
            return a
        }
        ();
        return THREE.Pass.FullScreenQuad
    });
    define("fL", ["require", "gM", "ig"], function (a) {
        a("gM");
        a("ig");
        THREE.ShaderPass = function (a, c) {
            THREE.Pass.call(this);
            this.YF = c !== m ? c : "tDiffuse";
            a instanceof THREE.ShaderMaterial ? (this.uniforms = a.uniforms, this.material = a) : a && (this.uniforms = THREE.UniformsUtils.clone(a.uniforms), this.material = new THREE.ShaderMaterial({
                    defines: Object.assign({}, a.defines),
                    uniforms: this.uniforms,
                    vertexShader: a.vertexShader,
                    fragmentShader: a.fragmentShader
                }));
            this.wM = new THREE.Pass.FullScreenQuad(this.material)
        };
        THREE.ShaderPass.prototype =
            Object.assign(Object.create(THREE.Pass.prototype), {
                constructor: THREE.ShaderPass,
                render: function (a, c, e) {
                    this.uniforms[this.YF] && (this.uniforms[this.YF].value = e.texture);
                    this.wM.material = this.material;
                    this.Zp ? a.setRenderTarget(r) : (a.setRenderTarget(c), this.clear && a.clear(a.QAa, a.RAa, a.SAa));
                    this.wM.render(a)
                }
            });
        return THREE.ShaderPass
    });
    define("cN", ["require", "hI", "fL"], function (a) {
        a("hI");
        a("fL");
        THREE.EffectComposer = function (a, c) {
            this.hf = a;
            if (c === m) {
                var e = {
                    minFilter: THREE.LinearFilter,
                    magFilter: THREE.LinearFilter,
                    format: THREE.RGBAFormat,
                    stencilBuffer: y
                },
                g = a.getSize(new THREE.Vector2);
                this.Ml = a.getPixelRatio();
                this.X = g.width;
                this.ia = g.height;
                c = new THREE.WebGLRenderTarget(this.X * this.Ml, this.ia * this.Ml, e);
                c.texture.name = "EffectComposer.rt1"
            } else
                this.Ml = 1, this.X = c.width, this.ia = c.height;
            this.Qz = c;
            this.Rz = c.clone();
            this.Rz.texture.name =
                "EffectComposer.rt2";
            this.fG = this.Qz;
            this.EF = this.Rz;
            this.Zp = n;
            this.Os = [];
            this.Dua = new THREE.ShaderPass(THREE.CopyShader);
            this.Aua = new THREE.Clock
        };
        Object.assign(THREE.EffectComposer.prototype, {
            swapBuffers: function () {
                var a = this.EF;
                this.EF = this.fG;
                this.fG = a
            },
            addPass: function (a) {
                this.Os.push(a);
                a.setSize(this.X * this.Ml, this.ia * this.Ml)
            },
            insertPass: function (a, c) {
                this.Os.splice(c, 0, a)
            },
            Fwa: function (a) {
                for (a += 1; a < this.Os.length; a++)
                    if (this.Os[a].enabled)
                        return y;
                return n
            },
            render: function (a) {
                a === m && (a =
                        this.Aua.getDelta());
                var c = this.hf.getRenderTarget(),
                e = y,
                g,
                d,
                f = this.Os.length;
                for (d = 0; d < f; d++)
                    if (g = this.Os[d], g.enabled !== y) {
                        g.Zp = this.Zp && this.Fwa(d);
                        g.render(this.hf, this.fG, this.EF, a, e);
                        if (g.rZ) {
                            if (e) {
                                var h = this.hf.getContext(),
                                j = this.hf.state.buffers.stencil;
                                j.setFunc(h.NOTEQUAL, 1, 4294967295);
                                this.Dua.render(this.hf, this.fG, this.EF, a);
                                j.setFunc(h.EQUAL, 1, 4294967295)
                            }
                            this.swapBuffers()
                        }
                        THREE.MaskPass !== m && (g instanceof THREE.MaskPass ? e = n : g instanceof THREE.ClearMaskPass && (e = y))
                    }
                this.hf.setRenderTarget(c)
            },
            reset: function (a) {
                a === m && (a = this.hf.getSize(new THREE.Vector2), this.Ml = this.hf.getPixelRatio(), this.X = a.width, this.ia = a.height, a = this.Qz.clone(), a.setSize(this.X * this.Ml, this.ia * this.Ml));
                this.Qz.dispose();
                this.Rz.dispose();
                this.Qz = a;
                this.Rz = a.clone();
                this.fG = this.Qz;
                this.EF = this.Rz
            },
            setSize: function (a, c) {
                this.X = a;
                this.ia = c;
                var e = this.X * this.Ml,
                g = this.ia * this.Ml;
                this.Qz.setSize(e, g);
                this.Rz.setSize(e, g);
                for (var d = 0; d < this.Os.length; d++)
                    this.Os[d].setSize(e, g)
            },
            setPixelRatio: function (a) {
                this.Ml = a;
                this.setSize(this.X, this.ia)
            }
        });
        return THREE.EffectComposer
    });
    define("w", ["require"], function () {
        THREE.D_ = {
            uniforms: {
                tDiffuse1: {
                    value: r
                },
                tDiffuse2: {
                    value: r
                },
                mixRatio: {
                    value: 0.5
                },
                opacity: {
                    value: 1
                }
            },
            vertexShader: "varying vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",
            fragmentShader: "uniform float opacity;\nuniform float mixRatio;\nuniform sampler2D tDiffuse1;\nuniform sampler2D tDiffuse2;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texel1 = texture2D( tDiffuse1, vUv );\n\tvec4 texel2 = texture2D( tDiffuse2, vUv );\n\tgl_FragColor = opacity * mix( texel1, texel2, mixRatio );\n}"
        };
        return THREE.D_
    });
    define("iK", ["require", "gM"], function (a) {
        a("gM");
        THREE.CustomRenderPass = function (a) {
            THREE.Pass.call(this);
            this.Oxa = a;
            this.Jc = this.Gj = r;
            this.clear = n;
            this.rZ = this.clearDepth = y
        };
        THREE.CustomRenderPass.prototype = Object.assign(Object.create(THREE.Pass.prototype), {
            constructor: THREE.CustomRenderPass,
            render: function (a, c, e) {
                c = a.autoClear;
                a.autoClear = y;
                this.Oxa(a, this.Gj, this.Jc, this.Zp ? r : e, this.clear);
                a.autoClear = c
            }
        });
        return THREE.CustomRenderPass
    });
    define("iS", ["require", "gM", "hI", "ig"], function (a) {
        a("gM");
        a("hI");
        a("ig");
        THREE.SavePass = function (a) {
            THREE.Pass.call(this);
            var c = THREE.CopyShader;
            this.YF = "tDiffuse";
            this.uniforms = THREE.UniformsUtils.clone(c.uniforms);
            this.material = new THREE.ShaderMaterial({
                uniforms: this.uniforms,
                vertexShader: c.vertexShader,
                fragmentShader: c.fragmentShader
            });
            this.renderTarget = a;
            this.renderTarget === m && (this.renderTarget = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, {
                    minFilter: THREE.LinearFilter,
                    magFilter: THREE.LinearFilter,
                    format: THREE.RGBFormat,
                    stencilBuffer: y
                }), this.renderTarget.texture.name = "SavePass.rt");
            this.rZ = y;
            this.wM = new THREE.Pass.FullScreenQuad(this.material)
        };
        THREE.SavePass.prototype = Object.assign(Object.create(THREE.Pass.prototype), {
            constructor: THREE.SavePass,
            render: function (a, c, e) {
                this.uniforms[this.YF] && (this.uniforms[this.YF].value = e.texture);
                a.setRenderTarget(this.renderTarget);
                this.clear && a.clear();
                this.wM.render(a)
            }
        });
        return THREE.SavePass
    });
    define("cA", "require,cN,w,iK,hI,iS,fL".split(","), function (a) {
        function b(a, b) {
            this.g = a;
            this.Ey = b;
            this.Pl = new THREE.CustomRenderPass(b);
            this.Pl.Zp = y;
            this.NK = new THREE.SavePass;
            this.NK.enabled = n;
            this.Gq = new THREE.ShaderPass(THREE.D_, "tDiffuse1");
            this.Gq.uniforms.tDiffuse2.value = this.NK.renderTarget.texture;
            this.Gq.uniforms.mixRatio.value = 0.8;
            this.Gq.Zp = n;
            this.Gq.enabled = n;
            this.m8 = new THREE.ShaderPass(THREE.CopyShader);
            this.m8.Zp = n;
            this.Ui = new THREE.EffectComposer(a);
            this.Ui.addPass(this.Pl);
            this.Ui.addPass(this.Gq);
            this.Ui.addPass(this.NK);
            this.Ui.addPass(this.m8);
            this.Oq = this.Pq = m
        }
        a("cN");
        a("w");
        a("iK");
        a("hI");
        a("iS");
        a("fL");
        var c = new THREE.Vector2;
        b.prototype.destroy = function () {
            this.Ui = this.Gq = this.NK = this.Pl = this.Ey = this.g = r
        };
        b.prototype.start = function () {
            this.Gq.uniforms.mixRatio.value = 0;
            this.$R = 3
        };
        b.prototype.render = function (a, b) {
            this.g.getSize(c);
            if (this.Pq !== c.width || this.Oq !== c.height) {
                this.Pq = c.width;
                this.Oq = c.height;
                this.Ui.setSize(this.Pq, this.Oq)
            }
            this.Pl.Gj = a;
            this.Pl.Jc = b;
            if (this.$R > 0) {
                this.$R--;
                if (this.$R === 0)
                    this.Gq.uniforms.mixRatio.value = 0.65
            }
            this.Ui.render()
        };
        return b
    });
    define("jw", ["require"], function () {
        THREE.d0 = {
            uniforms: {
                tDiffuse: {
                    value: r
                },
                resolution: {
                    value: new THREE.Vector2(1 / 1024, 1 / 512)
                }
            },
            vertexShader: "varying vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",
            fragmentShader: 'precision highp float;\n\nuniform sampler2D tDiffuse;\n\nuniform vec2 resolution;\n\nvarying vec2 vUv;\n\n// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n\n//----------------------------------------------------------------------------------\n// File:        es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag\n// SDK Version: v3.00\n// Email:       gameworks@nvidia.com\n// Site:        http://developer.nvidia.com/\n//\n// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions\n// are met:\n//  * Redistributions of source code must retain the above copyright\n//    notice, this list of conditions and the following disclaimer.\n//  * Redistributions in binary form must reproduce the above copyright\n//    notice, this list of conditions and the following disclaimer in the\n//    documentation and/or other materials provided with the distribution.\n//  * Neither the name of NVIDIA CORPORATION nor the names of its\n//    contributors may be used to endorse or promote products derived\n//    from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS\'\' AND ANY\n// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n// PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n//----------------------------------------------------------------------------------\n\n#define FXAA_PC 1\n#define FXAA_GLSL_100 1\n#define FXAA_QUALITY_PRESET 12\n\n#define FXAA_GREEN_AS_LUMA 1\n\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_PC_CONSOLE\n    //\n    // The console algorithm for PC is included\n    // for developers targeting really low spec machines.\n    // Likely better to just run FXAA_PC, and use a really low preset.\n    //\n    #define FXAA_PC_CONSOLE 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_GLSL_120\n    #define FXAA_GLSL_120 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_GLSL_130\n    #define FXAA_GLSL_130 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_HLSL_3\n    #define FXAA_HLSL_3 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_HLSL_4\n    #define FXAA_HLSL_4 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_HLSL_5\n    #define FXAA_HLSL_5 0\n#endif\n/*==========================================================================*/\n#ifndef FXAA_GREEN_AS_LUMA\n    //\n    // For those using non-linear color,\n    // and either not able to get luma in alpha, or not wanting to,\n    // this enables FXAA to run using green as a proxy for luma.\n    // So with this enabled, no need to pack luma in alpha.\n    //\n    // This will turn off AA on anything which lacks some amount of green.\n    // Pure red and blue or combination of only R and B, will get no AA.\n    //\n    // Might want to lower the settings for both,\n    //    fxaaConsoleEdgeThresholdMin\n    //    fxaaQualityEdgeThresholdMin\n    // In order to insure AA does not get turned off on colors\n    // which contain a minor amount of green.\n    //\n    // 1 = On.\n    // 0 = Off.\n    //\n    #define FXAA_GREEN_AS_LUMA 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_EARLY_EXIT\n    //\n    // Controls algorithm\'s early exit path.\n    // On PS3 turning this ON adds 2 cycles to the shader.\n    // On 360 turning this OFF adds 10ths of a millisecond to the shader.\n    // Turning this off on console will result in a more blurry image.\n    // So this defaults to on.\n    //\n    // 1 = On.\n    // 0 = Off.\n    //\n    #define FXAA_EARLY_EXIT 1\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_DISCARD\n    //\n    // Only valid for PC OpenGL currently.\n    // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n    //\n    // 1 = Use discard on pixels which don\'t need AA.\n    //     For APIs which enable concurrent TEX+ROP from same surface.\n    // 0 = Return unchanged color on pixels which don\'t need AA.\n    //\n    #define FXAA_DISCARD 0\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_FAST_PIXEL_OFFSET\n    //\n    // Used for GLSL 120 only.\n    //\n    // 1 = GL API supports fast pixel offsets\n    // 0 = do not use fast pixel offsets\n    //\n    #ifdef GL_EXT_gpu_shader4\n        #define FXAA_FAST_PIXEL_OFFSET 1\n    #endif\n    #ifdef GL_NV_gpu_shader5\n        #define FXAA_FAST_PIXEL_OFFSET 1\n    #endif\n    #ifdef GL_ARB_gpu_shader5\n        #define FXAA_FAST_PIXEL_OFFSET 1\n    #endif\n    #ifndef FXAA_FAST_PIXEL_OFFSET\n        #define FXAA_FAST_PIXEL_OFFSET 0\n    #endif\n#endif\n/*--------------------------------------------------------------------------*/\n#ifndef FXAA_GATHER4_ALPHA\n    //\n    // 1 = API supports gather4 on alpha channel.\n    // 0 = API does not support gather4 on alpha channel.\n    //\n    #if (FXAA_HLSL_5 == 1)\n        #define FXAA_GATHER4_ALPHA 1\n    #endif\n    #ifdef GL_ARB_gpu_shader5\n        #define FXAA_GATHER4_ALPHA 1\n    #endif\n    #ifdef GL_NV_gpu_shader5\n        #define FXAA_GATHER4_ALPHA 1\n    #endif\n    #ifndef FXAA_GATHER4_ALPHA\n        #define FXAA_GATHER4_ALPHA 0\n    #endif\n#endif\n\n\n/*============================================================================\n                        FXAA QUALITY - TUNING KNOBS\n------------------------------------------------------------------------------\nNOTE the other tuning knobs are now in the shader function inputs!\n============================================================================*/\n#ifndef FXAA_QUALITY_PRESET\n    //\n    // Choose the quality preset.\n    // This needs to be compiled into the shader as it effects code.\n    // Best option to include multiple presets is to\n    // in each shader define the preset, then include this file.\n    //\n    // OPTIONS\n    // -----------------------------------------------------------------------\n    // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\n    // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\n    // 39       - no dither, very expensive\n    //\n    // NOTES\n    // -----------------------------------------------------------------------\n    // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\n    // 13 = about same speed as FXAA 3.9 and better than 12\n    // 23 = closest to FXAA 3.9 visually and performance wise\n    //  _ = the lowest digit is directly related to performance\n    // _  = the highest digit is directly related to style\n    //\n    #define FXAA_QUALITY_PRESET 12\n#endif\n\n\n/*============================================================================\n\n                           FXAA QUALITY - PRESETS\n\n============================================================================*/\n\n/*============================================================================\n                     FXAA QUALITY - MEDIUM DITHER PRESETS\n============================================================================*/\n#if (FXAA_QUALITY_PRESET == 10)\n    #define FXAA_QUALITY_PS 3\n    #define FXAA_QUALITY_P0 1.5\n    #define FXAA_QUALITY_P1 3.0\n    #define FXAA_QUALITY_P2 12.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 11)\n    #define FXAA_QUALITY_PS 4\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 3.0\n    #define FXAA_QUALITY_P3 12.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 12)\n    #define FXAA_QUALITY_PS 5\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 4.0\n    #define FXAA_QUALITY_P4 12.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 13)\n    #define FXAA_QUALITY_PS 6\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 4.0\n    #define FXAA_QUALITY_P5 12.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 14)\n    #define FXAA_QUALITY_PS 7\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 4.0\n    #define FXAA_QUALITY_P6 12.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 15)\n    #define FXAA_QUALITY_PS 8\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 4.0\n    #define FXAA_QUALITY_P7 12.0\n#endif\n\n/*============================================================================\n                     FXAA QUALITY - LOW DITHER PRESETS\n============================================================================*/\n#if (FXAA_QUALITY_PRESET == 20)\n    #define FXAA_QUALITY_PS 3\n    #define FXAA_QUALITY_P0 1.5\n    #define FXAA_QUALITY_P1 2.0\n    #define FXAA_QUALITY_P2 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 21)\n    #define FXAA_QUALITY_PS 4\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 22)\n    #define FXAA_QUALITY_PS 5\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 23)\n    #define FXAA_QUALITY_PS 6\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 24)\n    #define FXAA_QUALITY_PS 7\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 3.0\n    #define FXAA_QUALITY_P6 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 25)\n    #define FXAA_QUALITY_PS 8\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 4.0\n    #define FXAA_QUALITY_P7 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 26)\n    #define FXAA_QUALITY_PS 9\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 2.0\n    #define FXAA_QUALITY_P7 4.0\n    #define FXAA_QUALITY_P8 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 27)\n    #define FXAA_QUALITY_PS 10\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 2.0\n    #define FXAA_QUALITY_P7 2.0\n    #define FXAA_QUALITY_P8 4.0\n    #define FXAA_QUALITY_P9 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 28)\n    #define FXAA_QUALITY_PS 11\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 2.0\n    #define FXAA_QUALITY_P7 2.0\n    #define FXAA_QUALITY_P8 2.0\n    #define FXAA_QUALITY_P9 4.0\n    #define FXAA_QUALITY_P10 8.0\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_QUALITY_PRESET == 29)\n    #define FXAA_QUALITY_PS 12\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.5\n    #define FXAA_QUALITY_P2 2.0\n    #define FXAA_QUALITY_P3 2.0\n    #define FXAA_QUALITY_P4 2.0\n    #define FXAA_QUALITY_P5 2.0\n    #define FXAA_QUALITY_P6 2.0\n    #define FXAA_QUALITY_P7 2.0\n    #define FXAA_QUALITY_P8 2.0\n    #define FXAA_QUALITY_P9 2.0\n    #define FXAA_QUALITY_P10 4.0\n    #define FXAA_QUALITY_P11 8.0\n#endif\n\n/*============================================================================\n                     FXAA QUALITY - EXTREME QUALITY\n============================================================================*/\n#if (FXAA_QUALITY_PRESET == 39)\n    #define FXAA_QUALITY_PS 12\n    #define FXAA_QUALITY_P0 1.0\n    #define FXAA_QUALITY_P1 1.0\n    #define FXAA_QUALITY_P2 1.0\n    #define FXAA_QUALITY_P3 1.0\n    #define FXAA_QUALITY_P4 1.0\n    #define FXAA_QUALITY_P5 1.5\n    #define FXAA_QUALITY_P6 2.0\n    #define FXAA_QUALITY_P7 2.0\n    #define FXAA_QUALITY_P8 2.0\n    #define FXAA_QUALITY_P9 2.0\n    #define FXAA_QUALITY_P10 4.0\n    #define FXAA_QUALITY_P11 8.0\n#endif\n\n\n\n/*============================================================================\n\n                                API PORTING\n\n============================================================================*/\n#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\n    #define FxaaBool bool\n    #define FxaaDiscard discard\n    #define FxaaFloat float\n    #define FxaaFloat2 vec2\n    #define FxaaFloat3 vec3\n    #define FxaaFloat4 vec4\n    #define FxaaHalf float\n    #define FxaaHalf2 vec2\n    #define FxaaHalf3 vec3\n    #define FxaaHalf4 vec4\n    #define FxaaInt2 ivec2\n    #define FxaaSat(x) clamp(x, 0.0, 1.0)\n    #define FxaaTex sampler2D\n#else\n    #define FxaaBool bool\n    #define FxaaDiscard clip(-1)\n    #define FxaaFloat float\n    #define FxaaFloat2 float2\n    #define FxaaFloat3 float3\n    #define FxaaFloat4 float4\n    #define FxaaHalf half\n    #define FxaaHalf2 half2\n    #define FxaaHalf3 half3\n    #define FxaaHalf4 half4\n    #define FxaaSat(x) saturate(x)\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_GLSL_100 == 1)\n  #define FxaaTexTop(t, p) texture2D(t, p, 0.0)\n  #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_GLSL_120 == 1)\n    // Requires,\n    //  #version 120\n    // And at least,\n    //  #extension GL_EXT_gpu_shader4 : enable\n    //  (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\n    #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\n    #if (FXAA_FAST_PIXEL_OFFSET == 1)\n        #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\n    #else\n        #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\n    #endif\n    #if (FXAA_GATHER4_ALPHA == 1)\n        // use #extension GL_ARB_gpu_shader5 : enable\n        #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n        #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n        #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n        #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n    #endif\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_GLSL_130 == 1)\n    // Requires "#version 130" or better\n    #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\n    #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\n    #if (FXAA_GATHER4_ALPHA == 1)\n        // use #extension GL_ARB_gpu_shader5 : enable\n        #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n        #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n        #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n        #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n    #endif\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_HLSL_3 == 1)\n    #define FxaaInt2 float2\n    #define FxaaTex sampler2D\n    #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\n    #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_HLSL_4 == 1)\n    #define FxaaInt2 int2\n    struct FxaaTex { SamplerState smpl; Texture2D tex; };\n    #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n    #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n#endif\n/*--------------------------------------------------------------------------*/\n#if (FXAA_HLSL_5 == 1)\n    #define FxaaInt2 int2\n    struct FxaaTex { SamplerState smpl; Texture2D tex; };\n    #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n    #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n    #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\n    #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\n    #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\n    #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\n#endif\n\n\n/*============================================================================\n                   GREEN AS LUMA OPTION SUPPORT FUNCTION\n============================================================================*/\n#if (FXAA_GREEN_AS_LUMA == 0)\n    FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\n#else\n    FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\n#endif\n\n\n\n\n/*============================================================================\n\n                             FXAA3 QUALITY - PC\n\n============================================================================*/\n#if (FXAA_PC == 1)\n/*--------------------------------------------------------------------------*/\nFxaaFloat4 FxaaPixelShader(\n    //\n    // Use noperspective interpolation here (turn off perspective interpolation).\n    // {xy} = center of pixel\n    FxaaFloat2 pos,\n    //\n    // Used only for FXAA Console, and not used on the 360 version.\n    // Use noperspective interpolation here (turn off perspective interpolation).\n    // {xy_} = upper left of pixel\n    // {_zw} = lower right of pixel\n    FxaaFloat4 fxaaConsolePosPos,\n    //\n    // Input color texture.\n    // {rgb_} = color in linear or perceptual color space\n    // if (FXAA_GREEN_AS_LUMA == 0)\n    //     {__a} = luma in perceptual color space (not linear)\n    FxaaTex tex,\n    //\n    // Only used on the optimized 360 version of FXAA Console.\n    // For everything but 360, just use the same input here as for "tex".\n    // For 360, same texture, just alias with a 2nd sampler.\n    // This sampler needs to have an exponent bias of -1.\n    FxaaTex fxaaConsole360TexExpBiasNegOne,\n    //\n    // Only used on the optimized 360 version of FXAA Console.\n    // For everything but 360, just use the same input here as for "tex".\n    // For 360, same texture, just alias with a 3nd sampler.\n    // This sampler needs to have an exponent bias of -2.\n    FxaaTex fxaaConsole360TexExpBiasNegTwo,\n    //\n    // Only used on FXAA Quality.\n    // This must be from a constant/uniform.\n    // {x_} = 1.0/screenWidthInPixels\n    // {_y} = 1.0/screenHeightInPixels\n    FxaaFloat2 fxaaQualityRcpFrame,\n    //\n    // Only used on FXAA Console.\n    // This must be from a constant/uniform.\n    // This effects sub-pixel AA quality and inversely sharpness.\n    //   Where N ranges between,\n    //     N = 0.50 (default)\n    //     N = 0.33 (sharper)\n    // {x__} = -N/screenWidthInPixels\n    // {_y_} = -N/screenHeightInPixels\n    // {_z_} =  N/screenWidthInPixels\n    // {__w} =  N/screenHeightInPixels\n    FxaaFloat4 fxaaConsoleRcpFrameOpt,\n    //\n    // Only used on FXAA Console.\n    // Not used on 360, but used on PS3 and PC.\n    // This must be from a constant/uniform.\n    // {x__} = -2.0/screenWidthInPixels\n    // {_y_} = -2.0/screenHeightInPixels\n    // {_z_} =  2.0/screenWidthInPixels\n    // {__w} =  2.0/screenHeightInPixels\n    FxaaFloat4 fxaaConsoleRcpFrameOpt2,\n    //\n    // Only used on FXAA Console.\n    // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\n    // This must be from a constant/uniform.\n    // {x__} =  8.0/screenWidthInPixels\n    // {_y_} =  8.0/screenHeightInPixels\n    // {_z_} = -4.0/screenWidthInPixels\n    // {__w} = -4.0/screenHeightInPixels\n    FxaaFloat4 fxaaConsole360RcpFrameOpt2,\n    //\n    // Only used on FXAA Quality.\n    // This used to be the FXAA_QUALITY_SUBPIX define.\n    // It is here now to allow easier tuning.\n    // Choose the amount of sub-pixel aliasing removal.\n    // This can effect sharpness.\n    //   1.00 - upper limit (softer)\n    //   0.75 - default amount of filtering\n    //   0.50 - lower limit (sharper, less sub-pixel aliasing removal)\n    //   0.25 - almost off\n    //   0.00 - completely off\n    FxaaFloat fxaaQualitySubpix,\n    //\n    // Only used on FXAA Quality.\n    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\n    // It is here now to allow easier tuning.\n    // The minimum amount of local contrast required to apply algorithm.\n    //   0.333 - too little (faster)\n    //   0.250 - low quality\n    //   0.166 - default\n    //   0.125 - high quality\n    //   0.063 - overkill (slower)\n    FxaaFloat fxaaQualityEdgeThreshold,\n    //\n    // Only used on FXAA Quality.\n    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\n    // It is here now to allow easier tuning.\n    // Trims the algorithm from processing darks.\n    //   0.0833 - upper limit (default, the start of visible unfiltered edges)\n    //   0.0625 - high quality (faster)\n    //   0.0312 - visible limit (slower)\n    // Special notes when using FXAA_GREEN_AS_LUMA,\n    //   Likely want to set this to zero.\n    //   As colors that are mostly not-green\n    //   will appear very dark in the green channel!\n    //   Tune by looking at mostly non-green content,\n    //   then start at zero and increase until aliasing is a problem.\n    FxaaFloat fxaaQualityEdgeThresholdMin,\n    //\n    // Only used on FXAA Console.\n    // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\n    // It is here now to allow easier tuning.\n    // This does not effect PS3, as this needs to be compiled in.\n    //   Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\n    //   Due to the PS3 being ALU bound,\n    //   there are only three safe values here: 2 and 4 and 8.\n    //   These options use the shaders ability to a free *|/ by 2|4|8.\n    // For all other platforms can be a non-power of two.\n    //   8.0 is sharper (default!!!)\n    //   4.0 is softer\n    //   2.0 is really soft (good only for vector graphics inputs)\n    FxaaFloat fxaaConsoleEdgeSharpness,\n    //\n    // Only used on FXAA Console.\n    // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\n    // It is here now to allow easier tuning.\n    // This does not effect PS3, as this needs to be compiled in.\n    //   Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\n    //   Due to the PS3 being ALU bound,\n    //   there are only two safe values here: 1/4 and 1/8.\n    //   These options use the shaders ability to a free *|/ by 2|4|8.\n    // The console setting has a different mapping than the quality setting.\n    // Other platforms can use other values.\n    //   0.125 leaves less aliasing, but is softer (default!!!)\n    //   0.25 leaves more aliasing, and is sharper\n    FxaaFloat fxaaConsoleEdgeThreshold,\n    //\n    // Only used on FXAA Console.\n    // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\n    // It is here now to allow easier tuning.\n    // Trims the algorithm from processing darks.\n    // The console setting has a different mapping than the quality setting.\n    // This only applies when FXAA_EARLY_EXIT is 1.\n    // This does not apply to PS3,\n    // PS3 was simplified to avoid more shader instructions.\n    //   0.06 - faster but more aliasing in darks\n    //   0.05 - default\n    //   0.04 - slower and less aliasing in darks\n    // Special notes when using FXAA_GREEN_AS_LUMA,\n    //   Likely want to set this to zero.\n    //   As colors that are mostly not-green\n    //   will appear very dark in the green channel!\n    //   Tune by looking at mostly non-green content,\n    //   then start at zero and increase until aliasing is a problem.\n    FxaaFloat fxaaConsoleEdgeThresholdMin,\n    //\n    // Extra constants for 360 FXAA Console only.\n    // Use zeros or anything else for other platforms.\n    // These must be in physical constant registers and NOT immediates.\n    // Immediates will result in compiler un-optimizing.\n    // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\n    FxaaFloat4 fxaaConsole360ConstDir\n) {\n/*--------------------------------------------------------------------------*/\n    FxaaFloat2 posM;\n    posM.x = pos.x;\n    posM.y = pos.y;\n    #if (FXAA_GATHER4_ALPHA == 1)\n        #if (FXAA_DISCARD == 0)\n            FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n            #if (FXAA_GREEN_AS_LUMA == 0)\n                #define lumaM rgbyM.w\n            #else\n                #define lumaM rgbyM.y\n            #endif\n        #endif\n        #if (FXAA_GREEN_AS_LUMA == 0)\n            FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\n            FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\n        #else\n            FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\n            FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\n        #endif\n        #if (FXAA_DISCARD == 1)\n            #define lumaM luma4A.w\n        #endif\n        #define lumaE luma4A.z\n        #define lumaS luma4A.x\n        #define lumaSE luma4A.y\n        #define lumaNW luma4B.w\n        #define lumaN luma4B.z\n        #define lumaW luma4B.x\n    #else\n        FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n        #if (FXAA_GREEN_AS_LUMA == 0)\n            #define lumaM rgbyM.w\n        #else\n            #define lumaM rgbyM.y\n        #endif\n        #if (FXAA_GLSL_100 == 1)\n          FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\n        #else\n          FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\n        #endif\n    #endif\n/*--------------------------------------------------------------------------*/\n    FxaaFloat maxSM = max(lumaS, lumaM);\n    FxaaFloat minSM = min(lumaS, lumaM);\n    FxaaFloat maxESM = max(lumaE, maxSM);\n    FxaaFloat minESM = min(lumaE, minSM);\n    FxaaFloat maxWN = max(lumaN, lumaW);\n    FxaaFloat minWN = min(lumaN, lumaW);\n    FxaaFloat rangeMax = max(maxWN, maxESM);\n    FxaaFloat rangeMin = min(minWN, minESM);\n    FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n    FxaaFloat range = rangeMax - rangeMin;\n    FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n    FxaaBool earlyExit = range < rangeMaxClamped;\n/*--------------------------------------------------------------------------*/\n    if(earlyExit)\n        #if (FXAA_DISCARD == 1)\n            FxaaDiscard;\n        #else\n            return rgbyM;\n        #endif\n/*--------------------------------------------------------------------------*/\n    #if (FXAA_GATHER4_ALPHA == 0)\n        #if (FXAA_GLSL_100 == 1)\n          FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\n        #else\n          FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\n          FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n        #endif\n    #else\n        FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\n        FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n    #endif\n/*--------------------------------------------------------------------------*/\n    FxaaFloat lumaNS = lumaN + lumaS;\n    FxaaFloat lumaWE = lumaW + lumaE;\n    FxaaFloat subpixRcpRange = 1.0/range;\n    FxaaFloat subpixNSWE = lumaNS + lumaWE;\n    FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\n    FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat lumaNESE = lumaNE + lumaSE;\n    FxaaFloat lumaNWNE = lumaNW + lumaNE;\n    FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n    FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat lumaNWSW = lumaNW + lumaSW;\n    FxaaFloat lumaSWSE = lumaSW + lumaSE;\n    FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n    FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n    FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n    FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n    FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\n    FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\n    FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\n    FxaaBool horzSpan = edgeHorz >= edgeVert;\n    FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n/*--------------------------------------------------------------------------*/\n    if(!horzSpan) lumaN = lumaW;\n    if(!horzSpan) lumaS = lumaE;\n    if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n    FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat gradientN = lumaN - lumaM;\n    FxaaFloat gradientS = lumaS - lumaM;\n    FxaaFloat lumaNN = lumaN + lumaM;\n    FxaaFloat lumaSS = lumaS + lumaM;\n    FxaaBool pairN = abs(gradientN) >= abs(gradientS);\n    FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\n    if(pairN) lengthSign = -lengthSign;\n    FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\n/*--------------------------------------------------------------------------*/\n    FxaaFloat2 posB;\n    posB.x = posM.x;\n    posB.y = posM.y;\n    FxaaFloat2 offNP;\n    offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n    offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n    if(!horzSpan) posB.x += lengthSign * 0.5;\n    if( horzSpan) posB.y += lengthSign * 0.5;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat2 posN;\n    posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\n    posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\n    FxaaFloat2 posP;\n    posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\n    posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\n    FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\n    FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\n    FxaaFloat subpixE = subpixC * subpixC;\n    FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\n/*--------------------------------------------------------------------------*/\n    if(!pairN) lumaNN = lumaSS;\n    FxaaFloat gradientScaled = gradient * 1.0/4.0;\n    FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\n    FxaaFloat subpixF = subpixD * subpixE;\n    FxaaBool lumaMLTZero = lumaMM < 0.0;\n/*--------------------------------------------------------------------------*/\n    lumaEndN -= lumaNN * 0.5;\n    lumaEndP -= lumaNN * 0.5;\n    FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\n    FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\n    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\n    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\n    FxaaBool doneNP = (!doneN) || (!doneP);\n    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\n    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\n/*--------------------------------------------------------------------------*/\n    if(doneNP) {\n        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n        doneN = abs(lumaEndN) >= gradientScaled;\n        doneP = abs(lumaEndP) >= gradientScaled;\n        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\n        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\n        doneNP = (!doneN) || (!doneP);\n        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\n        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\n/*--------------------------------------------------------------------------*/\n        #if (FXAA_QUALITY_PS > 3)\n        if(doneNP) {\n            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n            doneN = abs(lumaEndN) >= gradientScaled;\n            doneP = abs(lumaEndP) >= gradientScaled;\n            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\n            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\n            doneNP = (!doneN) || (!doneP);\n            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\n            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\n/*--------------------------------------------------------------------------*/\n            #if (FXAA_QUALITY_PS > 4)\n            if(doneNP) {\n                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                doneN = abs(lumaEndN) >= gradientScaled;\n                doneP = abs(lumaEndP) >= gradientScaled;\n                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\n                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\n                doneNP = (!doneN) || (!doneP);\n                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\n                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\n/*--------------------------------------------------------------------------*/\n                #if (FXAA_QUALITY_PS > 5)\n                if(doneNP) {\n                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                    doneN = abs(lumaEndN) >= gradientScaled;\n                    doneP = abs(lumaEndP) >= gradientScaled;\n                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\n                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\n                    doneNP = (!doneN) || (!doneP);\n                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\n                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\n/*--------------------------------------------------------------------------*/\n                    #if (FXAA_QUALITY_PS > 6)\n                    if(doneNP) {\n                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                        doneN = abs(lumaEndN) >= gradientScaled;\n                        doneP = abs(lumaEndP) >= gradientScaled;\n                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\n                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\n                        doneNP = (!doneN) || (!doneP);\n                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\n                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\n/*--------------------------------------------------------------------------*/\n                        #if (FXAA_QUALITY_PS > 7)\n                        if(doneNP) {\n                            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                            doneN = abs(lumaEndN) >= gradientScaled;\n                            doneP = abs(lumaEndP) >= gradientScaled;\n                            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\n                            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\n                            doneNP = (!doneN) || (!doneP);\n                            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\n                            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\n/*--------------------------------------------------------------------------*/\n    #if (FXAA_QUALITY_PS > 8)\n    if(doneNP) {\n        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n        doneN = abs(lumaEndN) >= gradientScaled;\n        doneP = abs(lumaEndP) >= gradientScaled;\n        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\n        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\n        doneNP = (!doneN) || (!doneP);\n        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\n        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\n/*--------------------------------------------------------------------------*/\n        #if (FXAA_QUALITY_PS > 9)\n        if(doneNP) {\n            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n            doneN = abs(lumaEndN) >= gradientScaled;\n            doneP = abs(lumaEndP) >= gradientScaled;\n            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\n            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\n            doneNP = (!doneN) || (!doneP);\n            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\n            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\n/*--------------------------------------------------------------------------*/\n            #if (FXAA_QUALITY_PS > 10)\n            if(doneNP) {\n                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                doneN = abs(lumaEndN) >= gradientScaled;\n                doneP = abs(lumaEndP) >= gradientScaled;\n                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\n                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\n                doneNP = (!doneN) || (!doneP);\n                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\n                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\n/*--------------------------------------------------------------------------*/\n                #if (FXAA_QUALITY_PS > 11)\n                if(doneNP) {\n                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                    doneN = abs(lumaEndN) >= gradientScaled;\n                    doneP = abs(lumaEndP) >= gradientScaled;\n                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\n                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\n                    doneNP = (!doneN) || (!doneP);\n                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\n                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\n/*--------------------------------------------------------------------------*/\n                    #if (FXAA_QUALITY_PS > 12)\n                    if(doneNP) {\n                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n                        doneN = abs(lumaEndN) >= gradientScaled;\n                        doneP = abs(lumaEndP) >= gradientScaled;\n                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\n                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\n                        doneNP = (!doneN) || (!doneP);\n                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\n                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\n/*--------------------------------------------------------------------------*/\n                    }\n                    #endif\n/*--------------------------------------------------------------------------*/\n                }\n                #endif\n/*--------------------------------------------------------------------------*/\n            }\n            #endif\n/*--------------------------------------------------------------------------*/\n        }\n        #endif\n/*--------------------------------------------------------------------------*/\n    }\n    #endif\n/*--------------------------------------------------------------------------*/\n                        }\n                        #endif\n/*--------------------------------------------------------------------------*/\n                    }\n                    #endif\n/*--------------------------------------------------------------------------*/\n                }\n                #endif\n/*--------------------------------------------------------------------------*/\n            }\n            #endif\n/*--------------------------------------------------------------------------*/\n        }\n        #endif\n/*--------------------------------------------------------------------------*/\n    }\n/*--------------------------------------------------------------------------*/\n    FxaaFloat dstN = posM.x - posN.x;\n    FxaaFloat dstP = posP.x - posM.x;\n    if(!horzSpan) dstN = posM.y - posN.y;\n    if(!horzSpan) dstP = posP.y - posM.y;\n/*--------------------------------------------------------------------------*/\n    FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n    FxaaFloat spanLength = (dstP + dstN);\n    FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n    FxaaFloat spanLengthRcp = 1.0/spanLength;\n/*--------------------------------------------------------------------------*/\n    FxaaBool directionN = dstN < dstP;\n    FxaaFloat dst = min(dstN, dstP);\n    FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\n    FxaaFloat subpixG = subpixF * subpixF;\n    FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n    FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\n/*--------------------------------------------------------------------------*/\n    FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n    FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n    if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n    if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n    #if (FXAA_DISCARD == 1)\n        return FxaaTexTop(tex, posM);\n    #else\n        return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\n    #endif\n}\n/*==========================================================================*/\n#endif\n\nvoid main() {\n  gl_FragColor = FxaaPixelShader(\n    vUv,\n    vec4(0.0),\n    tDiffuse,\n    tDiffuse,\n    tDiffuse,\n    resolution,\n    vec4(0.0),\n    vec4(0.0),\n    vec4(0.0),\n    0.75,\n    0.166,\n    0.0833,\n    0.0,\n    0.0,\n    0.0,\n    vec4(0.0)\n  );\n\n  // TODO avoid querying texture twice for same texel\n  gl_FragColor.a = texture2D(tDiffuse, vUv).a;\n}'
        };
        return THREE.d0
    });
    define("hh", ["require", "cN", "jw", "iK", "fL"], function (a) {
        function b(a, b) {
            this.g = a;
            this.Ey = b;
            this.Ui = new THREE.EffectComposer(a);
            this.Pl = new THREE.CustomRenderPass(b);
            this.Pl.Zp = y;
            this.Ui.addPass(this.Pl);
            this.mI = new THREE.ShaderPass(THREE.d0);
            this.Ui.addPass(this.mI);
            this.Oq = this.Pq = m
        }
        a("cN");
        a("jw");
        a("iK");
        a("fL");
        var c = new THREE.Vector2;
        b.prototype.destroy = function () {
            this.Ui = this.mI = this.Pl = this.Ey = this.g = r
        };
        b.prototype.render = function (a, b) {
            this.g.getSize(c);
            if (this.Pq !== c.width || this.Oq !== c.height)
                this.Pq =
                    c.width, this.Oq = c.height, this.Ui.setSize(this.Pq, this.Oq), this.mI.material.uniforms.resolution.value.x = 1 / this.Pq, this.mI.material.uniforms.resolution.value.y = 1 / this.Oq;
            this.Pl.Gj = a;
            this.Pl.Jc = b;
            this.Ui.render()
        };
        return b
    });
    define("iw", ["require", "cA", "hh"], function (a) {
        function b(a, d) {
            this.g = a;
            this.Ey = d;
            this.qJ = new c(a, d);
            this.dS = new e(a, d);
            this.$H = b.NONE
        }
        var c = a("cA"),
        e = a("hh");
        b.c0 = "fxaa";
        b.RO = "motionBlur";
        b.NONE = "none";
        b.prototype.destroy = function () {
            this.qJ.destroy();
            this.qJ = r;
            this.dS.destroy();
            this.Ey = this.g = this.dS = r
        };
        b.prototype.TZ = function (a) {
            this.$H != a && (this.$H = a, this.$H == b.RO && this.qJ.start())
        };
        b.prototype.render = function (a, d) {
            switch (this.$H) {
            case b.c0:
                this.dS.render(a, d);
                break;
            case b.RO:
                this.qJ.render(a, d);
                break;
            default:
                this.Ey(this.g, a, d, r, y)
            }
        };
        return b
    });
    define("io", ["require", "ge"], function (a) {
        function b() {
            this.status = b.FG;
            this.BZ = this.jw = 0;
            this.AZ = []
        }
        a("ge");
        b.LOADING = "loading";
        b.S = "loaded";
        b.FG = "not loaded";
        return b
    });
    define("iG", "require,do,fg,bZ,ll,id,io".split(","), function (a) {
        function b() {
            this.k4 = {};
            this.Pc = [];
            this.Cr = [];
            this.fd = {}
        }
        var c = a("do"),
        e = a("fg");
        a("bZ");
        var g = a("ll"),
        d = a("id"),
        f = a("io");
        b.prototype.FN = function (a) {
            for (var a = a.Kn(), b = 0, d = a.length; b < d; b++)
                if (this.wB(a[b]).status != f.S)
                    return y;
            return n
        };
        b.prototype.Mn = function (a, b) {
            this.Pc.push(a);
            this.hha(a, b)
        };
        b.prototype.Fi = function (a, b) {
            var d = c(this.Pc).indexOf(a);
            d < 0 && i("Unloading item not loaded");
            this.Pc.splice(d, 1);
            this.Mpa(a, b)
        };
        b.prototype.we =
        function (a, b) {
            return this.fd[a].we(b)
        };
        b.prototype.hha = function (a, b) {
            this.Cr.push(a);
            for (var d = a.Kn(), c = 0, e = d.length; c < e; c++) {
                var g = d[c],
                o = this.wB(g);
                o.jw++;
                o.AZ.push(b);
                if (o.status == f.FG) {
                    o.status = f.LOADING;
                    this.pna(g, Math.min.apply(Math, o.AZ))
                }
            }
            this.Faa()
        };
        b.prototype.Mpa = function (a, b) {
            this.Cr = c(this.Cr).without(a);
            for (var d = a.Kn(), e = 0, g = d.length; e < g; e++) {
                var q = d[e],
                o = this.wB(q);
                o.jw--;
                var t = o.AZ,
                s = t.indexOf(b);
                s >= 0 && t.splice(s, 1);
                if (o.jw == 0 && o.status != f.FG) {
                    o.status = f.FG;
                    o.BZ = 0;
                    this.Psa(q)
                }
            }
        };
        b.prototype.Faa = function (a) {
            for (var a = (a == m ? this.Cr : this.c5(a)).slice(), b = 0; b < a.length; b++) {
                for (var d = a[b], e = d.Kn(), g = 0, q = 0, o = e.length, t = 0; t < e.length; t++) {
                    var s = this.wB(e[t]),
                    g = g + s.BZ;
                    s.status == f.S && q++
                }
                d.Kya(g / o);
                if (q == o) {
                    d.WZ();
                    this.Cr = c(this.Cr).without(d)
                }
            }
        };
        b.prototype.wB = function (a) {
            var b = this.k4[a];
            b || (this.k4[a] = b = new f);
            return b
        };
        b.prototype.c5 = function (a) {
            for (var b = [], d = 0; d < this.Cr.length; d++) {
                var e = this.Cr[d];
                c(e.Kn()).contains(a) && b.push(e)
            }
            return b
        };
        b.prototype.pna = function (a, b) {
            var c =
                new d(b);
            this.fd[a] = c;
            c.bind(g.S, this.wC, this, n);
            c.bind(g.oe, this.xC, this, n);
            c.load(a)
        };
        b.prototype.Psa = function (a) {
            var b = this.fd[a];
            delete this.fd[a];
            b.unbind(g.S, this.wC, this);
            b.unbind(g.oe, this.xC, this);
            b.cancel()
        };
        b.prototype.wC = function (a) {
            var a = a.source.Dj(),
            b = this.wB(a);
            b.BZ = 100;
            b.status = f.S;
            this.Faa(a)
        };
        b.prototype.xC = function (a) {
            for (var a = a.source.Dj(), b = this.c5(a), d = 0; d < b.length; d++) {
                var c = b[d];
                this.Fi(c);
                c.mya()
            }
            e.log("Error loading: " + a)
        };
        b.Jd = new b;
        return b.Jd
    });
    define("kz", ["require", "iG", "fK", "r"], function (a) {
        var b = a("iG"),
        c = a("fK"),
        e = a("r"),
        g = {
            XT: m,
            Nya: P("XT"),
            sR: m,
            jya: P("sR"),
            createTexture: function () {
                var a = new THREE.Texture;
                a.image = g.vz();
                a.userData = {};
                a.userData.afa = {};
                return a
            },
            yua: function (a) {
                a.image != this.vz() && (a.image = this.vz(), a.needsUpdate = n)
            },
            JN: function (a, b) {
                b = this.gva(b);
                a.generateMipmaps = this.yia(b);
                if (a.generateMipmaps)
                    a.minFilter = THREE.LinearMipMapLinearFilter, a.anisotropy = Math.min(this.Wka(b), e.vca().vda), !c.mda(b.width) || !c.mda(b.height) ?
                    (a.Rm || (a.Rm = document.createElement("canvas"), a.Rm.rL = n), a.image = a.Rm, a.Rm.ha = b, a.image.width = c.lca(b.width), a.image.height = c.lca(b.height), a.image.getContext("2d").drawImage(b, 0, 0, a.image.width, a.image.height)) : a.image = b;
                else if (a.minFilter = THREE.LinearFilter, c.sF(b) && c.kfa(b)) {
                    a.tl || (a.tl = document.createElement("canvas"), a.Oma = a.tl.getContext("2d"), a.tl.rL = n);
                    var h = b.videoWidth;
                    c.Fj() && (h = Math.min(4096, h));
                    var j = h * b.videoHeight / b.videoWidth;
                    if (a.tl.width != h || a.tl.height != j)
                        a.tl.width = h, a.tl.height =
                            j;
                    b.readyState >= b.HAVE_CURRENT_DATA && a.Oma.drawImage(b, 0, 0, h, j);
                    a.image = a.tl
                } else
                    a.image = b;
                a.Rm && a.image != a.Rm && (g.oM(a.Rm), delete a.Rm);
                a.needsUpdate = n;
                if ((h = g.NY(a)) && h.isShaderMaterial)
                    h.needsUpdate = n;
                c.$ca()
            },
            gva: function (a) {
                a ? c.cZ(a) ? a = b.we(a, y) : c.pda(a) ? a = this.vz() : c.sF(a) && !(a.readyState >= a.HAVE_CURRENT_DATA && 0 < a.videoWidth && 0 < a.videoHeight) && (a = this.vz()) : a = this.vz();
                return a
            },
            Iua: function (a, b, e, j, g) {
                var k = document.createElement("canvas");
                k.width = c.bo();
                k.height = c.bo();
                k.rL = n;
                var l = k.getContext("2d");
                if (!l)
                    return r;
                l.drawImage(a, b, e, j, g, 0, 0, c.bo(), c.bo());
                this.tM(k);
                return k
            },
            oM: function (a) {
                c.dda(a) && a.rL && (delete a.rL, a.width = 0, a.height = 0)
            },
            dispose: function (a) {
                a.tl && a.tl != a.image && this.oM(a.tl);
                a.image && this.oM(a.image);
                a.dispose()
            },
            KN: function (a, b, c) {
                b ? (a.R$ = n, a.Q$ = c || 1) : (delete a.R$, delete a.Q$)
            },
            Wka: function (a) {
                return a && a.Q$ || 1
            },
            gza: function (a, b) {
                a.userData.afa.material = b
            },
            NY: function (a) {
                return a.userData.afa.material
            },
            mua: function (a) {
                return c.bZ(a)
            },
            Gba: function (a) {
                c.cZ(a) && (a = b.we(a, y));
                c.bZ(a) && this.tM(a)
            },
            tM: function (a) {
                var b = document.createElement("canvas");
                b.width = 1;
                b.height = 1;
                var c = b.getContext("2d");
                g.tM = function (a) {
                    c.drawImage(a, 0, 0, 1, 1, 0, 0, 1, 1)
                };
                return g.tM(a)
            },
            pR: r,
            vz: function () {
                if (!this.pR) {
                    var a = document.createElement("canvas");
                    a.width = 128;
                    a.height = 128;
                    a.Zma = n;
                    a.getContext("2d").clearRect(0, 0, a.width, a.height);
                    this.pR = a
                }
                return this.pR
            },
            yia: function (a) {
                if (c.Pwa(a))
                    return y;
                if (c.dda(a))
                    return !!a.R$;
                if (e.Za()) {
                    if (this.XT !== m)
                        return this.XT
                } else if (this.sR !== m)
                    return this.sR;
                return y
            }
        };
        return g
    });
    define("bU", ["require", "fK", "kz"], function (a) {
        function b(a) {
            this.cG = (a = c.Ls(a)) && c.Qca();
            this.nF = a && c.Pca();
            this.As = 0;
            this.wn = m;
            this.RE = this.SE = 0;
            this.premultipliedAlpha = y;
            this.side = m;
            this.sZ = {}
        }
        var c = a("fK"),
        e = a("kz"),
        g = {
            FY: function (a) {
                return a.map || a.uniforms && a.uniforms.texture && a.uniforms.texture.value
            },
            Ds: function (a, b) {
                a || (a = e.createTexture());
                b || (b = new g.Wn);
                var c;
                c = b.Rxa() ? this.Fua(a, b) : this.gY(a);
                b.side && (c.side = b.side);
                for (var j in b.sZ)
                    c[j] = b.sZ[j];
                return c
            },
            gY: function (a) {
                var b = new THREE.MeshBasicMaterial;
                b.map = a;
                this.t2(b);
                return b
            },
            Fua: function (a, b) {
                var c = {
                    uniforms: {},
                    transparent: n
                };
                c.uniforms.texture = {
                    type: "sampler2D",
                    value: a
                };
                a.flipY = !b.cG;
                c.vertexShader = ["varying vec2 vUV;\nvoid main() {", "\tvUV = vec2( uv.x, " + (b.cG ? "1.0 - uv.y" : "uv.y") + ");", "\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"].join("\n");
                if (b.nF || b.As || b.wn || b.premultipliedAlpha) {
                    var e = [],
                    g = [],
                    e = e.concat(["uniform sampler2D texture;", "uniform float opacity;", "varying vec2 vUV;"]);
                    c.uniforms.opacity = {
                        type: "float",
                        value: 1
                    };
                    g = g.concat(["   vec4 color = texture2D(texture, vUV);", "   float alpha = color.a * opacity;"]);
                    b.premultipliedAlpha && (g = g.concat(["   if (color.a > 0.0)", "       color.rgb /= color.a;"]));
                    if (b.As) {
                        var k = a.image.width || a.image.videoWidth,
                        l = a.image.height || a.image.videoHeight,
                        q = 0.5 * Math.min(k, l) * b.As;
                        c.uniforms.blendingLimit = {
                            type: "v2",
                            value: new THREE.Vector2(q / k, q / l)
                        };
                        e = e.concat(["uniform vec2 blendingLimit;"]);
                        g = g.concat("   float xCoef = 0.0;,   float yCoef = 0.0;,   if (vUV.x < blendingLimit.x) {,      xCoef = 1.0 - (vUV.x / blendingLimit.x);,      xCoef = xCoef * xCoef;,   } else if ((1.0 - vUV.x) < blendingLimit.x) {,      xCoef = 1.0 - ((1.0 - vUV.x) / blendingLimit.x);,      xCoef = xCoef * xCoef;,   },   if (vUV.y < blendingLimit.y) {,      yCoef = 1.0 - (vUV.y / blendingLimit.y);,      yCoef = yCoef * yCoef;,   } else if ((1.0 - vUV.y) < blendingLimit.y) {,      yCoef = 1.0 - ((1.0 - vUV.y) / blendingLimit.y);,      yCoef = yCoef * yCoef;,   },   alpha = alpha * (1.0 - sqrt(xCoef + yCoef));".split(","))
                    }
                    b.wn &&
                    (c.uniforms.chromaColor = {
                            type: "v3",
                            value: new THREE.Vector3(parseInt(b.wn.substr(1, 2), 16) / 255, parseInt(b.wn.substr(3, 2), 16) / 255, parseInt(b.wn.substr(5, 2), 16) / 255)
                        }, c.uniforms.chromaThreshold = {
                            type: "f",
                            value: b.SE
                        }, c.uniforms.chromaSmoothing = {
                            type: "f",
                            value: b.RE
                        }, e = e.concat(["uniform vec3 chromaColor;", "uniform float chromaThreshold;", "uniform float chromaSmoothing;"]), g = g.concat("    float maskY = 0.2989 * chromaColor.r + 0.5866 * chromaColor.g + 0.1145 * chromaColor.b;{    float maskCr = 0.7132 * (chromaColor.r - maskY);{    float maskCb = 0.5647 * (chromaColor.b - maskY);{    float Y = 0.2989 * color.r + 0.5866 * color.g + 0.1145 * color.b;{    float Cr = 0.7132 * (color.r - Y);{    float Cb = 0.5647 * (color.b - Y);{    float chromaBlendValue = smoothstep(chromaThreshold, chromaThreshold + chromaSmoothing, distance(vec2(Cr, Cb), vec2(maskCr, maskCb)));{    alpha = alpha * chromaBlendValue;".split("{")));
                    g = g.concat(["\tgl_FragColor = vec4(color" + (b.nF ? ".bgr" : ".rgb") + ", alpha);"]);
                    a.format = THREE.RGBAFormat;
                    c.fragmentShader = [].concat(e, ["void main() {"], g, ["}"]).join("\n")
                } else
                    c.fragmentShader = "uniform sampler2D texture;\nvarying vec2 vUV;\nvoid main() {\n\tgl_FragColor = texture2D(texture, vUV);\n}";
                c = new THREE.ShaderMaterial(c);
                this.t2(c);
                return c
            },
            dispose: function (a) {
                Array.isArray(a) || (a = [a]);
                a.forEach(function (a) {
                    var b = g.FY(a);
                    b && e.dispose(b);
                    a.dispose()
                })
            },
            t2: function (a) {
                a.side = THREE.FrontSide;
                a.transparent = n;
                a.depthTest = y;
                a.needsUpdate = n;
                a.userData = {};
                a.userData.uda = {};
                e.gza(g.FY(a), a)
            },
            YZ: function (a, b) {
                a.userData.uda.Mk = b
            },
            gca: function (a) {
                return a.userData.uda.Mk
            }
        };
        b.prototype.Rxa = function () {
            return this.cG || this.nF || this.As || this.wn || this.premultipliedAlpha
        };
        b.prototype.isEqual = function (a) {
            return this.cG === a.cG && this.nF === a.nF && this.As === a.As && this.wn === a.wn && this.SE === a.SE && this.RE === a.RE && this.premultipliedAlpha === a.premultipliedAlpha && this.side === a.side
        };
        g.Wn = b;
        return g
    });
    define("dv", ["require", "gW", "bU"], function (a) {
        function b(a) {
            return Array.isArray(a) ? a : a ? [a] : []
        }
        var c = a("gW"),
        e = a("bU"),
        g = {
            create: function (a, c) {
                var h = new THREE.Mesh(a, c);
                h.overdraw = y;
                h.matrixAutoUpdate = y;
                h.userData.Vp = {};
                h.userData.Vp.attributes = {};
                b(c).forEach(function (a) {
                    e.YZ(a, h)
                });
                return h
            },
            Bba: function (a) {
                var b = new THREE.Group;
                g.forEach(a, function (a) {
                    b.add(a)
                });
                return b
            },
            Mya: function (a, c) {
                b(c).forEach(function (a) {
                    e.YZ(a, r)
                });
                e.dispose(a.material);
                a.material = c;
                b(c).forEach(function (b) {
                    e.YZ(b, a)
                })
            },
            Js: function (a) {
                return b(a.material)
            },
            Gva: function (a, b) {
                if (a.layers.mask & b.layers.mask) {
                    var e = g.Js(a);
                    return c.Fva(a.geometry, b, a.matrixWorld).map(function (a) {
                        return e[a]
                    })
                }
                return []
            },
            VZ: function (a, b) {
                a.geometry = b
            },
            Cva: function (a, b) {
                var h = [];
                g.Zg(a, function (a) {
                    var d = g.Js(a);
                    b.forEach(function (b) {
                        var f = c.Bva(a.geometry, a.matrixWorld, b);
                        if (f) {
                            var g = e.FY(d[f.materialIndex]),
                            b = g.image;
                            b == g.Rm && (b = g.Rm.ha);
                            g = Math.round(f.dfa * b.width - 0.5);
                            g = 0 > g ? 0 : g > b.width - 1 ? b.width - 1 : g;
                            f = Math.round((1 - f.gfa) * b.height - 0.5);
                            f = 0 > f ? 0 : f > b.height - 1 ? b.height - 1 : f;
                            h.push({
                                x: g,
                                y: f,
                                source: b
                            })
                        }
                    })
                });
                return h
            },
            AN: function (a, b) {
                g.forEach(a, function (a) {
                    b ? b.add(a) : a.parent && a.parent.remove(a)
                })
            },
            $s: "panoramaId",
            Cw: "panoramaFrameId",
            RN: "panoramaOverlayId",
            QN: "levelIndex",
            setAttribute: function (a, b, c) {
                g.Zg(a, function (a) {
                    a.userData.Vp.attributes[b] = c
                })
            },
            getAttribute: function (a, b) {
                return a.userData.Vp.attributes[b]
            },
            Oba: function (a, b, c) {
                for (var e = [], g = 0, k = a.length; g < k; g++) {
                    var l = a[g];
                    l.userData.Vp.attributes[b] !== c && e.push(l)
                }
                return e
            },
            qM: function (a, b, c) {
                for (var e = [], g = 0, k = a.length; g < k; g++) {
                    var l = a[g];
                    l.userData.Vp.attributes[b] === c && e.push(l)
                }
                return e
            },
            xca: function (a, b) {
                for (var c = {}, e = 0, g = a.length; e < g; e++) {
                    var k = a[e],
                    l = k.userData.Vp.attributes[b];
                    l !== m && (c[l] || (c[l] = [])).push(k)
                }
                return c
            },
            zM: function (a) {
                a = a.userData.Vp.alpha;
                return a === m ? 1 : a
            },
            xd: function (a, b) {
                g.Zg(a, function (a) {
                    a.userData.Vp.alpha = b;
                    g.Js(a).forEach(function (a) {
                        a.opacity = b;
                        "ShaderMaterial" == a.type && a.uniforms && a.uniforms.opacity && (a.uniforms.opacity.value = b)
                    })
                })
            },
            fm: function (a, b) {
                g.Zg(a, function (a) {
                    a.matrix.copy(b);
                    a.matrixWorldNeedsUpdate = n
                })
            },
            uca: function (a) {
                return a.renderOrder
            },
            DN: function (a, b) {
                g.forEach(a, function (a) {
                    a.renderOrder = b
                })
            },
            dispose: function (a) {
                g.Zg(a, function (a) {
                    a.geometry && (a.geometry.dispose(), a.geometry = m);
                    a.material && (e.dispose(a.material), a.material = m)
                })
            },
            Gh: function (a) {
                var b = [];
                g.Zg(a, function (a) {
                    b.push(a)
                });
                return b
            },
            forEach: function (a, b) {
                Array.isArray(a) ? a.forEach(b) : a && a.isObject3D && (a.isMesh || "Group" == a.type) && b(a)
            },
            Zg: function (a,
                b) {
                if (Array.isArray(a))
                    for (var c = 0, e = a.length; c < e; c++)
                        g.Zg(a[c], b);
                else if (a && a.children) {
                    c = 0;
                    for (e = a.children.length; c < e; c++)
                        g.Zg(a.children[c], b)
                }
                a && a.isObject3D && a.isMesh && b(a)
            }
        };
        return g
    });
    define("M", ["require", "dv"], function (a) {
        var b = a("dv");
        return {
            Gh: function (a) {
                var e = [];
                a.children && a.children.forEach(function (a) {
                    b.Zg(a, function (a) {
                        a.userData && a.userData.Vp && e.push(a)
                    })
                });
                return e
            },
            SZ: function (a, b) {
                a.userData.fM = b
            },
            uY: function (a) {
                return a.userData.fM || []
            },
            Hs: function (a) {
                return a.userData.fM && 0 < a.userData.fM.length && a.userData.fM[0] || r
            }
        }
    });
    define("X", "require,bi,r,cT,M,fK".split(","), function (a) {
        var b = a("bi");
        a("r");
        var c = a("cT"),
        e = a("M"),
        g = a("fK"),
        d = 180 / Math.PI;
        return {
            dga: function (a, b) {
                var c,
                d;
                this.setSize = function (b, e) {
                    if (c != b || d != e) {
                        c = b;
                        d = e;
                        a.setSize(b, e)
                    }
                };
                this.start = function (c) {
                    e.SZ(c, [b]);
                    a.setPixelRatio(g.getPixelRatio())
                };
                this.stop = D();
                this.fov = function () {
                    return b.fov
                };
                this.u_ = D();
                this.Jc = function () {
                    return b
                };
                this.render = function (c, d, e) {
                    a.setRenderTarget(d);
                    e && a.clear();
                    a.render(c, b)
                }
            },
            Aga: function (a, h) {
                var j,
                g,
                k,
                l,
                q = new THREE.Vector2,
                o = new THREE.PerspectiveCamera;
                o.layers.enable(c.qa);
                var t = new THREE.PerspectiveCamera;
                t.layers.enable(c.Na);
                this.start = function (c) {
                    a.getSize(q);
                    j = a.getPixelRatio();
                    g = q.width;
                    k = q.height;
                    l = a.getContext().getParameter(a.getContext().FRAMEBUFFER_BINDING);
                    var d = b.EM();
                    d.$E && a.getContext().bindFramebuffer(a.getContext().FRAMEBUFFER, d.$E);
                    a.setClearColor(0, 1);
                    a.setDrawingBufferSize(d.Ik, d.Bj, d.uM);
                    e.SZ(c, [o, t])
                };
                this.stop = function () {
                    a.getContext().bindFramebuffer(a.getContext().FRAMEBUFFER, l);
                    a.setClearColor(0,
                        0);
                    a.setDrawingBufferSize(g, k, j)
                };
                this.setSize = function (a, b) {
                    g = a;
                    k = b
                };
                this.fov = function () {
                    return t.fov
                };
                this.Jc = function () {
                    return t
                };
                this.u_ = function () {
                    h.updateProjectionMatrix();
                    h.updateMatrixWorld();
                    b.Dn().views.forEach(function (a) {
                        var c = a.eye == b.Rj.qa ? o : a.eye == b.Rj.Na ? t : r;
                        if (c) {
                            h.matrixWorld.decompose(c.position, c.quaternion, c.scale);
                            c.applyQuaternion(a.orientation);
                            c.translateOnAxis(a.position, 1);
                            c.projectionMatrix.copy(a.projectionMatrix);
                            c.fov = 2 * Math.atan(1 / c.projectionMatrix.elements[5]) * d
                        }
                    })
                };
                this.render = function (c, d, e) {
                    var h = c.autoUpdate;
                    if (h) {
                        c.updateMatrixWorld();
                        c.autoUpdate = y
                    }
                    if (d) {
                        a.setRenderTarget(d);
                        d.scissorTest = n
                    } else {
                        a.setRenderTarget(r);
                        a.setScissorTest(n)
                    }
                    (a.autoClear || e) && a.clear();
                    b.Dn().views.forEach(function (e) {
                        var h = e.eye == b.Rj.qa ? o : e.eye == b.Rj.Na ? t : r;
                        if (h) {
                            if (d) {
                                d.viewport.set(e.viewport.x, e.viewport.y, e.viewport.width, e.viewport.height);
                                d.scissor.set(e.viewport.x, e.viewport.y, e.viewport.width, e.viewport.height)
                            } else {
                                a.setViewport(e.viewport.x, e.viewport.y, e.viewport.width,
                                    e.viewport.height);
                                a.setScissor(e.viewport.x, e.viewport.y, e.viewport.width, e.viewport.height)
                            }
                            a.render(c, h)
                        }
                    });
                    a.getSize(q);
                    if (d) {
                        d.viewport.set(0, 0, q.width, q.height);
                        d.scissor.set(0, 0, q.width, q.height);
                        d.scissorTest = y;
                        a.setRenderTarget(r)
                    } else {
                        a.setViewport(0, 0, q.width, q.height);
                        a.setScissorTest(y)
                    }
                    if (h)
                        c.autoUpdate = n
                }
            },
            tga: function (a, b) {
                var d,
                p,
                k = 1,
                l = new THREE.WebGLCubeRenderTarget(1024),
                q = new THREE.CubeCamera(0.1, 1E4, l);
                q.layers.enable(c.Un);
                q.layers.enable(c.qa);
                l = new THREE.ShaderMaterial;
                l.uniforms = {
                    tCube: {
                        value: q.renderTarget.texture
                    },
                    tFlip: {
                        value: 1
                    },
                    opacity: {
                        value: 1
                    }
                };
                l.fragmentShader = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n";
                l.vertexShader = "varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}\n";
                l.side = THREE.BackSide;
                l.depthWrite = y;
                l.transparent = n;
                l.depthTest = y;
                l.needsUpdate = n;
                var o = new THREE.Mesh(new THREE.SphereBufferGeometry(5, 64, 64), l);
                o.overdraw = y;
                o.matrixAutoUpdate = y;
                o.renderOrder = 1E3;
                var t = new THREE.Matrix4;
                this.ww = function (a) {
                    k = a
                };
                this.setSize = function (b, c) {
                    if (d != b || p != c)
                        a.setSize(d = b, p = c)
                };
                this.start = function (c) {
                    c.add(o);
                    c.add(q);
                    c.traverse(function (a) {
                        if (a.layers.test(q.layers)) {
                            a.userData.hZ = a.layers.mask;
                            a.layers.mask = q.layers.mask
                        }
                    });
                    q.visible = n;
                    o.visible = n;
                    e.SZ(c, [b]);
                    a.setClearColor(16777215,
                        1);
                    a.setPixelRatio(g.getPixelRatio())
                };
                this.stop = function (b) {
                    a.setClearColor(0, 0);
                    b.traverse(function (a) {
                        if (a.userData.hZ !== m) {
                            a.layers.mask = a.userData.hZ;
                            delete a.userData.hZ
                        }
                    });
                    q.visible = y;
                    o.visible = y;
                    b.remove(o);
                    b.remove(q)
                };
                this.fov = function () {
                    return b.fov
                };
                this.u_ = function () {
                    if (k > 0) {
                        o.matrix.copy(b.matrixWorld);
                        o.matrix.multiply(t.makeTranslation(0, 0, -k * 5));
                        o.matrixWorldNeedsUpdate = n
                    }
                };
                this.Jc = function () {
                    return b
                };
                var s = 0;
                this.render = function (c, d, e) {
                    if (k > 0) {
                        s++;
                        if (!g.xwa() || s % 10 == 0) {
                            g.cya();
                            o.visible = y;
                            q.update(a, c);
                            o.visible = n
                        }
                    }
                    a.setRenderTarget(d);
                    e && a.clear();
                    a.render(c, b)
                }
            }
        }
    });
    define("dG", "require,jquery.mod,it,ku,cT,iw,X,gW,fK,bi".split(","), function (a) {
        function b() {
            this.K = c("<div/>");
            this.K.css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                "z-index": 0,
                cursor: "inherit"
            });
            this.zb = new THREE.PerspectiveCamera(90, 16 / 9, 0.1, 2 * j.Ld);
            this.zb.layers.enable(d.qa);
            this.OH = new THREE.PerspectiveCamera;
            this.tj = new THREE.Scene;
            this.L3 = new THREE.Scene;
            this.M3 = new THREE.Scene;
            window.xAa = THREE;
            this.tj.add(this.zb);
            this.yo = this.Uq = this.g = r;
            this.xu = 0;
            this.jp = this.ig = this.kW = this.GX =
                r;
            this.B6 = this.$Q = y
        }
        var c = a("jquery.mod"),
        e = a("it"),
        g = a("ku"),
        d = a("cT"),
        f = a("iw"),
        h = a("X"),
        j = a("gW"),
        p = a("fK"),
        k = a("bi");
        b.prototype.Hs = Q("OH");
        b.prototype.iva = function () {
            return this.ig.fov(this.zb)
        };
        b.prototype.getPixelRatio = function () {
            return this.g.getPixelRatio()
        };
        b.prototype.Gb = Q("K");
        b.prototype.lva = function () {
            return this.g ? this.g.domElement.width : this.K.width()
        };
        b.prototype.kva = function () {
            return this.g ? this.g.domElement.height : this.K.height()
        };
        b.prototype.yg = function () {
            return this.g.domElement
        };
        b.prototype.update = function (a) {
            this.tta(a);
            this.ata(a);
            this.Usa(a);
            this.qta(a)
        };
        b.prototype.render = function () {
            this.xK()
        };
        b.prototype.tta = function (a) {
            if (a.enabled) {
                this.xu = (new Date).getTime();
                this.g || this.wra(a);
                if (a.sb && k.wd() == k.vA.Oj)
                    this.B6 = n;
                k.yN(this.g.getContext())
            }
            if (this.$Q = a.enabled && !a.sb) {
                this.Uq.setSize(a.width, a.height);
                this.yo.setSize(a.width, a.height)
            }
        };
        b.prototype.wra = function (a) {
            if (!this.g && a.enabled) {
                for (; l.length >= q; ) {
                    l.sort(function (a, b) {
                        return a.xu - b.xu
                    });
                    l[0].Oia()
                }
                l.push(this);
                var b = this.Gb().get(0);
                this.Uq = new THREE.CSS3DRenderer;
                this.Uq.domElement.style.position = "absolute";
                this.Uq.domElement.style.zIndex = 0;
                b.appendChild(this.Uq.domElement);
                var c = {
                    precision: "mediump",
                    alpha: n
                };
                if (l.length == 1 && a.sb) {
                    a = k.Wv();
                    c.context = a;
                    c.canvas = a.canvas
                } else {
                    c.canvas = document.createElement("canvas");
                    c.context = p.hY(c.canvas, a.aM)
                }
                this.g = new THREE.WebGLRenderer(c);
                this.g.domElement.style.position = "absolute";
                this.g.domElement.style.zIndex = 1;
                this.g.domElement.style.pointerEvents = "none";
                this.g.setClearColor(0,
                    0);
                b.appendChild(this.g.domElement);
                this.yo = new THREE.CSS3DRenderer;
                this.yo.domElement.style.position = "absolute";
                this.yo.domElement.style.zIndex = 2;
                this.yo.domElement.style.pointerEvents = "none";
                b.appendChild(this.yo.domElement);
                this.jp = new f(this.g, function (a, b, c, d, e) {
                    this.B6 && this.g.resetState();
                    this.ig.render(b, d, e)
                }
                        .bind(this));
                this.kW = new h.dga(this.g, this.zb);
                this.F$ = new h.tga(this.g, this.zb);
                this.GX = new h.Aga(this.g, this.zb);
                k.gz(this.g.getContext())
            }
        };
        b.prototype.Oia = function () {
            if (this.g) {
                l.splice(l.indexOf(this),
                    1);
                this.ig = this.kW = this.GX = r;
                this.jp.destroy();
                this.jp = r;
                k.nN(this.g.getContext());
                var a = this.Gb().get(0);
                a.removeChild(this.yo.domElement);
                this.yo = r;
                a.removeChild(this.g.domElement);
                this.g.dispose();
                this.g = r;
                a.removeChild(this.Uq.domElement);
                this.Uq = r
            }
        };
        b.prototype.Usa = function (a) {
            this.zb.quaternion.copy(g.Sba(a.ma, a.pitch, a.md));
            this.zb.fov = e.Kk(a.bd, a.width, a.height);
            this.zb.aspect = a.width / a.height;
            this.zb.updateProjectionMatrix();
            this.zb.updateMatrixWorld();
            this.ig && this.ig.u_();
            this.ig && this.OH.copy(this.ig.Jc());
            this.OH.updateProjectionMatrix();
            this.OH.updateMatrixWorld();
            this.tj.autoUpdate === n && this.tj.updateMatrixWorld()
        };
        b.prototype.ata = function (a) {
            var b = a.sb ? this.GX : a.Ei > 0 ? this.F$ : this.kW;
            if (this.ig != b) {
                this.ig && this.ig.stop(this.tj);
                (this.ig = b) && this.ig.start(this.tj)
            }
            if (this.ig) {
                this.ig.setSize(a.width, a.height);
                this.ig == this.F$ && this.ig.ww(a.Ei)
            }
        };
        b.prototype.qta = function (a) {
            this.jp && (a.fN ? this.jp.TZ(f.RO) : a.xM && !a.sb ? this.jp.TZ(f.c0) : this.jp.TZ(f.NONE))
        };
        b.prototype.xK = function () {
            this.jp && this.jp.render(this.tj,
                this.zb);
            if (this.$Q) {
                this.Uq.render(this.L3, this.zb);
                this.yo.render(this.M3, this.zb)
            }
        };
        var l = [],
        q = 10;
        return b
    });
    define("gU", ["require", "fg", "eO", "fK"], function (a) {
        var b = a("fg"),
        c = a("eO"),
        e = a("fK"),
        a = b.extend(c, function () {
            c.call(this);
            this.Q = this.Va = r;
            this.zc = [];
            this.KI = this.Wg = y;
            this.sC = r;
            this.sh = [this];
            this.rn = {};
            this.Fm = {};
            this.EB = y;
            this.fV = {};
            this.gV = {};
            this.dl(["blendingActive"]);
            this.$ga();
            this.set("alpha", 1);
            this.set("translationX", 0);
            this.set("translationY", 0);
            this.set("translationZ", 0);
            this.set("deltaYaw", 0);
            this.set("deltaPitch", 0);
            this.set("deltaRoll", 0);
            this.set("flipHorizontally", y);
            this.set("index",
                0)
        });
        a.prototype.$ga = function () {
            var a = "alpha,deltaYaw,deltaPitch,deltaRoll,translationX,translationY,translationZ".split(",");
            Array.isArray(a) || (a = [a]);
            a.forEach(function (a) {
                this.fV[a] = n
            }
                .bind(this))
        };
        a.prototype.dl = function (a) {
            Array.isArray(a) || (a = [a]);
            a.forEach(function (a) {
                this.gV[a] = n
            }
                .bind(this))
        };
        a.prototype.set = function (a, b) {
            this.rn[a] !== b && (this.gV[a] && this.zc.forEach(function (c) {
                    c.set(a, b)
                }), this.zha(a, b), this.AD(a))
        };
        a.prototype.get = function (a) {
            return this.rn[a]
        };
        a.prototype.AD = function (a) {
            this.Fm[a] ||
            (this.Fm[a] = n, this.EB || (this.EB = n, this.Ia()), this.fV[a] && this.zc.forEach(function (b) {
                    b.AD(a)
                }))
        };
        a.prototype.Qia = function () {
            this.EB && (this.EB = y, this.Fm = {})
        };
        a.prototype.p = function () {
            if (this.EB)
                for (var a = 0; a < arguments.length; a++)
                    if (this.Fm[arguments[a]])
                        return n;
            return y
        };
        a.prototype.zha = function (a, b) {
            this.rn[a] = b
        };
        a.prototype.Pa = Q("zc");
        a.prototype.jf = function (a) {
            for (var b = a || [], c = this.zc.slice(), a = b.length != c.length, e = 0; e < b.length && !a; e++)
                a = b[e] != c[e];
            a && (a = c.filter(function (a) {
                    return -1 == b.indexOf(a)
                }),
                e = b.filter(function (a) {
                    return -1 == c.indexOf(a)
                }), this.zc = b, a.forEach(function (a) {
                    a.VK(r)
                }), e.forEach(function (a) {
                    a.remove();
                    a.VK(this)
                }
                    .bind(this)), this.Ia())
        };
        a.prototype.VK = function (a) {
            this.Q != a && (this.Q && this.qj(), (this.Q = a) && this.el(), this.XV(this.Q && this.Q.Va))
        };
        a.prototype.el = function () {
            for (var a in this.Q.fV)
                this.AD(a);
            for (a in this.Q.gV)
                this.set(a, this.Q.get(a))
        };
        a.prototype.qj = D();
        a.prototype.XV = function (a) {
            this.Va != a && (a || this.Sa(), (this.Va = a) && this.Qa(), this.zc.forEach(function (a) {
                    a.XV(this.Va)
                }
                    .bind(this)))
        };
        a.prototype.Qa = function () {
            this.rha()
        };
        a.prototype.Sa = function () {
            this.Ipa()
        };
        a.prototype.rha = function () {
            this.sh.forEach(function (a) {
                this.Va.sC.add(a, this)
            }
                .bind(this))
        };
        a.prototype.Ipa = function () {
            this.sh.forEach(function (a) {
                this.Va.sC.remove(a, this)
            }
                .bind(this))
        };
        a.prototype.Fk = function () {
            this.Q && this.Q.ZX(this)
        };
        a.prototype.ZX = function (a) {
            var b = this.zc.indexOf(a);
            -1 == b && i("Child not found");
            b != this.zc.length - 1 && (this.zc.splice(b, 1), this.zc.push(a), this.Ia())
        };
        a.prototype.Xua = function (a) {
            var b = this.zc.indexOf(a);
            -1 == b && i("Child not found");
            this.zc.splice(b, 1);
            a.VK(r);
            this.Ia()
        };
        a.prototype.appendChild = function (a) {
            a.remove();
            this.zc.push(a);
            a.VK(this);
            this.Ia()
        };
        a.prototype.remove = function () {
            this.Q && this.Q.Xua(this)
        };
        a.prototype.Lj = D();
        a.prototype.Ia = function () {
            this.Wg || (this.Wg = n, this.Q && this.Q.Ia(this))
        };
        a.prototype.Xia = function () {
            this.Wg = y
        };
        a.prototype.yV = function () {
            this.KI || (this.KI = n, this.Q && this.Q.yV())
        };
        a.prototype.Tia = function () {
            this.KI = y
        };
        a.prototype.L = function () {
            this.zaa();
            this.p("translationX",
                "translationY", "translationZ") && (this.set("composedTranslationX", this.get("translationX") + (this.Q ? this.Q.get("composedTranslationX") : 0)), this.set("composedTranslationY", this.get("translationY") + (this.Q ? this.Q.get("composedTranslationY") : 0)), this.set("composedTranslationZ", this.get("translationZ") + (this.Q ? this.Q.get("composedTranslationZ") : 0)));
            this.p("deltaYaw", "deltaPitch", "deltaRoll") && (this.set("composedDeltaYaw", this.get("deltaYaw") + (this.Q ? this.Q.get("composedDeltaYaw") : 0)), this.set("composedDeltaPitch",
                    this.get("deltaPitch") + (this.Q ? this.Q.get("composedDeltaPitch") : 0)), this.set("composedDeltaRoll", this.get("deltaRoll") + (this.Q ? this.Q.get("composedDeltaRoll") : 0)), e.$ca())
        };
        a.prototype.zaa = function () {
            this.p("alpha") && this.set("composedAlpha", this.get("alpha") * (this.Q ? this.Q.get("composedAlpha") : 1))
        };
        return a
    });
    define("jZ", "require,fg,ll,ge,eO,bU,kz".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("ge"),
        g = a("eO"),
        d = a("bU"),
        f = a("kz"),
        h = b.extend(g, function () {
            g.call(this);
            this.Zd = m;
            this.xb = f.createTexture();
            this.m = h.qA;
            this.$B = e.Uj
        });
        h.prototype.type = Q("Zd");
        h.prototype.texture = Q("xb");
        h.prototype.material = function () {
            return this.xb && f.NY(this.xb)
        };
        h.prototype.Mk = function () {
            var a = this.xb && f.NY(this.xb);
            return a && d.gca(a)
        };
        h.prototype.Jya = P("$B");
        h.prototype.load = function () {
            if (this.m == h.qA) {
                this.m = h.LG;
                this.fQ()
            }
        };
        h.prototype.rua = function () {
            if (this.Uwa()) {
                this.m == h.LG ? this.nL() : this.VD();
                this.m = h.qA
            }
        };
        h.prototype.unload = function () {
            if (this.m != h.qA) {
                this.m == h.LG ? this.nL() : this.m == h.fP ? this.VD() : this.ss();
                this.m = h.qA
            }
        };
        h.prototype.fQ = D();
        h.prototype.nL = D();
        h.prototype.dQ = D();
        h.prototype.VD = D();
        h.prototype.ss = function () {
            f.yua(this.texture)
        };
        h.prototype.Uwa = function () {
            return this.m == h.LG || this.m == h.fP
        };
        h.prototype.jZ = function () {
            return this.m == h.eP || this.m == h.X0
        };
        h.prototype.dispose = function () {
            f.dispose(this.xb);
            this.xb = r
        };
        h.prototype.ky = function (a) {
            this.m = a ? h.fP : h.X0;
            a ? this.dQ() : this.trigger(c.oe)
        };
        h.prototype.J6 = function () {
            this.m = h.eP;
            this.trigger(c.S)
        };
        h.qA = "initial";
        h.LG = "loading";
        h.fP = "adding";
        h.X0 = "error loading";
        h.eP = "added";
        h.wga = "custom";
        h.xga = "image tile";
        h.yAa = "image animation";
        h.zAa = "video 360";
        return h
    });
    define("dX", "require,fg,ll,bS,iG,kz,jZ".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bS"),
        g = a("iG"),
        d = a("kz"),
        f = a("jZ"),
        a = b.extend(f, function (a) {
            f.call(this);
            this.Zd = f.wga;
            this.Od = a;
            if (!this.Od)
                this.m = f.eP;
            this.ue = this.he = r;
            this.PP = this.xE = m
        });
        a.prototype.Di = function (a) {
            this.ue = a;
            d.JN(this.xb, this.ue);
            this.ue && this.xE !== m && d.KN(this.ue, this.xE, this.PP)
        };
        a.prototype.KN = function (a, b) {
            if (this.xE !== a) {
                this.xE = a;
                this.PP = b;
                this.ue && d.KN(this.ue, this.xE, this.PP)
            }
        };
        a.prototype.we = function () {
            return g.we(this.Od)
        };
        a.prototype.update = function () {
            d.JN(this.xb, this.ue)
        };
        a.prototype.fQ = function () {
            this.Od ? this.YQ() : this.ky(n)
        };
        a.prototype.nL = function () {
            this.Do()
        };
        a.prototype.dQ = function () {
            this.J6()
        };
        a.prototype.ss = function () {
            this.Do()
        };
        a.prototype.dispose = function () {
            this.Do();
            f.prototype.dispose.call(this)
        };
        a.prototype.Ze = function () {
            this.ky(n)
        };
        a.prototype.Fr = function () {
            this.ky(y)
        };
        a.prototype.YQ = function () {
            if (!this.he) {
                this.he = new e;
                this.he.g_([this.Od]);
                this.he.bind(c.S, this.Ze, this, n);
                this.he.bind(c.oe, this.Fr,
                    this, n);
                g.Mn(this.he, this.$B)
            }
        };
        a.prototype.Do = function () {
            if (this.he) {
                this.he.unbind(c.S, this.Ze, this, n);
                this.he.unbind(c.oe, this.Fr, this, n);
                g.Fi(this.he, this.$B);
                this.he = r
            }
        };
        return a
    });
    define("jN", "require,fg,ll,eO,dv,M".split(","), function (a) {
        function b(a, b) {
            return a.reduce(function (a, c) {
                return a ? n : !!(b.layers.mask & c.layers.mask)
            }, y)
        }
        function c(a) {
            a = d(a).loaded;
            return a === m ? y : a
        }
        function e(a) {
            a = d(a).TX;
            return a === m ? n : a
        }
        function g(a) {
            a = d(a).blending;
            return a === m ? y : a
        }
        function d(a) {
            return a.userData.cxa || (a.userData.cxa = {})
        }
        var f = a("fg"),
        h = a("ll"),
        j = a("eO"),
        p = a("dv"),
        k = a("M"),
        a = f.extend(j, function () {
            j.call(this);
            this.m = m;
            this.UT = y
        });
        a.prototype.update = function (a) {
            var b = a.sb && this.m &&
                !this.m.sb;
            this.m = a.clone();
            this.UT || (b ? this.tma() : this.gta())
        };
        a.prototype.gta = function () {
            var a = y,
            d = k.uY(this.m.ye),
            f = k.Gh(this.m.ye);
            p.qM(f, p.Cw, m).forEach(function (c) {
                var f = b(d, c) && p.zM(c) > 0 && e(c);
                if (c.visible != f) {
                    c.visible = f;
                    a = n
                }
            });
            var f = p.Oba(f, p.Cw, m),
            f = p.xca(f, p.$s),
            j;
            for (j in f) {
                var s = f[j],
                v = d.map(R(y));
                s.sort(function (a, b) {
                    return p.uca(b) - p.uca(a)
                });
                var u = s.some(g);
                s.forEach(function (f) {
                    var h = b(d, f) && p.zM(f) > 0 && e(f) && (!u || c(f));
                    if (h) {
                        for (var h = n, j = u || c(f) && p.zM(f) > 0.999, g = 0; g < d.length; g++)
                            if (f.layers.mask &
                                d[g].layers.mask && !v[g]) {
                                h = y;
                                j && (v[g] = n)
                            }
                        h = !h
                    }
                    if (f.visible != h) {
                        f.visible = h;
                        a = n
                    }
                })
            }
            a && this.trigger(h.aa)
        };
        a.prototype.tma = function () {
            this.UT = n;
            k.Gh(this.m.ye).forEach(function (a) {
                a.visible = y
            });
            setTimeout(function () {
                this.UT = y;
                this.update(this.m)
            }
                .bind(this), 300);
            this.trigger(h.aa)
        };
        a.WZ = function (a, b) {
            d(a).loaded = b
        };
        a.setActive = function (a, b) {
            d(a).TX = b
        };
        a.tea = function (a, b) {
            p.Zg(a, function (a) {
                d(a).blending = b
            })
        };
        return a
    });
    define("hZ", "require,fg,ll,ge,eO,jN,bU,dv,M,r".split(","), function (a) {
        function b(a) {
            return (a = a.userData.Rk) && !(!a.nZ && !a.lZ)
        }
        function c(a) {
            return a.userData.Rk || (a.userData.Rk = {})
        }
        function e(a) {
            return c(a).zw
        }
        function g(a) {
            return c(a).enabled || y
        }
        function d(a) {
            return !e(a).jZ()
        }
        var f = a("fg"),
        h = a("ll");
        a("ge");
        var j = a("eO"),
        p = a("jN"),
        k = a("bU"),
        l = a("dv"),
        q = a("M"),
        o = a("r"),
        t = f.extend(j, function () {
            j.call(this);
            this.dy = [];
            this.Br = [];
            this.Zw = [];
            this.m = m;
            this.mn = r;
            this.ts = this.ts.bind(this)
        });
        t.prototype.update =
        function (a) {
            this.m = a.clone();
            this.Qsa() ? this.ts() : this.Haa()
        };
        t.prototype.Haa = function () {
            if (!this.mn)
                this.mn = setTimeout(this.ts, 1E3)
        };
        var s = Math.PI / 180;
        t.prototype.Qsa = function () {
            var a = this.m.Ei > 0 ? 1E3 : this.m.PE / Math.tan(Math.min(this.m.Gf * 0.5, 89.99) * s);
            o.Za() || (a = a * 1.5);
            var d = q.uY(this.m.ye),
            e = q.Gh(this.m.ye).filter(b),
            f = e.filter(g),
            h = {},
            h = l.Oba(f, l.Cw, m),
            h = l.xca(h, l.Cw);
            h.none = l.qM(f, l.Cw, m);
            var f = [],
            j;
            for (j in h)
                for (var k = h[j], v = 0, J = k.length; v < J; v++) {
                    var B = k[v];
                    (c(B).nZ || t.CG) == t.$k && f.push(B)
                }
            for (var O =
                    0, N = d.length; O < N; O++) {
                var I = d[O];
                for (j in h) {
                    for (var k = h[j], L = r, G = Number.NEGATIVE_INFINITY, E = r, H = Number.POSITIVE_INFINITY, v = 0, J = k.length; v < J; v++) {
                        B = k[v];
                        if (B.layers.mask & I.layers.mask && (c(B).nZ || t.CG) == t.CG) {
                            var M = c(B).pxa * 90;
                            if (M < a && M > G) {
                                L = B;
                                G = M
                            } else if (M >= a && M < H) {
                                E = B;
                                H = M
                            }
                        }
                    }
                    if (this.m.sb && E && L)
                        G > 0.75 * a ? f.push(L) : f.push(E);
                    else {
                        E && f.indexOf(E) < 0 && f.push(E);
                        L && f.indexOf(L) < 0 && f.push(L)
                    }
                }
            }
            a = [];
            for (d = 0; d < f.length; d++) {
                j = f[d];
                a.indexOf(j) < 0 && a.push(j)
            }
            f = a;
            a: {
                a = this.Zw;
                d = f;
                for (j = 0; j < a.length; j++)
                    if (d.indexOf(a[j]) <
                        0) {
                        a = y;
                        break a
                    }
                for (j = 0; j < d.length; j++)
                    if (a.indexOf(d[j]) < 0) {
                        a = y;
                        break a
                    }
                a = n
            }
            a = !a;
            this.Zw = f;
            v = 0;
            for (J = e.length; v < J; v++) {
                B = e[v];
                g(B) && p.setActive(B, this.Zw.indexOf(B) >= 0)
            }
            return a
        };
        t.prototype.ts = function () {
            this.mn = r;
            for (var a = [], b = [], e = [], f = (new Date).getTime() - v, j = q.uY(this.m.ye), g = q.Gh(this.m.ye), k = 0, p = g.length; k < p; k++) {
                var o = g[k],
                s = o.userData.Rk;
                if (s) {
                    var O = l.Js(o);
                    if (s.enabled) {
                        var N = [];
                        if (this.Zw.indexOf(o) >= 0) {
                            if (this.m.Ei > 0 || (c(o).lZ || t.QO) == t.Tj)
                                N = O;
                            else
                                for (var I = 0, L = j.length; I < L; I++) {
                                    var G =
                                        l.Gva(o, j[I]);
                                    if (I == 0)
                                        N = G;
                                    else
                                        for (var E = 0, H = G.length; E < H; E++) {
                                            var M = G[E];
                                            N.indexOf(M) < 0 && N.push(M)
                                        }
                                }
                            E = 0;
                            for (H = N.length; E < H; E++) {
                                M = N[E];
                                (M.userData.Rk || (M.userData.Rk = {})).rda = f
                            }
                        }
                        this.XP(o, N);
                        E = 0;
                        for (H = s.om.length; E < H; E++)
                            a.push(s.om[E]);
                        E = 0;
                        for (H = s.$p.length; E < H; E++)
                            b.push(s.$p[E])
                    } else {
                        s.$p || this.XP(o, []);
                        E = 0;
                        for (H = s.$p.length; E < H; E++) {
                            M = s.$p[E];
                            s.om.indexOf(M) < 0 && b.push(M)
                        }
                    }
                    E = 0;
                    for (H = O.length; E < H; E++)
                        e.push(O[E])
                }
            }
            k = [];
            E = 0;
            for (H = this.Br.length; E < H; E++) {
                M = this.Br[E];
                e.indexOf(M) < 0 ? M.userData.Rk.zw.unload() :
                d(M) ? this.TV(M, y) : k.push(M)
            }
            this.Br = k;
            E = Math.max(t.wda(), Math.round(b.length * 1.25)) - a.length;
            if (this.Br.length > E) {
                this.Br.sort(function (a, b) {
                    return c(a).rda - c(b).rda
                });
                k = this.Br.splice(0, this.Br.length - E);
                E = 0;
                for (H = k.length; E < H; E++) {
                    M = k[E];
                    M.userData.Rk.zw.unload();
                    this.TV(M, y)
                }
            }
            b = [];
            k = 0;
            for (p = this.Zw.length; k < p; k++) {
                o = this.Zw[k];
                s = o.userData.Rk;
                s.om.length > 0 && b.push(o)
            }
            e = Number.POSITIVE_INFINITY;
            k = 0;
            for (p = b.length; k < p; k++) {
                o = b[k];
                s = o.userData.Rk;
                E = s.Td;
                E = E !== m ? E : Number.POSITIVE_INFINITY;
                E < e && (e =
                        E)
            }
            a = [];
            k = 0;
            for (p = b.length; k < p; k++) {
                o = b[k];
                s = o.userData.Rk;
                E = s.Td;
                E = E !== m ? E : Number.POSITIVE_INFINITY;
                if (E == e) {
                    G = s.om;
                    E = 0;
                    for (H = G.length; E < H; E++) {
                        M = G[E];
                        a.push(M)
                    }
                }
            }
            E = 0;
            for (H = this.dy.length; E < H; E++) {
                M = this.dy[E];
                if (a.indexOf(M) < 0) {
                    M = M.userData.Rk.zw;
                    M.unbind(h.S, this.AW, this, n);
                    M.unbind(h.oe, this.BW, this, n);
                    M.rua()
                }
            }
            k = this.dy;
            this.dy = a;
            p = this.dy.slice();
            E = 0;
            for (H = p.length; E < H; E++) {
                M = p[E];
                if (k.indexOf(M) < 0) {
                    M = M.userData.Rk.zw;
                    M.bind(h.S, this.AW, this, n);
                    M.bind(h.oe, this.BW, this, n);
                    M.load()
                }
            }
        };
        t.prototype.AW =
        function (a) {
            this.X$(a.source);
            this.trigger(h.S)
        };
        t.prototype.BW = function (a) {
            this.X$(a.source)
        };
        t.prototype.X$ = function (a) {
            a.unbind(h.S, this.AW, this, n);
            a.unbind(h.oe, this.BW, this, n);
            var b = a.material(),
            d = this.dy,
            e = d.indexOf(b);
            e >= 0 && d.splice(e, 1);
            this.Br.push(b);
            this.TV(b, n);
            a = a.Mk();
            c(a).om.indexOf(b) >= 0 && this.XP(a, c(a).$p);
            this.Haa()
        };
        t.prototype.XP = function (a, b) {
            var e = c(a).$p,
            e = e ? e.length : m,
            f = c(a).om,
            f = f ? f.length : m;
            c(a).$p = b;
            c(a).om = b.filter(d);
            p.WZ(a, c(a).om.length == 0 && (c(a).lZ || t.QO) == t.Tj);
            var j =
                c(a).$p,
            j = j ? j.length : m,
            g = c(a).om,
            g = g ? g.length : m;
            if (f !== g || e !== j)
                a.dispatchEvent({
                    type: h.wc,
                    Kh: j ? 100 - 100 * g / j : 100
                });
            f !== g && g === 0 && a.dispatchEvent({
                type: h.S
            })
        };
        t.prototype.TV = function (a, c) {
            if (c != a.visible) {
                var d = k.gca(a),
                f = l.getAttribute(d, l.$s),
                h = l.getAttribute(d, l.QN);
                if (f === m || h === m)
                    a.visible = c;
                else {
                    for (var j = q.Gh(this.m.ye).filter(b), f = l.qM(j, l.$s, f), h = l.qM(f, l.QN, h), g = l.Js(d).indexOf(a), d = h.map(function (a) {
                            return l.Js(a)[g]
                        }), h = c, f = 0; f < d.length && h; f++)
                        h = h && e(d[f]).jZ();
                    for (f = 0; f < d.length; f++)
                        d[f].visible =
                            h
                }
            }
        };
        t.wda = function () {
            var a;
            a = o.Za() ? 128 : 384;
            t.wda = function () {
                return a
            };
            return a
        };
        t.nd = function (a, b) {
            l.Zg(a, function (a) {
                c(a).enabled = b
            })
        };
        t.enabled = g;
        t.xN = function (a, b) {
            l.Zg(a, function (a) {
                c(a).pxa = b
            })
        };
        t.Tj = "all";
        t.QO = "in view";
        t.On = function (a, b) {
            l.Zg(a, function (a) {
                c(a).lZ = b
            })
        };
        t.$k = "always";
        t.CG = "on demand";
        t.Pn = function (a, b) {
            l.Zg(a, function (a) {
                c(a).nZ = b
            })
        };
        t.Wz = function (a, b) {
            l.Zg(a, function (a) {
                c(a).Td = b
            })
        };
        t.Ts = function (a, b) {
            l.Zg(a, function (a) {
                c(a).ABa = b;
                l.Js(a).forEach(function (a) {
                    e(a).Jya(b)
                })
            })
        };
        t.xBa = function (a) {
            return 100 - 100 * c(a).om.length / c(a).$p.length
        };
        t.wBa = function (a) {
            return c(a).om.length == 0
        };
        t.Xz = function (a, b) {
            (c(a).zw = b) && (a.visible = b.jZ())
        };
        t.zw = e;
        var v = (new Date).getTime();
        return t
    });
    define("eg", "require,fg,gU,dX,bU,dv,M,hZ,jN".split(","), function (a) {
        var b = a("fg"),
        c = a("gU"),
        e = a("dX"),
        g = a("bU"),
        d = a("dv"),
        f = a("M"),
        h = a("hZ"),
        j = a("jN"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("tag", "ComposedWebGLObject");
            this.set("webglScene", r);
            this.set("meshGroup", r);
            this.set("camera", r);
            this.set("textureSource", r);
            this.set("materialConfig", this.QT = new g.Wn);
            this.wo && this.wo();
            this.Yt && this.Yt();
            this.Tq && this.Tq();
            this.Yj && this.Yj()
        });
        a.prototype.Qa = function () {
            c.prototype.Qa.call(this);
            this.sk &&
            this.sk();
            this.eC && this.eC();
            this.uy && this.uy()
        };
        a.prototype.Sa = function () {
            this.fy && this.fy();
            this.vy && this.vy();
            this.uk && this.uk();
            d.dispose(this.get("meshGroup"));
            d.AN(this.get("meshGroup"), r);
            this.set("meshGroup", r);
            c.prototype.Sa.call(this)
        };
        a.prototype.L = function (a) {
            this.Ne && this.Ne(a);
            c.prototype.L.call(this, a);
            this.set("camera", f.Hs(a.ye));
            this.set("webglScene", a.ye);
            if (!this.get("meshGroup")) {
                this.set("meshGroup", d.Bba(this.Vi()));
                this.get("meshGroup").userData.lxa = this
            }
            this.p("webglScene",
                "meshGroup") && d.AN(this.get("meshGroup"), this.get("webglScene"));
            this.si();
            this.az && this.az(a);
            this.Ata();
            this.Dp && this.Dp(a);
            this.bm && this.bm(a);
            this.yv();
            this.p("loadingActive", "meshGroup") && h.nd(this.get("meshGroup"), this.get("loadingActive"));
            this.p("blendingActive", "meshGroup") && j.tea(this.get("meshGroup"), this.get("blendingActive"))
        };
        a.prototype.si = function () {
            this.p("composedAlpha", "meshGroup") && this.Dq()
        };
        a.prototype.Dq = function () {
            d.xd(this.get("meshGroup"), this.get("composedAlpha"))
        };
        a.prototype.Ata =
        function () {
            if (this.p("textureSource") || this.p("materialConfig") && !this.QT.isEqual(this.get("materialConfig"))) {
                var a = this.Nx();
                if (a) {
                    d.Mya(a, this.vx());
                    this.Dq()
                }
            }
        };
        a.prototype.yv = function () {
            if (this.p("index", "meshGroup")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a, b, c) {
                    d.DN(a, this.get("index") + b / c.length)
                }
                    .bind(this))
            }
        };
        a.prototype.vx = function () {
            var a = this.get("textureSource") || new e;
            this.QT = this.get("materialConfig");
            var b = g.Ds(a.texture(), this.QT);
            h.Xz(b, a);
            return [b]
        };
        a.prototype.F3 =
        function () {
            var a = new e,
            b = g.Ds(a.texture());
            h.Xz(b, a);
            return [b]
        };
        a.prototype.Go = function (a) {
            return d.Cva(this.get("meshGroup"), a)
        };
        return a
    });
    define("hK", ["require", "it", "jY", "jn"], function (a) {
        var b = a("it"),
        c = a("jY"),
        e = a("jn"),
        g = 180 / Math.PI,
        d = Math.PI / 180;
        return {
            zY: function (a, b, d, g, k, l, q) {
                b || (b = a * g / d);
                k || (k = e.Zn);
                var o = {};
                switch (k) {
                case e.Zn:
                    o.width = a;
                    o.height = b;
                    break;
                case e.NONE:
                    o.width = d;
                    o.height = g;
                    break;
                case e.Te:
                    o.width = Math.min(b * d / g, a);
                    o.height = Math.min(a * g / d, b);
                    break;
                case e.xm:
                    o.width = Math.max(b * d / g, a);
                    o.height = Math.max(a * g / d, b);
                    break;
                case e.Zk:
                    o.width = a;
                    o.height = a * g / d;
                    break;
                case e.kh:
                    o.width = b * d / g,
                    o.height = b
                }
                o.width > a ? (o.jq = a / o.width,
                    o.bG = l == c.qa ? 0 : l == c.Na ? 1 - o.jq : 0.5 * (1 - o.jq), o.width = a) : (o.bG = 0, o.jq = 1);
                o.height > b ? (o.kq = b / o.height, o.eG = q == c.nb ? 1 - o.kq : q == c.mb ? 0 : 0.5 * (1 - o.kq), o.height = b) : (o.eG = 0, o.kq = 1);
                return o
            },
            HY: function (a, h, j, p, k, l, q, o) {
                h || (h = b.Kk(a, j, p));
                k || (k = e.Zn);
                l || (l = 4096 / 360);
                var t = {};
                switch (k) {
                case e.Zn:
                    t.bd = a;
                    t.um = h;
                    break;
                case e.NONE:
                    t.bd = 2 * Math.atan2(0.5 * j, 45 * l) * g;
                    t.um = b.Kk(t.bd, j, p);
                    break;
                case e.Te:
                    t.bd = Math.min(b.Sn(h, j, p), a);
                    t.um = Math.min(b.Kk(a, j, p), h);
                    break;
                case e.xm:
                    t.bd = Math.max(b.Sn(h, j, p), a);
                    t.um = Math.max(b.Kk(a,
                                j, p), h);
                    break;
                case e.Zk:
                    t.bd = a;
                    t.um = b.Kk(a, j, p);
                    break;
                case e.kh:
                    t.bd = b.Sn(h, j, p),
                    t.um = h
                }
                t.bd > a ? (t.jq = Math.tan(0.5 * a * d) * j / Math.tan(0.5 * t.bd * d) / j, t.bG = q == c.qa ? 0 : q == c.Na ? 1 - t.jq : 0.5 * (1 - t.jq), t.bd = a) : (t.bG = 0, t.jq = 1);
                t.um > h ? (t.kq = Math.tan(0.5 * h * d) * p / Math.tan(0.5 * t.um * d) / p, t.eG = o == c.nb ? 1 - t.kq : o == c.mb ? 0 : 0.5 * (1 - t.kq), t.um = h) : (t.eG = 0, t.kq = 1);
                return t
            }
        }
    });
    define("kO", "require,ge,gW,dv,hK,hZ,it,ku,jY".split(","), function (a) {
        var b = a("ge"),
        c = a("gW"),
        e = a("dv"),
        g = a("hK"),
        d = a("hZ"),
        f = a("it"),
        h = a("ku"),
        j = a("jY"),
        p = new THREE.Matrix4,
        k = Math.PI / 180;
        return {
            wo: function () {
                this.set("distance", m);
                this.set("rotationX", 0);
                this.set("rotationY", 0);
                this.set("rotationZ", 0);
                this.set("yaw", 0);
                this.set("pitch", 0);
                this.set("roll", 0);
                this.set("scale", 1);
                this.set("contentWidth", 100);
                this.set("contentHeight", 100);
                this.set("hfov", m);
                this.set("vfov", r);
                this.set("scaleMode", r);
                this.set("horizontalAlign", r);
                this.set("verticalAlign", r);
                this.set("attachToCamera", y);
                this.wf = this.Sq();
                this.ef = new THREE.Matrix4;
                this.ic = new THREE.Matrix4;
                this.tk = new THREE.Matrix4;
                this.Xi = new THREE.Matrix4;
                this.tg = new THREE.Matrix4;
                this.ZP = new THREE.Matrix4;
                this.v2 = new THREE.Quaternion;
                this.y3 = new THREE.Matrix4;
                this.PA = new THREE.Matrix4;
                this.$A = new THREE.Matrix4;
                this.Iq = new THREE.Matrix4;
                this.rf = new THREE.Matrix4
            },
            Dp: function (a) {
                this.Zl(a);
                this.pX()
            },
            pX: function () {
                if (this.p("hfov", "vfov", "contentWidth",
                        "contentHeight", "panoramaPixelsPerDegree", "scaleMode", "horizontalAlign", "verticalAlign")) {
                    var a = g.HY(this.get("hfov"), this.get("vfov"), this.get("contentWidth"), this.get("contentHeight"), this.get("scaleMode"), this.get("panoramaPixelsPerDegree"), this.get("horizontalAlign"), this.get("verticalAlign")),
                    a = c.Kea(this.wf[1], a.bG, a.eG, a.jq, a.kq);
                    if (this.wf[1] != a) {
                        this.wf[1] = a;
                        (a = this.Nx()) && e.VZ(a, this.wf[1])
                    }
                }
            },
            Nx: function () {
                var a = this.get("meshGroup");
                return a ? e.Gh(a)[1] : r
            },
            Vi: function () {
                return [0, 1].map(function (a) {
                    var c =
                        a == 0 ? this.F3() : this.vx(),
                    a = e.create(this.wf[a], c);
                    d.On(a, d.Tj);
                    d.Pn(a, d.$k);
                    d.Ts(a, b.Rw);
                    d.Wz(a, 1);
                    return a
                }
                    .bind(this))
            },
            Sq: function () {
                return [c.oz(), c.oz()]
            },
            Zl: function (a) {
                var b = y;
                if (this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                    this.ef.makeTranslation(-this.get("composedTranslationX") * 0.5 * c.Ld, this.get("composedTranslationY") * 0.5 * c.Ld, this.get("composedTranslationZ") * 0.5 * c.Ld);
                    b = n
                }
                if (this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll")) {
                    this.ic.makeRotationY(-a.ma *
                        k);
                    this.ic.multiply(p.makeRotationX(-this.get("composedDeltaPitch") * k));
                    this.ic.multiply(p.makeRotationY(this.get("composedDeltaYaw") * k));
                    this.ic.multiply(p.makeRotationY(a.ma * k));
                    b = n
                }
                if (this.p("yaw", "pitch")) {
                    this.tk.makeRotationY(-this.get("yaw") * k);
                    this.tk.multiply(p.makeRotationX(this.get("pitch") * k));
                    b = n
                }
                if (this.p("distance", "flipHorizontally", "scale", "hfov", "vfov", "contentWidth", "contentHeight", "scaleMode", "horizontalAlign", "verticalAlign", "composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                    var d =
                        this.Q.get("composedTranslationX") == 0 && this.Q.get("composedTranslationY") == 0 && this.Q.get("composedTranslationZ") == 0 && this.get("distance") !== m ? c.Uv(this.get("distance")) : c.Np();
                    this.Xi.makeTranslation(0, 0, -d);
                    var t = this.get("contentWidth"),
                    s = this.get("contentHeight"),
                    v = this.get("hfov"),
                    u = this.get("vfov") || f.Kk(v, t, s),
                    w = (this.get("flipHorizontally") ? -1 : 1) * this.get("scale"),
                    x = this.get("scale"),
                    z = this.get("scaleMode"),
                    C = this.get("panoramaPixelsPerDegree"),
                    b = this.get("horizontalAlign") || j.Lc,
                    A = this.get("verticalAlign") ||
                        j.vc,
                    t = g.HY(v, u, t, s, z, C, b, A),
                    v = w * c.IY(d, v),
                    u = x * c.JY(d, u);
                    this.PA.makeScale(v, u, 1);
                    w = w * c.IY(d, t.bd);
                    d = x * c.JY(d, t.um);
                    this.$A.makeScale(w, d, 1);
                    this.y3.makeTranslation(b == j.qa ?  - (v - w) * 0.5 : b == j.Na ? (v - w) * 0.5 : 0, A == j.nb ? (u - d) * 0.5 : A == j.mb ?  - (u - d) * 0.5 : 0, 0);
                    b = n
                }
                if (this.p("rotationX", "rotationY", "rotationZ", "roll")) {
                    this.tg.makeRotationZ(this.get("roll") * k);
                    this.tg.multiply(p.makeRotationY(this.get("rotationY") * k));
                    this.tg.multiply(p.makeRotationX(this.get("rotationX") * k));
                    this.tg.multiply(p.makeRotationZ(this.get("rotationZ") *
                            k));
                    b = n
                }
                this.set("cameraYaw", a.ma);
                this.set("cameraPitch", a.pitch);
                this.set("cameraRoll", a.md);
                if (this.get("attachToCamera") && this.p("cameraYaw", "cameraPitch", "cameraRoll")) {
                    this.v2.copy(h.Sba(a.ma, a.pitch, a.md));
                    this.ZP.makeRotationFromQuaternion(this.v2);
                    b = n
                } else if (this.p("attachToCamera")) {
                    this.ZP.identity();
                    b = n
                }
                if (b || this.p("meshGroup")) {
                    this.rf.copy(this.ef);
                    this.rf.multiply(this.ic);
                    this.rf.multiply(this.ZP);
                    this.rf.multiply(this.tk);
                    this.rf.multiply(this.Xi);
                    this.rf.multiply(this.tg);
                    this.Iq.copy(this.rf);
                    this.Iq.multiply(this.PA);
                    this.rf.multiply(this.y3);
                    this.rf.multiply(this.$A);
                    a = e.Gh(this.get("meshGroup"));
                    e.fm(a[0], this.Iq);
                    e.fm(a[1], this.rf)
                }
            }
        }
    });
    define("hk", ["require", "fg", "eg", "kO"], function (a) {
        var b = a("fg"),
        c = a("eg"),
        a = a("kO");
        return b.extend(c, a, function () {
            c.call(this);
            this.set("tag", "Plane")
        })
    });
    define("cW", "require,fg,ll,eO,kz,V".split(","), function (a) {
        function b() {
            if (!p) {
                p = n;
                h.Ma(c, r)
            }
        }
        function c() {
            for (p = y; j.length; ) {
                var a = j.shift();
                a.add();
                if (a.axa())
                    break
            }
            j.length && b()
        }
        var e = a("fg"),
        g = a("ll"),
        d = a("eO"),
        f = a("kz"),
        h = a("V"),
        j = [],
        p = y,
        k = e.extend(d, function (a, b) {
            d.call(this);
            this.texture = a;
            this.source = b
        });
        k.prototype.axa = function () {
            return !this.source.X1 && f.mua(this.source)
        };
        k.prototype.Gba = function () {
            if (!this.source.X1) {
                f.Gba(this.source);
                this.source.X1 = n
            }
        };
        k.prototype.add = function () {
            f.JN(this.texture,
                this.source);
            this.trigger(g.S)
        };
        k.prototype.remove = function () {
            var a = j.indexOf(this);
            a >= 0 && j.splice(a, 1);
            f.JN(this.texture, r)
        };
        return {
            add: function (a, c) {
                var d = new k(a, c);
                j.push(d);
                b();
                return d
            }
        }
    });
    define("jS", "require,fg,ll,bS,iG,cW,jZ".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bS"),
        g = a("iG"),
        d = a("cW"),
        f = a("jZ"),
        a = b.extend(f, function (a) {
            f.call(this);
            this.Zd = f.xga;
            this.Od = a;
            this.ue = this.By = this.he = r
        });
        a.prototype.we = Q("ue");
        a.prototype.fQ = function () {
            this.YQ()
        };
        a.prototype.nL = function () {
            this.Do()
        };
        a.prototype.dQ = function () {
            this.Nja()
        };
        a.prototype.VD = function () {
            this.Do();
            this.xR()
        };
        a.prototype.ss = function () {
            this.Do();
            this.xR()
        };
        a.prototype.dispose = function () {
            this.Do();
            this.xR();
            f.prototype.dispose.call(this)
        };
        a.prototype.Ze = function () {
            this.ue = g.we(this.Od);
            this.ky(n)
        };
        a.prototype.Fr = function () {
            this.ky(y)
        };
        a.prototype.K6 = function () {
            this.J6()
        };
        a.prototype.YQ = function () {
            if (!this.he) {
                this.he = new e;
                this.he.g_([this.Od]);
                this.he.bind(c.S, this.Ze, this, n);
                this.he.bind(c.oe, this.Fr, this, n);
                g.Mn(this.he, this.$B)
            }
        };
        a.prototype.Do = function () {
            if (this.he) {
                this.he.unbind(c.S, this.Ze, this, n);
                this.he.unbind(c.oe, this.Fr, this, n);
                g.Fi(this.he, this.$B);
                this.he = r
            }
        };
        a.prototype.Nja = function () {
            this.By = d.add(this.xb, this.ue);
            this.By.bind(c.S, this.K6, this, n)
        };
        a.prototype.xR = function () {
            if (this.By) {
                this.By.unbind(c.S, this.K6, this, n);
                this.By.remove();
                this.By = r
            }
        };
        return a
    });
    define("gf", ["require"], function () {
        function a() {
            this.qr = b++;
            this.cC = "_map_" + this.qr + "_key";
            this.WI = {};
            this.Ye = [];
            this.length = 0
        }
        var b = 0;
        a.prototype.set = a.prototype.add = function (a, b) {
            var g;
            0 > this.Ye.indexOf(a) && this.Ye.push(a);
            if ("object" === typeof a && a !== r) {
                if (g = a[this.cC], !g) {
                    g = this.cC;
                    for (var d = [], f = 0; 8 > f; f++)
                        d.push(Math.floor(16 * Math.random()).toString(16));
                    g = a[g] = d.join("")
                }
            } else
                g = a;
            this.WI[g] = b;
            this.length = this.Ye.length
        };
        a.prototype.get = function (a) {
            return this.WI["object" === typeof a && a !== r ? a[this.cC] :
                a]
        };
        a.prototype.Eca = function (a) {
            return 0 <= this.Ye.indexOf(a)
        };
        a.prototype.remove = function (a) {
            var b = this.Ye.indexOf(a);
            0 > b || (this.Ye.splice(b, 1), "object" === typeof a && a !== r ? (b = a[this.cC], delete a[this.cC]) : b = a, delete this.WI[b], this.length = this.Ye.length)
        };
        a.prototype.forEach = function (a) {
            this.Ye.slice().forEach(function (b) {
                a(b, this.get(b))
            }
                .bind(this))
        };
        a.prototype.dispose = function () {
            for (; this.Ye.length; )
                this.remove(this.Ye.pop());
            this.Ye = this.WI = r
        };
        return a
    });
    define("hS", ["require", "fg", "eO", "gf"], function (a) {
        function b() {
            this.Nv = []
        }
        var c = a("fg"),
        e = a("eO"),
        g = a("gf"),
        a = c.extend(e, function (a) {
            e.call(this);
            this.Vd = a;
            this.Yc = [];
            this.Ko = new g;
            this.FE = [];
            this.LR = [];
            this.jy = this.jy.bind(this)
        });
        a.prototype.yd = function (a) {
            this.Yc.forEach(function (a) {
                a.removeEventListener ? a.removeEventListener(this.Vd, this.jy) : a.unbind ? a.unbind(this.Vd, this.jy, this, n) : i("invalid instance type")
            }
                .bind(this));
            this.Yc = a.slice();
            this.Yc.forEach(function (a) {
                a.addEventListener ? a.addEventListener(this.Vd,
                    this.jy) : a.bind ? a.bind(this.Vd, this.jy, this, n) : i("invalid instance type");
                this.Ko.Eca(a) || this.Ko.set(a, new b)
            }
                .bind(this));
            this.WW()
        };
        a.prototype.dispose = function () {
            this.yd([]);
            this.Yc = r;
            this.Ko.dispose();
            this.LR = this.FE = this.Ko = r
        };
        a.prototype.Hi = function (a) {
            this.FE.push(a);
            this.WW();
            return this
        };
        a.prototype.Nk = function (a) {
            this.LR.push(a);
            return this
        };
        a.prototype.zn = function (a) {
            this.Yc.forEach(function (b) {
                a(b, this.Ko.get(b).Nv)
            }
                .bind(this))
        };
        a.prototype.Ai = function (a) {
            a = this.Ko.get(a).Nv;
            return 0 ==
            a.length ? r : a[a.length - 1]
        };
        a.prototype.jy = function (a) {
            var b = a.target || a.source;
            if (b = this.Ko && this.Ko.get(b))
                b.Nv.push(a), this.LR.forEach(function (b) {
                    b(a, this)
                }
                    .bind(this)), this.WW()
        };
        a.prototype.WW = function () {
            if (0 != this.Yc.length) {
                for (var a = 0; a < this.Yc.length; a++)
                    if (0 == this.Ko.get(this.Yc[a]).Nv.length)
                        return;
                this.FE.length && (a = this.FE.slice(), this.FE = [], a.forEach(function (a) {
                        a(this)
                    }
                        .bind(this)))
            }
        };
        return a
    });
    define("bH", ["require", "dW"], function (a) {
        var b = a("dW"),
        c = {
            get: function (a) {
                return a.Uga || (a.Uga = this.Fka(a))
            },
            Fka: function (a) {
                if (b.tb("CubicPanoramaFrame", a))
                    return a.get("stereoCube") ? c.xt : a.get("cube") ? c.rq : c.Ki;
                if (b.tb("SphericPanoramaFrame", a)) {
                    if (a.get("stereoSphere")) {
                        var g = a.get("hfov"),
                        d = a.get("vfov"),
                        f = a.get("stereoSphere").get("levels"),
                        a = Math.max.apply(Math, f.map(function (a) {
                                    return a.get("width")
                                })),
                        f = Math.max.apply(Math, f.map(function (a) {
                                    return a.get("height")
                                }));
                        return 2 == Math.round(f /
                            d / (a / g)) ? c.zm : c.ao
                    }
                    return c.$n
                }
            },
            xt: "stereoCube_12_1",
            rq: "monoCube_6_1",
            Ki: "monoCube_1_1",
            $n: "monoSphere_1_1",
            zm: "stereoSphere_1_2",
            ao: "stereoSphere_2_1"
        };
        return c
    });
    define("fp", ["require"], function () {
        function a(a, e, g) {
            this.Od = a;
            this.Z$ = e;
            this.cu = g || b
        }
        var b = function () {
            var a = document.createElement("canvas");
            a.width = a.height = 256;
            a.getContext("2d").clearRect(0, 0, a.width, a.height);
            return a
        }
        ();
        a.prototype.isEmpty = function () {
            return this.cu == b
        };
        a.prototype.isEqual = function (a) {
            return this.Od == a.Od && this.Z$ == a.Z$ && this.cu == a.cu
        };
        return a
    });
    define("cx", ["require", "iX", "r", "gl"], function (a) {
        function b(a) {
            return g.Wea(a.get("width"), a.get("height"), a.get("framerate"))
        }
        function c(a, b) {
            if (!b)
                return n;
            var c = a.get("url"),
            d = a.get("type") || "";
            switch (b) {
            case h:
                return f.is(c, f.o1) || e(d, "webm");
            case j:
                return f.is(c, f.Lfa) || (f.is(c, f.TO) || f.is(c, f.n0) || !c) && (e(d, "hev1") || e(d, "h265") || e(d, "heic")) ? n : y;
            case p:
                return f.is(c, f.TO) || e(d, "mp4");
            case k:
                return f.is(c, f.Sj) || e(d, "x-mpegurl");
            case l:
                return f.is(c, f.F0) || e(d, "ogg");
            case q:
                return f.is(c, f.n0) ||
                e(d, "quicktime");
            default:
                return y
            }
        }
        function e(a, b) {
            return 0 <= (a || "").toLowerCase().indexOf(b)
        }
        var g = a("iX"),
        d = a("r"),
        f = a("gl"),
        h = "webm",
        j = "h265",
        p = "mp4",
        k = "hls",
        l = "ogv",
        q = "mov",
        o = {
            Yva: function (a) {
                return o.select(a.get("levels"))
            },
            Wva: function (a) {
                return o.select(a.get("levels"))
            },
            select: function (a) {
                a || (a = []);
                var a = a.slice(),
                e = [];
                g.dwa && e.push({
                    type: k,
                    Rn: y
                });
                g.mwa && e.push({
                    type: j,
                    Rn: n
                });
                g.SY && e.push({
                    type: h,
                    Rn: n
                });
                g.TM && e.push({
                    type: p,
                    Rn: n
                });
                g.nwa && e.push({
                    type: q,
                    Rn: n
                });
                g.RY && e.push({
                    type: l,
                    Rn: n
                });
                e.push({
                    type: p,
                    Rn: n
                });
                e.push({
                    type: h,
                    Rn: n
                });
                e.push({
                    type: p,
                    Rn: y
                });
                e.push({
                    type: h,
                    Rn: y
                });
                for (var f = 1E3 * (d.Za() ? 800 : 5E3), o = 0; o < e.length; o++) {
                    var w = a;
                    e[o].Rn && (w = w.filter(b));
                    w = w.filter(function (a) {
                        if (c(a, e[o].type))
                            return n
                    });
                    e[o].type != k && w.sort(function (a, b) {
                        return Math.abs(f - a.get("bitrate")) - Math.abs(f - b.get("bitrate"))
                    });
                    if (w.length)
                        return w[0]
                }
                return r
            }
        };
        return o
    });
    define("kT", "require,fg,bZ,eO,ll,fu,ge,dW,r,jt,kQ,cQ,fp,ka,ga,bD,cx".split(","), function (a) {
        function b(a) {
            p.browser() == p.Ji && (a = k.Hv(a, "playbacksession=" + (new Date).getTime()));
            return a
        }
        var c = a("fg"),
        e = a("bZ"),
        g = a("eO"),
        d = a("ll"),
        f = a("fu"),
        h = a("ge"),
        j = a("dW"),
        p = a("r"),
        k = a("jt"),
        l = a("kQ"),
        q = a("cQ"),
        o = a("fp"),
        t = a("ka"),
        s = a("ga"),
        v = a("bD"),
        u = a("cx"),
        w = c.extend(g, function (a, b) {
            g.call(this);
            this.ra = a;
            this.j = b;
            this.ab = w.ah(this.j);
            this.V = r;
            this.ID();
            this.j.bind(d.D("subtitlesURL"), this.Fl, this, n);
            this.j.bind(d.D("gain"),
                this.uC, this, n);
            this.ab.bind(d.D("subtitlesURL"), this.Fl, this, n);
            this.ab.bind(d.D("url"), this.Fl, this, n);
            this.m = f.H;
            this.qe = this.gb = 0;
            this.rd = y;
            this.dm = 1;
            this.fj = y;
            this.u = this.Ja = r;
            this.nx = y;
            this.wH = m;
            this.k3 = y;
            this.Cm = []
        });
        w.prototype.Ta = Q("ra");
        w.prototype.Cc = function (a) {
            if (this.m != a && !(a == f.mc && this.m != f.P)) {
                this.k3 && a == f.P && this.m == f.H && this.wQ();
                this.m = a;
                if (this.m == f.P) {
                    this.Ja && this.Ja.play(this.ra, this.V, this.qe);
                    v.mN(this)
                } else {
                    v.Oca() ? this.Ja && this.Ja.stop() : v.Mz(this);
                    this.m == f.H && this.YV()
                }
                this.PW()
            }
        };
        w.prototype.Qe = Q("m");
        w.prototype.Cj = Q("gb");
        w.prototype.rw = function (a) {
            this.qe = a;
            if (this.Ja) {
                this.Ja.$v() && this.IR();
                this.Ja.play(this.ra, this.V, this.qe)
            }
        };
        w.prototype.yi = Q("qe");
        w.prototype.hq = function (a) {
            this.dm = a;
            this.Ja && this.Ja.hq(a)
        };
        w.prototype.Kd = function (a) {
            this.rd = a;
            this.Ja && this.Ja.Kd(a)
        };
        w.prototype.sm = function (a) {
            this.fj = a;
            this.Ja && this.Ja.sm(a)
        };
        w.prototype.dya = function () {
            this.k3 = n
        };
        w.prototype.pz = function (a, b, c) {
            this.Ja && this.Ja.$v() ? this.Ja.pz(a, b, c) : this.nx ? a.drawImage(this.u, 0,
                0, b, c) : a.fillRect(0, 0, b, c)
        };
        w.prototype.AM = function () {
            if (this.Ja && this.Ja.$v()) {
                var a = this.Ja.yi(),
                b = this.Ja.cb;
                if (this.lT())
                    return new o(this.V.src, this.wH, this.u);
                this.wQ();
                return new o(this.V.src, a, b)
            }
            return this.nx ? new o(this.V.src, this.qe, this.u) : new o(this.V.src, this.qe, r)
        };
        w.prototype.pN = function () {
            return !this.rd && this.j.get("hasAudio")
        };
        w.prototype.wd = function () {
            return s.Ni
        };
        w.prototype.LY = function () {
            return h.Ni
        };
        w.prototype.mY = function (a) {
            this.Ja = a;
            setTimeout(function () {
                this.Ja && this.Ja.bind(l.Pj,
                    this.tC, this, n)
            }
                .bind(this), 0);
            this.ID();
            this.Ja.bind(l.Md, this.hd, this, n);
            this.Ja.bind(l.cg, this.hj, this, n);
            this.Ja.bind(d.Jf, this.Uf, this, n);
            this.Ja.Kd(this.rd);
            this.Ja.hq(this.dm);
            this.Ja.sm(this.fj);
            this.Ja.play(this.ra, this.V, this.qe)
        };
        w.prototype.iZ = function () {
            this.Ja.$v() && this.IR();
            this.qe = this.Ja.yi();
            this.Ja.unbind(l.Pj, this.tC, this, n);
            this.Ja.unbind(l.Md, this.hd, this, n);
            this.Ja.unbind(l.cg, this.hj, this, n);
            this.Ja.unbind(d.Jf, this.Uf, this, n);
            if (this.m == f.H) {
                this.Ja.stop();
                this.Ja.rw(0)
            }
            this.Ja =
                r
        };
        w.prototype.clear = function () {
            v.Mz(this);
            this.wQ();
            if (this.j) {
                this.j.unbind(d.D("subtitlesURL"), this.Fl, this, n);
                this.j.unbind(d.D("gain"), this.uC, this, n);
                this.j = r
            }
            if (this.ab) {
                this.ab.unbind(d.D("subtitlesURL"), this.Fl, this, n);
                this.ab.unbind(d.D("url"), this.Fl, this, n);
                this.ab = r
            }
        };
        w.prototype.Fl = function () {
            this.av && clearTimeout(this.av);
            this.av = setTimeout(function () {
                this.av = r;
                if (this.Ja) {
                    this.V.Nj = this.j.get("subtitlesURL") || this.ab.get("subtitlesURL");
                    this.V.src = b(this.ab.get("url"));
                    this.Ja.play(this.ra,
                        this.V, this.qe)
                }
            }
                    .bind(this), 10)
        };
        w.prototype.uC = function () {
            if (this.Ja) {
                this.V.gain = this.j.get("gain");
                this.Ja.KF(this.V.gain)
            }
        };
        w.prototype.ID = function () {
            this.V = new t;
            this.V.src = b(this.ab.get("url"));
            this.V.Nj = this.j.get("subtitlesURL") || this.ab.get("subtitlesURL");
            this.V.Rp = this.j.get("hasAudio");
            this.V.gain = this.j.get("gain")
        };
        w.prototype.IR = function () {
            if (!this.u)
                this.u = document.createElement("canvas");
            if (!this.lT()) {
                this.u.width = this.Ja.ad();
                this.u.height = this.Ja.Pd();
                this.wH = this.Ja.yi();
                var a =
                    this.u.getContext("2d");
                a.clearRect(0, 0, this.u.width, this.u.height);
                this.nx = this.Ja.pz(a, this.u.width, this.u.height)
            }
        };
        w.prototype.lT = function () {
            var a = this.Ja.yi();
            this.gb && (a = Math.min(a, this.gb));
            return this.nx && Math.abs(a - this.wH) <= 0.15
        };
        w.prototype.wQ = function () {
            if (this.nx) {
                this.wH = m;
                this.nx = y;
                if (p.browser() != p.Ji) {
                    this.u.width = 0;
                    this.u.height = 0;
                    this.u = r
                }
            }
        };
        w.prototype.hj = function () {
            this.gb = this.Ja.Cj();
            this.MW()
        };
        w.prototype.hd = function () {
            this.gb != this.Ja.Cj() && this.hj();
            this.qe = this.Ja.yi();
            p.Rd() == p.Lh && this.qe > 0 && this.qe > this.gb - 0.15 && !this.lT() && !this.fj && this.IR();
            this.jE()
        };
        w.prototype.Uf = function () {
            this.Cm = this.Ja.bF().map(function (a) {
                for (var b = r, c = 0; c < this.Cm.length && !b; c++)
                    this.Cm[c].cue == a && (b = this.Cm[c]);
                b || (b = new q(a));
                return b
            }
                    .bind(this));
            this.trigger(new e(d.Jf))
        };
        w.prototype.tC = function () {
            this.Cc(f.H);
            this.NW()
        };
        w.prototype.YV = function () {
            this.qe = 0;
            this.jE()
        };
        w.prototype.jE = function () {
            this.trigger(new e(w.Md))
        };
        w.prototype.MW = function () {
            this.trigger(new e(w.cg))
        };
        w.prototype.NW =
        function () {
            this.trigger(new e(d.Ba))
        };
        w.prototype.PW = function () {
            this.trigger(new e(d.gc))
        };
        w.Md = "time update";
        w.cg = "duration update";
        w.ah = function (a) {
            if (j.tb("Video360Resource", a))
                return u.Wva(a);
            if (j.tb("VideoResource", a))
                return u.Yva(a);
            i("invalid video resource object: " + a)
        };
        return w
    });
    define("km", "require,dW,jj,cT,jL,bH,hK,iX,r,gl,jn,id,kT".split(","), function (a) {
        function b(a, b, c) {
            return a.split(b).join(c).split(encodeURI(b)).join(c)
        }
        function c() {
            var a = z.Tp() && URL.$g("recent_ipad_use_max_res", y);
            c = function () {
                return a
            };
            return a
        }
        function e(a) {
            if (a.length == 0)
                return 1;
            a.sort(function (a, b) {
                return b.get("width") - a.get("width")
            });
            return a[0].get("width") / a[0].get("height")
        }
        function g(a, b) {
            var d = 1E4;
            c() || (z.le() ? d = 2048 : z.Tp() ? d = 1280 : z.Za() && (d = 1024));
            switch (a) {
            case w.rq:
                return [6 * d, d];
            case w.Ki:
                return [d, d];
            case w.xt:
                return [12 * d, d]
            }
            switch (a) {
            case w.zm:
                b = b * 2;
                break;
            case w.ao:
                b = b * 0.5
            }
            return b > 2 ? [d * 4, d * 4 / b] : [d * 2 * b, d * 2]
        }
        function d(a) {
            if (c())
                return [m, m];
            switch (a) {
            case w.rq:
                if (z.le() || z.Za())
                    return [18432, 1536];
                break;
            case w.zm:
                if (z.le())
                    return [5352, 5352];
                if (z.Za())
                    return [6086, 6086];
                break;
            case w.$n:
                if (z.le())
                    return [7168, 3584];
                if (z.Za() && z.Tp())
                    return [8192, 4096]
            }
            return [m, m]
        }
        function f(a, b) {
            var c = d(b);
            return a.filter(function (a) {
                return t.tb("TiledImageResourceLevel", a) ? n : c[0] !== m && a.get("width") >
                c[0] || c[1] !== m && a.get("height") > c[1] ? y : n
            })
        }
        function h() {
            return z.Tp() ? [s.Z0] : z.dZ() ? [s.a1, s.jP] : z.le() ? [s.jP] : z.Za() ? [s.$0] : []
        }
        function j(a) {
            a.sort(function (a, b) {
                return a.get("width") - b.get("width")
            });
            return a
        }
        function p(a, b) {
            function c(a) {
                return Math.abs(a.get("width") * a.get("height") - b[0] * b[1])
            }
            a.sort(function (a, b) {
                return c(a) - c(b)
            });
            return a.length && a[0] || r
        }
        function k(a, b, c) {
            a = a.filter(function (a) {
                return a.get("tags").indexOf(b) < 0
            });
            return a.length ? a : c !== m ? c : []
        }
        function l(a, b, c) {
            a = a.filter(function (a) {
                return a.get("tags").indexOf(b) >=
                0
            });
            return a.length ? a : c !== m ? c : []
        }
        function q(a, b) {
            switch (b) {
            case w.xt:
                return a.get("stereoCube").get("levels");
            case w.rq:
                return a.get("cube").get("levels");
            case w.Ki:
                return a.get("front").get("levels");
            case w.$n:
                return a.get("sphere").get("levels");
            case w.zm:
            case w.ao:
                return a.get("stereoSphere").get("levels")
            }
        }
        function o(a) {
            for (var b = [], c = 0; c < a.length; c++) {
                var d = a[c];
                b.indexOf(d) < 0 && b.push(d)
            }
            return b
        }
        var t = a("dW"),
        s = a("jj"),
        v = a("cT"),
        u = a("jL"),
        w = a("bH"),
        x = a("hK");
        a("iX");
        var z = a("r");
        a("gl");
        var C =
            a("jn"),
        A = a("id"),
        K = a("kT"),
        F = {
            hca: function (a) {
                a = a.get("frames");
                if (a.length == 0)
                    return 1;
                var b = a[0];
                if (w.get(b) == w.$n && b.Jh())
                    a = (a = K.ah(b.get("sphere"))) ? [a] : [];
                else if ((w.get(b) == w.zm || w.get(b) == w.ao) && b.Jh())
                    a = (a = K.ah(b.get("stereoSphere"))) ? [a] : [];
                else
                    a = F.DY(b, y);
                return Math.max.apply(Math, a.map(function (a) {
                        return F.Kva(b, a)
                    }).concat([1]))
            },
            Kva: function (a, b) {
                var b = F.yY(a, b, u.FRONT),
                c = b.get("width"),
                d = a.xz().get("hfov", 360);
                switch (w.get(a)) {
                case w.xt:
                    return c / 1080;
                case w.rq:
                    return c / 540;
                case w.Ki:
                    return c /
                    90;
                case w.$n:
                    return c / d;
                case w.zm:
                    return c / d;
                case w.ao:
                    return c / (2 * d)
                }
            },
            UY: function (a, b) {
                var c = F.Jk(a, b);
                return c.length <= 6 && c.every(function (a) {
                    return A.n_(a)
                })
            },
            Jk: function (a, b, c) {
                if (!a)
                    return [];
                c || (c = y);
                if (t.tb("Panorama", a)) {
                    c = a.get("flipImageHorizontally", y);
                    return o([].concat(Array.prototype.concat.apply([], a.get("frames").map(function (a) {
                                    return F.Jk(a, b, c)
                                })), Array.prototype.concat.apply([], a.get("overlays").map(function (a) {
                                    return F.Jk(a, b, c)
                                }))))
                }
                if (t.tb("PanoramaFrame", a)) {
                    var d = Array.prototype.concat.apply([],
                            a.get("overlays").map(function (a) {
                                return F.Jk(a, b, c)
                            }));
                    if (w.get(a) == w.$n && a.Jh())
                        return F.Jk(K.ah(a.get("sphere")), b).concat(d);
                    if ((w.get(a) == w.zm || w.get(a) == w.ao) && a.Jh())
                        return F.Jk(K.ah(a.get("stereoSphere")), b).concat(d);
                    var e = F.DY(a, b)[0],
                    c = a.get("flipImageHorizontally", y);
                    if (w.get(a) == w.Ki) {
                        var f = [u.FRONT, u.qa, u.BACK, u.Na, u.nb, u.mb];
                        return Array.prototype.concat.apply([], f.map(function (d) {
                                return (d = F.yY(a, e, d)) ? F.Jk(d, b, c) : []
                            })).concat(d)
                    }
                    return F.Jk(e, b, c).concat(d)
                }
                if (t.tb("Video360ResourceLevel",
                        a))
                    return (d = a.get("posterURL")) ? [d] : [];
                if (t.tb("HotspotPanoramaOverlay", a))
                    return a.get("projected") ? Array.prototype.concat.apply([], a.get("items").map(function (a) {
                            return F.Jk(a, b, c)
                        })) : [];
                if (t.tb("FlatHotspotPanoramaOverlayImage", a) || t.tb("HotspotPanoramaOverlayImage", a)) {
                    d = a.get("image").get("levels");
                    e = d[0];
                    F.Jk(e, b, c);
                    return Array.prototype.concat.apply([], d.map(function (a) {
                            return F.Jk(a, b, c)
                        }))
                }
                if (t.tb("TiledImageResourceLevel", a)) {
                    var h = [],
                    d = Math.round(a.get("width") / a.get("height")),
                    j;
                    if (d ==
                        1)
                        j = w.Ki;
                    else if (d == 12)
                        j = w.lAa;
                    else if (d == 6)
                        j = w.rq;
                    else
                        return [];
                    var g = d == 12 ? [v.Na, v.qa] : [v.Un],
                    f = [u.Na, u.qa, u.nb, u.mb, u.FRONT, u.BACK],
                    k = a.get("colCount", d) / d,
                    l = a.get("rowCount", 1);
                    g.forEach(function (b) {
                        f.forEach(function (d) {
                            for (var e = 0; e < l; e++)
                                for (var f = 0; f < k; f++)
                                    h.push(F.rca(a, j, b, d, c, l, e, f))
                        })
                    });
                    return h
                }
                return t.tb("ImageResourceLevel", a) ? [a.get("url")] : []
            },
            DY: function (a, b) {
                var c = w.get(a),
                d = this.jla(a);
                if (d) {
                    if (b && !this.O5(d)) {
                        c = this.l5(a);
                        if (c != d)
                            return [c, d]
                    }
                    return [d]
                }
                d = l(q(a, c), s.kP);
                if (d.length >
                    0)
                    return j(d);
                d = this.Mla(a);
                if (b && !this.O5(d)) {
                    c = this.l5(a);
                    if (c != d)
                        return [c, d]
                }
                return [d]
            },
            Kwa: function (a) {
                return a.get("tags").indexOf(s.kP) >= 0
            },
            yY: function (a, b, c) {
                if (w.get(a) != w.Ki)
                    return b;
                var d;
                switch (c) {
                case u.FRONT:
                    d = a.get("front");
                    break;
                case u.qa:
                    d = a.get("left");
                    break;
                case u.BACK:
                    d = a.get("back");
                    break;
                case u.Na:
                    d = a.get("right");
                    break;
                case u.nb:
                    d = a.get("top");
                    break;
                case u.mb:
                    d = a.get("bottom")
                }
                a = d && d.get("levels") || [];
                if (a.length == 0)
                    return r;
                a = a.filter(function (a) {
                    return a.get("width") == b.get("width") &&
                    a.get("height") == b.get("height") && a.get("grayscale", y) == b.get("grayscale", y) && a.get("colCount", 1) == b.get("colCount", 1) && a.get("rowCount", 1) == b.get("rowCount", 1)
                });
                return a[0]
            },
            rca: function (a, c, d, e, f, h, j, g) {
                var a = a.get("url"),
                k = 0;
                a.indexOf("{eye}") >= 0 || a.indexOf(encodeURI("{eye}")) >= 0 ? a = b(a, "{eye}", I[d]) : k = k + 6 * (f ? O : B)[d];
                a.indexOf("{face}") >= 0 || a.indexOf(encodeURI("{face}")) >= 0 ? a = b(a, "{face}", N[e]) : c != w.Ki && (k = k + J[e]);
                a = b(a, "{row}", j);
                return a = b(a, "{column}", g + k * h)
            },
            Mva: function (a, b) {
                return F.yB(F.lu(a.get("image")),
                    90, 90, C.Te, b)
            },
            mva: function (a, b) {
                return F.yB(F.lu(a.get("image")), a.get("hfov"), a.get("vfov"), a.get("scaleMode"), b)
            },
            zva: function (a, b) {
                return F.yB(F.lu(a.get("image")), a.get("hfov"), a.get("vfov"), a.get("scaleMode"), b)
            },
            Xva: function (a, b) {
                return F.yB(F.lu(a.get("image")), a.get("hfov"), a.get("vfov"), a.get("scaleMode"), b)
            },
            Yba: function (a, b) {
                return F.yB(F.lu(a.get("image")), a.get("hfov"), a.get("vfov"), a.get("scaleMode"), b)
            },
            lu: function (a) {
                return a && a.get("levels") || []
            },
            yB: function (a, b, d, e, f) {
                if (!a || !a.length)
                    return r;
                for (var a = k(a, s.Am, a), g = h(), o = 0; o < g.length; o++)
                    a = l(a, g[o], a);
                g = 1E4;
                c() || (z.le() ? g = 2048 : z.Tp() ? g = 1280 : z.Za() && (g = 1024));
                o = j(a)[a.length - 1];
                b = x.HY(b, d, o.get("width"), o.get("height"), e, f);
                return p(a, [b.bd * g / 90, b.um * g / 90])
            },
            uva: function (a) {
                var b = F.lu(a.get("image"));
                if (!b || !b.length)
                    return r;
                for (var b = k(b, s.Am, b), c = h(), d = 0; d < c.length; d++)
                    b = l(b, c[d], b);
                c = j(b)[b.length - 1];
                a = x.zY(a.get("width"), a.get("height"), c.get("width"), c.get("height"), a.get("scaleMode"));
                return p(b, [a.width, a.height])
            },
            Pva: function (a) {
                var b =
                    F.lu(a.get("image"));
                if (!b || !b.length)
                    return r;
                for (var b = k(b, s.Am, b), d = h(), e = 0; e < d.length; e++)
                    b = l(b, d[e], b);
                d = 1E4;
                c() || (z.le() ? d = 2048 : z.Tp() ? d = 1280 : z.Za() && (d = 1024));
                var f = e = 20;
                if ((a = a.get("vertices")) && a.length == 4) {
                    e = a[0].get("yaw");
                    f = a[1].get("yaw");
                    f < e && (f = f + 360);
                    e = f - e;
                    f = a[0].get("pitch");
                    a = a[3].get("pitch");
                    f = f - a
                }
                return p(b, [e * d / 90, f * d / 90])
            },
            l5: function (a) {
                for (var b = w.get(a), a = q(a, b), a = f(a, b), a = l(a, s.Am, a), b = h(), c = 0; c < b.length; c++)
                    a = l(a, b[c], a);
                return p(a, [0, 0])
            },
            Mla: function (a) {
                for (var b = w.get(a),
                    a = q(a, b), a = f(a, b), a = k(a, s.Am, a), c = h(), d = 0; d < c.length; d++)
                    a = l(a, c[d], a);
                b = g(b, e(a));
                return p(a, b)
            },
            jla: function (a) {
                var b = h();
                if (b.length == 0)
                    return r;
                for (var c = w.get(a), d = q(a, c), d = f(d, c), d = k(d, s.Am, d), a = [], j = 0; j < b.length && a.length == 0; j++)
                    a = l(d, b[j]);
                if (a.length == 0)
                    return r;
                b = g(c, e(a));
                return p(a, b)
            },
            O5: function (a) {
                return a.get("tags").indexOf(s.kP) >= 0 ? y : z.Uc() == z.bt ? n : A.n_(a.get("url"))
            }
        },
        J = function () {
            var a = {};
            a[u.Na] = 0;
            a[u.qa] = 1;
            a[u.nb] = 2;
            a[u.mb] = 3;
            a[u.FRONT] = 4;
            a[u.BACK] = 5;
            return a
        }
        (),
        B = function () {
            var a = {};
            a[v.Na] = 0;
            a[v.qa] = 1;
            a[v.Un] = 0;
            return a
        }
        (),
        O = function () {
            var a = {};
            a[v.Na] = 1;
            a[v.qa] = 0;
            a[v.Un] = 0;
            return a
        }
        (),
        N = function () {
            var a = {};
            a[u.Na] = "r";
            a[u.qa] = "l";
            a[u.nb] = "u";
            a[u.mb] = "d";
            a[u.FRONT] = "f";
            a[u.BACK] = "b";
            return a
        }
        (),
        I = function () {
            var a = {};
            a[v.qa] = "l";
            a[v.Na] = "r";
            a[v.Un] = "b";
            return a
        }
        ();
        return F
    });
    define("dD", ["require", "r"], function (a) {
        function b(a) {
            this.ue = a;
            "CANVAS" == a.tagName ? (this.u = a, this.rb = 1) : (this.u = document.createElement("canvas"), this.rb = e.Rd() == e.Lh ? 0.5 : 1, this.u.width = Math.round(a.width * this.rb), this.u.height = Math.round(a.height * this.rb));
            this.ka = this.u.getContext("2d");
            this.ka.globalCompositeOperation = "copy";
            this.u != a && this.ka.drawImage(a, 0, 0, a.width, a.height, 0, 0, this.u.width, this.u.height)
        }
        function c(a, b, c) {
            try {
                if (a instanceof CanvasRenderingContext2D)
                    return a.getImageData(b,
                        c, 1, 1).data;
                if (a.tagName && "CANVAS" == a.tagName)
                    return a.Zma ? [0, 0, 0, 0] : a.getContext("2d").getImageData(b, c, 1, 1).data;
                g.drawImage(a, b, c, 1, 1, 0, 0, 1, 1);
                return g.getImageData(0, 0, 1, 1).data
            } catch (d) {
                return [0, 0, 0, 0]
            }
        }
        var e = a("r");
        b.prototype.transparent = function (a, c) {
            return b.transparent(this.ka, Math.round(a * this.rb), Math.round(c * this.rb))
        };
        b.prototype.iq = function (a, c) {
            return b.iq(this.ka, Math.round(a * this.rb), Math.round(c * this.rb))
        };
        b.prototype.info = function (a, c) {
            return b.info(this.ka, Math.round(a * this.rb),
                Math.round(c * this.rb))
        };
        b.prototype.dispose = function () {
            this.u != this.ue && (this.u.width = this.u.height = 0);
            this.ue = this.u = this.ka = r
        };
        b.transparent = function (a, c, d) {
            return !b.iq(a, c, d)
        };
        b.iq = function (a, b, d) {
            return a.tagName && "VIDEO" == a.tagName ? n : 0 < c(a, b, d)[3]
        };
        b.info = function (a, b, e) {
            a = c(a, b, e);
            b = a[3];
            return {
                iq: 0 < b,
                opacity: b,
                color: "#" + d[a[0]] + d[a[1]] + d[a[2]]
            }
        };
        a = document.createElement("canvas");
        a.width = a.height = 1;
        var g = a.getContext("2d");
        g.globalCompositeOperation = "copy";
        var d = function () {
            for (var a = Array(256),
                b = 0; 16 > b; b++)
                a[b] = "0" + b.toString(16);
            for (; 256 > b; b++)
                a[b] = b.toString(16);
            return a
        }
        ();
        return b
    });
    define("iU", "require,fg,ih,ll,dW,hk,jS,hS,km,dD,iL".split(","), function (a) {
        function b(a, b, d, e, f, h) {
            for (a = (a - b) / h; d + 180 < e; )
                e = e - 360;
            for (; d - 180 > e; )
                e = e + 360;
            d = (d - e) / h;
            return d = a < -0.1 || a > 0.1 ? c(f, d, Math.abs(1 / (1500 * a))) : c(f, d, 0.08)
        }
        function c(a, b, c) {
            a = (b - a) * (1 - c);
            Math.abs(a) < 1.0E-5 && (a = 0);
            return b - a
        }
        var e = a("fg"),
        g = a("ih"),
        d = a("ll"),
        f = a("dW"),
        h = a("hk"),
        j = a("jS"),
        p = a("hS"),
        k = a("km"),
        l = a("dD"),
        q = a("iL"),
        a = e.extend(h, function (a) {
            h.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.Xd = this.Xd.bind(this);
            this.Zd =
                f.tb("CeilingCapPanoramaOverlay", this.j) ? "ceiling" : "tripod";
            this.set("tag", "Cap");
            this.set("pitch", this.Zd == "tripod" ? -90 : 90);
            this.Wf = y;
            this.$u = this.$U = this.mD = m;
            this.mpa = this.Zd == "tripod" ? 1 : -1;
            this.Fg = this.Ah = this.Ge = r
        });
        a.prototype.Qa = function () {
            h.prototype.Qa.call(this);
            this.Ge = (new p(d.S)).Hi(this.Al.bind(this));
            this.Ah = (new p(d.wc)).Nk(this.Lu.bind(this));
            g.Eb(this.j, ["angle", "distance", "hfov", "image.levels.url", "inertia", "rotate"], this.Xd, n)
        };
        a.prototype.Sa = function () {
            this.Fg && this.Fg.dispose();
            this.Fg = r;
            this.Ge.dispose();
            this.Ah.dispose();
            g.Pb(this.j, ["angle", "distance", "hfov", "image.levels.url", "inertia", "rotate"], this.Xd);
            h.prototype.Sa.call(this)
        };
        a.prototype.Xd = function () {
            this.set("angle", this.j.get("angle"));
            this.set("distance", this.j.get("distance"));
            this.set("hfov", this.j.get("hfov"));
            var a = k.mva(this.j, this.get("panoramaPixelsPerDegree"));
            this.set("imageURL", a && a.get("url"));
            this.set("imageWidth", a && a.get("width"));
            this.set("imageHeight", a && a.get("height"));
            this.set("inertia", this.j.get("inertia"));
            this.set("rotate", this.j.get("rotate"))
        };
        a.prototype.Vi = function () {
            var a = h.prototype.Vi.call(this);
            this.Ge.yd(a);
            this.Ah.yd(a);
            return a
        };
        a.prototype.L = function (a) {
            this.bX();
            this.bz(a);
            h.prototype.L.call(this, a)
        };
        a.prototype.bX = function () {
            if (this.p("imageURL") && this.get("imageURL")) {
                this.set("textureSource", new j(this.get("imageURL")));
                this.set("contentWidth", this.get("imageWidth"));
                this.set("contentHeight", this.get("imageHeight"))
            }
        };
        a.prototype.Al = function () {
            this.Fg && this.Fg.dispose();
            this.Fg = new l(this.get("textureSource").we());
            this.trigger(d.Lb);
            this.trigger(d.S)
        };
        a.prototype.Lu = function (a, b) {
            var c = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (c = c + a.Kh)
            });
            this.trigger(new q(d.wc, c / b.Yc.length))
        };
        a.prototype.bz = function (a) {
            this.set("rendererYaw", a.ma);
            if (this.p("angle", "inertia", "rotate") || (this.get("rotate") || this.get("inertia")) && this.p("rendererYaw")) {
                var c = this.get("angle"),
                d = this.get("rotate"),
                e = this.get("inertia"),
                f = this.mpa * a.ma;
                d && (c = c + f);
                var h = 0,
                j = c - f;
                if (this.mD !== m) {
                    if (e)
                        if (d) {
                            h = b(f, this.$u, c, this.mD, this.$U, a.vd);
                            c = this.mD +
                                h * a.vd
                        } else {
                            h = b(f, this.$u, j, this.N8, this.$U, a.vd);
                            j = this.N8 + h * a.vd;
                            c = j + f
                        }
                    this.mD != c && this.Ia()
                }
                this.N8 = j;
                this.mD = c;
                this.$U = h;
                this.$u = f;
                this.set("rotationZ", -c)
            }
        };
        a.prototype.Lj = function (a) {
            if (a.Vd == d.Nh) {
                var b = !a.Eh() && this.Xl(a);
                if (b) {
                    a.xs(this.j);
                    this.j.get("useHandCursor") && a.ys(this.j);
                    a.vi(this.get("distance"))
                }
                if (this.Wf != b) {
                    this.Wf = b;
                    this.j.trigger(this.Wf ? d.xc : d.Qb);
                    a.Ms() && this.j.trigger(this.Wf ? d.Mh : d.Kf)
                }
            } else if (a.Vd == d.Li && !a.Eh() && this.Xl(a)) {
                this.j.cF(d.U, n).length > 1 && a.dq(this.j);
                a.vi(this.get("distance"));
                this.j.trigger(d.U)
            }
        };
        a.prototype.Xl = function (a) {
            return this.Go(a.Ol).some(function (a) {
                return this.Fg && this.Fg.iq(a.x, a.y)
            }
                .bind(this))
        };
        return a
    });
    define("hL", ["require", "fg", "ll", "fu", "gU"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("gU"),
        a = b.extend(g, function () {
            g.call(this);
            this.ef = new THREE.Matrix4;
            this.Xaa = y;
            this.Tf = new THREE.Matrix4;
            this.re = r;
            this.pi = new THREE.Matrix4;
            this.sD = this.fD = 0;
            this.FA = 0.75;
            this.nB = 0.5;
            this.Pm = 4;
            this.VT = 0;
            this.Qm = -2;
            this.wl = 3;
            this.kJ = 0;
            this.fu = 7;
            this.$C = this.Tr = 1;
            this.lC = 0.15;
            this.gu = this.Ru = 0;
            this.MI = this.pK = e.H;
            this.lL = this.gL = 1E3
        }),
        d = Math.PI / 180,
        f = new THREE.Matrix4;
        a.prototype.Si = D();
        a.prototype.Qa = function () {
            g.prototype.Qa.call(this);
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        a.prototype.Sa = function () {
            this.zQ()
        };
        a.prototype.uh = function () {
            this.Si();
            this.EK()
        };
        a.prototype.vh = function () {
            this.Ia()
        };
        a.prototype.EK = function () {
            this.re && (this.zQ(), this.H3())
        };
        a.prototype.NH = D();
        a.prototype.H3 = function () {
            this.Xpa();
            this.re = new THREE.Group;
            for (var a = this.MI == e.P, b = this.Ru, c = this.gu; 0 < c + b; ) {
                var d = Math.random() * (c + b) <= c;
                d ? c-- : b--;
                var f = this.NH();
                f.matrixAutoUpdate = y;
                f.overdraw = y;
                f.material.opacity = 0;
                f.userData = {
                    Zua: d,
                    Nz: new THREE.Matrix4,
                    oba: new THREE.Matrix4,
                    GZ: new THREE.Matrix4,
                    y: m,
                    ofa: m,
                    uZ: a
                };
                this.re.add(f);
                a && this.BV(f, this.Qm, this.wl);
                this.Wpa(f)
            }
            this.fD = a ? this.re.children.length : 0;
            this.IX.add(this.re);
            this.u2()
        };
        a.prototype.zQ = function () {
            if (this.re) {
                this.re.parent && this.re.parent.remove(this.re);
                for (var a = 0, b = this.re && this.re.children.length; a < b; a++)
                    this.re.children[a].material.dispose();
                this.re = r;
                this.sD = 0
            }
        };
        a.prototype.Xpa = function () {
            this.pi = (new THREE.Matrix4).makeScale(this.Tr, this.Tr, this.Tr)
        };
        a.prototype.BV = function (a, b, c) {
            b += Math.random() *
            (c - b);
            if (a.userData.Zua) {
                var c = this.fu,
                e = 360 * Math.random() * d;
                a.userData.Nz.makeTranslation(c * Math.cos(e), b, c * Math.sin(e))
            } else
                c = 2 * Math.random() * Math.PI, e = this.VT + (this.Pm - this.VT) * Math.sqrt(Math.random()), a.userData.Nz.makeTranslation(e * Math.cos(c), b, e * Math.sin(c));
            a.userData.Nz.multiply(this.pi);
            a.userData.y = b
        };
        a.prototype.Wpa = function (a) {
            var b = this.lC + Math.random() * (this.Bu - this.lC),
            c;
            do
                c = Math.random() * this.kJ;
            while (80 < c && 100 > c);
            var e = 360 * Math.random(),
            g = Math.sin(e * d) * Math.sin(c * d) * b,
            q = -Math.cos(c *
                    d) * b,
            b = Math.cos(e * d) * Math.sin(c * d) * b;
            a.userData.ofa = q * this.Tr;
            a.userData.oba.makeTranslation(g, q, b);
            a.userData.GZ.makeRotationY(e * d);
            a.userData.GZ.multiply(f.makeRotationX(-c * d))
        };
        a.prototype.L = function (a) {
            g.prototype.L.call(this, a);
            this.IX = a.ye;
            this.IX != (this.re && this.re.parent) ? (this.zQ(), this.IX && this.H3()) : this.p("index") && this.u2();
            this.lta(a)
        };
        a.prototype.lta = function (a) {
            if (this.re) {
                this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ") && (this.Xaa = 0 != this.get("composedTranslationX") ||
                        0 != this.get("composedTranslationY") || 0 != this.get("composedTranslationZ"), this.ef.makeTranslation(-this.get("composedTranslationX") * this.Pm, this.get("composedTranslationY") * this.Pm, this.get("composedTranslationZ") * this.Pm));
                var b = this.pK == e.P,
                c = this.re.children,
                d = c.length,
                f = b ? Math.round(d * a.vd / this.gL) : 0;
                if (0 < this.fD + f) {
                    this.sD = b ? 0 : Math.min(this.fD, this.sD + Math.round(d * a.vd / this.lL));
                    a = this.get("composedAlpha");
                    for (b = 0; b < d; b++) {
                        var g = c[b];
                        if (!g.userData.uZ)
                            if (0 < f)
                                f--, g.userData.uZ = n, this.fD++, this.BV(g,
                                    this.wl, this.wl + (this.wl - this.Qm));
                            else
                                continue;
                        g.userData.Nz.multiply(g.userData.oba);
                        g.userData.y += g.userData.ofa;
                        if (g.userData.y < this.Qm || g.userData.y > this.wl) {
                            if (0 < this.sD) {
                                this.sD--;
                                g.userData.uZ = y;
                                this.fD--;
                                g.material.opacity = 0;
                                continue
                            }
                            var o = g.userData.y < this.Qm ? this.wl : this.Qm;
                            this.BV(g, o, o)
                        }
                        o = a;
                        g.userData.y < this.Qm + this.nB ? o *= (g.userData.y - this.Qm) / this.nB : g.userData.y > this.wl - this.FA && (o *= (this.wl - g.userData.y) / this.FA);
                        g.material.opacity = o * this.$C;
                        this.Xaa ? (g.matrix.copy(this.ef), g.matrix.multiply(g.userData.Nz)) :
                        g.matrix.copy(g.userData.Nz);
                        g.matrix.multiply(g.userData.GZ);
                        g.matrixWorldNeedsUpdate = n
                    }
                    this.Ia()
                }
            }
        };
        a.prototype.u2 = function () {
            if (this.re)
                for (var a = this.get("index"), b = 0; b < this.re.children.length; b++)
                    this.re.children[b].renderOrder = a
        };
        return a
    });
    define("kA", ["require"], function () {
        function a(a) {
            return [parseInt(a.substr(1, 2), 16), parseInt(a.substr(3, 2), 16), parseInt(a.substr(5, 2), 16)]
        }
        function b(a, b) {
            return Math.max(Math.abs(a[0] - b[0]), Math.abs(a[1] - b[1]), Math.abs(a[2] - b[2]))
        }
        var c = {
            Vxa: function (c, g, d) {
                if (c && 0 == c.indexOf("#")) {
                    var f = a(c),
                    h = m,
                    j = 256;
                    g.forEach(function (c) {
                        if (c && 0 == c.indexOf("#")) {
                            var d = b(f, a(c));
                            d < j && (h = c, j = d)
                        }
                    });
                    if (h && j <= d)
                        return h
                }
                return c
            },
            wY: function (c, g) {
                return b(a(c), a(g))
            }
        };
        c.CF = a;
        return c
    });
    define("hd", "require,fg,ih,fu,hL,kA,r".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("fu"),
        g = a("hL"),
        d = a("kA"),
        f = a("r"),
        a = b.extend(g, function (a) {
            g.call(this);
            this.j = a;
            this.uh = this.uh.bind(this);
            this.vh = this.vh.bind(this);
            this.Si()
        });
        a.prototype.Qa = function () {
            g.prototype.Qa.call(this);
            this.j.set("state", this.j.get("startState"));
            c.Eb(this.j, ["color", "intensity", "speed", "opacity", "distance", "maxDistance", "farPlaneDistance", "minSpeed", "maxSpeed", "particleCount", "farPlaneParticleCount", "particleScale"],
                this.uh, n);
            c.Eb(this.j, ["state"], this.vh, n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j, ["color", "intensity", "speed", "opacity", "distance", "maxDistance", "farPlaneDistance", "minSpeed", "maxSpeed", "particleCount", "farPlaneParticleCount", "particleScale"], this.uh);
            c.Pb(this.j, ["state"], this.vh);
            this.j.set("state", e.H);
            g.prototype.Sa.call(this)
        };
        a.prototype.uh = function () {
            this.Si();
            this.EK()
        };
        a.prototype.vh = function () {
            this.pK = this.j.get("state");
            this.Ia()
        };
        a.prototype.Si = function () {
            g.prototype.Si.call(this);
            var a;
            a = f.Za() || f.browser() == f.at ? 2500 : f.le() ? 4E3 : 5E3;
            this.lC = this.Bu = this.j.get("speed", 0.2) * 0.2;
            this.Pm = this.j.get("distance", 0.5) * 14.5 + 0.5;
            this.$C = this.j.get("opacity", 0.1) * 1;
            this.Tr = 0.036;
            this.Ru = this.j.get("intensity", 0.1) * a;
            this.Ub = d.CF(this.j.get("color", "#ffffff"));
            this.gu = 0;
            this.fu = 15;
            this.MI = this.j.get("initialState");
            this.gL = this.j.get("startDuration");
            this.lL = this.j.get("stopDuration");
            this.FA = 0.75;
            this.nB = 0.5;
            this.Qm = -2;
            this.wl = 4;
            this.kJ = 180;
            this.f4()
        };
        a.prototype.NH = function () {
            return new THREE.Sprite(this.eB())
        };
        a.prototype.eB = function () {
            var a = new THREE.SpriteMaterial;
            a.map = this.fB();
            a.side = THREE.FrontSide;
            a.transparent = n;
            a.depthTest = y;
            a.needsUpdate = n;
            return a
        };
        a.prototype.fB = function () {
            if (this.xb)
                return this.xb;
            var a = document.createElement("canvas");
            a.width = a.height = h;
            this.xb = new THREE.Texture;
            this.xb.image = a;
            this.xb.needsUpdate = n;
            this.f4();
            return this.xb
        };
        a.prototype.f4 = function () {
            if (this.xb) {
                var a = this.xb.image,
                b = a.getContext("2d"),
                c = b.createRadialGradient(a.width * 0.5, a.height * 0.5, a.height * 0.2, a.width *
                        0.5, a.height * 0.5, a.height * 0.5);
                c.addColorStop(0, "rgba(" + this.Ub[0] + ", " + this.Ub[1] + ", " + this.Ub[2] + ", 1)");
                c.addColorStop(1, "rgba(" + this.Ub[0] + ", " + this.Ub[1] + ", " + this.Ub[2] + ", 0)");
                b.fillStyle = c;
                b.clearRect(0, 0, a.width, a.height);
                b.fillRect(0, 0, a.width, a.height);
                this.xb.needsUpdate = n
            }
        };
        var h = 32;
        return a
    });
    define("li", "require,fg,ge,gW,dv,hK,hZ,jY".split(","), function (a) {
        a("fg");
        var b = a("ge"),
        c = a("gW"),
        e = a("dv"),
        g = a("hK"),
        d = a("hZ"),
        f = a("jY"),
        h = new THREE.Matrix4,
        j = Math.PI / 180;
        return {
            wo: function () {
                this.set("distance", m);
                this.set("width", 100);
                this.set("height", 100);
                this.set("offsetX", m);
                this.set("offsetY", m);
                this.set("yaw", 0);
                this.set("pitch", 0);
                this.set("roll", 0);
                this.set("rotationZ", 0);
                this.set("contentWidth", 100);
                this.set("contentHeight", 100);
                this.set("scale", 1);
                this.set("scaleMode", r);
                this.set("horizontalAlign",
                    r);
                this.set("verticalAlign", r);
                this.wf = this.Sq();
                this.ef = new THREE.Matrix4;
                this.ic = new THREE.Matrix4;
                this.tk = new THREE.Matrix4;
                this.Xi = new THREE.Matrix4;
                this.mx = new THREE.Matrix4;
                this.Jy = new THREE.Matrix4;
                this.B2 = new THREE.Matrix4;
                this.tg = new THREE.Matrix4;
                this.C3 = new THREE.Matrix4;
                this.PA = new THREE.Matrix4;
                this.$A = new THREE.Matrix4;
                this.Iq = new THREE.Matrix4;
                this.rf = new THREE.Matrix4;
                this.ox = new THREE.Matrix4;
                this.Pt = new THREE.Vector3
            },
            Dp: function (a) {
                this.Zl(a);
                this.pX()
            },
            pX: function () {
                if (this.p("width",
                        "height", "contentWidth", "contentHeight", "scaleMode", "horizontalAlign", "verticalAlign")) {
                    var a = g.zY(this.get("width"), this.get("height"), this.get("contentWidth"), this.get("contentHeight"), this.get("scaleMode"), this.get("horizontalAlign"), this.get("verticalAlign")),
                    a = c.Kea(this.wf[1], a.bG, a.eG, a.jq, a.kq);
                    if (this.wf[1] != a) {
                        this.wf[1] = a;
                        (a = this.Nx()) && e.VZ(a, this.wf[1])
                    }
                }
            },
            Nx: function () {
                var a = this.get("meshGroup");
                return a ? e.Gh(a)[1] : r
            },
            Vi: function () {
                return [0, 1].map(function (a) {
                    var c = a == 0 ? this.F3() : this.vx(),
                    a = e.create(this.wf[a], c);
                    d.On(a, d.Tj);
                    d.Pn(a, d.$k);
                    d.Ts(a, b.Rw);
                    d.Wz(a, 1);
                    return a
                }
                    .bind(this))
            },
            Sq: function () {
                return [c.oz(), c.oz()]
            },
            Zl: function (a) {
                var b = y;
                if (this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                    this.ef.makeTranslation(-this.get("composedTranslationX") * 0.5 * c.Ld, this.get("composedTranslationY") * 0.5 * c.Ld, this.get("composedTranslationZ") * 0.5 * c.Ld);
                    b = n
                }
                if (this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll")) {
                    this.ic.makeRotationY(-a.ma * j);
                    this.ic.multiply(h.makeRotationX(-this.get("composedDeltaPitch") *
                            j));
                    this.ic.multiply(h.makeRotationY(this.get("composedDeltaYaw") * j));
                    this.ic.multiply(h.makeRotationY(a.ma * j));
                    b = n
                }
                if (this.p("yaw", "pitch")) {
                    this.tk.makeRotationY(-this.get("yaw") * j);
                    this.tk.multiply(h.makeRotationX(this.get("pitch") * j));
                    b = n
                }
                this.p("distance", "composedTranslationX", "composedTranslationY", "composedTranslationZ") && this.set("z", this.get("composedTranslationX") == 0 && this.get("composedTranslationY") == 0 && this.get("composedTranslationZ") == 0 && this.get("distance") !== m ? c.Uv(this.get("distance")) :
                    c.Np());
                if (this.p("z")) {
                    this.Xi.makeTranslation(0, 0, -this.get("z"));
                    b = n
                }
                if (b) {
                    this.ox.copy(this.ef);
                    this.ox.multiply(this.ic);
                    this.ox.multiply(this.tk);
                    this.ox.multiply(this.Xi)
                }
                var d = y;
                this.set("rendererYaw", a.ma);
                this.set("rendererPitch", a.pitch);
                this.set("rendererRoll", a.md);
                this.set("rendererCameraFOV", a.Gf);
                this.set("rendererWidth", a.width);
                this.set("rendererHeight", a.height);
                a.Gf && this.p("z", "rendererCameraFOV") && this.set("rendererHeightZ", Math.tan(a.Gf * j * 0.5) * this.get("z") * 2);
                if (a.Gf && (b ||
                        this.p("rendererYaw", "rendererPitch", "rendererRoll", "rendererCameraFOV", "rendererWidth", "rendererHeight", "rendererHeightZ", "inVR"))) {
                    if (a.sb) {
                        this.mx.copy(this.ox);
                        this.Jy.identity()
                    } else {
                        d = a.Jc;
                        this.mx.copy(d.matrixWorld);
                        this.Pt.setFromMatrixPosition(d.matrixWorld);
                        this.Pt.applyMatrix4(this.ox);
                        this.Pt.applyMatrix4(d.matrixWorldInverse);
                        var q = -10,
                        o = -10;
                        if (this.Pt.z < 0) {
                            this.Pt.applyMatrix4(d.projectionMatrix);
                            q = this.Pt.x * 0.5;
                            o = this.Pt.y * 0.5
                        }
                        var t = this.get("rendererHeightZ");
                        this.Jy.makeTranslation(q *
                            t * d.aspect, o * t, 0)
                    }
                    d = n
                }
                if (this.p("roll")) {
                    this.tg.makeRotationZ(this.get("roll") * j);
                    d = n
                }
                if (a.Gf && (b || this.p("rendererHeight", "inVR", "rendererHeightZ", "width", "height", "contentWidth", "contentHeight", "scale", "scaleMode", "horizontalAlign", "verticalAlign", "flipHorizontally", "offsetX", "offsetY"))) {
                    var b = a.sb ? 1024 : a.height,
                    d = this.get("scale") * this.get("rendererHeightZ") / b * (a.sb ? 2 : 1),
                    s = this.get("width"),
                    t = this.get("height"),
                    v = this.get("offsetX"),
                    u = this.get("offsetY"),
                    o = this.get("contentWidth"),
                    w = this.get("contentHeight"),
                    q = (this.get("flipHorizontally") ? -1 : 1) * d,
                    x = this.get("scaleMode"),
                    b = this.get("horizontalAlign") || f.Lc,
                    a = this.get("verticalAlign") || f.vc,
                    x = g.zY(s, t, o, w, x, b, a),
                    w = q * s,
                    o = d * t;
                    this.PA.makeScale(w, o, 1);
                    s = q * (s * 0.5 - v);
                    t = d * (u - t * 0.5);
                    this.B2.makeTranslation(s, t, 0);
                    q = q * x.width;
                    d = d * x.height;
                    this.$A.makeScale(q, d, 1);
                    b = b == f.qa ?  - (w - q) * 0.5 : b == f.Na ? (w - q) * 0.5 : 0;
                    a = a == f.nb ? (o - d) * 0.5 : a == f.mb ?  - (o - d) * 0.5 : 0;
                    this.C3.makeTranslation(b + s, a + t, 0);
                    d = n
                }
                if (d) {
                    this.rf.copy(this.mx);
                    this.rf.multiply(this.Xi);
                    this.rf.multiply(this.Jy);
                    this.rf.multiply(this.tg);
                    this.Iq.copy(this.rf);
                    this.Iq.multiply(this.B2);
                    this.Iq.multiply(this.PA);
                    this.rf.multiply(this.C3);
                    this.rf.multiply(this.$A);
                    a = e.Gh(this.get("meshGroup"));
                    e.fm(a[0], this.Iq);
                    e.fm(a[1], this.rf)
                }
            }
        }
    });
    define("eK", ["require", "ll", "fu"], function (a) {
        function b(a, b) {
            this.fl = a;
            this.ce = b;
            this.Ic = y;
            this.Yga();
            this.eha();
            this.lU()
        }
        var c = a("ll"),
        e = a("fu");
        b.prototype.clear = function () {
            this.Cpa();
            this.Jpa();
            this.fl.set("state", e.H);
            this.ce = this.fl = r
        };
        b.prototype.xe = function (a) {
            this.Ic != a && (this.Ic = a, this.tv())
        };
        b.prototype.lU = function () {
            this.ce.Cc(this.fl.get("state"))
        };
        b.prototype.h7 = function () {
            this.tv()
        };
        b.prototype.f7 = function () {
            this.fl.trigger(c.wt)
        };
        b.prototype.e7 = function () {
            this.fl.trigger(c.Ba)
        };
        b.prototype.g7 =
        function () {
            this.fl.set("state", this.ce.Qe())
        };
        b.prototype.tv = function () {
            this.fl.get("autoplay") && this.ce.Cc(this.Ic ? e.P : e.H)
        };
        b.prototype.Yga = function () {
            this.fl.bind(c.D("state"), this.lU, this, n);
            this.fl.bind(c.D("autoplay"), this.h7, this, n)
        };
        b.prototype.Cpa = function () {
            this.fl.unbind(c.D("state"), this.lU, this, n);
            this.fl.unbind(c.D("autoplay"), this.h7, this, n)
        };
        b.prototype.eha = function () {
            this.ce.bind(c.wt, this.f7, this, n);
            this.ce.bind(c.Ba, this.e7, this, n);
            this.ce.bind(c.gc, this.g7, this, n)
        };
        b.prototype.Jpa =
        function () {
            this.ce.unbind(c.wt, this.f7, this, n);
            this.ce.unbind(c.Ba, this.e7, this, n);
            this.ce.unbind(c.gc, this.g7, this, n)
        };
        return b
    });
    define("U", "require,fg,ll,fu,bZ,eO,V".split(","), function (a) {
        function b(a, b, c, d) {
            this.TY = a;
            this.src = a.src;
            this.qN = b;
            this.TE = c;
            this.vM = d;
            this.Qv = this.TY.width / this.TE;
            this.Pv = this.TY.height / this.qN
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("fu");
        a("bZ");
        var d = a("eO"),
        f = a("V"),
        a = c.extend(d, function (a, c, f, j, p, s, v) {
            d.call(this);
            this.Xe = new b(a, c, f, p);
            this.o9 = s;
            this.be = j;
            this.q4 = v;
            this.wL = this.be * this.Xe.vM;
            this.u = document.createElement("canvas");
            this.u.width = this.Xe.Qv;
            this.u.height = this.Xe.Pv;
            this.ka = this.u.getContext("2d");
            this.ka.globalCompositeOperation = "copy";
            this.m = g.H;
            this.AK = this.Gm = 0;
            this.aR = m;
            this.vf = h.Bg(this.Xe);
            this.vf.bind(e.aa, this.qh, this, n);
            this.qh()
        });
        a.prototype.Cc = function (a) {
            if (this.m != a) {
                if (a == g.mc) {
                    if (this.m != g.P)
                        return
                } else if (a == g.P) {
                    if (this.m == g.H) {
                        this.Gm = this.AK = 0;
                        this.qh()
                    }
                } else if (a == g.H && (this.Gm != 0 || this.AK == 0)) {
                    this.Gm = this.q4 ? 0 : this.wL - 0.1;
                    this.qh()
                }
                this.m = a;
                f.Ma(this.Pg, this);
                this.trigger(e.gc)
            }
        };
        a.prototype.Qe = Q("m");
        a.prototype.Pg = function (a) {
            if (this.m == g.P) {
                this.Gm = Math.min(this.Gm +
                        a, this.vf.vf.length * this.be);
                if (this.Gm >= this.wL) {
                    this.AK++;
                    if (this.o9 && this.AK == this.o9) {
                        this.Cc(g.H);
                        this.Gm = this.q4 ? 0 : this.wL - 0.1;
                        this.trigger(e.Ba)
                    } else {
                        this.Gm = this.Gm % this.wL;
                        this.trigger(e.wt)
                    }
                }
                this.qh();
                this.m == g.P && f.Ma(this.Pg, this)
            }
        };
        a.prototype.clear = function () {
            this.Cc(g.H);
            this.u.width = this.u.height = 0;
            this.u = r;
            h.Cxa(this.Xe);
            this.Xe = r
        };
        a.prototype.yg = Q("u");
        a.prototype.qh = function () {
            var a = Math.floor(this.Gm / this.be);
            if (this.aR != a && a < this.vf.vf.length) {
                this.aR = a;
                this.ka.drawImage(this.vf.get(this.aR),
                    0, 0);
                this.trigger(e.aa)
            }
        };
        b.prototype.isEqual = function (a) {
            return this.src == a.src && this.qN == a.qN && (this.TE = a.TE) && (this.Qv = a.Qv) && (this.Pv = a.Pv) && (this.vM = a.vM)
        };
        var h = {
            Mg: [],
            Pga: 2E3,
            Bg: function (a) {
                a = this.Of(a);
                a.jw++;
                this.K$(a);
                return a.frames
            },
            Cxa: function (a) {
                a = this.Of(a);
                a.jw--;
                a.jw == 0 && this.Fra(a)
            },
            Of: function (a) {
                for (var b = 0; b < this.Mg.length; b++)
                    if (this.Mg[b].eva.isEqual(a))
                        return this.Mg[b];
                b = {};
                b.eva = a;
                b.frames = new j(a);
                b.jw = 0;
                this.Mg.push(b);
                return b
            },
            Fra: function (a) {
                this.K$(a);
                a.jY = setTimeout(function () {
                    h.Xja(a)
                },
                        h.Pga)
            },
            K$: function (a) {
                if (a.jY) {
                    clearTimeout(a.jY);
                    a.jY = r
                }
            },
            Xja: function (a) {
                this.Mg.splice(this.Mg.indexOf(a), 1);
                a.frames.clear()
            }
        },
        j = c.extend(d, function (a) {
            d.call(this);
            this.Xe = a;
            this.vf = [];
            p.add(this)
        });
        j.prototype.clear = function () {
            p.remove(this);
            this.vf.forEach(function (a) {
                a.width = 0;
                a.height = 0
            });
            this.vf = r
        };
        j.prototype.get = function (a) {
            return this.vf[a]
        };
        j.prototype.Yua = function () {
            var a = this.vf.length % this.Xe.TE,
            b = Math.floor(this.vf.length / this.Xe.TE) % this.Xe.qN,
            c = document.createElement("canvas");
            c.width = this.Xe.Qv;
            c.height = this.Xe.Pv;
            var d = c.getContext("2d");
            d.globalCompositeOperation = "copy";
            d.drawImage(this.Xe.TY, a * this.Xe.Qv, b * this.Xe.Pv, this.Xe.Qv, this.Xe.Pv, 0, 0, this.Xe.Qv, this.Xe.Pv);
            j.Ika(c);
            this.vf.push(c);
            this.trigger(e.aa)
        };
        j.Ika = function () {
            var a = document.createElement("canvas");
            a.width = 1;
            a.height = 1;
            var b = a.getContext("2d");
            return function (a) {
                b.drawImage(a, 0, 0, 1, 1, 0, 0, 1, 1)
            }
        }
        ();
        var p = {
            Mg: [],
            FW: r,
            add: function (a) {
                this.Mg.push(a);
                this.B9()
            },
            remove: function (a) {
                this.Mg = this.Mg.filter(function (b) {
                    return b !=
                    a
                })
            },
            B9: function () {
                if (!this.FW)
                    this.FW = setTimeout(function () {
                        this.FW = r;
                        this.MC()
                    }
                            .bind(this), 40)
            },
            MC: function () {
                if (this.Mg.length != 0) {
                    for (var a = (new Date).getTime() + 10; (new Date).getTime() < a; ) {
                        var b = this.Mg.filter(function (a) {
                            return a.vf.length == 0
                        }),
                        b = b.length > 0 ? b[0] : this.Mg[0];
                        b.Yua();
                        if (b.vf.length == b.Xe.vM) {
                            this.Mg.splice(this.Mg.indexOf(b), 1);
                            if (this.Mg.length == 0)
                                return
                        }
                    }
                    this.B9()
                }
            }
        };
        return a
    });
    define("fs", "require,ih,ll,fu,ge,dW,bU,dv,eK,dX,hZ,dD,U".split(","), function (a) {
        var b = a("ih"),
        c = a("ll"),
        e = a("fu"),
        g = a("ge"),
        d = a("dW"),
        f = a("bU"),
        h = a("dv"),
        j = a("eK"),
        p = a("dX"),
        k = a("hZ"),
        l = a("dD"),
        q = a("U");
        return {
            Yt: function () {
                this.set("visible", y);
                this.set("inView", y);
                this.set("blending", 0);
                this.set("chromaColor", m);
                this.set("chromaThreshold", 0);
                this.set("chromaSmoothing", 0);
                this.set("premultipliedAlpha", y);
                this.set("projected", y);
                this.set("image", r);
                this.set("level", r);
                this.set("levelURL", r);
                this.set("state",
                    r);
                this.set("visibleOnStop", n);
                this.set("side", m);
                this.CJ = this.CJ.bind(this);
                this.EJ = this.EJ.bind(this);
                this.Fg = this.ha = this.ax = this.ce = r
            },
            az: function () {
                this.bX();
                this.kE();
                this.sta()
            },
            bX: function () {
                if (this.p("level")) {
                    var a = this.get("level");
                    this.set("levelURL", a && a.get("url"))
                }
                if (this.p("image", "level", "levelURL", "projected")) {
                    this.i3();
                    this.ha = this.get("image");
                    this.ab = this.get("level");
                    this.set("textureSource", new p(this.ha && this.ab.get("url")));
                    this.set("premultipliedAlpha", this.ha && this.ab.get("premultipliedAlpha"));
                    this.pha();
                    if (this.ha) {
                        this.fha();
                        this.iha()
                    } else {
                        this.trigger(c.Lb);
                        this.trigger(c.S)
                    }
                }
            },
            kE: function () {
                if (this.p("blending", "chromaColor", "chromaThreshold", "chromaSmoothing", "premultipliedAlpha", "side")) {
                    var a = new f.Wn;
                    a.As = this.get("blending");
                    a.wn = this.get("chromaColor");
                    a.SE = this.get("chromaThreshold");
                    a.RE = this.get("chromaSmoothing");
                    a.premultipliedAlpha = this.get("premultipliedAlpha");
                    a.side = this.get("side");
                    this.set("materialConfig", a)
                }
            },
            sta: function () {
                if (this.p("meshGroup", "projected", "visible")) {
                    var a =
                        this.get("projected") && this.get("visible") ? g.aP : g.Rw;
                    h.Gh(this.get("meshGroup")).forEach(function (b) {
                        k.Ts(b, a)
                    }
                        .bind(this))
                }
            },
            si: function () {
                this.p("visible", "composedAlpha", "image", "state", "visibleOnStop") && this.set("inView", this.get("visible") && this.get("composedAlpha") > 0 && (this.get("visibleOnStop") || this.get("state") != e.H));
                this.p("composedAlpha", "meshGroup", "inView") && h.xd(this.get("meshGroup"), this.get("inView") ? this.get("composedAlpha") : 0);
                this.ax && this.ax.xe(this.get("inView"))
            },
            CJ: function () {
                this.ha &&
                d.tb("AnimatedImageResource", this.ha) ? this.set("visibleOnStop", this.ha.get("visibleOnStop")) : this.set("visibleOnStop", n)
            },
            EJ: function () {
                this.set("levelURL", this.ab.get("url"))
            },
            fy: function () {
                this.i3()
            },
            i3: function () {
                if (this.ax) {
                    this.ax.clear();
                    this.ax = r
                }
                if (this.ce) {
                    this.ce.unbind(c.aa, this.C5, this, n);
                    this.ce.unbind(c.gc, this.D5, this, n);
                    this.ce.clear();
                    this.ce = r
                }
                if (this.Fg) {
                    this.Fg.dispose();
                    this.Fg = r
                }
                if (this.get("textureSource")) {
                    this.tV();
                    this.set("textureSource", r)
                }
                if (this.ha) {
                    this.Kpa();
                    this.ha =
                        r
                }
                if (this.ab) {
                    this.Npa();
                    this.ab = r
                }
            },
            fha: function () {
                b.Eb(this.ha, ["visibleOnStop"], this.CJ, n)
            },
            Kpa: function () {
                b.Pb(this.ha, ["visibleOnStop"], this.CJ, n)
            },
            iha: function () {
                b.Eb(this.ab, ["url"], this.EJ, n)
            },
            Npa: function () {
                b.Pb(this.ab, ["url"], this.EJ, n)
            },
            JB: function () {
                this.tV();
                var a,
                b = this.get("image");
                if (d.tb("AnimatedImageResource", b)) {
                    this.ce = new q(this.get("textureSource").we(), b.get("rowCount", 1), b.get("colCount", 1), b.get("frameDuration"), b.get("frameCount", b.get("rowCount", 1) * b.get("colCount", 1)),
                            b.get("repeat"), b.get("finalFrame") == "first");
                    a = this.ce.yg();
                    this.ce.bind(c.gc, this.D5, this, n);
                    this.ce.bind(c.aa, this.C5, this, n);
                    this.ax = new j(b, this.ce);
                    this.set("visibleOnStop", b.get("visibleOnStop"));
                    this.set("state", this.ce.Qe())
                } else {
                    a = this.get("textureSource").we();
                    this.Fg = new l(a);
                    this.set("visibleOnStop", n);
                    this.set("state", r)
                }
                this.si();
                this.set("contentWidth", a.width);
                this.set("contentHeight", a.height);
                this.get("textureSource").Di(a);
                this.trigger(c.Lb);
                this.trigger(c.S)
            },
            E5: function () {
                this.tV();
                this.trigger(c.Lb);
                this.trigger(c.S)
            },
            D5: function () {
                this.set("state", this.ce.Qe())
            },
            C5: function () {
                this.get("textureSource").update();
                this.Ia()
            },
            pha: function () {
                var a = this.get("textureSource");
                a.bind(c.S, this.JB, this, n);
                a.bind(c.oe, this.E5, this, n)
            },
            tV: function () {
                var a = this.get("textureSource");
                a.unbind(c.S, this.JB, this, n);
                a.unbind(c.oe, this.E5, this, n)
            },
            rS: function (a) {
                return this.Fg && this.Fg.ue == a.source ? this.Fg.info(a.x, a.y) : l.info(a.source, a.x, a.y)
            }
        }
    });
    define("lj", "require,ih,ll,dW,kA,gf".split(","), function (a) {
        function b(a) {
            a = a.get("mapColor");
            return a == "image" || a == "transparent" || a == "any"
        }
        function c(a) {
            a = a.get("mapColor");
            return a != "image" && a != "transparent" && a != "any"
        }
        var e = a("ih"),
        g = a("ll"),
        d = a("dW"),
        f = a("kA"),
        h = new(a("gf"));
        return {
            Tq: function () {
                this.set("beamEnabled", y);
                this.BJ = this.BJ.bind(this);
                this.WS = r;
                this.Mf = [];
                this.or = r
            },
            sya: function (a) {
                if (this.or != a) {
                    this.mV();
                    this.or = a;
                    this.a2()
                }
            },
            bm: function (a) {
                this.cs = a.ma;
                this.bs = a.pitch
            },
            mV: function () {
                this.or &&
                e.Pb(this.or, ["areas"], this.BJ, n)
            },
            a2: function () {
                this.or && e.Eb(this.or, ["areas"], this.BJ, n)
            },
            uy: function () {
                this.mV();
                this.a2()
            },
            vy: function () {
                this.P9([]);
                this.mV()
            },
            BJ: function () {
                var a = this.or.get("areas", []);
                this.WS = d.tb("HotspotPanoramaOverlayImage", this.j) || d.tb("FlatHotspotPanoramaOverlayImage", this.j) || d.tb("QuadHotspotPanoramaOverlayImage", this.j) ? a.filter(b) : a.filter(c);
                this.WS.forEach(function (a) {
                    h.set(a, 0)
                })
            },
            Lj: function (a) {
                if (a.Vd == g.Nh) {
                    var b = this.get("beamEnabled") && this.get("alpha") >
                        0 && !a.Eh() ? this.E4(a) : [];
                    if (b.length > 0) {
                        a.xs(b);
                        this.pn(b) && a.ys(b);
                        a.vi(this.get("distance"));
                        var c = this.ya(b, a.dw());
                        c && a.cM(c, this.ns(a.dw()))
                    }
                    this.P9(b, a.Ms(), a.dw())
                } else if (a.Vd == g.Li) {
                    b = this.get("beamEnabled") && this.get("alpha") > 0 && !a.Eh() ? this.E4(a) : [];
                    if (b.length > 0) {
                        var d = y;
                        b.forEach(function (a) {
                            a.trigger(g.U);
                            !d && a.cF(g.U, n).length > 1 && (d = n)
                        });
                        a.vi(this.get("distance"));
                        d && a.dq(b)
                    }
                }
            },
            E4: function (a) {
                var b = this.Go(a.Ol);
                return b.length == 0 ? [] : this.WS.filter(function (a) {
                    var c = a.get("mapColor");
                    return c == "any" ? n : c == "image" ? b.some(function (a) {
                        return this.rS(a).iq
                    }
                        .bind(this)) : c == "transparent" ? b.every(function (a) {
                        return !this.rS(a).iq
                    }
                        .bind(this)) : c && c[0] == "#" ? b.some(function (a) {
                        return f.wY(this.rS(a).color, c) < 10
                    }
                        .bind(this)) : y
                }
                    .bind(this))
            },
            P9: function (a, b, c) {
                this.Mf.forEach(function (d) {
                    if (a.indexOf(d) < 0) {
                        var e = h.get(d) - 1;
                        h.set(d, e);
                        if (e == 0) {
                            d.trigger(g.Qb, {
                                fY: c
                            });
                            b && d.trigger(g.Kf)
                        }
                    }
                });
                var d = this.Mf;
                this.Mf = a;
                this.Mf.forEach(function (a) {
                    if (d.indexOf(a) < 0) {
                        var e = (h.get(a) || 0) + 1;
                        h.set(a, e);
                        if (e == 1) {
                            a.trigger(g.xc, {
                                fY: c
                            });
                            b && a.trigger(g.Mh)
                        }
                    }
                })
            },
            ya: function (a, b) {
                for (var c = "", d = a.length - 1; d >= 0 && c == ""; d--) {
                    var e = a[d];
                    if (!b || e.get("displayTooltipInTouchScreens") && this.Va.C.get("displayTooltipInTouchScreens") !== y)
                        c = e.get("toolTip", "")
                }
                return c
            },
            ns: function (a) {
                if (a) {
                    var a = this.get("yaw") - this.cs,
                    b = this.get("pitch") - this.bs;
                    return Math.sqrt(a * a + b * b)
                }
                return 0
            },
            pn: function (a) {
                for (var b = this.or.get("useHandCursor"), c = a.length - 1; c >= 0 && b === m; c--)
                    b = a[c].get("useHandCursor");
                return !!b
            }
        }
    });
    define("kx", ["require", "r", "cc"], function (a) {
        function b() {
            this.Tg = m;
            this.Vx = this.Wu = 0;
            this.Z = n;
            this.EH = this.GW = this.bS = m;
            this.Ic = y
        }
        var c = a("r"),
        e = a("cc"),
        g = Math.PI / 180,
        d = c.browser() == c.If ? [-0.5, 0] : [0, 0];
        b.prototype.Ws = function (a) {
            this.Tg != a && (this.Tg = a, this.Z = n)
        };
        b.prototype.Vs = function (a) {
            if (a < this.Wu + d[0] || a > this.Wu + d[1])
                this.Wu = a, this.Z = n
        };
        b.prototype.get = function (a, b) {
            b !== m || (b = n);
            this.Z && (this.L(), this.Z = y);
            var c = this.bS.get(a) || 0,
            d = (this.GW.get(a) || 0) - c;
            b && (180 < d ? d -= 360 : -180 > d && (d += 360));
            return c +
            d * this.EH
        };
        b.prototype.GY = function () {
            this.Z && (this.L(), this.Z = y);
            for (var a = this.bS.get("vertices"), b = this.GW.get("vertices"), c = [], d = 0; d < a.length; d++) {
                var g = a[d].get("yaw") || 0,
                l = (b[d].get("yaw") || 0) - g;
                180 < l ? l -= 360 : -180 > l && (l += 360);
                var q = a[d].get("pitch") || 0,
                o = (b[d].get("pitch") || 0) - q;
                c.push(new e(g + l * this.EH, q + o * this.EH))
            }
            return c
        };
        b.prototype.Hh = function () {
            return this.get("opacity", y)
        };
        b.prototype.Xv = function () {
            var a = this.get("hfov") || this.get("vfov"),
            b = this.Tg[0].get("hfov") || this.Tg[0].get("vfov");
            return Math.tan(0.5 * a * g) / Math.tan(0.5 * b * g)
        };
        b.prototype.L = function () {
            for (var a = this.Vx, b, c = this.Tg.length - 1, d, e; ; ) {
                b = Math.min(a + 1, c);
                d = this.p5(a);
                e = this.p5(b);
                if (d <= this.Wu && this.Wu <= e)
                    break;
                if (d > this.Wu) {
                    if (0 == a) {
                        b = a;
                        break
                    }
                    a -= 1
                } else {
                    if (a == c) {
                        b = a;
                        break
                    }
                    a += 1
                }
            }
            this.bS = this.Tg[a];
            this.GW = this.Tg[b];
            a = e - d;
            this.EH = 0 < a ? (this.Wu - d) / a : 0
        };
        b.prototype.p5 = function (a) {
            return this.Tg[a].get("timestamp")
        };
        return b
    });
    define("g", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.set("scaleMode", m);
                this.set("distance", m);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, "horizontalAlign,verticalAlign,scale,scaleMode,width,height,offsetX,offsetY,distance,playbackPositions".split(","), this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, "horizontalAlign,verticalAlign,scale,scaleMode,width,height,offsetX,offsetY,distance,playbackPositions".split(","),
                    this.qc)
            },
            qc: function () {
                this.set("horizontalAlign", this.j.get("horizontalAlign"));
                this.set("verticalAlign", this.j.get("verticalAlign"));
                this.set("scale", this.j.get("scale"));
                this.set("scaleMode", this.j.get("scaleMode"));
                this.set("width", this.j.get("width"));
                this.set("height", this.j.get("height"));
                this.set("offsetX", this.j.get("offsetX", 0.5 * this.j.get("width")));
                this.set("offsetY", this.j.get("offsetY", 0.5 * this.j.get("height")));
                this.set("distance", this.j.get("distance"));
                this.set("playbackPositions",
                    this.j.get("playbackPositions"))
            },
            Ne: function () {
                this.p("playbackPositions", "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("yaw", this.xa.get("yaw")), this.set("pitch", this.xa.get("pitch")), this.set("roll", this.xa.get("roll")), this.set("alpha", this.xa.Hh()))
            }
        }
    });
    define("hw", "require,fg,ih,ll,dv,eg,li,fs,lj,g,km".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("dv"),
        d = a("eg"),
        f = a("li"),
        h = a("fs"),
        j = a("lj"),
        p = a("g"),
        k = a("km"),
        l = 0,
        a = b.extend(d, f, p, h, j, function (a) {
            d.call(this);
            this.set("tag", "FlatHotspotImage");
            this.set("id", "flat_hs_image_" + l++);
            this.j = a;
            this.sh.push(this.j);
            this.Xd = this.Xd.bind(this)
        });
        a.prototype.Qa = function () {
            d.prototype.Qa.call(this);
            c.Eb(this.j, ["image.levels"], this.Xd, n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j, ["image.levels"],
                this.Xd);
            d.prototype.Sa.call(this)
        };
        a.prototype.Xd = function () {
            this.set("image", this.j.get("image"));
            this.set("level", k.uva(this.j))
        };
        a.prototype.L = function (a) {
            this.uv();
            d.prototype.L.call(this, a);
            this.p("inView") && this.j.trigger(this.get("inView") ? e.od : e.zd)
        };
        a.prototype.uv = function () {
            if (this.p("meshGroup", "panoramaId", "id")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a) {
                    g.setAttribute(a, g.$s, this.get("panoramaId"));
                    g.setAttribute(a, g.RN, this.get("id"))
                }
                    .bind(this))
            }
        };
        return a
    });
    define("jq", "require,fg,ih,ll,gU,hS,r,kX,bq,iL".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("gU"),
        d = a("hS");
        a("r");
        var f = a("kX"),
        h = a("bq"),
        j = a("iL"),
        a = b.extend(g, function (a) {
            g.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.NJ = this.NJ.bind(this);
            this.MJ = this.MJ.bind(this);
            this.OJ = this.OJ.bind(this);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("tag", "Hotspot");
            this.set("over", y);
            this.set("centerOver", y);
            this.set("enabled", n);
            this.set("visible", y);
            this.set("alpha",
                0);
            this.set("inVR", y);
            this.set("overlaysEnabled", n);
            this.set("enabledInVR", n);
            this.set("enabledInStandard", n);
            this.set("interactionEnabled", n);
            this.set("centerOverDisplay", y);
            this.set("rollOverDisplay", y);
            this.set("loadingActive", y);
            this.TP = this.UP = this.vk = this.rc = this.Dd = r;
            this.Mf = [];
            this.SP = [];
            this.ui = r
        });
        a.prototype.Qa = function () {
            this.Dd = (new d(e.S)).Hi(this.Hu.bind(this));
            this.rc = (new d(e.wc)).Nk(this.Ku.bind(this));
            this.vk = (new d(e.Lb)).Hi(this.Pna.bind(this));
            this.UP = (new d(e.xc)).Nk(this.Ina.bind(this));
            this.TP = (new d(e.Qb)).Nk(this.Hna.bind(this));
            g.prototype.Qa.call(this);
            c.Eb(this.j, ["items", "rollOverItems", "maps", "rollOverMaps"], this.NJ, n);
            c.Eb(this.j, ["fadeInDuration", "fadeOutDuration", "enabledInVR", "enabledInStandard", "enabledInSurfaceSelection", "enabled", "interactionEnabled", "centerOverDisplay", "rollOverDisplay"], this.OJ, n);
            c.Eb(this.j, ["areas"], this.MJ, n)
        };
        a.prototype.Sa = function () {
            this.Xy([], this.Mf);
            this.UW([], this.SP);
            this.Dd.dispose();
            this.rc.dispose();
            this.vk.dispose();
            this.UP.dispose();
            this.TP.dispose();
            c.Pb(this.j, ["items", "rollOverItems", "maps", "rollOverMaps"], this.NJ);
            c.Pb(this.j, ["fadeInDuration", "fadeOutDuration", "enabledInVR", "enabledInStandard", "enabledInSurfaceSelection", "enabled", "interactionEnabled", "centerOverDisplay", "rollOverDisplay"], this.OJ);
            c.Pb(this.j, ["areas"], this.MJ);
            this.get("visible") && this.j.trigger(e.zd);
            g.prototype.Sa.call(this)
        };
        a.prototype.NJ = function () {
            this.set("items", this.Va.Qp(this.j.get("items", [])));
            this.set("rollOverItems", this.Va.Qp(this.j.get("rollOverItems",
                        [])));
            this.set("maps", this.Va.Qp(this.j.get("maps", [])));
            this.set("rollOverMaps", this.Va.Qp(this.j.get("rollOverMaps", [])));
            var a = [].concat(this.get("maps"), this.get("items"), this.get("rollOverMaps"), this.get("rollOverItems"));
            a.forEach(function (a) {
                a.sya(this.j)
            }
                .bind(this));
            this.get("items").forEach(function (a) {
                a.set("projected", this.j.get("projected"))
            }
                .bind(this));
            this.jf(a);
            this.Dd.yd(a);
            this.rc.yd(a);
            this.vk.yd(a)
        };
        a.prototype.OJ = function () {
            this.set("fadeInDuration", this.j.get("fadeInDuration"));
            this.set("fadeOutDuration", this.j.get("fadeOutDuration"));
            this.set("enabled", this.j.get("enabled", n));
            this.set("enabledInVR", this.j.get("enabledInVR"));
            this.set("enabledInStandard", this.j.get("enabledInStandard", n));
            this.set("enabledInSurfaceSelection", this.j.get("enabledInSurfaceSelection", n));
            this.set("centerOverDisplay", this.j.get("centerOverDisplay"));
            this.set("rollOverDisplay", this.j.get("rollOverDisplay", y));
            this.set("interactionEnabled", this.j.get("interactionEnabled", n))
        };
        a.prototype.MJ = function () {
            var a =
                this.j.get("areas");
            this.UP.yd(a);
            this.TP.yd(a)
        };
        a.prototype.L = function (a) {
            this.si(a);
            g.prototype.L.call(this, a);
            this.Fp(a)
        };
        a.prototype.Fp = function (a) {
            this.set("inVR", a.sb);
            this.set("surfaceSelection", a.XF);
            this.set("hotspotsEnabled", a.aw);
            if (this.p("items", "rollOverItems", "maps", "rollOverMaps", "over", "centerOver", "inVR", "hotspotsEnabled", "enabledInVR", "enabledInStandard", "surfaceSelection", "enabledInSurfaceSelection", "enabled", "interactionEnabled", "rollOverDisplay", "centerOverDisplay") || this.Q &&
                this.Q.p("composedAlpha")) {
                var b = a = y,
                c = this.get("hotspotsEnabled") && this.get("enabled") && (!this.get("inVR") || this.get("enabledInVR")) && (this.get("inVR") || this.get("enabledInStandard")) && (!this.get("surfaceSelection") || this.get("enabledInSurfaceSelection")) && this.Q && this.Q.get("composedAlpha") > 0,
                d = this.get("interactionEnabled");
                if (c) {
                    a = this.get("centerOver") && !this.get("inVR");
                    b = this.get("over") || a;
                    a = !this.get("rollOverDisplay") && !this.get("centerOverDisplay") || this.get("over") && this.get("rollOverDisplay") ||
                        a && this.get("centerOverDisplay") !== y && this.get("rollOverDisplay")
                }
                this.get("rollOverItems").forEach(function (a) {
                    a.set("visible", b);
                    a.set("beamEnabled", c && b && d)
                });
                var g = this.get("rollOverItems").length == 0;
                this.get("items").forEach(function (a) {
                    a.set("visible", g || !b);
                    a.set("beamEnabled", c && (g || !b) && d)
                });
                this.get("rollOverMaps").forEach(function (a) {
                    a.set("visible", y);
                    a.set("beamEnabled", c && b && d)
                });
                var j = this.get("rollOverMaps").length == 0;
                this.get("maps").forEach(function (a) {
                    a.set("visible", y);
                    a.set("beamEnabled",
                        c && (j || !b) && d)
                });
                this.set("visible", a)
            }
            if (this.p("visible")) {
                var a = this.get("alpha"),
                s = this.get("visible") ? 1 : 0,
                v = (this.get("visible") ? this.get("fadeInDuration") : this.get("fadeOutDuration")) * Math.abs(a - s);
                this.ui = new f("linear", [new h("alpha", a, s)], Math.max(v, 1));
                this.Ia();
                this.get("visible") ? this.j.trigger(e.od) : this.j.trigger(e.zd)
            }
        };
        a.prototype.si = function (a) {
            if (this.ui) {
                if (this.ui.Re())
                    this.ui = r;
                else {
                    this.ui.fb(a.vd);
                    this.set("alpha", this.ui.Fb("alpha"))
                }
                this.Ia()
            }
        };
        a.prototype.Hu = function () {
            this.cm();
            this.trigger(e.S)
        };
        a.prototype.Pna = function () {
            this.cm();
            this.trigger(e.Lb)
        };
        a.prototype.Ku = function () {
            this.cm()
        };
        a.prototype.cm = function () {
            var a = 0;
            this.rc.zn(function (b) {
                var c = 0,
                d;
                this.Dd.Ai(b) ? c = 100 : (d = this.rc.Ai(b)) && (c = d.Kh);
                a = a + c
            }
                .bind(this));
            this.trigger(new j(e.wc, a / this.rc.Yc.length))
        };
        a.prototype.Ina = function (a) {
            a.data.fY ? this.UW([a.source], []) : this.Xy([a.source], [])
        };
        a.prototype.Hna = function (a) {
            a.data.fY ? this.UW([], [a.source]) : this.Xy([], [a.source])
        };
        a.prototype.Xy = function (a, b) {
            this.vaa(this.Mf,
                a, b);
            this.set("over", this.Mf.length > 0)
        };
        a.prototype.UW = function (a, b) {
            this.vaa(this.SP, a, b);
            this.set("centerOver", this.SP.length > 0)
        };
        a.prototype.vaa = function (a, b, c) {
            b || (b = []);
            c || (c = []);
            c.forEach(function (b) {
                b = a.indexOf(b);
                b >= 0 && a.splice(b, 1)
            });
            b.forEach(function (b) {
                a.indexOf(b) < 0 && a.push(b)
            })
        };
        return a
    });
    define("cd", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.set("scaleMode", m);
                this.set("distance", m);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, "horizontalAlign,verticalAlign,scale,scaleMode,distance,playbackPositions".split(","), this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, "horizontalAlign,verticalAlign,scale,scaleMode,distance,playbackPositions".split(","), this.qc)
            },
            qc: function () {
                this.set("horizontalAlign", this.j.get("horizontalAlign"));
                this.set("verticalAlign", this.j.get("verticalAlign"));
                this.set("scaleMode", this.j.get("scaleMode"));
                this.set("distance", this.j.get("distance"));
                this.set("scale", this.j.get("scale"));
                this.set("playbackPositions", this.j.get("playbackPositions"))
            },
            Ne: function () {
                this.p("playbackPositions", "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("yaw", this.xa.get("yaw")), this.set("pitch", this.xa.get("pitch")), this.set("roll", this.xa.get("roll")), this.set("rotationX",
                        this.xa.get("rotationX")), this.set("rotationY", this.xa.get("rotationY")), this.set("hfov", this.xa.get("hfov")), this.set("vfov", this.xa.get("vfov")), this.set("alpha", this.xa.Hh()))
            }
        }
    });
    define("hs", "require,fg,ih,ll,dv,eg,kO,fs,lj,cd,km".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("dv"),
        d = a("eg"),
        f = a("kO"),
        h = a("fs"),
        j = a("lj"),
        p = a("cd"),
        k = a("km"),
        l = 0,
        a = b.extend(d, f, h, j, p, function (a) {
            d.call(this);
            this.set("tag", "HotspotImage");
            this.set("id", "hs_image_" + l++);
            this.set("side", THREE.DoubleSide);
            this.j = a;
            this.sh.push(this.j);
            this.Xd = this.Xd.bind(this)
        });
        a.prototype.Qa = function () {
            d.prototype.Qa.call(this);
            c.Eb(this.j, ["image.levels"], this.Xd, n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j,
                ["image.levels"], this.Xd);
            d.prototype.Sa.call(this)
        };
        a.prototype.Xd = function () {
            this.set("image", this.j.get("image"));
            this.set("level", k.zva(this.j, this.get("panoramaPixelsPerDegree")))
        };
        a.prototype.L = function (a) {
            this.uv();
            d.prototype.L.call(this, a);
            this.p("inView") && this.j.trigger(this.get("inView") ? e.od : e.zd)
        };
        a.prototype.uv = function () {
            if (this.p("meshGroup", "panoramaId", "id")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a) {
                    g.setAttribute(a, g.$s, this.get("panoramaId"));
                    g.setAttribute(a,
                        g.RN, this.get("id"))
                }
                    .bind(this))
            }
        };
        return a
    });
    define("fJ", ["require", "fk", "a"], function (a) {
        function b(a, b, e) {
            this.Sd = a || new c(0, 0, 0);
            this.Ag = b || new c(1, 0, 0);
            this.Ns = e || new c(0, 1, 0)
        }
        var c = a("fk"),
        e = a("a");
        b.prototype.clone = function () {
            return new b(this.Sd.clone(), this.Ag.clone(), this.Ns.clone())
        };
        b.prototype.apply = function (a) {
            a.hz(this.Sd);
            a.hz(this.Ag);
            a.hz(this.Ns)
        };
        b.prototype.intersection = function (a, b) {
            var f = e.Gs(a.Sd, a.Ag),
            h = e.Gs(this.Sd, a.Sd),
            j = e.Gs(this.Sd, this.Ag);
            j.lM(e.Gs(this.Sd, this.Ns));
            f = f.Mv(j);
            if (!(0 == f || b && 0 > f))
                return h = -j.Mv(h) /
                    f, new c(a.Sd.x + (a.Ag.x - a.Sd.x) * h, a.Sd.y + (a.Ag.y - a.Sd.y) * h, a.Sd.z + (a.Ag.z - a.Sd.z) * h)
        };
        b.prototype.kN = function (a, b) {
            var f = e.Gs(this.Sd, this.Ag),
            h = e.Gs(this.Sd, this.Ns),
            j = e.Gs(this.Sd, a),
            p = f.EY(),
            k = h.EY();
            return b ? new c(j.Mv(f) / (p * p), j.Mv(h) / (k * k), 0) : new c(j.Mv(f) / p, j.Mv(h) / k, 0)
        };
        return b
    });
    define("ed", [], function () {
        function a(a) {
            a %= e;
            0 > a && (a += e);
            return f[a * g | 0]
        }
        function b(a) {
            a %= e;
            0 > a && (a += e);
            return d[a * g | 0]
        }
        function c() {
            this.identity()
        }
        c.prototype.identity = function () {
            this.m11 = 1;
            this.m21 = this.m13 = this.m12 = 0;
            this.m22 = 1;
            this.m32 = this.m31 = this.m23 = 0;
            this.m33 = 1;
            this.mf = this.lf = this.kf = 0
        };
        c.prototype.clone = function () {
            var a = new c;
            a.m11 = this.m11;
            a.m12 = this.m12;
            a.m13 = this.m13;
            a.m21 = this.m21;
            a.m22 = this.m22;
            a.m23 = this.m23;
            a.m31 = this.m31;
            a.m32 = this.m32;
            a.m33 = this.m33;
            a.kf = this.kf;
            a.lf = this.lf;
            a.mf = this.mf;
            return a
        };
        c.prototype.concat = function (a) {
            var b = this.m11,
            c = this.m12,
            d = this.m13,
            e = this.m21,
            f = this.m22,
            h = this.m23,
            g = this.m31,
            v = this.m32,
            u = this.m33,
            w = this.kf,
            x = this.lf,
            z = this.mf;
            this.m11 = b * a.m11 + c * a.m21 + d * a.m31;
            this.m12 = b * a.m12 + c * a.m22 + d * a.m32;
            this.m13 = b * a.m13 + c * a.m23 + d * a.m33;
            this.m21 = e * a.m11 + f * a.m21 + h * a.m31;
            this.m22 = e * a.m12 + f * a.m22 + h * a.m32;
            this.m23 = e * a.m13 + f * a.m23 + h * a.m33;
            this.m31 = g * a.m11 + v * a.m21 + u * a.m31;
            this.m32 = g * a.m12 + v * a.m22 + u * a.m32;
            this.m33 = g * a.m13 + v * a.m23 + u * a.m33;
            this.kf = w * a.m11 + x *
                a.m21 + z * a.m31 + a.kf;
            this.lf = w * a.m12 + x * a.m22 + z * a.m32 + a.lf;
            this.mf = w * a.m13 + x * a.m23 + z * a.m33 + a.mf
        };
        c.prototype.translate = function (a, b, c) {
            this.kf += a;
            this.lf += b;
            this.mf += c
        };
        c.prototype.scale = function (a, b, c) {
            this.m11 *= a;
            this.m12 *= b;
            this.m13 *= c;
            this.m21 *= a;
            this.m22 *= b;
            this.m23 *= c;
            this.m31 *= a;
            this.m32 *= b;
            this.m33 *= c;
            this.kf *= a;
            this.lf *= b;
            this.mf *= c
        };
        c.prototype.Nn = function (c) {
            var d = a(c),
            c = b(c),
            e = this.m12 * d + this.m13 * c,
            f = this.m22 * c - this.m23 * d,
            h = this.m22 * d + this.m23 * c,
            g = this.m32 * c - this.m33 * d,
            t = this.m32 * d + this.m33 *
                c,
            s = this.lf * c - this.mf * d,
            v = this.lf * d + this.mf * c;
            this.m12 = this.m12 * c - this.m13 * d;
            this.m13 = e;
            this.m22 = f;
            this.m23 = h;
            this.m32 = g;
            this.m33 = t;
            this.lf = s;
            this.mf = v
        };
        c.prototype.aq = function (c) {
            var d = a(c),
            c = b(c),
            e = -this.m11 * d + this.m13 * c,
            f = this.m21 * c + this.m23 * d,
            h = -this.m21 * d + this.m23 * c,
            g = this.m31 * c + this.m33 * d,
            t = -this.m31 * d + this.m33 * c,
            s = this.kf * c + this.mf * d,
            v = -this.kf * d + this.mf * c;
            this.m11 = this.m11 * c + this.m13 * d;
            this.m13 = e;
            this.m21 = f;
            this.m23 = h;
            this.m31 = g;
            this.m33 = t;
            this.kf = s;
            this.mf = v
        };
        c.prototype.bq = function (c) {
            var d =
                a(c),
            c = b(c),
            e = this.m11 * d + this.m12 * c,
            f = this.m21 * c - this.m22 * d,
            h = this.m21 * d + this.m22 * c,
            g = this.m31 * c - this.m32 * d,
            t = this.m31 * d + this.m32 * c,
            s = this.kf * c - this.lf * d,
            v = this.kf * d + this.lf * c;
            this.m11 = this.m11 * c - this.m12 * d;
            this.m12 = e;
            this.m21 = f;
            this.m22 = h;
            this.m31 = g;
            this.m32 = t;
            this.kf = s;
            this.lf = v
        };
        c.prototype.rotate = function (a, b, c) {
            this.Nn(a);
            this.aq(b);
            this.bq(c)
        };
        c.prototype.ada = function () {
            var a = this.ova();
            if (0 == a)
                return y;
            var b = this.clone();
            this.m11 = (b.m22 * b.m33 - b.m23 * b.m32) / a;
            this.m12 = (b.m13 * b.m32 - b.m12 * b.m33) /
            a;
            this.m13 = (b.m12 * b.m23 - b.m13 * b.m22) / a;
            this.m21 = (b.m23 * b.m31 - b.m21 * b.m33) / a;
            this.m22 = (b.m11 * b.m33 - b.m13 * b.m31) / a;
            this.m23 = (b.m13 * b.m21 - b.m11 * b.m23) / a;
            this.m31 = (b.m21 * b.m32 - b.m22 * b.m31) / a;
            this.m32 = (b.m12 * b.m31 - b.m11 * b.m32) / a;
            this.m33 = (b.m11 * b.m22 - b.m12 * b.m21) / a;
            this.kf =  - (b.kf * this.m11 + b.lf * this.m21 + b.mf * this.m31);
            this.lf =  - (b.kf * this.m12 + b.lf * this.m22 + b.mf * this.m32);
            this.mf =  - (b.kf * this.m13 + b.lf * this.m23 + b.mf * this.m33);
            return n
        };
        c.prototype.ova = function () {
            return this.m11 * (this.m22 * this.m33 - this.m23 *
                this.m32) + this.m12 * (this.m23 * this.m31 - this.m21 * this.m33) + this.m13 * (this.m21 * this.m32 - this.m22 * this.m31)
        };
        c.prototype.hz = function (a) {
            var b = a.x * this.m12 + a.y * this.m22 + a.z * this.m32 + this.lf,
            c = a.x * this.m13 + a.y * this.m23 + a.z * this.m33 + this.mf;
            a.x = a.x * this.m11 + a.y * this.m21 + a.z * this.m31 + this.kf;
            a.y = b;
            a.z = c
        };
        for (var e = 2 * Math.PI, g = 18E4 / e, d = new Float32Array(180001), f = new Float32Array(180001), h = 0; 18E4 > h; h++)
            d[h] = Math.cos(h / g), f[h] = Math.sin(h / g);
        d[18E4] = d[0];
        f[18E4] = f[0];
        return c
    });
    define("cU", "require,it,gm,cB,fk,fJ,ed,jn".split(","), function (a) {
        var b = a("it"),
        c = a("gm"),
        e = a("cB"),
        g = a("fk"),
        d = a("fJ"),
        f = a("ed"),
        h = a("jn"),
        j = Math.PI / 180,
        p = 180 / Math.PI,
        k = new f,
        l = new c,
        q = new d,
        o = new g;
        return {
            get: function (a, b, c, d, e, f, h, p) {
                a = a * j;
                b = b * j;
                b = new g(Math.sin(-a) * Math.cos(b), Math.sin(b), Math.cos(-a) * Math.cos(b));
                k.identity();
                k.aq(c * j);
                k.bq(e * j);
                k.Nn(d * j);
                b.apply(k);
                if (b.z > 0) {
                    l.WF(h);
                    l.Cea(p);
                    l.sw(f * j);
                    l.project(b);
                    return b
                }
                return r
            },
            Wza: function (a, b, c) {
                k.identity();
                k.Nn(-c.ec() * j);
                k.bq(-c.Qd() *
                    j);
                k.aq(-c.ac() * j);
                o.set(a, b, 0);
                a = c.unproject(o).tca();
                a.apply(k);
                return {
                    ma: a.ac() * p,
                    pitch: a.ec() * p
                }
            },
            VBa: function (a, c, d, e, f, g, l, p, A, K, F, J, B, O) {
                O || (O = h.Zn);
                B || (B = b.Kk(J, K, F));
                J || (J = b.Sn(B, K, F));
                var N = K * 0.5 / Math.tan(J * 0.5 * j),
                I = N * Math.tan(J * 0.5 * j) * 2,
                L = N * Math.tan(B * 0.5 * j) * 2;
                q.Sd.set(+I * 0.5, +L * 0.5, 0);
                q.Ag.set(-I * 0.5, +L * 0.5, 0);
                q.Ns.set(+I * 0.5, -L * 0.5, 0);
                k.identity();
                k.bq(-A * j);
                k.Nn(-l * j);
                k.aq(p * j);
                k.translate(0, 0, N);
                k.bq(-g * j);
                k.Nn(-f * j);
                k.aq(-e * j);
                k.aq(d.ac() * j);
                k.bq(d.Qd() * j);
                k.Nn(d.ec() * j);
                q.apply(k);
                o.set(a, c, 0);
                f = q.intersection(d.unproject(o));
                e = {
                    x: m,
                    y: m,
                    xScaled: m,
                    yScaled: m
                };
                if (f && f.z > 0) {
                    f = q.kN(f);
                    e.xScaled = e.x = f.x / I;
                    e.yScaled = e.y = f.y / L
                }
                if (O != h.Zn) {
                    var G,
                    E;
                    switch (O) {
                    case h.Te:
                        G = Math.min(b.Sn(B, K, F), J);
                        E = Math.min(b.Kk(J, K, F), B);
                        break;
                    case h.xm:
                        G = Math.max(b.Sn(B, K, F), J);
                        E = Math.max(b.Kk(J, K, F), B);
                        break;
                    case h.Zk:
                        G = J;
                        E = b.Kk(J, K, F);
                        break;
                    case h.kh:
                        G = b.Sn(B, K, F);
                        E = B
                    }
                    if (G != J || E != B) {
                        I = N * Math.tan(G * 0.5 * j) * 2;
                        L = N * Math.tan(E * 0.5 * j) * 2;
                        q.Sd.set(+I * 0.5, +L * 0.5, 0);
                        q.Ag.set(-I * 0.5, +L * 0.5, 0);
                        q.Ns.set(+I * 0.5, -L *
                            0.5, 0);
                        q.apply(k);
                        o.set(a, c, 0);
                        if ((f = q.intersection(d.unproject(o))) && f.z > 0) {
                            f = q.kN(f);
                            e.xScaled = f.x / I;
                            e.yScaled = f.y / L
                        }
                    }
                }
                return e
            },
            YAa: function (a, b, c, d, f, h, l) {
                l = f * 0.5 / Math.tan(l * 0.5 * j);
                q.Sd.set(+f * 0.5, +h * 0.5, l);
                q.Ag.set(-f * 0.5, +h * 0.5, l);
                q.Ns.set(+f * 0.5, -h * 0.5, l);
                k.identity();
                k.bq(-d * j);
                k.Nn(-c * j);
                k.aq(-b * j);
                k.aq(a.ac() * j);
                k.bq(a.Qd() * j);
                k.Nn(a.ec() * j);
                q.apply(k);
                a = new e(new g(0, 0, 0), new g(0, 0, 1));
                if ((a = q.intersection(a)) && a.z > 0) {
                    a = q.kN(a);
                    return {
                        x: a.x / f,
                        y: a.y / h
                    }
                }
                return r
            }
        }
    });
    define("y", "require,fg,gU,dv,M,hZ,jN".split(","), function (a) {
        var b = a("fg"),
        c = a("gU"),
        e = a("dv"),
        g = a("M"),
        d = a("hZ"),
        f = a("jN"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("tag", "WebGLObject");
            this.set("zOrder", 0);
            this.set("webglScene", r);
            this.set("meshGroup", r);
            this.set("camera", r)
        });
        a.prototype.Vi = function () {
            return []
        };
        a.prototype.Sa = function () {
            e.dispose(this.get("meshGroup"));
            e.AN(this.get("meshGroup"), r);
            this.set("meshGroup", r);
            c.prototype.Sa.call(this)
        };
        a.prototype.L = function (a) {
            c.prototype.L.call(this,
                a);
            this.set("camera", g.Hs(a.ye));
            this.set("webglScene", a.ye);
            if (!this.get("meshGroup")) {
                this.set("meshGroup", e.Bba(this.Vi()));
                this.get("meshGroup").userData.lxa = this
            }
            this.p("webglScene", "meshGroup") && e.AN(this.get("meshGroup"), this.get("webglScene"));
            this.si();
            this.Zl(a);
            this.yv();
            this.p("loadingActive", "meshGroup") && d.nd(this.get("meshGroup"), this.get("loadingActive"));
            this.p("blendingActive", "meshGroup") && f.tea(this.get("meshGroup"), this.get("blendingActive"))
        };
        a.prototype.si = function () {
            this.p("composedAlpha",
                "meshGroup") && this.Dq()
        };
        a.prototype.Dq = function () {
            e.xd(this.get("meshGroup"), this.get("composedAlpha"))
        };
        a.prototype.Zl = function () {
            i("Must be overridden in descendants.")
        };
        a.prototype.yv = function () {
            if (this.p("index", "meshGroup")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a, b, c) {
                    e.DN(a, this.get("index") + b / c.length)
                }
                    .bind(this))
            }
        };
        return a
    });
    define("em", ["require", "fg", "gW", "y", "dv"], function (a) {
        var b = a("fg"),
        c = a("gW"),
        e = a("y"),
        g = a("dv"),
        d = new THREE.Matrix4,
        f = Math.PI / 180,
        a = b.extend(e, function () {
            e.call(this);
            this.set("tag", "Frame");
            this.ef = new THREE.Matrix4;
            this.ic = new THREE.Matrix4;
            this.pi = new THREE.Matrix4;
            this.Tf = new THREE.Matrix4
        });
        a.prototype.L = function (a) {
            e.prototype.L.call(this, a)
        };
        a.prototype.Zl = function (a) {
            var b = y;
            this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ") && (this.ef.makeTranslation(0.5 * -this.get("composedTranslationX") *
                    c.Ld, 0.5 * this.get("composedTranslationY") * c.Ld, 0.5 * this.get("composedTranslationZ") * c.Ld), b = n);
            this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll") && (this.ic.makeRotationY(-a.ma * f), this.ic.multiply(d.makeRotationX(-this.get("composedDeltaPitch") * f)), this.ic.multiply(d.makeRotationY(this.get("composedDeltaYaw") * f)), this.ic.multiply(d.makeRotationY(a.ma * f)), b = n);
            this.p("flipHorizontally") && (this.pi.makeScale(this.get("flipHorizontally") ? -1 : 1, 1, 1), b = n);
            if (b || this.p("meshGroup"))
                this.Tf.copy(this.ef),
                this.Tf.multiply(this.ic), this.Tf.multiply(this.pi), g.fm(this.get("meshGroup"), this.Tf)
        };
        return a
    });
    define("lt", ["require", "fg", "iG", "kz", "jS"], function (a) {
        var b = a("fg"),
        c = a("iG"),
        e = a("kz"),
        g = a("jS"),
        a = b.extend(g, function (a, b, c, e, p) {
            g.call(this, a.get("url"));
            this.da = b;
            this.fa = c;
            this.X = e;
            this.ia = p;
            this.gna = 0 != this.da || 0 != this.fa || this.X != a.get("width") || this.ia != a.get("height")
        });
        a.prototype.Ze = function () {
            this.gna ? (this.Qja(), this.Do(), this.ky(!!this.ue)) : g.prototype.Ze.call(this)
        };
        a.prototype.VD = function () {
            g.prototype.VD.call(this);
            this.yR()
        };
        a.prototype.ss = function () {
            g.prototype.ss.call(this);
            this.yR()
        };
        g.prototype.dispose = function () {
            g.prototype.dispose.call(this);
            this.yR()
        };
        a.prototype.Qja = function () {
            var a = c.we(this.Od);
            this.ue = e.Iua(a, this.da, this.fa, this.X, this.ia)
        };
        a.prototype.yR = function () {
            this.ue && (e.oM(this.ue), this.ue = r)
        };
        return a
    });
    define("eQ", "require,dW,cT,jL,fK,dX,jS,lt,gW,bU,dv,bH,km,hZ,r".split(","), function (a) {
        var b = a("dW"),
        c = a("cT"),
        e = a("jL"),
        g = a("fK"),
        d = a("dX"),
        f = a("jS"),
        h = a("lt"),
        j = a("gW"),
        p = a("bU"),
        k = a("dv"),
        l = a("bH"),
        q = a("km"),
        o = a("hZ"),
        t = a("r"),
        s = {
            Eua: function (a, b) {
                var c = l.get(a);
                switch (c) {
                case l.xt:
                case l.rq:
                case l.Ki:
                    return this.Bja(c, a, b);
                case l.$n:
                case l.zm:
                case l.ao:
                    return this.Dja(c, a, b)
                }
            },
            Kua: function (a, b) {
                var c = new f(b.get("posterURL"));
                return this.K3(a, b, c)
            },
            Jua: function (a, b) {
                var c = new d;
                return this.K3(a,
                    b, c)
            },
            K3: function (a, b, d) {
                var e = a.get("hfov"),
                f = a.get("vfov"),
                h = a.get("pitch"),
                g = b.get("width"),
                b = b.get("url"),
                a = l.get(a),
                q = a == l.ao ? 2 : 1,
                t = a == l.zm ? 2 : 1,
                a = q + t > 2 ? [c.qa, c.Na] : [c.Un],
                s = Math.round(g / q),
                B = p.Ds(d.texture(), new p.Wn(b));
                o.Xz(B, d);
                B.visible = n;
                return a.map(function (a, b) {
                    var c = j.Eba(e, f, h, 1, 1, b % q / q, (t - 1 - Math.floor(b / q)) / t, 1 / q, 1 / t),
                    c = k.create(c, [B]);
                    c.layers.set(a);
                    o.xN(c, s / e);
                    return c
                }
                    .bind(this))
            },
            Gua: function (a) {
                var b = [e.Na, e.qa, e.nb, e.mb, e.FRONT, e.BACK].map(function () {
                    var b = new d;
                    b.Di(s.ama(a));
                    var c = p.Ds(b.texture());
                    o.Xz(c, b);
                    c.visible = n;
                    return c
                }),
                f = j.Dba(1, 1),
                b = k.create(f, b);
                o.xN(b, 256 / 90);
                b.layers.set(c.Un);
                return b
            },
            fW: {},
            ama: function (a) {
                if (!s.fW[a]) {
                    var b = document.createElement("canvas");
                    b.width = b.height = 256;
                    var c = b.getContext("2d");
                    c.fillStyle = a;
                    c.fillRect(0, 0, b.width, b.height);
                    s.fW[a] = b
                }
                return s.fW[a]
            },
            Bja: function (a, d, f) {
                var h = a == l.xt ? [c.Na, c.qa] : [c.Un],
                p = d.get("flipImageHorizontally");
                p && (h = h.reverse());
                var t = a == l.Ki ? 1 : 6 * h.length,
                s = f.get("width") / t,
                K = f.get("height"),
                F,
                J;
                if (b.tb("TiledImageResourceLevel",
                        f)) {
                    F = f.get("colCount", t) / t;
                    J = f.get("rowCount", 1)
                } else if (this.r9(a, f)) {
                    F = Math.ceil(s / g.bo());
                    J = Math.ceil(K / g.bo())
                } else
                    J = F = 1;
                var B = [e.Na, e.qa, e.nb, e.mb, e.FRONT, e.BACK];
                return h.map(function (c, e) {
                    var h = Array(6);
                    B.forEach(function (g, k) {
                        var o = q.yY(d, f, g);
                        if (b.tb("TiledImageResourceLevel", f))
                            h[j.b1.indexOf(g)] = this.xja(o, a, c, g, p, F, J);
                        else {
                            var t = a == l.Ki ? 0 : Math.round((e * B.length + k) * s),
                            x = F > 1 || J > 1 || a != l.Ki ? s > 256 ? 1 : 0.5 : 0;
                            h[j.b1.indexOf(g)] = this.G3(o, F, J, t, 0, s, K, x)
                        }
                    }
                        .bind(this));
                    var g = Array.prototype.concat.apply([],
                            h),
                    t = j.Dba(F, J),
                    g = k.create(t, g);
                    g.layers.set(c);
                    o.xN(g, s / 90);
                    return g
                }
                    .bind(this))
            },
            Dja: function (a, b, d) {
                var e = a == l.$n ? [c.Un] : [c.qa, c.Na];
                b.get("flipImageHorizontally") && (e = e.reverse());
                var f = d.get("width"),
                h = d.get("height"),
                p = b.get("hfov"),
                q = b.get("vfov"),
                t = b.get("pitch"),
                s = Math.round(f / p / (h / q)),
                B = Math.round(f / s),
                O = Math.round(h / Math.round(h / q / (f / p))),
                N = (a = this.r9(a, d)) ? Math.ceil(B / g.bo()) : 1,
                I = a ? Math.ceil(O / g.bo()) : 1;
                return e.map(function (a, b) {
                    var c = this.G3(d, N, I, b % s * B, Math.floor(b / s) * O, B, O),
                    e = j.Eba(p,
                            q, t, N, I, 0, 0, 1, 1),
                    c = k.create(e, c);
                    c.layers.set(a);
                    o.xN(c, B / p);
                    return c
                }
                    .bind(this))
            },
            r9: function (a, b) {
                switch (a) {
                case l.xt:
                case l.rq:
                case l.zm:
                case l.ao:
                    return n;
                case l.Ki:
                    return y;
                case l.$n:
                    return t.vca().Ywa < Math.max(b.get("width"), b.get("height")) ? n : g.Fj() || t.Za() ? y : t.Uc() == t.bt ? n : y
                }
            },
            G3: function (a, b, c, e, f, g, j, k) {
                k || (k = 0);
                for (var l = [], q = 0; q < c; q++)
                    for (var t = f + k + (j - 2 * k) * q / c, s = f + k + (j - 2 * k) * (q + 1) / c, N = 0; N < b; N++) {
                        var I = e + k + (g - 2 * k) * N / b,
                        L = e + k + (g - 2 * k) * (N + 1) / b,
                        I = a ? new h(a, I, t, L - I, s - t) : new d,
                        L = p.gY(I.texture());
                        o.Xz(L, I);
                        l.push(L)
                    }
                return l
            },
            xja: function (a, b, c, e, h, g, j) {
                for (var k = [], l = 0; l < j; l++)
                    for (var t = 0; t < g; t++) {
                        var s;
                        s = a ? new f(q.rca(a, b, c, e, h, j, l, t)) : new d;
                        var O = p.gY(s.texture());
                        o.Xz(O, s);
                        O.visible = y;
                        k.push(O)
                    }
                return k
            }
        };
        return s
    });
    define("cC", "require,fg,ll,em,hS,eQ,hZ".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("em"),
        g = a("hS"),
        d = a("eQ"),
        f = a("hZ"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.Ub = a;
            this.set("tag", "SolidFrame");
            this.Ge = r
        });
        a.prototype.Qa = function () {
            this.Ge = (new g(c.S)).Hi(this.Ze.bind(this));
            e.prototype.Qa.call(this)
        };
        a.prototype.Sa = function () {
            this.Ge.dispose();
            e.prototype.Sa.call(this)
        };
        a.prototype.Vi = function () {
            var a = [d.Gua(this.Ub)];
            f.Pn(a, f.$k);
            f.On(a, f.Tj);
            this.Ge.yd(a);
            return a
        };
        a.prototype.Ze = function () {
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        return a
    });
    define("dg", ["require", "ge", "gW", "dv", "hZ"], function (a) {
        var b = a("ge"),
        c = a("gW"),
        e = a("dv"),
        g = a("hZ"),
        d = Math.PI / 180;
        return {
            wo: function () {
                this.set("distance", m);
                this.set("width", 100);
                this.set("height", 100);
                this.set("offsetX", m);
                this.set("offsetY", m);
                this.set("centerX", 0);
                this.set("centerY", 0);
                this.set("roll", 0);
                this.wf = this.Sq();
                this.oI = c.oz();
                this.Xi = new THREE.Matrix4;
                this.mx = new THREE.Matrix4;
                this.Jy = new THREE.Matrix4;
                this.I6 = new THREE.Matrix4;
                this.tg = new THREE.Matrix4;
                this.pi = new THREE.Matrix4;
                this.Tf =
                    new THREE.Matrix4
            },
            Dp: function (a) {
                this.Zl(a)
            },
            Nx: function () {
                var a = this.get("meshGroup");
                return a ? e.Gh(a)[0] : r
            },
            Vi: function () {
                var a = e.create(this.oI, this.vx());
                g.On(a, g.Tj);
                g.Pn(a, g.$k);
                g.Ts(a, b.Rw);
                g.Wz(a, 1);
                return [a]
            },
            Vi: function () {
                return [0].map(function (a) {
                    var c = this.vx(),
                    a = e.create(this.wf[a], c);
                    g.On(a, g.Tj);
                    g.Pn(a, g.$k);
                    g.Ts(a, b.Rw);
                    g.Wz(a, 1);
                    return a
                }
                    .bind(this))
            },
            Sq: function () {
                return [c.oz()]
            },
            Zl: function (a) {
                var b = y,
                g = y;
                this.set("rendererYaw", a.ma);
                this.set("rendererPitch", a.pitch);
                this.set("rendererRoll",
                    a.md);
                this.set("rendererCameraFOV", a.Gf);
                this.set("rendererWidth", a.width);
                this.set("rendererHeight", a.height);
                this.set("inVR", a.sb);
                this.p("distance", "composedTranslationX", "composedTranslationY", "composedTranslationZ") && this.set("z", 0 == this.get("composedTranslationX") && 0 == this.get("composedTranslationY") && 0 == this.get("composedTranslationZ") && this.get("distance") !== m ? c.Uv(this.get("distance")) : c.Np());
                this.p("z") && (this.Xi.makeTranslation(0, 0, -this.get("z")), g = n);
                a.Gf && this.p("z", "rendererCameraFOV") &&
                this.set("rendererHeightZ", 2 * Math.tan(0.5 * a.Gf * d) * this.get("z"));
                if (a.Jc && this.p("rendererYaw", "rendererPitch", "rendererRoll", "rendererCameraFOV", "rendererWidth", "rendererHeight", "rendererHeightZ", "inVR", "centerX", "centerY")) {
                    this.mx.copy(a.Jc.matrixWorld);
                    var b = this.get("rendererHeightZ"),
                    p = b * a.Jc.aspect,
                    p = 0.5 * ((this.get("centerX") - 0.5 * a.width) * p / a.width),
                    b = 0.5 * ((0.5 * a.height - this.get("centerY")) * b / a.height);
                    this.Jy.makeTranslation(p, b, 0);
                    b = n
                }
                this.p("roll") && (this.tg.makeRotationZ(this.get("roll") *
                        d), b = n);
                if (a.Gf && (g || this.p("rendererHeight", "inVR", "rendererHeightZ", "width", "height", "flipHorizontally")))
                    g = a.sb ? 512 / a.height : 1, a = (this.get("flipHorizontally") ? -1 : 1) * this.get("width") * g, g *= this.get("height"), this.pi.makeScale(a, g, 1), b = n;
                this.p("width", "height", "offsetX", "offsetY") && (a = 0.5 - this.get("offsetX") / this.get("width"), g = this.get("offsetY") / this.get("height") - 0.5, this.I6.makeTranslation(a, g, 0), b = n);
                b && (this.Tf.copy(this.mx), this.Tf.multiply(this.Xi), this.Tf.multiply(this.Jy), this.Tf.multiply(this.tg),
                    this.Tf.multiply(this.pi), this.Tf.multiply(this.I6), e.fm(this.get("meshGroup"), this.Tf))
            }
        }
    });
    define("jH", ["require", "fg", "eg", "dg"], function (a) {
        var b = a("fg"),
        c = a("eg"),
        a = a("dg");
        return b.extend(c, a, function () {
            c.call(this);
            this.set("tag", "Sprite")
        })
    });
    define("fl", ["require", "kA"], function (a) {
        function b(a, c, d, f, h, j) {
            this.Ak = c;
            this.u = document.createElement("canvas");
            this.u.width = this.Ak;
            this.u.height = this.Ak;
            switch (a) {
            case b.jA:
                this.lka(d, f, h, j);
                break;
            case b.AG:
                this.mka(d, f, h, j)
            }
        }
        var c = a("kA");
        b.prototype.ad = Q("Ak");
        b.prototype.Pd = Q("Ak");
        b.prototype.yg = Q("u");
        b.prototype.lka = function (a, b, d, f) {
            for (var h = 0.5 * this.Ak, j = 0.5 * this.Ak, p = 0.5 * this.Ak, k = this.u.getContext("2d"), b = c.CF(b), l = k.createRadialGradient(h, j, 0, h, j, p), q = 0; q < d.length; q++)
                l.addColorStop(f[q],
                    "rgba(" + b[0] + "," + b[1] + "," + b[2] + "," + d[q] + ")");
            k.fillStyle = l;
            k.globalAlpha = a;
            k.beginPath();
            k.arc(h, j, p, 0, 2 * Math.PI, n);
            k.closePath();
            k.fill()
        };
        b.prototype.mka = function (a, b, d, f) {
            var h = 0.5 * this.Ak,
            j = 0.5 * this.Ak,
            p = 0.5 * this.Ak,
            k = this.u.getContext("2d");
            k.clearRect(0, 0, this.Ak, this.Ak);
            for (var l = c.CF(b), q = k.createRadialGradient(h, j, 0, h, j, p), b = 0; b < d.length; b++)
                q.addColorStop(f[b], "rgba(" + l[0] + "," + l[1] + "," + l[2] + "," + d[b] + ")");
            k.fillStyle = q;
            k.globalAlpha = a;
            k.beginPath();
            for (b = 0; 6 > b; b++)
                d = 45 * Math.PI / 180 + 2 * Math.PI *
                    b / 6, a = h + Math.cos(d) * p, d = j + Math.sin(d) * p, 0 == b ? k.moveTo(a, d) : k.lineTo(a, d);
            k.closePath();
            k.fill()
        };
        b.jA = "circle";
        b.AG = "hexagon";
        return b
    });
    define("ko", "require,fg,ih,ll,cU,gU,cC,jH,fl,dX".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("cU"),
        d = a("gU"),
        f = a("cC"),
        h = a("jH"),
        j = a("fl"),
        p = a("dX"),
        a = b.extend(d, function (a) {
            d.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.Xd = this.Xd.bind(this);
            this.set("tag", "LensFlare");
            this.set("translationAlpha", 0);
            this.VP = this.mja();
            this.Fd = this.Sja();
            this.jf(this.VP.concat([this.Fd]))
        });
        a.prototype.Qa = function () {
            d.prototype.Qa.call(this);
            this.trigger(e.Lb);
            this.trigger(e.S);
            c.Eb(this.j, ["yaw",
                    "pitch", "bleaching", "bleachingDistance"], this.Xd, n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j, ["yaw", "pitch", "bleaching", "bleachingDistance"], this.Xd, n);
            d.prototype.Sa.call(this)
        };
        a.prototype.Xd = function () {
            this.set("yaw", this.j.get("yaw"));
            this.set("pitch", this.j.get("pitch"));
            this.set("bleaching", this.j.get("bleaching"));
            this.set("bleachingDistance", this.j.get("bleachingDistance"))
        };
        a.prototype.L = function (a) {
            d.prototype.L.call(this, a);
            this.set("rendererYaw", a.ma);
            this.set("rendererPitch", a.pitch);
            this.set("rendererRoll",
                a.md);
            this.set("rendererCameraFOV", a.Gf);
            this.set("rendererWidth", a.width);
            this.set("rendererHeight", a.height);
            this.set("inVR", a.sb);
            if (this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                var b = this.get("composedTranslationX"),
                c = this.get("composedTranslationY"),
                e = this.get("composedTranslationZ");
                this.set("translationAlpha", Math.max(0, 1 - Math.sqrt(b * b + c * c + e * e) * 10))
            }
            if (this.p("rendererYaw", "rendererPitch", "rendererRoll", "rendererCameraFOV", "rendererWidth", "rendererHeight", "inVR",
                    "yaw", "pitch", "translationAlpha", "composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll")) {
                var f = a.ma + this.get("composedDeltaYaw"),
                h = a.pitch + this.get("composedDeltaPitch"),
                j = a.md + this.get("composedDeltaRoll"),
                b = this.get("translationAlpha"),
                e = c = 0,
                p,
                x,
                z,
                C;
                if (!a.sb)
                    if (f = g.get(this.get("yaw"), this.get("pitch"), f, h, j, a.Gf, a.width, a.height)) {
                        x = a.width * 0.5;
                        C = a.height * 0.5;
                        p = f.x;
                        z = f.y;
                        x = (x - p) * 2;
                        C = (C - z) * 2;
                        e = Math.sqrt(x * x + C * C);
                        c = Math.sqrt(a.width * a.width, a.height * a.height);
                        a = Math.min(a.width, a.height);
                        c =
                            Math.max(0, Math.min(0.7, 1 - e / c)) * b;
                        f = this.get("bleaching");
                        a = 1 - Math.max(0, Math.min(1, e / (a * this.get("bleachingDistance"))));
                        e = f * a * b
                    }
                for (a = 0; a < this.VP.length; a++) {
                    b = this.VP[a];
                    b.set("alpha", c);
                    if (c > 0) {
                        b.set("centerX", p + x * k[a].position);
                        b.set("centerY", z + C * k[a].position)
                    }
                }
                this.Fd.set("alpha", e)
            }
        };
        a.prototype.mja = function () {
            return k.map(function (a) {
                var b = (new j(a.form, a.yw, a.opacity, a.color, a.Yv, a.Zv)).yg(),
                c = new p;
                c.Di(b);
                b = new h;
                b.set("textureSource", c);
                b.set("width", a.size);
                b.set("height", a.size);
                b.set("offsetX",
                    a.size * 0.5);
                b.set("offsetY", a.size * 0.5);
                b.set("alpha", 0);
                return b
            })
        };
        a.prototype.Sja = function () {
            return new f("#ffffff")
        };
        var k = [{
                form: j.AG,
                position: 0.1,
                size: 52,
                yw: 128,
                opacity: 0.8,
                color: "#FCFCFC",
                Yv: [1, 0.5],
                Zv: [0, 0.866]
            }, {
                form: j.AG,
                position: 0.2,
                size: 52,
                yw: 128,
                opacity: 0.6,
                color: "#C8FCC8",
                Yv: [1, 0.5],
                Zv: [0, 0.866]
            }, {
                form: j.jA,
                position: 0.36,
                size: 112,
                yw: 128,
                opacity: 0.5,
                color: "#C8C8FC",
                Yv: [1, 0.9, 0.6, 0],
                Zv: [0, 0.2, 0.4, 1]
            }, {
                form: j.jA,
                position: 0.47,
                size: 32,
                yw: 128,
                opacity: 0.3,
                color: "#96C8AF",
                Yv: [1, 1, 0],
                Zv: [0,
                    0.9, 1]
            }, {
                form: j.jA,
                position: 0.65,
                size: 52,
                yw: 128,
                opacity: 0.7,
                color: "#FCFCFC",
                Yv: [0.7, 0.7, 0.2, 0],
                Zv: [0, 0.1, 0.4, 1]
            }, {
                form: j.AG,
                position: 0.88,
                size: 128,
                yw: 128,
                opacity: 0.4,
                color: "#AF96C8",
                Yv: [1, 0.5],
                Zv: [0, 0.866]
            }, {
                form: j.jA,
                position: 1,
                size: 33,
                yw: 128,
                opacity: 0.8,
                color: "#C89696",
                Yv: [0.8, 0.8, 0.6, 0],
                Zv: [0, 0.2, 0.4, 1]
            }
        ];
        return a
    });
    define("bA", ["require", "dK"], function (a) {
        function b(a, b, h) {
            g.style.fontFamily = e.Fs(b.fontFamily);
            g.style.fontSize = b.fontSize;
            g.style.fontWeight = b.fontWeight;
            g.style.fontStyle = b.fontStyle;
            g.innerHTML = a;
            document.body.appendChild(g);
            var j = new c(Math.ceil(g.clientWidth), Math.ceil(g.clientHeight));
            document.body.removeChild(g);
            h && (h.font = b.fontSize + " " + e.Fs(b.fontFamily), a = h.measureText(a).width, j.height *= a / j.width, j.width = a);
            return j
        }
        function c(a, b) {
            this.width = a;
            this.height = b
        }
        var e = a("dK"),
        g = document.createElement("div");
        g.style.display = "inline-block";
        g.style.margin = 0;
        g.style.padding = 0;
        g.style.whiteSpace = "nowrap";
        b.Y0 = function () {
            this.fontFamily = "Arial";
            this.fontSize = "12px";
            this.fontWeight = "400";
            this.fontStyle = "normal"
        };
        b.wAa = c;
        return b
    });
    define("kj", ["require", "bA", "dK"], function (a) {
        function b(a, b) {
            this.Fa = a;
            this.u8 = 5;
            this.Pc = b.map(function (b) {
                return new c(a, b)
            });
            this.Zx = this.$x = this.Rh = this.Ce = 0;
            this.dX();
            this.u = document.createElement("canvas");
            this.u.width = this.Ce;
            this.u.height = this.Rh;
            this.ka = this.u.getContext("2d");
            this.Z = n;
            this.td = this.n8 = -1
        }
        function c(a, b) {
            this.ew = a;
            this.item = b;
            this.label = b.get("label");
            this.fontFamily = this.ew.get("fontFamily", "Arial");
            this.fontSize = "12px";
            this.backgroundColor = this.ew.get("backgroundColor",
                    "#000000");
            this.fea = this.ew.get("rollOverBackgroundColor", this.backgroundColor);
            this.Wxa = this.ew.get("selectedBackgroundColor", this.fea);
            this.Qba = this.ew.get("fontColor", "#000000");
            this.gea = this.ew.get("rollOverFontColor", b.Qba);
            this.Xxa = this.ew.get("selectedFontColor", b.gea);
            this.Yea = this.Xea = this.Zea = this.$ea = this.height = this.width = this.left = this.top = 0;
            this.status = y;
            this.XY = n
        }
        var e = a("bA"),
        g = a("dK");
        c.prototype.Tza = function () {
            var a = new e.Y0;
            a.fontFamily = this.fontFamily;
            a.fontSize = this.fontSize;
            a = e(this.label, a);
            this.$ea = a.width;
            this.Zea = a.height
        };
        c.prototype.fza = function (a) {
            this.status != a && (this.status = a, this.XY = n)
        };
        c.prototype.Qua = function (a) {
            if (this.XY) {
                this.XY = y;
                var b,
                c;
                switch (this.status) {
                case "normal":
                    b = this.backgroundColor;
                    c = this.Qba;
                    break;
                case "over":
                    b = this.fea;
                    c = this.gea;
                    break;
                case "selected":
                    b = this.Wxa,
                    c = this.Xxa
                }
                a.clearRect(this.left, this.top, this.width, this.height);
                a.fillStyle = b;
                a.fillRect(this.left, this.top, this.width, this.height);
                a.fillStyle = c;
                a.font = this.fontSize + " '" + this.fontFamily +
                    "'";
                a.font = this.fontSize + (isNaN(this.fontSize) ? "" : "px") + " " + g.Fs(this.fontFamily);
                a.textBaseline = "middle";
                a.textAlign = "center";
                a.fillText(this.label, Math.round(this.Xea), Math.round(this.Yea));
                return n
            }
            return y
        };
        b.prototype.ad = Q("Ce");
        b.prototype.Pd = Q("Rh");
        b.prototype.yg = Q("u");
        b.prototype.dX = function () {
            var a = 0,
            b = 0;
            this.Pc.forEach(function (c) {
                c.Tza();
                a = Math.max(c.$ea, a);
                b = Math.max(c.Zea, b)
            });
            this.$x = a + 2 * this.u8;
            this.Zx = b + 2 * this.u8;
            var c = 0,
            e = 0,
            g = 0;
            this.Pc.forEach(function (a) {
                20 <= g && (g = 0, e += this.$x,
                    c = 0);
                a.left = e;
                a.top = c;
                a.Xea = e + 0.5 * this.$x;
                a.Yea = c + 0.5 * this.Zx;
                a.width = this.$x;
                a.height = this.Zx;
                g += 1;
                c += this.Zx
            }
                .bind(this));
            this.Ce = Math.ceil(this.Pc.length / 20) * this.$x;
            this.Rh = Math.min(20, this.Pc.length) * this.Zx
        };
        b.prototype.update = function () {
            for (var a = y, b = 0; b < this.Pc.length; b++)
                this.Pc[b].fza(this.n8 == b ? "over" : this.td == b ? "selected" : "normal"), a = this.Pc[b].Qua(this.ka) || a;
            return a
        };
        b.prototype.aca = function (a, b) {
            var c = -1;
            0 <= a && a < this.Ce && 0 <= b && b < this.Rh && (c = 20 * Math.floor(a / this.$x) + Math.floor(b / this.Zx),
                c >= this.Pc.length && (c = -1));
            return c
        };
        b.prototype.ZZ = P("n8");
        b.prototype.d_ = P("td");
        b.prototype.clear = function () {
            this.Pc = this.u = this.ka = this.Fa = r
        };
        return b
    });
    define("eE", "require,fg,ih,ll,hk,kj,dX,kX,bq,bi".split(","), function (a) {
        function b(a, b) {
            var c = (b - a) * 0.98;
            Math.abs(c) < 1.0E-5 && (c = 0);
            return b - c
        }
        var c = a("fg"),
        e = a("ih"),
        g = a("ll"),
        d = a("hk"),
        f = a("kj"),
        h = a("dX"),
        j = a("kX"),
        p = a("bq");
        VR = a("bi");
        a = c.extend(d, function (a) {
            d.call(this);
            this.Fa = a;
            this.Bl = this.Bl.bind(this);
            this.gp = this.u = r;
            this.xp = this.xj = this.aV = this.lp = m;
            this.V2 = 20;
            this.ae = r;
            this.Bb = this.Fa.get("opacity", 0.5);
            this.VC = this.Fa.get("rollOverOpacity", this.Bb);
            this.tna = 1;
            this.vna = 0.66;
            this.set("tag",
                "MenuButton");
            this.set("visible", y);
            this.set("over", y);
            this.set("centerDistance", m)
        });
        a.prototype.Qa = function () {
            d.prototype.Qa.call(this);
            e.Eb(this.Fa, ["label"], this.Bl, n)
        };
        a.prototype.Sa = function () {
            e.Pb(this.Fa, ["label"], this.Bl);
            d.prototype.Sa.call(this)
        };
        a.prototype.Bl = function () {
            this.u = r
        };
        a.prototype.L = function (a) {
            this.Cp(a);
            this.vg(a);
            this.nE(a);
            this.Ne(a);
            this.Fp(a);
            d.prototype.L.call(this, a)
        };
        a.prototype.Cp = function (a) {
            if (a.sb && !this.gp && VR.wd() == VR.vA.Oj)
                this.jf([this.gp = new d])
        };
        a.prototype.vg =
        function () {
            if (this.get("visible")) {
                if (!this.u) {
                    this.get("textureSource") || this.set("textureSource", new h);
                    this.u = new f(this.Fa, [this.Fa]);
                    this.get("textureSource").Di(this.u.yg());
                    this.set("contentWidth", this.u.ad());
                    this.set("contentHeight", this.u.Pd());
                    this.set("hfov", 2 * Math.atan2(this.u.ad() * 0.5, 300) * l);
                    this.set("distance", this.Fa.get("distance"))
                }
                if (this.u.update()) {
                    this.get("textureSource").update();
                    this.Ia()
                }
                this.p("over") && this.u.ZZ(this.get("over") ? 0 : -1)
            }
        };
        a.prototype.nE = function (a) {
            if (this.p("visible"))
                this.ae =
                    new j("linear", [new p("displayCoef", this.get("visible") ? 0 : 1, this.get("visible") ? 1 : 0, m)], 300);
            if (this.ae)
                this.ae.Re() ? this.ae = r : this.ae.fb(a.vd)
        };
        a.prototype.Ne = function (a) {
            if (this.get("visible") || this.ae) {
                this.xj = a.ma;
                this.xp = Math.min(90, Math.max(-90, this.V2 + this.V2 - a.pitch));
                if (this.p("visible") && this.get("visible")) {
                    this.set("yaw", a.ma);
                    this.set("pitch", a.pitch)
                } else {
                    for (; this.xj + 180 < this.lp; )
                        this.lp = this.lp - 360;
                    for (; this.xj - 180 > this.lp; )
                        this.lp = this.lp + 360;
                    var c = (this.xj - this.lp) / a.vd,
                    d = (this.xp -
                        this.aV) / a.vd,
                    e = Math.atan2(d, c),
                    d = Math.sqrt(d * d + c * c),
                    d = Math.min(d, 10 * k),
                    c = Math.cos(e) * d,
                    e = Math.sin(e) * d;
                    this.set("yaw", b(this.get("yaw"), this.xj + c));
                    this.set("pitch", b(this.get("pitch"), this.xp + e))
                }
                this.lp = this.xj;
                this.aV = this.xp;
                e = this.get("yaw") - a.ma;
                a = this.get("pitch") - a.pitch;
                this.set("centerDistance", Math.sqrt(e * e + a * a))
            }
        };
        a.prototype.Fp = function () {
            if (!this.get("visible") && !this.ae)
                this.set("alpha", 0);
            else if (this.p("over", "centerDistance") || this.ae) {
                var a = this.get("over") ? this.VC : this.Bb,
                b = this.vna,
                c = this.get("centerDistance") / this.get("hfov");
                if (c < 1) {
                    b = b + (1 - c) * (this.tna - b);
                    a = a + (1 - c) * (this.VC - a)
                }
                if (this.ae) {
                    a = a * this.ae.Fb("displayCoef");
                    b = b * this.ae.Fb("displayCoef")
                }
                this.set("alpha", a);
                this.set("scale", b)
            }
        };
        a.prototype.Lj = function (a) {
            if (a.Vd == g.Nh) {
                var b = y;
                this.get("visible") && !a.Eh() && (b = this.Go(a.Ol).length > 0);
                if (b) {
                    a.xs(this.Fa);
                    a.ys(this.Fa);
                    a.vi(this.get("distance"))
                }
                if (this.get("over") != b) {
                    this.get("over") && this.Fa.trigger(g.Qb);
                    this.set("over", b);
                    this.get("over") && this.Fa.trigger(g.xc)
                }
            } else if (a.Vd ==
                g.Li && this.get("visible") && !a.Eh() && this.Go(a.Ol).length > 0) {
                a.dq(this.Fa);
                this.Fa.trigger(g.U);
                this.trigger(g.U)
            }
        };
        var k = Math.PI / 180,
        l = 180 / Math.PI;
        return a
    });
    define("hn", "require,fg,ih,ll,hk,kj,dX,kX,bq,bi".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("hk"),
        d = a("kj"),
        f = a("dX"),
        h = a("kX"),
        j = a("bq"),
        p = a("bi"),
        a = b.extend(g, function (a, b) {
            g.call(this);
            this.Fa = a;
            this.Er = b;
            this.Bl = this.Bl.bind(this);
            this.u = r;
            this.aV = this.lp = m;
            this.ae = r;
            this.Bb = this.Fa.get("opacity", 0.5);
            this.VC = this.Fa.get("rollOverOpacity", this.Bb);
            this.set("textureSource", new f);
            this.set("tag", "MenuPanel");
            this.set("overIndex", -1);
            this.set("selectedIndex", -1);
            this.U3 = y
        });
        a.prototype.Qa =
        function () {
            g.prototype.Qa.call(this);
            c.Eb(this.Fa, ["label"], this.Bl, n);
            this.Er.forEach(function (a) {
                c.Eb(a, ["label"], this.Bl, n)
            }
                .bind(this))
        };
        a.prototype.Sa = function () {
            c.Pb(this.Fa, ["label"], this.Bl, n);
            this.Er.forEach(function (a) {
                c.Pb(a, ["label"], this.Bl, n)
            }
                .bind(this));
            g.prototype.Sa.call(this)
        };
        a.prototype.Bl = function () {
            this.u = r
        };
        a.prototype.L = function (a) {
            this.Cp(a);
            this.vg(a);
            this.nE(a);
            this.Ne(a);
            g.prototype.L.call(this, a)
        };
        a.prototype.pja = function () {
            if (!this.u) {
                this.u = new d(this.Fa, this.Er);
                this.get("textureSource").Di(this.u.yg());
                this.set("contentWidth", this.u.ad());
                this.set("contentHeight", this.u.Pd());
                this.set("hfov", 2 * Math.atan2(this.u.ad() * 0.5, 300) * k);
                this.set("distance", this.Fa.get("distance"))
            }
        };
        a.prototype.vg = function () {
            this.u || this.pja();
            this.p("selectedIndex") && this.u.ZZ(this.get("selectedIndex"));
            this.p("overIndex") && this.u.ZZ(this.get("overIndex"));
            if (this.u.update()) {
                this.get("textureSource").update();
                this.Ia()
            }
        };
        a.prototype.Cp = function (a) {
            if (a.sb && !this.gp && p.wd() == p.vA.Oj)
                this.jf([this.gp = new g])
        };
        a.prototype.nE =
        function (a) {
            if (!this.ae && !this.U3)
                this.ae = new h("linear", [new j("alpha", 0, 1, m), new j("scale", 0, 1, m), new j("yaw", a.ma, this.get("yaw"), m), new j("pitch", a.pitch, this.get("pitch"), m)], 300);
            if (this.ae)
                if (this.ae.Re()) {
                    this.U3 = n;
                    this.ae = r
                } else
                    this.ae.fb(a.vd)
        };
        a.prototype.Ne = function () {
            if (this.ae) {
                var a = this.get("overIndex") < 0 ? this.Bb : this.VC;
                this.set("alpha", a * this.ae.Fb("alpha"));
                this.set("scale", this.ae.Fb("scale"));
                this.set("yaw", this.ae.Fb("yaw"));
                this.set("pitch", this.ae.Fb("pitch"))
            } else if (this.p("overIndex")) {
                a =
                    this.get("overIndex") < 0 ? this.Bb : this.VC;
                this.set("alpha", a)
            }
        };
        a.prototype.Lj = function (a) {
            if (a.Vd == e.Nh) {
                var b = -1;
                if (!a.Eh()) {
                    var c = this.Go(a.Ol).filter(function (a) {
                        return a.source == this.u.yg()
                    }
                            .bind(this));
                    c.length > 0 && (b = this.u.aca(c[0].x, c[0].y))
                }
                if (b >= 0) {
                    a.xs(this.Er[b]);
                    a.ys(this.Er[b]);
                    a.vi(this.get("distance"))
                }
                this.get("overIndex") >= 0 != b >= 0 && (b > 0 ? this.trigger(e.xc) : this.trigger(e.Qb));
                if (this.get("overIndex") != b) {
                    this.get("overIndex") >= 0 && this.Er[this.get("overIndex")].trigger(e.Qb);
                    this.set("overIndex",
                        b);
                    this.get("overIndex") >= 0 && this.Er[this.get("overIndex")].trigger(e.xc)
                }
            } else if (a.Vd == e.Li && !a.Eh()) {
                c = this.Go(a.Ol).filter(function (a) {
                    return a.source == this.u.yg()
                }
                        .bind(this));
                if (c.length > 0) {
                    b = this.u.aca(c[0].x, c[0].y);
                    if (b >= 0) {
                        c = this.Er[b];
                        this.set("selectedIndex", b);
                        a.dq(c);
                        a.vi(this.get("distance"));
                        c.trigger(e.U);
                        this.trigger(e.U, {
                            item: c
                        })
                    }
                }
            }
        };
        var k = 180 / Math.PI;
        return a
    });
    define("iH", ["require", "fg", "ll", "gU", "hn"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("gU"),
        g = a("hn"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.Fa = a;
            this.Rr = [];
            this.oy = r;
            this.set("tag", "MenuPanels");
            this.set("visible", y)
        });
        a.prototype.L = function (a) {
            this.p("visible") && this.get("visible") && (this.set("yaw", a.ma), this.set("pitch", a.pitch), this.i2(this.Fa));
            e.prototype.L.call(this, a)
        };
        a.prototype.i2 = function (a) {
            var a = new g(this.Fa, a.get("children", [])),
            b = this.get("yaw");
            this.Pa().forEach(function (a) {
                b +=
                a.get("hfov") + f
            });
            a.set("yaw", b);
            a.set("pitch", this.get("pitch"));
            this.mha(a);
            this.appendChild(a)
        };
        a.prototype.m9 = function (a) {
            this.Pa().slice(a).forEach(function (a) {
                this.Qpa(a);
                a.remove()
            }
                .bind(this));
            this.Rr = this.Rr.filter(function (a) {
                return 0 <= this.Pa().indexOf(a)
            }
                    .bind(this))
        };
        a.prototype.mha = function (a) {
            a.bind(c.xc, this.z8, this, n);
            a.bind(c.Qb, this.y8, this, n);
            a.bind(c.U, this.x8, this, n)
        };
        a.prototype.Qpa = function (a) {
            a.unbind(c.xc, this.z8, this, n);
            a.unbind(c.Qb, this.y8, this, n);
            a.unbind(c.U, this.x8,
                this, n)
        };
        a.prototype.z8 = function (a) {
            0 > this.Rr.indexOf(a.source) && (this.Rr.push(a.source), 1 == this.Rr.length && this.l3())
        };
        a.prototype.y8 = function (a) {
            a = this.Rr.indexOf(a.source);
            0 <= a && (this.Rr.splice(a, 1), 0 == this.Rr.length && this.Zqa())
        };
        a.prototype.x8 = function (a) {
            var b = a.source,
            a = a.data.item;
            a.get("children", []).length ? (this.m9(this.Pa().indexOf(b) + 1), this.i2(a)) : this.p3()
        };
        a.prototype.p3 = function () {
            this.set("visible", y);
            this.m9(0);
            this.l3();
            this.trigger(c.ct)
        };
        a.prototype.l3 = function () {
            this.oy && (clearTimeout(this.oy),
                this.oy = r)
        };
        a.prototype.Zqa = function () {
            this.oy || (this.oy = setTimeout(function () {
                    this.oy = r;
                    this.p3()
                }
                        .bind(this), d))
        };
        var d = 3E3,
        f = 1;
        return a
    });
    define("eI", "require,fg,ll,gU,eE,iH".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("gU"),
        g = a("eE"),
        d = a("iH"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.set("tag", "Menu");
            this.set("visible", y);
            this.yc = new g(this.j);
            this.yc.bind(c.U, this.eia, this, y);
            this.zf = new d(this.j);
            this.zf.bind(c.ct, this.Voa, this, y);
            this.jf([this.yc, this.zf])
        });
        a.prototype.Qa = function () {
            e.prototype.Qa.call(this);
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        a.prototype.L = function (a) {
            this.set("visible",
                a.sb);
            if (this.p("visible")) {
                this.yc.set("visible", this.get("visible"));
                this.zf.set("visible", y)
            }
            e.prototype.L.call(this, a)
        };
        a.prototype.eia = function () {
            this.yc.set("visible", y);
            this.zf.set("visible", n)
        };
        a.prototype.Voa = function () {
            this.yc.set("visible", this.get("visible"))
        };
        return a
    });
    define("lg", "require,fg,ll,hk,dX,hS,iL".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("hk"),
        g = a("dX"),
        d = a("hS"),
        f = a("iL"),
        a = b.extend(e, function () {
            e.call(this);
            this.set("tag", "CustomPlane");
            this.set("source", r);
            this.set("sourceUpdated", y);
            this.rc = this.Ge = r
        });
        a.prototype.Qa = function () {
            this.Ge = (new d(c.S)).Hi(this.Al.bind(this));
            this.rc = (new d(c.S)).Nk(this.ep.bind(this));
            e.prototype.Qa.call(this)
        };
        a.prototype.Sa = function () {
            this.Ge.dispose();
            this.rc.dispose();
            e.prototype.Sa.call(this)
        };
        a.prototype.L =
        function (a) {
            if (this.p("source", "sourceUpdated", "useMipmapping", "anisotropy")) {
                var b = this.get("textureSource");
                b || this.set("textureSource", b = new g);
                this.p("source") && b.Di(this.get("source"));
                this.p("sourceUpdated") && (b.update(), this.set("sourceUpdated", y));
                this.p("useMipmapping") && b.KN(this.get("useMipmapping"), this.get("anisotropy"))
            }
            e.prototype.L.call(this, a);
            if (this.p("meshGroup")) {
                a = (a = this.get("meshGroup")) && a.children || [];
                if (a.length) {
                    this.Ge.yd(a);
                    this.rc.yd(a)
                }
            }
        };
        a.prototype.Al = function () {
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        a.prototype.ep = function (a, b) {
            var d = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (d = d + a.Kh)
            });
            this.trigger(new f(c.wc, d / b.Yc.length))
        };
        return a
    });
    define("hu", ["require"], function () {
        function a(a) {
            this.Ub = this.FB(a.get("surfaceReticleColor"));
            this.bn = this.FB(a.get("surfaceReticleSelectionColor"));
            this.Bb = a.get("surfaceReticleOpacity");
            this.H9 = a.get("surfaceReticleSelectionOpacity");
            this.Rh = this.Ce = 128;
            this.Poa = 0.456;
            this.Qoa = 0.088;
            this.Ema = 0.18;
            this.u = document.createElement("canvas");
            this.u.width = this.Ce;
            this.u.height = this.Rh;
            this.ka = this.u.getContext("2d");
            this.ka.fillStyle = "red";
            this.ka.pwa = n;
            this.ka.fillRect(0, 0, this.Ce, this.Rh);
            this.Wf = this.tQ =
                y;
            this.by = this.SJ = m;
            this.Ht = 0
        }
        a.prototype.gS = function (a) {
            return this.xk(this.bn[0] * a + (1 - a) * this.Ub[0], this.bn[1] * a + (1 - a) * this.Ub[1], this.bn[2] * a + (1 - a) * this.Ub[2], this.H9 * a + (1 - a) * this.Bb)
        };
        a.prototype.FB = function (a) {
            a = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
            return [parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16)]
        };
        a.prototype.xk = function (a, c) {
            return "rgba(" + a.join(",") + ", " + c + ")"
        };
        a.prototype.Ka = function (a) {
            this.va != a && (this.va = a, this.Z = n)
        };
        a.prototype.ad = Q("Ce");
        a.prototype.Pd = Q("Rh");
        a.prototype.yg = Q("u");
        a.prototype.update = function () {
            if (!this.Z)
                return y;
            this.Z = y;
            this.ka.clearRect(0, 0, this.Ce, this.Rh);
            var a = [this.bn[0] * this.va + (1 - this.va) * this.Ub[0], this.bn[1] * this.va + (1 - this.va) * this.Ub[1], this.bn[2] * this.va + (1 - this.va) * this.Ub[2]],
            c = this.H9 * this.va + (1 - this.va) * this.Bb;
            this.ka.strokeStyle = this.xk(a, c);
            this.ka.fillStyle = this.xk(a, c * this.va);
            this.ka.beginPath();
            this.ka.lineWidth = this.Ce * this.Qoa;
            this.ka.arc(0.5 * this.Ce, 0.5 * this.Ce, this.Ce * this.Poa, 0, 2 * Math.PI, y);
            this.ka.stroke();
            this.ka.beginPath();
            this.ka.arc(0.5 * this.Ce, 0.5 * this.Ce, this.Ce * this.Ema, 0, 2 * Math.PI, y);
            this.ka.fill();
            return n
        };
        return a
    });
    define("fw", "require,fg,ih,ll,gW,gU,lg,hu,cB,fJ".split(","), function (a) {
        function b(a, b, c) {
            this.hN = a;
            this.hN.bind(g.D("distanceToFloor"), this.L, this, y);
            this.Xg = b;
            this.Xg.bind(g.D("yaw"), this.L, this, y);
            this.Xg.bind(g.D("distance"), this.L, this, y);
            this.Xg.bind(g.D("enabled"), this.L, this, y);
            this.Xg.bind(g.D("enabledInSurfaceSelection"), this.L, this, y);
            this.va = r;
            this.Ci = new h;
            this.Ci.set("hfov", 20);
            this.Ci.set("vfov", 20);
            this.Ci.set("pitch", -90);
            this.Ci.set("useMipmapping", n);
            this.Ci.set("anisotropy", 16);
            this.Ci.set("source", c.yg());
            this.Ci.set("contentWidth", c.ad());
            this.Ci.set("contentHeight", c.Pd());
            this.L()
        }
        var c = a("fg"),
        e = a("ih"),
        g = a("ll"),
        d = a("gW"),
        f = a("gU"),
        h = a("lg"),
        j = a("hu"),
        p = a("cB"),
        k = a("fJ"),
        a = c.extend(f, function (a) {
            f.call(this);
            this.zJ = this.zJ.bind(this);
            this.Sm = this.Sm.bind(this);
            this.xJ = this.xJ.bind(this);
            this.set("tag", "SurfaceSelector");
            this.set("reticleVisible", y);
            this.set("enabled", y);
            this.N = a;
            this.ZG = [];
            this.tB = new k;
            this.Je = new p;
            this.Nb = new h;
            this.Nb.set("useMipmapping", n);
            this.Nb.set("anisotropy",
                16);
            this.Nb.set("hfov", 20);
            this.Nb.set("vfov", 20);
            this.Nb.set("pitch", -90);
            this.set("reticleCoef", 1);
            this.jf([this.Nb])
        });
        a.prototype.Qa = function () {
            this.Ija();
            f.prototype.Qa.call(this);
            e.Eb(this.N, ["distanceToFloor"], this.zJ, n);
            e.Eb(this.N, ["adjacentPanoramas"], this.Sm, n);
            e.Eb(this.Va.Vb, ["adjacentPanoramaPositionsEnabled"], this.xJ, n);
            this.trigger(g.Lb);
            this.trigger(g.S)
        };
        a.prototype.Sa = function () {
            f.prototype.Sa.call(this);
            e.Pb(this.N, ["distanceToFloor"], this.zJ);
            e.Pb(this.N, ["adjacentPanoramas"],
                this.Sm);
            e.Pb(this.Va.Vb, ["adjacentPanoramaPositionsEnabled"], this.xJ);
            this.O9([])
        };
        a.prototype.zJ = function () {
            var a = this.N.get("distanceToFloor");
            this.Nb.set("distance", a);
            var a = d.Uv(a),
            b = d.IY(a, 90),
            c = d.JY(a, 90);
            this.tB.Sd.set(-b * 0.5, -a, -c * 0.5);
            this.tB.Ag.set(b * 0.5, -a, -c * 0.5);
            this.tB.Ns.set(-b * 0.5, -a, c * 0.5);
            this.u9 = a / d.Np()
        };
        a.prototype.Sm = function () {
            this.O9(this.N.get("adjacentPanoramas", []))
        };
        a.prototype.xJ = function () {
            this.Sm()
        };
        a.prototype.O9 = function (a) {
            this.ZG.forEach(function (a) {
                a.clear()
            });
            this.ZG = a.map(function (a) {
                return new b(this.N, a, this.WU)
            }
                    .bind(this));
            a = [];
            this.Va.Vb.get("adjacentPanoramaPositionsEnabled") && (a = a.concat(this.ZG.map(function (a) {
                            return a.Ci
                        })));
            a = a.concat([this.Nb]);
            this.jf(a)
        };
        a.prototype.L = function (a) {
            f.prototype.L.call(this, a);
            this.set("enabled", a.XF);
            this.rX(a);
            this.ts(a)
        };
        a.prototype.rX = function () {
            if (this.p("enabled", "reticleVisible", "composedTranslationX", "composedTranslationY", "composedTranslationZ", "composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll")) {
                this.Nb.set("alpha",
                    this.get("reticleVisible") ? 1 : 0);
                this.set("alpha", this.get("enabled") && !this.get("composedTranslationX") && !this.get("composedTranslationY") && !this.get("composedTranslationZ") && !this.get("composedDeltaYaw") && !this.get("composedDeltaPitch") && !this.get("composedDeltaRoll") ? 1 : 0);
                this.zaa()
            }
        };
        a.prototype.Ija = function () {
            this.Gy = new j(this.Va.C);
            this.Gy.Ka(this.get("reticleCoef"));
            this.Nb.set("source", this.Gy.yg());
            this.Nb.set("contentWidth", this.Gy.ad());
            this.Nb.set("contentHeight", this.Gy.Pd());
            this.WU =
                new j(this.Va.C);
            this.WU.Ka(0);
            this.WU.update(1)
        };
        a.prototype.ts = function (a) {
            this.p("reticleCoef") && this.Gy.Ka(this.get("reticleCoef"));
            this.Nb.set("sourceUpdated", this.Gy.update(a.vd))
        };
        a.prototype.Lj = function (a) {
            if (!this.get("enabled") || a.Ol.length == 0 || a.Eh() || a.kxa())
                this.set("reticleVisible", y);
            else {
                var b = a.Ol[0];
                this.Je.Sd.set(b.origin.x, b.origin.y, b.origin.z);
                this.Je.Ag.set(b.origin.x + b.direction.x, b.origin.y + b.direction.y, b.origin.z + b.direction.z);
                if (b = this.tB.intersection(this.Je, n)) {
                    var c =
                        this.tB.kN(b, n),
                    d = 2 * (0.5 - c.x),
                    c = 2 * (0.5 - c.y),
                    e = l * Math.atan2(-d, c),
                    f = -90 + l * Math.atan2(Math.sqrt(d * d + c * c), 1);
                    if (f < -75 || f > -1)
                        this.set("reticleVisible", y);
                    else {
                        var h = {
                            x: d * this.u9,
                            y: -c * this.u9
                        };
                        if (!a.Ms() && !a.hda())
                            this.set("reticleVisible", y);
                        else if (a.Vd == g.Nh) {
                            this.set("reticleVisible", n);
                            this.Nb.set("alpha", Math.min(1, (f - -75) / 5));
                            this.Nb.set("translationX", h.x);
                            this.Nb.set("translationZ", h.y)
                        }
                        var j = this.Va.Vb.get("surfaceSelectionHorizontalAngle") * 0.5,
                        k = this.Va.Vb.get("surfaceSelectionVerticalAngle") *
                            0.5,
                        c = this.ZG.map(function (a) {
                            var b = a.yva(e),
                            c = a.Vva(f),
                            d = a.wY(h);
                            return {
                                Xg: a.Xg,
                                Rca: b,
                                ifa: c,
                                Lba: d
                            }
                        }).filter(function (a) {
                            return a.Rca < j && a.ifa < k
                        });
                        if (c.length == 0)
                            this.set("reticleCoef", 0);
                        else {
                            c.sort(function (a, b) {
                                return a.Lba - b.Lba
                            });
                            d = c[0].Xg;
                            this.set("reticleCoef", Math.max(0, Math.min(1, (1 - c[0].Rca / j) * (1 - c[0].ifa / k))));
                            b = this.N.get("distanceToFloor") * Math.sqrt(b.x * b.x + b.y * b.y + b.z * b.z) / -b.y;
                            a.hda() && a.cua([d]);
                            a.vi(b);
                            if (a.Vd == g.Li) {
                                a.dq([d]);
                                this.get("blendingActive") || d.trigger(g.Mi)
                            } else {
                                a.xs([d]);
                                a.Ms() && a.ys([d]);
                                (b = this.Va.C.get("displayTooltipInSurfaceSelection") && d.get("panorama") && d.get("panorama").get("label")) && a.cM(b, 0)
                            }
                        }
                    }
                } else
                    this.set("reticleVisible", y)
            }
        };
        b.prototype.clear = function () {
            this.hN.unbind(g.D("distanceToFloor"), this.L, this, y);
            this.hN = r;
            this.Xg.unbind(g.D("yaw"), this.L, this, y);
            this.Xg.unbind(g.D("distance"), this.L, this, y);
            this.Xg.unbind(g.D("enabled"), this.L, this, y);
            this.Xg.unbind(g.D("enabledInSurfaceSelection"), this.L, this, y);
            this.Xg = r
        };
        b.prototype.yva = function (a) {
            if (!this.va)
                return Infinity;
            a = Math.abs(this.va.ma - a);
            return a > 180 ? 360 - a : a
        };
        b.prototype.Vva = function (a) {
            return !this.va ? Infinity : Math.abs(this.va.pitch - a)
        };
        b.prototype.wY = function (a) {
            if (!this.Vy)
                return Infinity;
            var b = a.x - this.Vy.x,
            a = a.y - this.Vy.y;
            return Math.sqrt(b * b + a * a)
        };
        b.prototype.L = function () {
            var a = this.Xg.get("yaw"),
            b = this.Xg.get("distance"),
            c = this.Xg.get("enabled") && this.Xg.get("enabledInSurfaceSelection");
            if (a === m || b === m || !c) {
                this.Vy = this.va = r;
                this.Ci.set("alpha", 0)
            } else {
                var c = this.hN.get("distanceToFloor"),
                e = -90 + Math.atan2(b,
                        c) * l;
                this.Ci.set("alpha", e < -1 ? 1 : 0);
                this.va = {
                    ma: a,
                    pitch: e
                };
                e = -Math.cos(a * q) * b / c;
                a = -Math.sin(a * q) * b / c;
                b = d.Uv(c) / d.Np();
                this.Vy = {
                    x: a * b,
                    y: e * b
                };
                this.Ci.set("translationX", this.Vy.x);
                this.Ci.set("translationZ", this.Vy.y);
                this.Ci.set("distance", c)
            }
        };
        var l = 180 / Math.PI,
        q = Math.PI / 180;
        return a
    });
    define("O", "require,fg,ih,ll,iL,gU,hk,fw,hS,km,hi,bi".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("iL"),
        d = a("gU"),
        f = a("hk"),
        h = a("fw"),
        j = a("hS"),
        p = a("km"),
        k = a("hi"),
        l = a("bi"),
        q = 0,
        a = b.extend(d, function (a) {
            d.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.yJ = this.yJ.bind(this);
            this.Wd = this.Wd.bind(this);
            this.Sm = this.Sm.bind(this);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("tag", "Panorama");
            this.set("loadingActive", y);
            this.set("blendingActive", n);
            this.set("currentTime",
                0);
            this.set("adjacentPanoramas", []);
            this.set("preloadEnabled", n);
            this.set("backgroundPreloadEnabled", n);
            this.set("surfaceSelectionEnabled", y);
            this.set("id", "panorama_" + q++);
            this.set("ready", y);
            this.sK = [];
            this.vk = this.rc = this.Dd = r;
            this.vf = new o;
            this.S8 = new t;
            this.csa = new h(this.j);
            this.qk = new t;
            this.jf([this.vf, this.S8, this.csa, this.qk])
        });
        a.prototype.Qa = function () {
            this.Dd = (new j(e.S)).Hi(this.Al.bind(this));
            this.rc = (new j(e.wc)).Nk(this.Lu.bind(this));
            this.vk = (new j(e.Lb)).Hi(this.Tna.bind(this));
            d.prototype.Qa.call(this);
            c.Eb(this.j, ["currentTime"], this.yJ, n);
            c.Eb(this.j, ["frames", "overlays", "vrMenu", "adjacentPanoramas"], this.Wd, n);
            c.Eb(this.j, ["adjacentPanoramas"], this.Sm, n)
        };
        a.prototype.Sa = function () {
            this.Dd.dispose();
            this.rc.dispose();
            this.vk.dispose();
            d.prototype.Sa.call(this);
            c.Pb(this.j, ["currentTime"], this.yJ);
            c.Pb(this.j, ["frames", "overlays", "vrMenu", "flipImageHorizontally"], this.Wd);
            c.Pb(this.j, ["adjacentPanoramas"], this.Sm);
            this.rW()
        };
        a.prototype.Wd = function () {
            function a(b, c, e) {
                b =
                    f.indexOf(b);
                return b < 0 ? e : d[b].get(c, e)
            }
            function b(c) {
                return a(c, "projected", y)
            }
            var c = this.Va.Qp(this.j.get("frames"));
            c.forEach(function (a) {
                a.set("panoramaId", this.get("id"));
                a.set("flipHorizontally", this.j.get("flipImageHorizontally"))
            }
                .bind(this));
            var d = this.j.get("overlays"),
            e = this.Va.Qp(d),
            f = e.slice(),
            g = e.filter(b).filter(function (b) {
                return a(b, "enabled", n)
            });
            this.j.get("vrMenu") && e.push(this.Va.Qp(this.j.get("vrMenu")));
            e.forEach(function (a) {
                a.set("panoramaId", this.get("id"))
            }
                .bind(this));
            this.Dd.yd(c.concat(e));
            this.rc.yd(c.concat(e));
            this.vk.yd(c.concat(g));
            this.S8.jf(e.filter(b));
            this.vf.jf(c);
            this.qk.jf(e.filter(function (a) {
                    return !b(a)
                }));
            this.set("panoramaPixelsPerDegree", p.hca(this.j));
            this.Eaa()
        };
        a.prototype.yJ = function () {
            this.set("currentTime", this.j.get("currentTime", 0))
        };
        a.prototype.Sm = function () {
            this.set("adjacentPanoramas", this.j.get("adjacentPanoramas", []))
        };
        a.prototype.Al = function () {
            this.cm();
            this.trigger(e.S)
        };
        a.prototype.Tna = function () {
            this.cm();
            this.set("ready", n);
            this.trigger(e.Lb)
        };
        a.prototype.Lu =
        function () {
            this.cm()
        };
        a.prototype.cm = function () {
            var a = 0;
            this.rc.zn(function (b) {
                var c = 0,
                d;
                this.Dd.Ai(b) ? c = 100 : (d = this.rc.Ai(b)) && (c = d.Kh);
                a = a + c
            }
                .bind(this));
            this.trigger(new g(e.wc, a / this.rc.Yc.length))
        };
        a.prototype.L = function (a) {
            if (a.sb && !this.gp && l.wd() == l.vA.Oj)
                this.jf([this.gp = new f].concat(this.Pa()));
            this.set("blendingActive", this.get("alpha") < 1);
            this.set("backgroundPreloadEnabled", this.Va.jb.get("backgroundPreloadEnabled") !== y);
            this.set("preloadEnabled", a.DF);
            this.p("adjacentPanoramas", "loadingActive",
                "preloadEnabled", "backgroundPreloadEnabled") && (this.get("loadingActive") && this.get("backgroundPreloadEnabled") ? this.Mra() : this.rW());
            this.p("index") && this.Eaa();
            d.prototype.L.call(this, a)
        };
        a.prototype.UY = function () {
            return p.UY(this.j, this.get("preloadEnabled"))
        };
        a.prototype.Mra = function () {
            this.rW();
            this.sK = this.get("adjacentPanoramas").map(function (a) {
                a = a.get("panorama");
                return [a, p.Jk(a, this.get("preloadEnabled"))]
            }
                    .bind(this));
            this.sK.forEach(function (a) {
                k.nba(a[0], a[1]);
                k.eN(a[0], 1)
            })
        };
        a.prototype.rW =
        function () {
            this.sK.forEach(function (a) {
                k.eN(a[0], -1);
                k.Nxa(a[0], a[1])
            });
            this.sK = []
        };
        a.prototype.Eaa = function () {
            var a = this.get("index");
            this.vf.Pa().forEach(function (b, c, d) {
                b.set("panoramaIndex", a);
                b.set("frameIndex", c);
                b.set("frameCount", d.length)
            })
        };
        var o = b.extend(d, function () {
            d.call(this);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("loadingActive", y);
            this.set("currentTime", 0);
            this.set("tag", "Group")
        });
        o.prototype.L = function (a) {
            this.Pa().forEach(function (a, b, c) {
                a.set("frontFrame",
                    c[c.length - 1])
            });
            d.prototype.L.call(this, a)
        };
        var t = b.extend(d, function () {
            d.call(this);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("loadingActive", y);
            this.set("currentTime", 0);
            this.set("tag", "Group")
        });
        return a
    });
    define("bs", ["require", "fg", "em", "dv"], function (a) {
        var b = a("fg"),
        c = a("em"),
        e = a("dv"),
        g = 0,
        a = b.extend(c, function () {
            c.call(this);
            this.set("tag", "PanoramaFrame");
            this.set("panoramaIndex", 0);
            this.set("frameIndex", 0);
            this.set("frameCount", 1);
            this.set("id", "frame_" + g++)
        });
        a.prototype.L = function (a) {
            c.prototype.L.call(this, a);
            this.uv()
        };
        a.prototype.yv = function () {
            if (this.p("panoramaIndex", "frameIndex", "frameCount", "meshGroup")) {
                var a = this.get("meshGroup");
                if (a) {
                    var b = this.get("panoramaIndex"),
                    c = this.get("frameIndex"),
                    g = this.get("frameCount"),
                    p = a.children.length;
                    a.children.forEach(function (a, d) {
                        e.DN(a, b + (d + c / g) / p)
                    }
                        .bind(this))
                }
            }
        };
        a.prototype.uv = function () {
            if (this.p("meshGroup", "panoramaId", "id")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a, b) {
                    e.setAttribute(a, e.$s, this.get("panoramaId"));
                    e.setAttribute(a, e.QN, b);
                    e.setAttribute(a, e.Cw, this.get("id"))
                }
                    .bind(this))
            }
        };
        return a
    });
    define("kJ", "require,fg,ih,ll,ge,gU,bs,hS,km,eQ,hZ,iL".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("ge"),
        d = a("gU"),
        f = a("bs"),
        h = a("hS"),
        j = a("km"),
        p = a("eQ"),
        k = a("hZ"),
        l = a("iL"),
        a = b.extend(f, function (a) {
            f.call(this);
            this.set("tag", "ImagePanoramaFrame");
            this.I8 = n;
            this.j = a;
            this.sh.push(this.j);
            this.Ah = this.Ge = this.vk = r;
            this.KT = [];
            this.Wd = this.Wd.bind(this);
            this.dl(["loadingActive", "currentTime", "panoramaId", "panoramaPixelsPerDegree"]);
            this.jf([this.qk = new q])
        });
        a.prototype.Qa = function () {
            this.vk =
                new h(e.S);
            this.Ge = new h(e.S);
            this.Ah = new h(e.wc);
            f.prototype.Qa.call(this);
            c.Eb(this.j, ["overlays"], this.Wd, n)
        };
        a.prototype.Sa = function () {
            this.vk.dispose();
            this.Ge.dispose();
            this.Ah.dispose();
            c.Pb(this.j, ["overlays"], this.Wd);
            f.prototype.Sa.call(this)
        };
        a.prototype.Wd = function () {
            this.qk.jf(this.Va.Qp(this.j.get("overlays")));
            this.uaa()
        };
        a.prototype.uaa = function () {
            this.Ge.yd([].concat(this.KT, this.qk.Pa()));
            this.Ah.yd([].concat(this.KT, this.qk.Pa()))
        };
        a.prototype.Vi = function () {
            var a = [],
            b = [],
            c = [];
            j.DY(this.j,
                this.I8).forEach(function (d, e) {
                var f = p.Eua(this.j, d);
                if (j.Kwa(d)) {
                    if (e == 0) {
                        a = a.concat(f);
                        b = b.concat(f)
                    }
                    k.Pn(f, e == 0 ? k.$k : k.CG);
                    k.On(f, e == 0 ? k.Tj : k.QO)
                } else {
                    e == 0 && (a = a.concat(f));
                    b = b.concat(f);
                    k.Pn(f, k.$k);
                    k.On(f, k.Tj)
                }
                k.Ts(f, e == 0 ? g.aP : g.Uj);
                k.Wz(f, e);
                c = c.concat(f)
            }
                .bind(this));
            this.vk.yd(a);
            this.KT = b;
            this.uaa();
            this.Ge.Hi(this.Al.bind(this));
            this.vk.Hi(this.soa.bind(this));
            this.Ah.Nk(this.Lu.bind(this));
            this.trigger(new l(e.wc, 0));
            return c
        };
        a.prototype.soa = function () {
            this.trigger(e.Lb)
        };
        a.prototype.Al =
        function () {
            this.trigger(e.S)
        };
        a.prototype.L = function (a) {
            this.I8 = a.DF;
            this.jta();
            f.prototype.L.call(this, a)
        };
        a.prototype.jta = function () {
            var a = this.get("frontFrame");
            if (this.p("frontFrame") || a && a.p("alpha"))
                this.qk.set("alpha", !a || a == this ? 1 : 1 - a.get("alpha"))
        };
        a.prototype.Lu = function () {
            var a = 0;
            this.Ah.zn(function (b) {
                var c = 0,
                d;
                this.Ge.Ai(b) ? c = 100 : (d = this.Ah.Ai(b)) && (c = d.Kh);
                a = a + c
            }
                .bind(this));
            this.trigger(new l(e.wc, a / this.Ah.Yc.length))
        };
        var q = b.extend(d, function () {
            d.call(this);
            this.dl(["loadingActive",
                    "panoramaId", "panoramaPixelsPerDegree"]);
            this.set("loadingActive", y);
            this.set("tag", "Group")
        });
        return a
    });
    define("jy", "require,do,ll,bZ,fu,kT".split(","), function (a) {
        function b(a, b) {
            this.Db = a;
            this.F = b;
            this.pg = y;
            this.hg = [];
            this.Wi = this.xx = m;
            this.Nc = [];
            this.gQ();
            this.UQ();
            this.jL();
            this.xh()
        }
        function c(a, b, c) {
            this.time = a;
            this.cue = b;
            this.action = c
        }
        var e = a("do"),
        g = a("ll"),
        d = a("bZ"),
        f = a("fu"),
        h = a("kT");
        b.prototype.clear = function () {
            this.WA();
            this.hg = [];
            this.SW();
            this.F = this.Db = r
        };
        b.prototype.gQ = function () {
            this.F.bind(h.Md, this.hd, this, n);
            this.F.bind(g.gc, this.xh, this, n);
            this.F.bind(g.Ba, this.Qr, this, n)
        };
        b.prototype.SW =
        function () {
            this.F.unbind(h.Md, this.hd, this, n);
            this.F.unbind(g.gc, this.xh, this, n);
            this.F.unbind(g.Ba, this.Qr, this, n)
        };
        b.prototype.xh = function () {
            var a = this.F.Qe() != f.H;
            if (this.pg != a)
                (this.pg = a) ? this.jL() : this.WA()
        };
        b.prototype.Qr = function () {
            this.Bv()
        };
        b.prototype.hd = function () {
            this.Bv()
        };
        b.prototype.jL = function () {
            this.Wi = this.xx = 0
        };
        b.prototype.Bv = function () {
            if (this.F && this.pg) {
                var a = this.Nc.slice(),
                b = this.F.yi(),
                c = b - this.xx;
                if (c < 0) {
                    this.Nc = [];
                    this.Wi = 0
                }
                c = c >= 0 && c < 2;
                this.xx = b;
                var f;
                for (f = this.Wi; f < this.hg.length; f++)
                    if (this.hg[f].time >
                        b)
                        break;
                for (; this.Wi < f; this.Wi++) {
                    b = this.hg[this.Wi];
                    if (b.action == "start") {
                        this.Nc = e(this.Nc).union([b.cue]);
                        c && b.cue.trigger(new d(g.Sk))
                    } else {
                        this.Nc = e(this.Nc).difference([b.cue]);
                        c && b.cue.trigger(new d(g.Ba))
                    }
                }
                (a.length != this.Nc.length || e(a).intersection(this.Nc).length != this.Nc.length) && this.gE()
            }
        };
        b.prototype.WA = function () {
            if (this.Nc.length > 0) {
                this.Nc = [];
                this.gE()
            }
        };
        b.prototype.gE = function () {
            this.Db.trigger(new d(g.Jf, {
                    activeCues: this.Nc.slice()
                }))
        };
        b.prototype.UQ = function () {
            this.hg = [];
            var a =
                this.Db.get("cues", []);
            e(a).each(function (a) {
                this.hg.push(new c(a.get("startTime", 0), a, "start"));
                this.hg.push(new c(a.get("endTime", Number.POSITIVE_INFINITY), a, "end"))
            }, this);
            this.hg.sort(function (a, b) {
                return a.time == b.time ? a.action == b.start ? 0 : a.action == "start" ? -1 : 1 : a.time - b.time
            })
        };
        return b
    });
    define("dU", ["require", "ll", "fu", "bZ", "kT"], function (a) {
        function b(a, b, c) {
            this.jb = a;
            this.Db = b;
            this.F = c;
            this.F.rw(this.qe = this.Db.get("currentTime", 0));
            this.F.Kd(this.rd = this.jb.get("mute", y));
            this.F.Cc(this.m = this.Db.get("state", e.H));
            this.F.sm(this.fj = this.Db.get("loop"));
            this.gb = this.F.Cj();
            this.nha();
            this.sha();
            this.io()
        }
        var c = a("ll"),
        e = a("fu"),
        g = a("bZ"),
        d = a("kT");
        b.prototype.clear = function () {
            this.Rpa();
            this.Vpa();
            this.op();
            this.F.Cc(e.H);
            this.Db.set("state", e.H);
            this.Db.set("currentTime", 0);
            this.Db.set("duration",
                m)
        };
        b.prototype.k8 = function () {
            var a = this.Db.get("state", e.H);
            this.m != a && this.F.Cc(this.m = a)
        };
        b.prototype.i8 = function () {
            var a = this.Db.get("currentTime", 0);
            this.qe != a && this.F.rw(this.qe = a)
        };
        b.prototype.JC = function () {
            var a = this.jb.get("mute", 0);
            this.rd != a && this.F.Kd(this.rd = a)
        };
        b.prototype.j8 = function () {
            var a = this.Db.get("loop");
            this.fj != a && this.F.sm(this.fj = a)
        };
        b.prototype.QC = function () {
            this.Db.set("currentTime", this.qe = this.F.yi())
        };
        b.prototype.OC = function () {
            this.Db.set("duration", this.gb = this.F.Cj())
        };
        b.prototype.PC = function () {
            this.Db.set("state", this.m = this.F.Qe())
        };
        b.prototype.RC = function () {
            this.Db.trigger(new g(c.Ba))
        };
        b.prototype.nha = function () {
            this.jb.bind(c.D("mute"), this.JC, this, n)
        };
        b.prototype.Rpa = function () {
            this.jb.unbind(c.D("mute"), this.JC, this, n)
        };
        b.prototype.sha = function () {
            this.Db.bind(c.D("state"), this.k8, this, n);
            this.Db.bind(c.D("currentTime"), this.i8, this, n);
            this.Db.bind(c.D("loop"), this.j8, this, n)
        };
        b.prototype.Vpa = function () {
            this.Db.unbind(c.D("state"), this.k8, this, n);
            this.Db.unbind(c.D("currentTime"),
                this.i8, this, n);
            this.Db.unbind(c.D("loop"), this.j8, this, n)
        };
        b.prototype.io = function () {
            this.F.bind(d.Md, this.QC, this, n);
            this.F.bind(d.cg, this.OC, this, n);
            this.F.bind(c.gc, this.PC, this, n);
            this.F.bind(c.Ba, this.RC, this, n)
        };
        b.prototype.op = function () {
            this.F.unbind(d.Md, this.QC, this, n);
            this.F.unbind(d.cg, this.OC, this, n);
            this.F.unbind(c.gc, this.PC, this, n);
            this.F.unbind(c.Ba, this.RC, this, n)
        };
        return b
    });
    define("hT", ["require", "kT", "ll"], function (a) {
        function b(a, b) {
            this.Db = a;
            this.F = b;
            this.HP = [];
            this.gQ();
            this.Uf()
        }
        a("kT");
        var c = a("ll");
        b.prototype.clear = function () {
            this.Pia();
            this.SW();
            this.F = this.Db = r
        };
        b.prototype.gQ = function () {
            this.F.bind(c.Jf, this.Uf, this, n)
        };
        b.prototype.SW = function () {
            this.F.unbind(c.Jf, this.Uf, this, n)
        };
        b.prototype.Uf = function () {
            this.Db.set("activeSubtitles", this.HP = this.F.Cm)
        };
        b.prototype.Pia = function () {
            this.Db.get("activeSubtitles") == this.HP && this.Db.set("activeSubtitles", this.HP =
                    [])
        };
        return b
    });
    define("da", "require,fg,ll,ge,fu,bs,hS,eQ,jy,dU,dv,hZ,hT,kT,iL".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("ge"),
        g = a("fu"),
        d = a("bs"),
        f = a("hS"),
        h = a("eQ"),
        j = a("jy"),
        p = a("dU"),
        k = a("dv"),
        l = a("hZ"),
        q = a("hT"),
        o = a("kT"),
        t = a("iL"),
        a = b.extend(d, function (a) {
            d.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("tag", "VideoPanoramaFrame");
            this.set("frameEmpty", m);
            this.set("atStart", m);
            this.aba = this.j.get("stereoSphere") || this.j.get("sphere");
            this.ab = o.ah(this.aba);
            this.ez = [];
            this.Yu = [];
            this.Ah = this.Ge = this.Cf = this.F = r
        });
        a.prototype.Qa = function () {
            this.Ge = (new f(c.S)).Hi(this.Al.bind(this));
            this.Ah = (new f(c.wc)).Nk(this.Lu.bind(this));
            this.F = new o(this.Va.jb, this.aba);
            this.ol = new j(this.j.xz(), this.F);
            this.ca = new p(this.Va.jb, this.j.xz(), this.F);
            this.wp = new q(this.j.xz(), this.F);
            this.io();
            d.prototype.Qa.call(this)
        };
        a.prototype.Sa = function () {
            this.Ge.dispose();
            this.Ah.dispose();
            this.op();
            this.ol.clear();
            this.ol = r;
            this.ca.clear();
            this.ca =
                r;
            this.wp.clear();
            this.wp = r;
            this.F.clear();
            this.Cf = this.F = r;
            d.prototype.Sa.call(this)
        };
        a.prototype.Vi = function () {
            this.ez = h.Jua(this.j, this.ab);
            this.Kta = l.zw(k.Js(this.ez[0])[0]);
            this.ez.forEach(function (a) {
                l.Pn(a, l.$k);
                l.On(a, l.Tj)
            });
            if (this.ab.get("posterURL")) {
                this.Yu = h.Kua(this.j, this.ab);
                this.Yu.forEach(function (a) {
                    l.Pn(a, l.$k);
                    l.On(a, l.Tj);
                    l.Ts(a, e.aP)
                })
            } else
                this.Yu = [];
            var a = [].concat(this.ez, this.Yu);
            this.Ge.yd(a);
            this.Ah.yd(a);
            this.trigger(new t(c.wc, 0));
            return a
        };
        a.prototype.L = function (a) {
            var b =
                this.F.AM();
            this.set("frameEmpty", b.isEmpty());
            this.set("atStart", !(this.get("currentTime") > 1));
            d.prototype.L.call(this, a);
            if (!this.Cf || !this.Cf.isEqual(b)) {
                this.Cf = b;
                this.Kta.Di(this.Cf.cu);
                this.Ia()
            } else
                this.F.Qe() == g.P && this.Ia()
        };
        a.prototype.si = function () {
            if (this.p("composedAlpha", "meshGroup", "frameEmpty", "atStart"))
                if (this.Yu.length && this.get("frameEmpty") && this.get("atStart")) {
                    this.Yu.forEach(function (a) {
                        k.xd(a, this.get("composedAlpha"))
                    }
                        .bind(this));
                    this.ez.forEach(function (a) {
                        k.xd(a, 0)
                    }
                        .bind(this))
                } else {
                    this.Yu.forEach(function (a) {
                        k.xd(a,
                            0)
                    }
                        .bind(this));
                    this.ez.forEach(function (a) {
                        k.xd(a, this.get("composedAlpha"))
                    }
                        .bind(this))
                }
        };
        a.prototype.Al = function () {
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        a.prototype.Lu = function (a, b) {
            var d = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (d = d + a.Kh)
            });
            this.trigger(new t(c.wc, d / b.Yc.length))
        };
        a.prototype.xh = function () {
            this.Ia()
        };
        a.prototype.hd = function () {
            this.Ia()
        };
        a.prototype.io = function () {
            this.F.bind(o.Md, this.hd, this, n);
            this.F.bind(c.gc, this.xh, this, n)
        };
        a.prototype.op = function () {
            this.F.unbind(o.Md, this.hd, this,
                n);
            this.F.unbind(c.gc, this.xh, this, n)
        };
        return a
    });
    define("cK", "require,fg,ll,hk,jS,hS,iL".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("hk"),
        g = a("jS"),
        d = a("hS"),
        f = a("iL"),
        a = b.extend(e, function () {
            e.call(this);
            this.set("tag", "ImagePlane");
            this.set("url", r);
            this.rc = this.Dd = r
        });
        a.prototype.Qa = function () {
            this.Dd = (new d(c.S)).Hi(this.Al.bind(this));
            this.rc = (new d(c.wc)).Nk(this.ep.bind(this));
            e.prototype.Qa.call(this)
        };
        a.prototype.Sa = function () {
            this.Dd.dispose();
            this.rc.dispose();
            e.prototype.Sa.call(this)
        };
        a.prototype.L = function (a) {
            if (this.p("url")) {
                var b =
                    this.get("url");
                this.set("textureSource", b ? new g(b) : r)
            }
            e.prototype.L.call(this, a);
            if (this.p("meshGroup")) {
                a = (a = this.get("meshGroup")) && a.children || [];
                if (a.length) {
                    this.Dd.yd(a);
                    this.rc.yd(a)
                }
            }
        };
        a.prototype.Al = function () {
            this.trigger(c.Lb);
            this.trigger(c.S)
        };
        a.prototype.ep = function (a, b) {
            var d = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (d = d + a.Kh)
            });
            this.trigger(new f(c.wc, d / b.Yc.length))
        };
        return a
    });
    define("bo", "require,fg,ih,ll,fu,fK,gU,cC,lg,cK,dU,kx,hS,km,dD,it,J,iL,kX,bq,kT".split(","), function (a) {
        function b(a, b) {
            for (var c = a - b; c > 180; )
                c = c - 360;
            for (; c < -180; )
                c = c + 360;
            return c + b
        }
        var c = a("fg"),
        e = a("ih"),
        g = a("ll"),
        d = a("fu");
        a("fK");
        var f = a("gU"),
        h = a("cC"),
        j = a("lg"),
        p = a("cK"),
        k = a("dU"),
        l = a("kx"),
        q = a("hS"),
        o = a("km"),
        t = a("dD"),
        s = a("it"),
        v = a("J"),
        u = a("iL"),
        w = a("kX"),
        x = a("bq"),
        z = a("kT"),
        C = Math.PI / 180,
        a = c.extend(f, function (a) {
            f.call(this);
            this.j = a;
            this.sh.push(this.j);
            this.Wd = this.Wd.bind(this);
            this.dl(["loadingActive",
                    "currentTime", "panoramaPixelsPerDegree"]);
            this.set("tag", "Popup");
            this.set("inVR", y);
            this.set("enabledInStandard", n);
            this.set("interactionEnabled", n);
            this.set("loadingActive", y);
            this.set("frameEmpty", n);
            this.set("state", d.H);
            this.set("itemVisible", "none");
            this.set("visible", y);
            this.set("visiblePosition", 0);
            this.set("alpha", 0);
            this.set("over", y);
            this.set("gazeOver", y);
            this.set("video", r);
            this.set("image", r);
            this.Ad = this.Ea = this.ha = this.rc = this.Dd = r;
            this.xa = new l;
            this.lo = this.wr = this.ui = this.Cf = this.F =
                r
        });
        a.prototype.Qa = function () {
            this.Dd = (new q(g.S)).Hi(this.Hu.bind(this));
            this.rc = (new q(g.wc)).Nk(this.Ku.bind(this));
            f.prototype.Qa.call(this);
            this.nja();
            this.appendChild(this.Ad);
            e.Eb(this.j, ["playbackPositions", "popupDistance", "popupMaxHeight", "popupMaxWidth", "image.levels.url", "video", "state", "visible"], this.Wd, n)
        };
        a.prototype.Sa = function () {
            this.Dd.dispose();
            this.rc.dispose();
            e.Pb(this.j, ["playbackPositions", "popupDistance", "popupMaxHeight", "popupMaxWidth", "image.levels.url", "video", "state",
                    "visible"], this.Wd);
            this.au();
            this.$q();
            this.W3();
            f.prototype.Sa.call(this)
        };
        a.prototype.Wd = function () {
            var a = o.Mva(this.j, this.get("panoramaPixelsPerDegree"));
            this.set("imageURL", a && a.get("url"));
            this.set("imageWidth", a && a.get("width"));
            this.set("imageHeight", a && a.get("height"));
            this.set("video", this.j.get("video"));
            this.set("state", this.j.get("state"));
            this.set("visible", this.j.get("visible"));
            this.set("popupDistance", this.j.get("popupDistance"));
            this.set("popupMaxWidth", this.j.get("popupMaxWidth"));
            this.set("popupMaxHeight", this.j.get("popupMaxHeight"));
            this.set("playbackPositions", this.j.get("playbackPositions"))
        };
        a.prototype.L = function (a) {
            this.cs = a.ma;
            this.bs = a.pitch;
            this.Cp(a);
            this.nta();
            this.uE(a);
            this.Fp(a);
            this.fta(a);
            this.Ssa(a);
            f.prototype.L.call(this, a)
        };
        a.prototype.nta = function () {
            if (this.p("playbackPositions", "currentTime")) {
                this.xa.Ws(this.get("playbackPositions"));
                this.xa.Vs(this.get("currentTime"));
                this.set("sourceYaw", this.xa.get("yaw"));
                this.set("sourcePitch", this.xa.get("pitch"));
                this.set("sourceRotationX", this.xa.get("rotationX"));
                this.set("sourceRotationY", this.xa.get("rotationY"));
                this.set("sourceRotationZ", this.xa.get("rotationZ"));
                this.set("sourceHFOV", this.xa.get("hfov"))
            }
        };
        a.prototype.Cp = function () {
            if (this.p("video", "imageURL")) {
                var a = [this.Ad];
                if (this.p("imageURL")) {
                    this.dB();
                    this.ha && a.push(this.ha);
                    this.AD("itemVisible")
                }
                if (this.p("video")) {
                    this.gB();
                    this.Ea && a.push(this.Ea);
                    this.AD("itemVisible")
                }
                this.Dd.yd(a);
                this.rc.yd(a);
                this.jf(a)
            }
        };
        a.prototype.uE = function () {
            if (this.F) {
                var a =
                    this.F.AM();
                this.set("frameEmpty", !!a && a.isEmpty());
                if (!this.Cf || a && !this.Cf.isEqual(a)) {
                    this.Cf = a;
                    this.Ea.set("source", this.Cf.cu);
                    this.Ea.set("sourceUpdated", n);
                    this.Ia()
                } else
                    this.F.Qe() == d.P && this.Ia()
            } else
                this.set("frameEmpty", y)
        };
        a.prototype.Fp = function (a) {
            this.set("inVR", a.sb);
            this.set("hotspotsEnabled", a.aw);
            this.set("rendererYaw", a.ma);
            this.set("rendererPitch", a.pitch);
            this.set("rendererRoll", a.md);
            this.set("rendererWidth", a.gM);
            this.set("rendererHeight", a.PE);
            this.set("rendererHFOV", a.bd);
            if (this.p("visible")) {
                var c = this.get("visiblePosition"),
                e = this.get("visible") ? 1 : 0,
                f = Math.max(1, this.j.get(this.get("visible") ? "showDuration" : "hideDuration") * Math.abs(e - c)),
                h = this.j.get(this.get("visible") ? "showEasing" : "hideEasing");
                if (c != e)
                    this.ui = new w(h, [new x("position", c, e)], f);
                this.get("visible") || this.F && this.F.Cc(d.H)
            }
            if (this.ui) {
                if (this.ui.Re()) {
                    this.ui = r;
                    if (this.get("visible")) {
                        this.j.trigger(g.Sw);
                        this.j.get("autoplay") && this.F && this.F.Cc(d.P)
                    } else
                        this.j.trigger(g.Kw)
                } else
                    this.ui.fb(a.vd);
                if (this.ui) {
                    this.set("visiblePosition", this.ui.Fb("position"));
                    this.Ia()
                }
            }
            c = y;
            if (c = a.sb ? this.p("visible") : this.p("rendererYaw", "rendererPitch", "rendererRoll", "rendererWidth", "rendererHeight", "rendererHFOV", "itemVisible", "popupMaxWidth", "popupMaxHeight", "sourceHFOV")) {
                this.set("targetImageScale", this.o5(this.ha, a));
                this.set("targetVideoScale", this.o5(this.Ea, a));
                this.set("targetYaw", b(this.get("rendererYaw"), this.get("sourceYaw")));
                this.set("targetPitch", this.get("rendererPitch"));
                this.set("targetRotationZ",
                    b(a.sb ? 0 : this.get("rendererRoll"), this.get("sourceRotationZ")))
            }
            if (this.p("visiblePosition", "targetScale", "targetYaw", "targetPitch", "targetRoll", "popupDistance", "hfov")) {
                var e = this.get("visiblePosition"),
                j = this.get("targetYaw") * e + this.get("sourceYaw") * (1 - e),
                k = this.get("targetPitch") * e + this.get("sourcePitch") * (1 - e),
                l = this.get("sourceRotationX") * (1 - e),
                p = this.get("sourceRotationY") * (1 - e),
                o = this.get("targetRotationZ") * e + this.get("sourceRotationZ") * (1 - e),
                a = Math.min(1, 2 * e),
                q = this.get("popupDistance"),
                t =
                    this.get("sourceHFOV"),
                c = this.get("targetImageScale") * e + (1 - e),
                e = this.get("targetVideoScale") * e + (1 - e);
                this.set("alpha", a);
                this.ha && this.ha.set("scale", c);
                this.Ea && this.Ea.set("scale", e);
                [].concat(this.Ea ? [this.Ea] : [], this.ha ? [this.ha] : []).forEach(function (a) {
                    a.set("yaw", j);
                    a.set("pitch", k);
                    a.set("rotationX", l);
                    a.set("rotationY", p);
                    a.set("rotationZ", o);
                    a.set("distance", q);
                    a.set("hfov", t)
                })
            }
        };
        a.prototype.fta = function (a) {
            if (this.p("frameEmpty", "state", "imageURL", "video")) {
                var b = "none";
                this.Ea && (!this.ha ||
                    !this.get("frameEmpty") && this.get("state") != d.H) ? b = "video" : this.ha && (b = "image");
                this.set("itemVisible", b)
            }
            if (this.p("itemVisible")) {
                this.get("itemVisible") != "video" && this.F && this.F.Cc(d.H);
                var b = this.ha ? this.ha.get("alpha") : 0,
                c = this.Ea ? this.Ea.get("alpha") : 0,
                e = this.get("itemVisible") == "image" ? 1 : 0,
                f = this.get("itemVisible") == "video" ? 1 : 0,
                g = this.get("itemVisible") == "video" ? 1 : Math.max(Math.abs(e - b), Math.abs(f - c)) * 200;
                this.wr = new w("linear", [new x("imageAlpha", b, e), new x("videoAlpha", c, f)], g)
            }
            if (this.wr) {
                this.wr.Re() ?
                this.wr = r : this.wr.fb(a.vd);
                if (this.wr) {
                    this.ha && this.ha.set("alpha", this.wr.Fb("imageAlpha"));
                    this.Ea && this.Ea.set("alpha", this.wr.Fb("videoAlpha"));
                    this.Ia()
                }
            }
        };
        a.prototype.Ssa = function (a) {
            if (this.p("gazeOver", "inVR")) {
                this.h3();
                this.get("inVR") && this.j.get("lookAwayToHide") && !this.get("gazeOver") && this.Kra()
            }
            if (a.sb && this.j.get("darkenBackground") && this.j.get("lookAwayToHide")) {
                if (this.p("visible") && this.get("visible")) {
                    this.Ad.set("alpha", 0.8);
                    this.lo = r
                }
                if (this.p("gazeOver"))
                    this.lo = new w(this.get("gazeOver") ?
                            "linear" : "quad_in", [new x("alpha", this.Ad.get("alpha"), this.get("gazeOver") ? 0.8 : 0)], this.get("gazeOver") ? 300 : this.j.get("lookAwayToHideTime"))
            } else {
                this.lo = r;
                this.Ad.set("alpha", a.sb && this.j.get("darkenBackground") ? 0.8 : 0)
            }
            if (this.lo) {
                this.lo.Re() ? this.lo = r : this.lo.fb(a.vd);
                if (this.lo) {
                    this.Ad.set("alpha", this.lo.Fb("alpha"));
                    this.Ia()
                }
            }
        };
        a.prototype.Kra = function () {
            this.h3();
            this.fJ = setTimeout(function () {
                this.fJ = r;
                this.j.set("visible", y)
            }
                    .bind(this), this.j.get("lookAwayToHideTime"))
        };
        a.prototype.h3 =
        function () {
            if (this.fJ) {
                clearTimeout(this.fJ);
                this.fJ = r
            }
        };
        a.prototype.o5 = function (a, b) {
            if (!a)
                return 1;
            var c = this.get("popupMaxWidth", "100%"),
            d = v.Ok(c),
            e = a.get("contentWidth"),
            f = a.get("contentHeight"),
            g = this.get("popupMaxHeight", "100%"),
            h = v.Ok(g),
            j;
            if (this.get("inVR")) {
                var k = j = this.get("rendererWidth") * 0.5,
                l = Math.min(b.Gf, 80),
                p = s.Jv(l, j, k),
                o = this.get("sourceHFOV");
                j = Math.min(Math.tan(p * (d !== m ? d / 100 : c / j) * 0.5 * C) / Math.tan(o * 0.5 * C), Math.tan(l * (h !== m ? h / 100 : g / k) * 0.5 * C) / Math.tan(s.Jv(o, e, f) * 0.5 * C))
            } else {
                j =
                    this.get("rendererWidth");
                k = this.get("rendererHeight");
                p = Math.min((d !== m ? j * d / 100 : c) / e, (h !== m ? k * h / 100 : g) / f);
                e = e * p;
                p = this.get("rendererHFOV");
                o = this.get("sourceHFOV");
                j = Math.tan(p * 0.5 * C) * e / j / Math.tan(o * 0.5 * C)
            }
            return j
        };
        a.prototype.dB = function () {
            this.au();
            if (this.get("imageURL")) {
                this.ha = new p;
                this.ha.set("url", this.get("imageURL"));
                this.ha.set("contentWidth", this.get("imageWidth"));
                this.ha.set("contentHeight", this.get("imageHeight"));
                this.ha.set("alpha", 0)
            }
        };
        a.prototype.au = function () {
            if (this.ha) {
                this.ha.remove();
                this.ha = r
            }
        };
        a.prototype.gB = function () {
            this.$q();
            if (this.get("video")) {
                this.Ea = new j;
                var a = z.ah(this.get("video"));
                this.Ea.set("contentWidth", a.get("width"));
                this.Ea.set("contentHeight", a.get("height"));
                this.Ea.set("alpha", 0);
                this.F = new z(this.Va.jb, this.get("video"));
                this.ca = new k(this.Va.jb, this.j, this.F);
                this.io()
            }
        };
        a.prototype.$q = function () {
            if (this.Ea) {
                this.op();
                this.ca.clear();
                this.ca = r;
                this.F.clear();
                this.Cf = this.F = r;
                this.Ea.remove();
                this.Ea = r
            }
        };
        a.prototype.nja = function () {
            this.W3();
            this.Ad = new h("#000000")
        };
        a.prototype.W3 = function () {
            if (this.Ad) {
                this.Ad.remove();
                this.Ad = r
            }
        };
        a.prototype.Hu = function () {
            this.trigger(g.Lb);
            this.trigger(g.S)
        };
        a.prototype.Ku = function (a, b) {
            var c = 0;
            b.zn(function (a) {
                var b = 0,
                d;
                this.Dd.Ai(a) ? b = 100 : (d = this.rc.Ai(a)) && (b = d.Kh);
                c = c + b
            }
                .bind(this));
            this.trigger(new u(g.wc, c / b.Yc.length))
        };
        a.prototype.xh = function () {
            this.Ia()
        };
        a.prototype.hd = function () {
            this.Ia()
        };
        a.prototype.Qr = function () {
            this.j.trigger(g.Ba)
        };
        a.prototype.io = function () {
            this.F.bind(z.Md, this.hd, this, n);
            this.F.bind(g.gc,
                this.xh, this, n);
            this.F.bind(g.Ba, this.Qr, this, n)
        };
        a.prototype.op = function () {
            this.F.unbind(z.Md, this.hd, this, n);
            this.F.unbind(g.gc, this.xh, this, n);
            this.F.unbind(g.Ba, this.Qr, this, n)
        };
        a.prototype.Lj = function (a) {
            if (a.Vd == g.Nh) {
                if (!a.Eh() && this.get("visible")) {
                    a.dq(this.j);
                    this.set("over", this.Xl(a));
                    this.set("gazeOver", this.ksa(a))
                } else
                    this.set("over", y);
                if (this.get("over")) {
                    a.xs(this.j);
                    a.Ms() && a.ys(this.j);
                    a.vi(this.get("popupDistance"))
                }
                if (this.p("over")) {
                    this.j.trigger(this.get("over") ? g.xc : g.Qb);
                    a.Ms() && this.j.trigger(this.get("over") ? g.Mh : g.Kf)
                }
            } else if (a.Vd == g.Li && !a.Eh() && this.get("visible")) {
                a.dq(this.j);
                a.vi(this.get("popupDistance"));
                this.Xl(a) ? a.Awa() || this.j.trigger(g.U) : this.j.set("visible", y)
            }
        };
        a.prototype.Xl = function (a) {
            return this.V$(a.Ol)
        };
        a.prototype.ksa = function (a) {
            a = a.vB;
            return !!a && this.V$([a])
        };
        a.prototype.V$ = function (a) {
            if (this.get("visible"))
                for (var a = (this.get("itemVisible") == "video" ? this.Ea : this.ha).Go(a), b = 0; b < a.length; b++) {
                    var c = a[b];
                    if (t.iq(c.source, c.x, c.y))
                        return n
                }
            return y
        };
        return a
    });
    define("cn", ["require", "fg", "gU"], function (a) {
        var b = a("fg"),
        c = a("gU"),
        a = b.extend(c, function () {
            c.call(this);
            this.Tq && this.Tq();
            this.Yj && this.Yj()
        });
        a.prototype.Qa = function () {
            c.prototype.Qa.call(this);
            this.sk && this.sk();
            this.uy && this.uy()
        };
        a.prototype.Sa = function () {
            this.uk && this.uk();
            this.vy && this.vy();
            c.prototype.Sa.call(this)
        };
        a.prototype.L = function (a) {
            this.Ne && this.Ne(a);
            c.prototype.L.call(this, a);
            this.bm && this.bm(a)
        };
        return a
    });
    define("fv", ["require", "ll"], function (a) {
        var b = a("ll");
        return {
            Tq: function () {
                this.set("beamEnabled", y);
                this.Wf = y;
                this.bs = this.cs = m
            },
            bm: function (a) {
                this.cs = a.ma;
                this.bs = a.pitch
            },
            Lj: function (a) {
                if (a.Vd == b.Nh) {
                    var e = !a.Eh() && this.Xl(a);
                    if (e) {
                        a.xs(this.j);
                        this.j.get("useHandCursor") && a.ys(this.j);
                        a.vi(this.get("distance"));
                        var g = this.ya(a.dw());
                        g && a.cM(g, this.ns(a.dw()))
                    }
                    this.Wf != e && (this.Wf = e, this.j.trigger(this.Wf ? b.xc : b.Qb), a.Ms() && this.j.trigger(this.Wf ? b.Mh : b.Kf))
                } else
                    a.Vd == b.Li && !a.Eh() && this.Xl(a) &&
                    (1 < this.j.cF(b.U, n).length && a.dq(this.j), a.vi(this.get("distance")), this.j.trigger(b.U))
            },
            Xl: function (a) {
                return this.get("beamEnabled") && 0 < this.BS().Go(a.Ol).length ? n : y
            },
            ya: function (a) {
                return !a || this.j.get("displayTooltipInTouchScreens") && this.Va.C.get("displayTooltipInTouchScreens") !== y ? this.j.get("toolTip", "") : ""
            },
            ns: function (a) {
                if (a) {
                    var a = this.get("yaw") - this.cs,
                    b = this.get("pitch") - this.bs;
                    return Math.sqrt(a * a + b * b)
                }
                return 0
            }
        }
    });
    define("bC", "require,fg,ih,ll,cn,hS,km,fv".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("cn"),
        d = a("hS"),
        f = a("km"),
        a = a("fv"),
        b = b.extend(g, a, function (a) {
            g.call(this);
            this.j = a;
            this.ru = this.YR = this.TS = r;
            this.sh.push(this.j);
            this.Wd = this.Wd.bind(this);
            this.dl(["loadingActive", "panoramaPixelsPerDegree"]);
            this.set("tag", "FrameHotspot");
            this.set("enabled", n);
            this.set("inVR", y);
            this.set("inScreenshot", y);
            this.set("overlaysEnabled", n);
            this.set("interactionEnabled", n);
            this.set("contentInteractive",
                y);
            this.set("transparent", y);
            this.set("centerOverDisplay", y);
            this.set("loadingActive", y);
            this.set("visible", y);
            this.set("loaded", y);
            this.set("inView", y);
            this.set("frameHidden", n);
            this.jc = this.Mm = this.rc = this.Dd = r
        });
        b.prototype.Qa = function () {
            this.Dd = (new d(e.S)).Hi(this.Hu.bind(this));
            this.rc = (new d(e.wc)).Nk(this.Ku.bind(this));
            this.qja();
            g.prototype.Qa.call(this);
            c.Eb(this.j, ["url", "enabled", "image", "fadeInDuration", "fadeOutDuration", "contentInteractive", "interactionEnabled", "transparent"], this.Wd,
                n)
        };
        b.prototype.Sa = function () {
            this.Dd.dispose();
            this.rc.dispose();
            c.Pb(this.j, ["url", "enabled", "image", "fadeInDuration", "fadeOutDuration", "contentInteractive", "interactionEnabled", "transparent"], this.Wd);
            this.X3();
            this.Y3();
            g.prototype.Sa.call(this)
        };
        b.prototype.Wd = function () {
            this.set("url", this.j.get("url"));
            this.jc.set("url", this.get("url"));
            this.set("image", this.j.get("image"));
            this.ha.set("image", this.get("image"));
            this.ha.set("level", this.get("image") && f.Yba(this.j, this.get("panoramaPixelsPerDegree")));
            this.set("enabled", this.j.get("enabled"));
            this.set("fadeInDuration", this.j.get("fadeInDuration"));
            this.set("fadeOutDuration", this.j.get("fadeOutDuration"));
            this.set("interactionEnabled", this.j.get("interactionEnabled"));
            this.set("contentInteractive", this.j.get("contentInteractive"));
            this.set("transparent", this.j.get("transparent"));
            this.Ia()
        };
        b.prototype.L = function (a) {
            this.set("loaded", !!this.jc && this.jc.get("frameLoaded"));
            this.set("inVR", a.sb);
            this.set("inScreenshot", a.lF);
            this.set("hotspotsEnabled",
                a.aw);
            g.prototype.L.call(this, a);
            this.Fp(a)
        };
        b.prototype.qja = function () {
            this.dB();
            this.zja();
            this.yja();
            var a = [this.ha, this.Mm, this.jc];
            this.Dd.yd(a);
            this.rc.yd(a);
            this.jf(a)
        };
        b.prototype.Fp = function () {
            if (this.p("blendingActive", "url", "inVR", "hotspotsEnabled", "enabled", "interactionEnabled", "contentInteractive", "composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                var a = !(this.get("composedTranslationX") != 0 || this.get("composedTranslationY") != 0 || this.get("composedTranslationZ") != 0) &&
                !this.get("blendingActive") && this.get("hotspotsEnabled") && this.get("enabled") && !this.get("inVR") && !!this.get("url");
                this.set("visible", a);
                this.set("beamEnabled", a && this.get("interactionEnabled"));
                this.jc.set("contentInteractive", a && this.get("interactionEnabled") && this.get("contentInteractive"))
            }
            this.set("frameHidden", !this.jc.get("geometryVisible"));
            if (this.p("visible", "loaded", "frameHidden", "transparent", "inScreenshot")) {
                this.get("visible") || this.set("loaded", y);
                this.ha.set("alpha", this.get("visible") &&
                    (this.get("frameHidden") || !this.get("loaded")) ? 1 : 0);
                this.ha.set("alpha", 1);
                this.Mm.set("alpha", this.get("visible") && !this.get("frameHidden") && this.get("loaded") && !this.get("transparent") && !this.get("inScreenshot") ? 1 : 0);
                this.jc.set("alpha", this.get("visible") ? 1 : 0);
                this.jc.set("transparent", this.get("transparent"));
                this.set("inView", this.get("visible") && (this.get("loaded") || this.get("image")));
                this.Ia()
            }
            this.p("inView") && this.j.trigger(this.get("inView") ? e.od : e.zd)
        };
        b.prototype.dB = function () {
            this.au();
            this.ha = new this.ru;
            this.ha.set("image", this.get("image"));
            this.ha.set("level", this.get("image") && f.Yba(this.j, this.get("panoramaPixelsPerDegree")));
            this.ha.set("visible", n);
            this.ha.set("alpha", 0);
            this.set("imagePlane", this.ha)
        };
        b.prototype.au = function () {
            if (this.ha) {
                this.ha.remove();
                this.ha = r;
                this.set("imagePlane", r)
            }
        };
        b.prototype.yja = function () {
            this.X3();
            this.jc = new this.YR;
            this.jc.bind(e.S, this.w4, this, n);
            this.jc.set("url", this.get("url"));
            this.jc.set("visible", n);
            this.jc.set("alpha", 1);
            this.set("framePlane",
                this.jc)
        };
        b.prototype.X3 = function () {
            if (this.jc) {
                this.jc.unbind(e.S, this.w4, this, n);
                this.jc.remove();
                this.jc = r;
                this.set("framePlane", r)
            }
        };
        b.prototype.zja = function () {
            this.Y3();
            this.Mm = new this.TS;
            this.Mm.set("visible", n);
            this.Mm.set("alpha", 1);
            this.set("holePlane", this.Mm)
        };
        b.prototype.Y3 = function () {
            if (this.Mm) {
                this.Mm.remove();
                this.Mm = r;
                this.set("holePlane", r)
            }
        };
        b.prototype.BS = Q("Mm");
        b.prototype.w4 = function () {
            this.Ia()
        };
        b.prototype.Hu = function () {
            this.trigger(e.Lb);
            this.trigger(e.S)
        };
        b.prototype.Ku =
        function (a, b) {
            var c = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (c = c + a.Kh)
            });
            this.trigger(new ProgressEvent(e.wc, c / b.Yc.length))
        };
        return b
    });
    define("ev", ["require", "fg", "gU"], function (a) {
        var b = a("fg"),
        c = a("gU"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("tag", "ComposedCSSObject");
            this.set("transparent", y);
            this.set("cssScene", r);
            this.set("cssSceneOver", r);
            this.set("cssObject", this.RQ());
            this.wo && this.wo();
            this.Yt && this.Yt();
            this.Tq && this.Tq();
            this.Yj && this.Yj()
        });
        a.prototype.RQ = function () {
            var a = new THREE.CSS3DObject;
            a.matrixAutoUpdate = y;
            return a
        };
        a.prototype.Qa = function () {
            c.prototype.Qa.call(this);
            this.sk && this.sk();
            this.eC && this.eC();
            this.uy && this.uy()
        };
        a.prototype.Sa = function () {
            this.fy && this.fy();
            this.vy && this.vy();
            this.uk && this.uk();
            var a = this.get("cssObject");
            a && a.parent && a.parent.remove(a);
            this.set("cssScene", r);
            c.prototype.Sa.call(this)
        };
        a.prototype.L = function (a) {
            this.Ne && this.Ne(a);
            c.prototype.L.call(this, a);
            this.set("cssScene", a.VE);
            this.set("cssSceneOver", a.WE);
            if (this.p("transparent")) {
                var b = this.get("cssObject");
                b && b.parent && b.parent.remove(b)
            }
            this.p("cssScene", "cssSceneOver", "transparent") && (b = this.get("transparent") ?
                    a.WE : a.VE) && b.add(this.get("cssObject"));
            this.si();
            this.az && this.az(a);
            this.Dp && this.Dp(a);
            this.yv()
        };
        a.prototype.si = function () {
            this.p("composedAlpha", "meshGroup") && this.Dq()
        };
        a.prototype.Dq = function () {
            this.get("cssObject").element.style.display = 0 < this.get("composedAlpha") ? "block" : "none"
        };
        a.prototype.yv = function () {
            this.p("index") && (this.get("cssObject").containerElement.style.zIndex = this.get("index"))
        };
        return a
    });
    define("dq", ["require", "gW", "a"], function (a) {
        var b = a("gW"),
        c = a("a"),
        e = new THREE.Matrix4,
        g = Math.PI / 180;
        return {
            wo: function () {
                this.set("vertices", m);
                this.ef = new THREE.Matrix4;
                this.ic = new THREE.Matrix4;
                this.tk = new THREE.Matrix4;
                this.Xi = new THREE.Matrix4;
                this.zl = new THREE.Matrix4
            },
            RQ: function () {
                var a = new THREE.CSS3DQuad;
                a.matrixAutoUpdate = y;
                return a
            },
            Dp: function (a) {
                var f = y;
                if (this.p("vertices", "contentWidth", "contentHeight")) {
                    var h = this.get("vertices"),
                    f = c.Mp(h[0].get("yaw") * g, h[0].get("pitch") * g).normalize(),
                    j = c.Mp(h[1].get("yaw") * g, h[1].get("pitch") * g).normalize(),
                    p = c.Mp(h[2].get("yaw") * g, h[2].get("pitch") * g).normalize(),
                    h = c.Mp(h[3].get("yaw") * g, h[3].get("pitch") * g).normalize(),
                    k = this.get("cssObject");
                    k.vertices[0].set(f.x, f.y, -f.z);
                    k.vertices[1].set(j.x, j.y, -j.z);
                    k.vertices[2].set(p.x, p.y, -p.z);
                    k.vertices[3].set(h.x, h.y, -h.z);
                    k.contentWidth = this.get("contentWidth");
                    k.contentHeight = this.get("contentHeight");
                    f = n
                }
                j = y;
                this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ") && (this.ef.makeTranslation(0.5 *
                        -this.get("composedTranslationX") * b.Ld, 0.5 * this.get("composedTranslationY") * b.Ld, 0.5 * this.get("composedTranslationZ") * b.Ld), j = n);
                this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll") && (this.ic.makeRotationY(-a.ma * g), this.ic.multiply(e.makeRotationX(-this.get("composedDeltaPitch") * g)), this.ic.multiply(e.makeRotationY(this.get("composedDeltaYaw") * g)), this.ic.multiply(e.makeRotationY(a.ma * g)), j = n);
                if (j || this.p("meshGroup"))
                    this.zl.copy(this.ef), this.zl.multiply(this.ic), this.get("cssObject").matrix.copy(this.zl),
                    this.get("cssObject").matrixWorldNeedsUpdate = n;
                this.set("cameraYaw", a.ma);
                this.set("cameraPitch", a.pitch);
                this.set("cameraRoll", a.md);
                this.set("cameraHfov", a.bd);
                this.set("cameraWidth", a.width);
                this.set("cameraHeight", a.height);
                if (a.Jc && (j || f || this.p("cameraYaw", "cameraPitch", "cameraRoll", "cameraHfov", "cameraWidth", "cameraHeight")))
                    this.get("cssObject").projectVertices(a.Jc), this.set("geometryVisible", this.get("cssObject").isVisible), this.p("geometryVisible") && this.yV()
            }
        }
    });
    define("cL", "require,ge,gW,dv,hZ,a".split(","), function (a) {
        var b = a("ge"),
        c = a("gW"),
        e = a("dv"),
        g = a("hZ"),
        d = a("a"),
        f = new THREE.Matrix4,
        h = Math.PI / 180;
        return {
            wo: function () {
                this.set("distance", m);
                this.set("vertices", m);
                this.wf = r;
                this.ef = new THREE.Matrix4;
                this.ic = new THREE.Matrix4;
                this.pi = new THREE.Matrix4;
                this.Tf = new THREE.Matrix4
            },
            Dp: function (a) {
                this.Cta(a);
                this.Zl(a)
            },
            Nx: function () {
                var a = this.get("meshGroup");
                return a ? e.Gh(a)[0] : r
            },
            Vi: function () {
                this.wf || (this.wf = this.Sq());
                return [0].map(function (a) {
                    var c =
                        this.vx(),
                    a = e.create(this.wf[a], c);
                    g.On(a, g.Tj);
                    g.Pn(a, g.$k);
                    g.Ts(a, b.Rw);
                    g.Wz(a, 1);
                    return a
                }
                    .bind(this))
            },
            Cta: function () {
                if (this.p("vertices")) {
                    var a = this.get("meshGroup");
                    if (a) {
                        this.wf = this.Sq();
                        return e.Gh(a).map(function (a, b) {
                            e.VZ(a, this.wf[b])
                        }
                            .bind(this))
                    }
                }
            },
            Sq: function () {
                function a(b) {
                    return b == 0 || isNaN(b) || !isFinite(b)
                }
                var b = this.get("vertices") || [];
                if (b.length != 4)
                    return [c.Cba(-1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1)];
                var e = d.Mp(b[0].get("yaw") * h, b[0].get("pitch") * h).normalize(),
                f = d.Mp(b[1].get("yaw") *
                        h, b[1].get("pitch") * h).normalize(),
                g = d.Mp(b[2].get("yaw") * h, b[2].get("pitch") * h).normalize(),
                b = d.Mp(b[3].get("yaw") * h, b[3].get("pitch") * h).normalize(),
                o = e.clone().lM(g),
                t = b.clone().lM(f),
                s = o.clone().lM(t).normalize(),
                t = (e.y * 2 * s.x / e.x - 2 * s.y) / (-g.y + e.y * g.x / e.x);
                a(t) && (t = (e.z * 2 * s.x / e.x - 2 * s.z) / (-g.z + e.z * g.x / e.x));
                a(t) && (t = (e.z * 2 * s.y / e.y - 2 * s.z) / (-g.z + e.z * g.y / e.y));
                var v = (2 * s.x - g.x * t) / e.x;
                a(v) && (v = (2 * s.y - g.y * t) / e.y);
                a(v) && (v = (2 * s.z - g.z * t) / e.z);
                o = (f.y * 2 * s.x / f.x - 2 * s.y) / (-b.y + f.y * b.x / f.x);
                a(o) && (o = (f.z * 2 *
                        s.x / f.x - 2 * s.z) / (-b.z + f.z * b.x / f.x));
                a(o) && (o = (f.z * 2 * s.y / f.y - 2 * s.z) / (-b.z + f.z * b.y / f.y));
                var u = (2 * s.x - b.x * o) / f.x;
                a(u) && (u = (2 * s.y - b.y * o) / f.y);
                a(u) && (u = (2 * s.z - b.z * o) / f.z);
                e = e.SF(v);
                f = f.SF(u);
                g = g.SF(t);
                b = b.SF(o);
                return [c.Cba(e.x, e.y, -e.z, f.x, f.y, -f.z, g.x, g.y, -g.z, b.x, b.y, -b.z)]
            },
            Zl: function (a) {
                var b = y;
                if (this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                    this.ef.makeTranslation(-this.get("composedTranslationX") * 0.5 * c.Ld, this.get("composedTranslationY") * 0.5 * c.Ld, this.get("composedTranslationZ") *
                        0.5 * c.Ld);
                    b = n
                }
                if (this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll")) {
                    this.ic.makeRotationY(-a.ma * h);
                    this.ic.multiply(f.makeRotationX(-this.get("composedDeltaPitch") * h));
                    this.ic.multiply(f.makeRotationY(this.get("composedDeltaYaw") * h));
                    this.ic.multiply(f.makeRotationY(a.ma * h));
                    b = n
                }
                if (this.p("distance", "composedTranslationX", "composedTranslationY", "composedTranslationZ")) {
                    a = this.Q.get("composedTranslationX") == 0 && this.Q.get("composedTranslationY") == 0 && this.Q.get("composedTranslationZ") ==
                        0 && this.get("distance") !== m ? c.Uv(this.get("distance")) : c.Np();
                    this.pi.makeScale(a, a, a);
                    b = n
                }
                if (b || this.p("meshGroup")) {
                    this.Tf.copy(this.ef);
                    this.Tf.multiply(this.ic);
                    this.Tf.multiply(this.pi);
                    a = e.Gh(this.get("meshGroup"));
                    e.fm(a[0], this.Tf)
                }
            }
        }
    });
    define("bR", ["require", "ll"], function (a) {
        var b = a("ll");
        return {
            Yt: function () {
                this.set("visible", y);
                this.set("inView", y);
                this.set("url", y);
                this.set("contentWidth", 100);
                this.set("contentHeight", 100);
                this.set("contentInteractive", y);
                this.set("frameLoaded", n);
                this.pb = this.uc = r;
                this.AI = m;
                this.XL = this.XL.bind(this);
                this.YL = this.YL.bind(this);
                this.ZL = this.ZL.bind(this);
                this.qu = this.qu.bind(this);
                this.aT = this.aT.bind(this)
            },
            az: function () {
                this.p("cssObject") && (this.Aja(), this.get("cssObject").element.appendChild(this.uc));
                this.p("url") && this.Tqa(this.get("url"));
                this.p("contentWidth", "contentHeight") && (this.uc.style.width = this.get("contentWidth") + 2 + "px", this.uc.style.height = this.get("contentHeight") + 2 + "px");
                this.p("contentInteractive") && (this.uc.style.pointerEvents = this.get("contentInteractive") ? "auto" : "none")
            },
            si: function () {
                this.p("composedAlpha") && (0 < this.get("composedAlpha") ? this.pb && !this.pb.parentNode && (this.Daa(), this.uc.appendChild(this.pb)) : this.pb && this.pb.parentNode && this.uc.removeChild(this.pb))
            },
            eC: function () {
                this.trigger(b.Lb);
                this.get("frameLoaded") && this.trigger(b.S)
            },
            fy: function () {
                this.Sia()
            },
            YL: function (a) {
                a.preventDefault();
                a.stopImmediatePropagation()
            },
            XL: function () {
                this.Va.jb.pw(r)
            },
            ZL: function (a) {
                a.preventDefault();
                a.stopImmediatePropagation()
            },
            qu: function () {
                this.set("frameLoaded", n);
                this.trigger(b.S)
            },
            aT: function () {
                this.BI = r;
                this.qu()
            },
            Aja: function () {
                this.pb || (this.uc = document.createElement("div"), this.uc.style.position = "absolute", this.uc.style.left = this.uc.style.top = "-1px", this.get("cssObject").isCSS3DObject &&
                    (this.uc.style.transform = "translate(-50%, -50%)"), this.uc.style.overflow = "hidden", this.uc.style["-webkit-overflow-scrolling"] = "touch", this.uc.addEventListener("mouseenter", this.XL, n), this.uc.addEventListener("mousemove", this.YL, n), this.uc.addEventListener("mousewheel", this.ZL, n), this.pb = document.createElement("iframe"), this.pb.setAttribute("allow", "fullscreen; accelerometer; gyroscope; magnetometer; vr; autoplay; camera; microphone; display-capture; xr-spatial-tracking"), this.pb.setAttribute("frameborder",
                        "0"), this.pb.setAttribute("scrolling", "auto"), this.pb.style.width = "100%", this.pb.style.height = "100%", this.pb.addEventListener("load", this.qu, n), 0 < this.get("composedAlpha") && this.uc.appendChild(this.pb))
            },
            Sia: function () {
                this.pb && (this.pb.src = "", this.rV(), this.Nq(), this.pb.parentNode && this.pb.parentNode.removeChild(this.pb), this.pb = r);
                this.uc && (this.uc.parentNode && this.uc.parentNode.removeChild(this.uc), this.uc.removeEventListener("mouseenter", this.XL, n), this.uc.removeEventListener("mousemove", this.YL,
                        n), this.uc.removeEventListener("mousewheel", this.ZL, n), this.uc = r)
            },
            Tqa: function (a) {
                this.AI !== a && (this.AI = a, this.set("frameLoaded", y), this.Daa())
            },
            Daa: function () {
                this.AI ? (this.Xqa(), this.jha(), this.pb.src = this.AI) : (this.Nq(), this.rV(), this.pb.src = "", this.qu())
            },
            Xqa: function () {
                this.Nq();
                this.BI = setTimeout(this.aT, 3E3)
            },
            Nq: function () {
                this.BI && (clearTimeout(this.BI), this.BI = r)
            },
            jha: function () {
                this.rV();
                this.pb.addEventListener("load", this.qu, n)
            },
            rV: function () {
                this.pb.removeEventListener("load", this.qu,
                    n)
            }
        }
    });
    define("ic", ["require", "dv", "ll"], function (a) {
        var b = a("dv"),
        c = a("ll");
        return {
            Yt: function () {
                this.get("materialConfig").sZ.blending = THREE.NoBlending
            },
            eC: function () {
                this.trigger(c.Lb);
                this.trigger(c.S)
            },
            si: function () {
                this.p("meshGroup", "composedAlpha") && b.xd(this.get("meshGroup"), 0 < this.get("composedAlpha") ? 0.001 : 0)
            }
        }
    });
    define("hz", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, ["playbackPositions", "width", "height"], this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, ["playbackPositions", "width", "height"], this.qc)
            },
            qc: function () {
                this.set("playbackPositions", this.j.get("playbackPositions"));
                this.set("contentWidth", this.j.get("width"));
                this.set("contentHeight", this.j.get("height"))
            },
            Ne: function () {
                this.p("playbackPositions",
                    "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("vertices", this.xa.GY()));
                this.p("framePlane", "holePlane", "imagePlane", "vertices") && this.Pa().forEach(function (a) {
                    a.set("vertices", this.get("vertices"));
                    a.set("contentWidth", this.get("contentWidth"));
                    a.set("contentHeight", this.get("contentHeight"))
                }
                    .bind(this))
            }
        }
    });
    define("ho", "require,fg,bC,ev,eg,dq,cL,bR,fs,ic,hz".split(","), function (a) {
        var b = a("fg"),
        c = a("bC"),
        e = a("ev"),
        g = a("eg"),
        d = a("dq"),
        f = a("cL"),
        h = a("bR"),
        j = a("fs"),
        p = a("ic"),
        a = a("hz"),
        k = b.extend(g, f, j, function () {
            g.call(this);
            this.set("tag", "QuadFrameHotspotImage")
        }),
        l = b.extend(e, d, h, function () {
            e.call(this);
            this.set("tag", "QuadFrameHotspotFrame")
        }),
        q = b.extend(g, f, p, function () {
            g.call(this);
            this.set("tag", "QuadFrameHotspotHole")
        });
        return b.extend(c, a, function (a) {
            c.call(this, a);
            this.ru = k;
            this.YR = l;
            this.TS =
                q
        })
    });
    define("iB", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.set("distance", m);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, ["vertices", "distance", "playbackPositions"], this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, ["vertices", "distance", "playbackPositions"], this.qc)
            },
            qc: function () {
                this.set("distance", this.j.get("distance"));
                this.set("vertices", this.j.get("vertices"));
                this.set("playbackPositions", this.j.get("playbackPositions"))
            },
            Ne: function () {
                this.p("playbackPositions",
                    "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("vertices", this.xa.GY()), this.set("alpha", this.xa.Hh()))
            }
        }
    });
    define("gY", "require,fg,ih,ll,dv,eg,cL,fs,lj,iB,km".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("dv"),
        d = a("eg"),
        f = a("cL"),
        h = a("fs"),
        j = a("lj"),
        p = a("iB"),
        k = a("km"),
        l = 0,
        a = b.extend(d, f, p, h, j, function (a) {
            d.call(this);
            this.set("tag", "QuadHotspotImage");
            this.set("id", "quad_hs_image_" + l++);
            this.set("side", THREE.DoubleSide);
            this.j = a;
            this.sh.push(this.j);
            this.Xd = this.Xd.bind(this)
        });
        a.prototype.Qa = function () {
            d.prototype.Qa.call(this);
            c.Eb(this.j, ["image.levels"], this.Xd, n)
        };
        a.prototype.Sa =
        function () {
            c.Pb(this.j, ["image.levels"], this.Xd);
            d.prototype.Sa.call(this)
        };
        a.prototype.Xd = function () {
            this.set("image", this.j.get("image"));
            this.set("level", k.Pva(this.j))
        };
        a.prototype.L = function (a) {
            this.uv();
            d.prototype.L.call(this, a);
            this.p("inView") && this.j.trigger(this.get("inView") ? e.od : e.zd)
        };
        a.prototype.uv = function () {
            if (this.p("meshGroup", "panoramaId", "id")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a) {
                    g.setAttribute(a, g.$s, this.get("panoramaId"));
                    g.setAttribute(a, g.RN, this.get("id"))
                }
                    .bind(this))
            }
        };
        return a
    });
    define("gT", ["require", "ll", "fu"], function (a) {
        function b(a, b) {
            this.jb = a;
            this.Db = b;
            this.Ic = y;
            this.YJ = n;
            this.bQ = this.GU = y;
            this.JP();
            this.gU()
        }
        var c = a("ll"),
        e = a("fu");
        b.prototype.clear = function () {
            this.G7();
            this.oV()
        };
        b.prototype.xe = function (a) {
            this.Ic != a && (this.Ic = a, this.tv())
        };
        b.prototype.Xya = function (a) {
            this.YJ != a && ((this.YJ = a) && this.G7(), this.tv())
        };
        b.prototype.tv = function () {
            if (!this.Ic || this.YJ)
                this.Db.set("state", e.H);
            else if (this.Db.get("autoplay") || this.bQ)
                this.bQ = y, this.Db.set("state", e.P)
        };
        b.prototype.gU = function () {
            if (!this.GU) {
                var a = this.Db.get("video").get("autoplayTime");
                a !== m && this.Db.get("video").get("autoplayTimeLimit") < (new Date).getTime() && (a = m);
                this.Db.set("currentTime", a);
                this.bQ = a !== m
            }
        };
        b.prototype.G7 = function () {
            this.GU || (this.GU = n, this.Db.get("state") == e.P ? (this.Db.get("video").set("autoplayTimeLimit", (new Date).getTime() + g), this.Db.get("video").set("autoplayTime", this.Db.get("currentTime", 0))) : this.Db.get("video").set("autoplayTime", m))
        };
        b.prototype.JP = function () {
            this.Db.get("video").bind(c.D("autoplayTime"),
                this.gU, this, n)
        };
        b.prototype.oV = function () {
            this.Db.get("video").unbind(c.D("autoplayTime"), this.gU, this, n)
        };
        var g = 1E3;
        return b
    });
    define("dF", ["require", "ll", "dD"], function (a) {
        var b = a("ll"),
        c = a("dD");
        return {
            Tq: function () {
                this.set("beamEnabled", y);
                this.Wf = y;
                this.bs = this.cs = m
            },
            bm: function (a) {
                this.cs = a.ma;
                this.bs = a.pitch
            },
            Lj: function (a) {
                if (a.Vd == b.Nh) {
                    var c = !a.Eh() && this.Xl(a);
                    if (c) {
                        a.xs(this.j);
                        this.j.get("useHandCursor") && a.ys(this.j);
                        a.vi(this.get("distance"));
                        var d = this.ya(a.dw());
                        d && a.cM(d, this.ns(a.dw()))
                    }
                    this.Wf != c && (this.Wf = c, this.j.trigger(this.Wf ? b.xc : b.Qb), a.Ms() && this.j.trigger(this.Wf ? b.Mh : b.Kf))
                } else
                    a.Vd == b.Li &&
                    !a.Eh() && this.Xl(a) && (1 < this.j.cF(b.U, n).length && a.dq(this.j), a.vi(this.get("distance")), this.j.trigger(b.U))
            },
            Xl: function (a) {
                if (this.get("beamEnabled"))
                    for (var a = this.BS().Go(a.Ol), b = 0; b < a.length; b++) {
                        var d = a[b];
                        if (c.iq(d.source, d.x, d.y))
                            return n
                    }
                return y
            },
            ya: function (a) {
                return !a || this.j.get("displayTooltipInTouchScreens") && this.Va.C.get("displayTooltipInTouchScreens") !== y ? this.j.get("toolTip", "") : ""
            },
            ns: function (a) {
                if (a) {
                    var a = this.get("yaw") - this.cs,
                    b = this.get("pitch") - this.bs;
                    return Math.sqrt(a *
                        a + b * b)
                }
                return 0
            }
        }
    });
    define("dT", "require,fg,ih,ll,fu,kT,cn,gT,hS,km,dF,iL,kX,bq".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("fu"),
        d = a("kT"),
        f = a("cn"),
        h = a("gT"),
        j = a("hS"),
        p = a("km"),
        k = a("dF"),
        l = a("iL"),
        q = a("kX"),
        o = a("bq"),
        a = b.extend(f, k, function (a) {
            f.call(this);
            this.j = a;
            this.DX = this.ru = r;
            this.sh.push(this.j);
            this.Wd = this.Wd.bind(this);
            this.dl(["loadingActive", "currentTime", "panoramaPixelsPerDegree"]);
            this.set("tag", "VideoHotspot");
            this.set("enabled", n);
            this.set("inVR", y);
            this.set("overlaysEnabled", n);
            this.set("enabledInVR", n);
            this.set("enabledInStandard", n);
            this.set("interactionEnabled", n);
            this.set("centerOverDisplay", y);
            this.set("loadingActive", y);
            this.set("frameEmpty", n);
            this.set("state", g.H);
            this.set("itemVisible", "none");
            this.set("blending", 0);
            this.set("chromaColor", m);
            this.set("chromaThreshold", 0);
            this.set("chromaSmoothing", 0);
            this.Ea = this.ha = this.rc = this.Dd = r;
            this.EX = y;
            this.Im = []
        });
        a.prototype.Qa = function () {
            this.Dd = (new j(e.S)).Hi(this.Hu.bind(this));
            this.rc = (new j(e.wc)).Nk(this.Ku.bind(this));
            this.aQ = new h(this.Va.jb, this.j);
            f.prototype.Qa.call(this);
            c.Eb(this.j, ["blending", "chromaColor", "chromaThreshold", "chromaSmoothing", "distance", "scaleMode", "image.levels", "video.levels", "enabled", "enabledInStandard", "enabledInVR", "fadeInDuration", "fadeOutDuration", "interactionEnabled", "state", "videoVisibleOnStop"], this.Wd, n)
        };
        a.prototype.Sa = function () {
            this.aQ.clear();
            this.Dd.dispose();
            this.rc.dispose();
            c.Pb(this.j, ["blending", "chromaColor", "chromaThreshold", "chromaSmoothing", "distance", "scaleMode",
                    "image.levels", "video.levels", "enabled", "enabledInStandard", "enabledInVR", "fadeInDuration", "fadeOutDuration", "interactionEnabled", "state", "videoVisibleOnStop"], this.Wd);
            this.au();
            this.$q();
            f.prototype.Sa.call(this)
        };
        a.prototype.Wd = function () {
            this.set("image", this.j.get("image"));
            this.set("imageLevel", p.Xva(this.j, this.get("panoramaPixelsPerDegree")));
            this.set("video", this.j.get("video"));
            this.set("videoLevel", d.ah(this.get("video")));
            this.set("enabled", this.j.get("enabled"));
            this.set("enabledInStandard",
                this.j.get("enabledInStandard"));
            this.set("enabledInVR", this.j.get("enabledInVR"));
            this.set("fadeInDuration", this.j.get("fadeInDuration"));
            this.set("fadeOutDuration", this.j.get("fadeOutDuration"));
            this.set("interactionEnabled", this.j.get("interactionEnabled"));
            this.set("state", this.j.get("state"));
            this.set("videoVisibleOnStop", this.j.get("videoVisibleOnStop"));
            this.set("blending", this.j.get("blending"));
            this.set("chromaColor", this.j.get("chromaColor"));
            this.set("chromaThreshold", this.j.get("chromaThreshold"));
            this.set("chromaSmoothing", this.j.get("chromaSmoothing"))
        };
        a.prototype.L = function (a) {
            this.set("inVR", a.sb);
            this.set("hotspotsEnabled", a.aw);
            this.Cp();
            this.kE();
            f.prototype.L.call(this, a);
            this.tv(a);
            this.uE();
            this.Fp(a)
        };
        a.prototype.Cp = function () {
            if (this.p("video", "videoLevel", "image", "imageLevel")) {
                var a = [];
                if (this.p("image", "imageLevel")) {
                    this.dB();
                    this.ha && a.push(this.ha)
                }
                if (this.p("video", "videoLevel")) {
                    this.gB();
                    this.Ea && a.push(this.Ea)
                }
                this.jf(a);
                this.Dd.yd(a);
                this.rc.yd(a)
            }
        };
        a.prototype.kE =
        function () {
            this.p("video", "videoLevel", "image", "imageLevel", "blending", "chromaColor", "chromaThreshold", "chromaSmoothing") && this.Pa().forEach(function (a) {
                a.set("blending", this.get("blending"));
                a.set("chromaColor", this.get("chromaColor"));
                a.set("chromaThreshold", this.get("chromaThreshold"));
                a.set("chromaSmoothing", this.get("chromaSmoothing"))
            }
                .bind(this))
        };
        a.prototype.tv = function () {
            this.p("video", "composedAlpha", "enabledInVR", "enabledInStandard", "enabled", "inVR") && this.aQ.xe(this.get("composedAlpha") >
                0 && this.get("hotspotsEnabled") && this.get("enabled") && (!this.get("inVR") || this.get("enabledInVR")) && (this.get("inVR") || this.get("enabledInStandard")));
            this.p("blendingActive") && this.aQ.Xya(this.get("blendingActive"))
        };
        a.prototype.uE = function () {
            this.set("frameEmpty", !this.Ea || this.Ea.get("frameEmpty"))
        };
        a.prototype.Fp = function (a) {
            var b = this.get("itemVisible");
            if (this.p("frameEmpty", "state", "image", "video", "inVR", "hotspotsEnabled", "enabledInVR", "enabledInStandard", "enabled", "interactionEnabled")) {
                var c =
                    "none";
                if (this.get("hotspotsEnabled") && this.get("enabled") && (!this.get("inVR") || this.get("enabledInVR")) && (this.get("inVR") || this.get("enabledInStandard"))) {
                    this.Ea && (!this.ha || !this.get("frameEmpty") && (this.get("state") != g.H || this.EX && this.get("videoVisibleOnStop"))) ? c = "video" : this.ha && (c = "image");
                    if (this.get("state") != g.H)
                        this.EX = n
                }
                this.set("itemVisible", c);
                this.set("beamEnabled", c != "none" && this.get("interactionEnabled"))
            }
            if (this.p("itemVisible")) {
                var c = this.get("itemVisible") != "none",
                d = b != "none";
                if (c && d && !this.get("chromaColor") && this.Im.length == 0) {
                    this.ha && this.ha.set("alpha", this.get("itemVisible") == "image" ? 1 : 0);
                    this.Ea && this.Ea.set("alpha", this.get("itemVisible") == "video" ? 1 : 0)
                } else {
                    b = c == d ? 100 : c ? this.get("fadeInDuration") : this.get("fadeOutDuration");
                    c != d && this.j.trigger(c ? e.od : e.zd);
                    var d = this.ha ? this.ha.get("alpha") : 0,
                    f = this.Ea ? this.Ea.get("alpha") : 0,
                    c = [{
                            Bw: f,
                            image: d
                        }
                    ];
                    if (this.get("itemVisible") == "video") {
                        c.push({
                            Bw: 1,
                            image: d,
                            time: b * (1 - f)
                        });
                        c.push({
                            Bw: 1,
                            image: 0,
                            time: 50 * (d - 0)
                        })
                    } else if (this.get("itemVisible") ==
                        "image") {
                        c.push({
                            Bw: f,
                            image: 1,
                            time: b * (1 - d)
                        });
                        c.push({
                            Bw: 0,
                            image: 1,
                            time: 50 * (f - 0)
                        })
                    } else
                        c.push({
                            Bw: 0,
                            image: 0,
                            time: Math.max(f, d, 1 / b) * b
                        });
                    this.Im = [];
                    for (b = 1; b < c.length; b++)
                        c[b].time > 0 && this.Im.push(new q("linear", [new o("imageAlpha", c[b - 1].image, c[b].image), new o("videoAlpha", c[b - 1].Bw, c[b].Bw)], c[b].time))
                }
            }
            if (this.Im.length > 0) {
                this.Im[0].Re() ? this.Im.shift() : this.Im[0].fb(a.vd);
                if (this.Im.length > 0) {
                    this.ha && this.ha.set("alpha", this.Im[0].Fb("imageAlpha"));
                    this.Ea && this.Ea.set("alpha", this.Im[0].Fb("videoAlpha"));
                    this.Ia()
                }
            }
        };
        a.prototype.dB = function () {
            this.au();
            if (this.get("image") && this.get("imageLevel")) {
                this.ha = new this.ru;
                this.ha.set("image", this.get("image"));
                this.ha.set("level", this.get("imageLevel"));
                this.ha.set("visible", n);
                this.ha.set("alpha", 0);
                this.ha.set("side", THREE.DoubleSide)
            }
        };
        a.prototype.au = function () {
            if (this.ha) {
                this.ha.remove();
                this.ha = r
            }
        };
        a.prototype.gB = function () {
            this.$q();
            if (this.get("video") && this.get("videoLevel")) {
                this.Ea = new this.DX;
                this.Ea.set("scriptObject", this.j);
                this.Ea.set("video",
                    this.get("video"));
                this.Ea.set("level", this.get("videoLevel"));
                this.Ea.set("visible", n);
                this.Ea.set("alpha", 0);
                this.Ea.set("side", THREE.DoubleSide)
            }
        };
        a.prototype.$q = function () {
            if (this.Ea) {
                this.Ea.remove();
                this.Ea = r
            }
        };
        a.prototype.Hu = function () {
            this.trigger(e.Lb);
            this.trigger(e.S)
        };
        a.prototype.Ku = function (a, b) {
            var c = 0;
            b.zn(function (a) {
                (a = b.Ai(a)) && (c = c + a.Kh)
            });
            this.trigger(new l(e.wc, c / b.Yc.length))
        };
        a.prototype.BS = function () {
            return this.get("itemVisible") == "video" ? this.Ea : this.ha
        };
        return a
    });
    define("fi", "require,ll,fu,bU,dv,fK,jy,dU,dX,hT,kT".split(","), function (a) {
        var b = a("ll"),
        c = a("fu"),
        e = a("bU"),
        g = a("dv");
        a("fK");
        var d = a("jy"),
        f = a("dU"),
        h = a("dX"),
        j = a("hT"),
        p = a("kT");
        return {
            Yt: function () {
                this.set("visible", y);
                this.set("inView", y);
                this.set("frameEmpty", n);
                this.set("blending", 0);
                this.set("chromaColor", m);
                this.set("chromaThreshold", 0);
                this.set("chromaSmoothing", 0);
                this.set("scriptObject", r);
                this.set("video", r);
                this.set("level", r);
                this.set("loop", y);
                this.set("side", m);
                this.ab = this.Ea = r;
                this.EX = y;
                this.tL = this.Cf = this.wp = this.ca = this.ol = this.F = r
            },
            fy: function () {
                this.$q()
            },
            az: function () {
                this.Dta();
                this.kE();
                this.uE()
            },
            Dta: function () {
                if (this.p("scriptObject", "video", "level")) {
                    this.$q();
                    this.Ea = this.get("video");
                    this.ab = this.get("level");
                    this.j = this.get("scriptObject");
                    this.gB()
                }
            },
            kE: function () {
                if (this.p("video", "blending", "chromaColor", "chromaThreshold", "chromaSmoothing", "side") && this.Ea) {
                    var a = new e.Wn(this.Ea.Dj());
                    a.As = this.get("blending");
                    a.wn = this.get("chromaColor");
                    a.SE = this.get("chromaThreshold");
                    a.RE = this.get("chromaSmoothing");
                    a.side = this.get("side");
                    this.set("materialConfig", a)
                }
            },
            si: function () {
                this.p("visible", "composedAlpha", "image", "state") && this.set("inView", this.get("visible") && this.get("composedAlpha") > 0);
                this.p("composedAlpha", "meshGroup", "inView") && g.xd(this.get("meshGroup"), this.get("inView") ? this.get("composedAlpha") : 0)
            },
            uE: function () {
                var a = this.F && this.F.AM(),
                b = !!a && a.isEmpty();
                if (b && !this.get("frameEmpty") && this.F.Qe() == c.P && this.j.get("loop")) {
                    a = this.Cf;
                    b = y
                }
                this.set("frameEmpty",
                    b);
                if (!this.Cf || a && !this.Cf.isEqual(a)) {
                    this.Cf = a;
                    this.tL.Di(this.Cf.cu);
                    this.tL.update();
                    this.Ia()
                } else
                    this.F.Qe() == c.P && this.Ia()
            },
            gB: function () {
                if (this.Ea && this.ab && this.j) {
                    this.set("textureSource", this.tL = new h);
                    this.set("contentWidth", this.ab.get("width"));
                    this.set("contentHeight", this.ab.get("height"));
                    this.set("alpha", 0);
                    this.F = new p(this.Va.jb, this.Ea);
                    this.F.dya();
                    this.ol = new d(this.j, this.F);
                    this.ca = new f(this.Va.jb, this.j, this.F);
                    this.wp = new j(this.Va.Vb.get("panorama"), this.F);
                    this.io();
                    this.trigger(b.Lb);
                    this.trigger(b.S)
                }
            },
            $q: function () {
                if (this.F) {
                    this.set("textureSource", this.tL = r);
                    this.op();
                    this.ca.clear();
                    this.ca = r;
                    this.ol.clear();
                    this.ol = r;
                    this.wp.clear();
                    this.wp = r;
                    this.F.clear();
                    this.Cf = this.F = r;
                    this.set("frameEmpty", n);
                    this.ab = this.Ea = r
                }
            },
            io: function () {
                this.F.bind(p.Md, this.hd, this, n);
                this.F.bind(b.gc, this.xh, this, n)
            },
            op: function () {
                this.F.unbind(p.Md, this.hd, this, n);
                this.F.unbind(b.gc, this.xh, this, n)
            },
            xh: function () {
                this.Ia()
            },
            hd: function () {
                this.Ia()
            }
        }
    });
    define("kW", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.set("distance", m);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, ["playbackPositions", "distance"], this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, ["playbackPositions", "distance"], this.qc)
            },
            qc: function () {
                this.set("distance", this.j.get("distance"));
                this.set("playbackPositions", this.j.get("playbackPositions"))
            },
            Ne: function () {
                this.p("playbackPositions", "currentTime") &&
                (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("vertices", this.xa.GY()), this.set("alpha", this.xa.Hh()));
                this.p("video", "image", "vertices", "distance") && this.Pa().forEach(function (a) {
                    a.set("vertices", this.get("vertices"));
                    a.set("distance", this.get("distance"))
                }
                    .bind(this))
            }
        }
    });
    define("hQ", "require,fg,dT,eg,cL,fs,fi,kW".split(","), function (a) {
        var b = a("fg"),
        c = a("dT"),
        e = a("eg"),
        g = a("cL"),
        d = a("fs"),
        f = a("fi"),
        a = a("kW"),
        h = b.extend(e, g, d, function () {
            e.call(this);
            this.set("tag", "QuadVideoHotspotImage")
        }),
        j = b.extend(e, g, f, function () {
            e.call(this);
            this.set("tag", "QuadVideoHotspotVideo")
        });
        return b.extend(c, a, function (a) {
            c.call(this, a);
            this.ru = h;
            this.DX = j
        })
    });
    define("iq", "require,fg,ih,fu,hL,kA,r".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("fu"),
        g = a("hL"),
        d = a("kA"),
        f = a("r"),
        a = b.extend(g, function (a) {
            g.call(this);
            this.j = a;
            this.uh = this.uh.bind(this);
            this.vh = this.vh.bind(this);
            this.Si()
        });
        a.prototype.Qa = function () {
            g.prototype.Qa.call(this);
            this.j.set("state", this.j.get("startState"));
            c.Eb(this.j, ["color", "speed", "intensity", "size", "opacity", "maxDistance", "farPlaneDistance", "particleCount", "farPlaneParticleCount"], this.uh, n);
            c.Eb(this.j, ["state"], this.vh,
                n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j, ["color", "speed", "intensity", "size", "opacity", "maxDistance", "farPlaneDistance", "particleCount", "farPlaneParticleCount"], this.uh);
            c.Pb(this.j, ["state"], this.vh);
            this.j.set("state", e.H);
            g.prototype.Sa.call(this)
        };
        a.prototype.uh = function () {
            this.Si();
            this.EK()
        };
        a.prototype.vh = function () {
            this.pK = this.j.get("state");
            this.Ia()
        };
        a.prototype.Si = function () {
            g.prototype.Si.call(this);
            var a,
            b;
            if (f.le()) {
                this.fu = this.Pm = 4;
                this.Ru = 2400;
                this.gu = 1200;
                a = 1.5;
                b = 1.6
            } else {
                this.Pm =
                    2;
                this.fu = 4;
                this.Ru = 4800;
                this.gu = 2400;
                b = a = 1
            }
            var c = this.j.get("intensity", 0.5);
            this.Ub = d.CF(this.j.get("color", "#ffffff"));
            this.$C = this.j.get("opacity", 0.25) * 0.24 + 0.01;
            this.$C = this.$C * 2;
            this.Tr = (c * (0.37 - 0.17) + 0.17) * a;
            a = (this.j.get("speed", 0.5) * (0.09 - 0.02) + 0.02) / this.Tr * b;
            this.lC = a * 0.9;
            this.Bu = a * 1.1;
            this.Ru = Math.round(this.j.get("particleCount", this.Ru) * c);
            this.gu = Math.round(this.j.get("farPlaneParticleCount", this.gu) * c);
            this.kJ = 0;
            this.wl = 2;
            this.Qm = -2;
            this.VT = 0;
            this.FA = 0.75;
            this.nB = 0.5;
            this.MI = this.j.get("initialState");
            this.gL = this.j.get("startDuration");
            this.lL = this.j.get("stopDuration");
            this.Pm = this.j.get("maxDistance", this.Pm);
            this.fu = this.j.get("farPlaneDistance", this.fu);
            this.Vsa()
        };
        a.prototype.NH = function () {
            var a = new THREE.MeshBasicMaterial;
            a.color = new THREE.Color(this.Ub[0] / 255, this.Ub[1] / 255, this.Ub[2] / 255);
            a.side = THREE.FrontSide;
            a.transparent = n;
            a.depthTest = y;
            a.needsUpdate = n;
            if (!this.oI)
                this.oI = new THREE.BoxGeometry(0.01, 0.2, 0.01);
            return new THREE.Mesh(this.oI, a)
        };
        a.prototype.Vsa = function () {
            var a = this.re &&
                this.re.children || [],
            b = new THREE.Color(this.Ub[0] / 255, this.Ub[1] / 255, this.Ub[2] / 255);
            a.forEach(function (a) {
                a.material.color = b;
                a.material.needsUpdate = n
            })
        };
        return a
    });
    define("eW", "require,fg,gf,ll,bZ,gU".split(","), function (a) {
        var b = a("fg"),
        c = a("gf"),
        e = a("ll"),
        g = a("bZ"),
        d = a("gU"),
        f = b.extend(d, function (a, b, e, f) {
            d.call(this);
            this.jb = a;
            this.C = b;
            this.Vb = e;
            this.g = f;
            this.sC = new c;
            this.XV(this);
            this.set("tag", "Root")
        });
        f.prototype.bg = function (a) {
            return this.sC.get(a)
        };
        f.prototype.all = function () {
            for (var a = [], b = [this]; b.length > 0; ) {
                var c = b.pop();
                a.push(c);
                for (var d = c.zc.length - 1; d >= 0; d--)
                    b.push(c.zc[d])
            }
            return a
        };
        f.prototype.update = function (a) {
            var b = this.all(),
            c = b.length,
            d;
            for (d = 0; d < c; d++)
                b[d].Xia();
            for (d = 0; d < c; d++)
                b[d].set("index", d);
            for (d = 0; d < c; d++)
                b[d].Va && b[d].L(a);
            for (d = 0; d < c; d++)
                b[d].Qia();
            if (this.KI) {
                for (d = 0; d < c; d++)
                    b[d].Tia();
                this.update(a)
            }
        };
        f.prototype.Ia = function () {
            this.Wg || this.trigger(new g(e.aa));
            d.prototype.Ia.call(this)
        };
        f.prototype.Qp = function (a) {
            return Array.isArray(a) ? a.map(this.Qp.bind(this)) : this.sC.get(a) || f.factory.create(a)
        };
        return f
    });
    define("kq", "require,fg,ih,fu,hL,r".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("fu"),
        g = a("hL"),
        d = a("r"),
        a = b.extend(g, function (a) {
            g.call(this);
            this.j = a;
            this.uh = this.uh.bind(this);
            this.vh = this.vh.bind(this);
            this.Si()
        });
        a.prototype.Qa = function () {
            g.prototype.Qa.call(this);
            this.j.set("state", this.j.get("startState"));
            c.Eb(this.j, ["intensity", "speed"], this.uh, n);
            c.Eb(this.j, ["state"], this.vh, n)
        };
        a.prototype.Sa = function () {
            c.Pb(this.j, ["intensity", "speed"], this.uh);
            c.Pb(this.j, ["state"], this.vh);
            this.j.set("state", e.H);
            g.prototype.Sa.call(this)
        };
        a.prototype.uh = function () {
            this.Si();
            this.EK()
        };
        a.prototype.vh = function () {
            this.pK = this.j.get("state");
            this.Ia()
        };
        a.prototype.Si = function () {
            g.prototype.Si.call(this);
            var a = this.j.get("intensity"),
            b = this.j.get("speed"),
            c,
            e,
            l,
            q,
            o,
            t;
            if (d.Za() || d.browser() == d.at) {
                c = 1E3;
                e = 350;
                l = 1800;
                q = 400;
                t = 0.8;
                o = 1.2
            } else if (d.le()) {
                c = 1500;
                e = 500;
                l = 2500;
                q = 500;
                t = 0.8;
                o = 1.2
            } else {
                c = 3E3;
                e = 1E3;
                l = 5E3;
                q = 1E3;
                t = 0.6;
                o = 1
            }
            this.MI = this.j.get("initialState");
            this.gL = this.j.get("startDuration");
            this.lL = this.j.get("stopDuration");
            this.FA = 0.75;
            this.nB = 0.5;
            this.Pm = 4;
            this.Qm = -2;
            this.wl = 3;
            this.kJ = 35;
            this.fu = 7;
            this.Tr = (t + a * (o - t)) / f;
            this.lC = this.Bu = 0.15 + b * 1.35;
            this.Ru = e + a * (c - e);
            this.gu = q + a * (l - q)
        };
        a.prototype.NH = function () {
            return new THREE.Sprite(this.eB())
        };
        a.prototype.eB = function () {
            var a = new THREE.SpriteMaterial;
            a.map = this.fB();
            a.side = THREE.FrontSide;
            a.transparent = n;
            a.depthTest = y;
            a.needsUpdate = n;
            return a
        };
        a.prototype.fB = function () {
            if (this.xb)
                return this.xb;
            var a = document.createElement("canvas");
            a.width = a.height = f;
            var b = a.getContext("2d"),
            c = b.createRadialGradient(a.width * 0.5, a.height * 0.5, a.height * 0.2, a.width * 0.5, a.height * 0.5, a.height * 0.5);
            c.addColorStop(0, "rgba(255, 255, 255, 0.8)");
            c.addColorStop(1, "rgba(255, 255, 255, 0)");
            b.fillStyle = c;
            b.fillRect(0, 0, a.width, a.height);
            this.xb = new THREE.Texture;
            this.xb.image = a;
            this.xb.needsUpdate = n;
            return this.xb
        };
        var f = 32;
        return a
    });
    define("co", ["require", "gW", "r"], function (a) {
        var b = a("gW"),
        c = a("r"),
        e = new THREE.Matrix4,
        g = Math.PI / 180;
        return {
            wo: function () {
                this.set("rotationX", 0);
                this.set("rotationY", 0);
                this.set("rotationZ", 0);
                this.set("yaw", 0);
                this.set("pitch", 0);
                this.set("roll", 0);
                this.set("scale", 1);
                this.set("hfov", m);
                this.set("vfov", r);
                this.ef = new THREE.Matrix4;
                this.ic = new THREE.Matrix4;
                this.tk = new THREE.Matrix4;
                this.Xi = new THREE.Matrix4;
                this.tg = new THREE.Matrix4;
                this.pi = new THREE.Matrix4;
                this.zl = new THREE.Matrix4
            },
            RQ: function () {
                var a =
                    c.Rd() == c.Lh || c.browser() == c.at ? new THREE.CSS3DRectangle : new THREE.CSS3DObject;
                a.matrixAutoUpdate = y;
                return a
            },
            Dp: function (a) {
                if (this.p("contentWidth", "contentHeight")) {
                    var c = this.get("cssObject");
                    c.contentWidth = this.get("contentWidth");
                    c.contentHeight = this.get("contentHeight");
                    c.updateVertices()
                }
                c = y;
                this.p("composedTranslationX", "composedTranslationY", "composedTranslationZ") && (this.ef.makeTranslation(0.5 * -this.get("composedTranslationX") * b.Ld, 0.5 * this.get("composedTranslationY") * b.Ld, 0.5 * this.get("composedTranslationZ") *
                        b.Ld), c = n);
                this.p("composedDeltaYaw", "composedDeltaPitch", "composedDeltaRoll") && (this.ic.makeRotationY(-a.ma * g), this.ic.multiply(e.makeRotationX(-this.get("composedDeltaPitch") * g)), this.ic.multiply(e.makeRotationY(this.get("composedDeltaYaw") * g)), this.ic.multiply(e.makeRotationY(a.ma * g)), c = n);
                this.p("yaw", "pitch") && (this.tk.makeRotationY(-this.get("yaw") * g), this.tk.multiply(e.makeRotationX(this.get("pitch") * g)), c = n);
                if (this.p("flipHorizontally", "hfov", "vfov", "composedTranslationX", "composedTranslationY",
                        "composedTranslationZ")) {
                    var c = this.get("contentWidth"),
                    h = this.get("contentHeight"),
                    j = this.get("hfov"),
                    p = this.get("vfov");
                    this.Xi.makeTranslation(0, 0,  - (c / (2 * Math.tan(0.5 * j * g))));
                    var k = (this.get("flipHorizontally") ? -1 : 1) * this.get("scale"),
                    l = this.get("scale");
                    p && (l *= c * Math.tan(0.5 * p * g) / (h * Math.tan(0.5 * j * g)));
                    this.pi.makeScale(k, l, 1);
                    c = n
                }
                this.p("rotationX", "rotationY", "rotationZ", "roll") && (this.tg.makeRotationZ(this.get("roll") * g), this.tg.multiply(e.makeRotationY(this.get("rotationY") * g)), this.tg.multiply(e.makeRotationX(this.get("rotationX") *
                            g)), this.tg.multiply(e.makeRotationZ(this.get("rotationZ") * g)), c = n);
                if (c || this.p("meshGroup"))
                    this.zl.copy(this.ef), this.zl.multiply(this.ic), this.zl.multiply(this.tk), this.zl.multiply(this.Xi), this.zl.multiply(this.tg), this.zl.multiply(this.pi), this.get("cssObject").matrix.copy(this.zl), this.get("cssObject").matrixWorldNeedsUpdate = n;
                this.set("cameraYaw", a.ma);
                this.set("cameraPitch", a.pitch);
                this.set("cameraRoll", a.md);
                this.set("cameraHfov", a.bd);
                this.set("cameraWidth", a.width);
                this.set("cameraHeight",
                    a.height);
                if (a.Jc && (c || this.p("cameraYaw", "cameraPitch", "cameraRoll", "cameraHfov", "cameraWidth", "cameraHeight")))
                    this.get("cssObject").projectVertices(a.Jc), this.set("geometryVisible", this.get("cssObject").isVisible), this.p("geometryVisible") && this.yV()
            }
        }
    });
    define("fr", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, ["playbackPositions", "width", "height"], this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, ["playbackPositions", "width", "height"], this.qc)
            },
            qc: function () {
                this.set("playbackPositions", this.j.get("playbackPositions"));
                this.set("contentWidth", this.j.get("width"));
                this.set("contentHeight", this.j.get("height"))
            },
            Ne: function () {
                this.p("playbackPositions",
                    "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("yaw", this.xa.get("yaw")), this.set("pitch", this.xa.get("pitch")), this.set("roll", this.xa.get("roll")), this.set("rotationX", this.xa.get("rotationX")), this.set("rotationY", this.xa.get("rotationY")), this.set("hfov", this.xa.get("hfov")), this.set("vfov", this.xa.get("vfov")));
                this.p("framePlane", "holePlane", "imagePlane", "yaw", "pitch", "roll", "rotationX", "rotationY", "hfov", "vfov", "contentWidth", "contentHeight") &&
                this.Pa().forEach(function (a) {
                    a.set("yaw", this.get("yaw"));
                    a.set("pitch", this.get("pitch"));
                    a.set("roll", this.get("roll"));
                    a.set("rotationX", this.get("rotationX"));
                    a.set("rotationY", this.get("rotationY"));
                    a.set("hfov", this.get("hfov"));
                    a.set("vfov", this.get("vfov"));
                    a.set("contentWidth", this.get("contentWidth"));
                    a.set("contentHeight", this.get("contentHeight"))
                }
                    .bind(this))
            }
        }
    });
    define("jK", "require,fg,bC,ev,eg,co,kO,bR,fs,ic,fr".split(","), function (a) {
        var b = a("fg"),
        c = a("bC"),
        e = a("ev"),
        g = a("eg"),
        d = a("co"),
        f = a("kO"),
        h = a("bR"),
        j = a("fs"),
        p = a("ic"),
        a = a("fr"),
        k = b.extend(g, f, j, function () {
            g.call(this);
            this.set("tag", "RectangleFrameHotspotImage")
        }),
        l = b.extend(e, d, h, function () {
            e.call(this);
            this.set("tag", "RectangleFrameHotspotFrame")
        }),
        q = b.extend(g, f, p, function () {
            g.call(this);
            this.set("tag", "RectangleFrameHotspotHole")
        });
        return b.extend(c, a, function (a) {
            c.call(this, a);
            this.ru = k;
            this.YR =
                l;
            this.TS = q
        })
    });
    define("kP", ["require", "ih", "kx"], function (a) {
        var b = a("ih"),
        c = a("kx");
        return {
            Yj: function () {
                this.set("playbackPositions", r);
                this.set("scaleMode", m);
                this.set("distance", m);
                this.qc = this.qc.bind(this);
                this.xa = new c
            },
            sk: function () {
                b.Eb(this.j, ["playbackPositions", "distance", "scaleMode"], this.qc, n)
            },
            uk: function () {
                b.Pb(this.j, ["playbackPositions", "distance", "scaleMode"], this.qc)
            },
            qc: function () {
                this.set("scaleMode", this.j.get("scaleMode"));
                this.set("distance", this.j.get("distance"));
                this.set("playbackPositions", this.j.get("playbackPositions"))
            },
            Ne: function () {
                this.p("playbackPositions", "currentTime") && (this.xa.Ws(this.get("playbackPositions")), this.xa.Vs(this.get("currentTime")), this.set("yaw", this.xa.get("yaw")), this.set("pitch", this.xa.get("pitch")), this.set("roll", this.xa.get("roll")), this.set("rotationX", this.xa.get("rotationX")), this.set("rotationY", this.xa.get("rotationY")), this.set("hfov", this.xa.get("hfov")), this.set("vfov", this.xa.get("vfov")), this.set("alpha", this.xa.Hh()));
                this.p("video", "image", "yaw", "pitch", "roll", "rotationX",
                    "rotationY", "hfov", "vfov", "distance", "scaleMode", "image", "video") && this.Pa().forEach(function (a) {
                    a.set("yaw", this.get("yaw"));
                    a.set("pitch", this.get("pitch"));
                    a.set("roll", this.get("roll"));
                    a.set("rotationX", this.get("rotationX"));
                    a.set("rotationY", this.get("rotationY"));
                    a.set("hfov", this.get("hfov"));
                    a.set("vfov", this.get("vfov"));
                    a.set("scaleMode", this.get("scaleMode"));
                    a.set("distance", this.get("distance"))
                }
                    .bind(this))
            }
        }
    });
    define("lo", "require,fg,dT,eg,kO,fs,fi,kP".split(","), function (a) {
        var b = a("fg"),
        c = a("dT"),
        e = a("eg"),
        g = a("kO"),
        d = a("fs"),
        f = a("fi"),
        a = a("kP"),
        h = b.extend(e, g, d, function () {
            e.call(this);
            this.set("tag", "RectangleVideoHotspotImage")
        }),
        j = b.extend(e, g, f, function () {
            e.call(this);
            this.set("tag", "RectangleVideoHotspotVideo")
        });
        return b.extend(c, a, function (a) {
            c.call(this, a);
            this.ru = h;
            this.DX = j
        })
    });
    define("dd", "require,dW,gU,iU,hd,hw,jq,hs,ko,eI,O,kJ,da,bo,ho,gY,hQ,iq,eW,kq,jK,lo,bH".split(","), function (a) {
        function b(a, b) {
            Array.isArray(b) || (b = [b]);
            for (var d = 0; d < b.length; d++)
                if (c.tb(b[d], a))
                    return n;
            return y
        }
        var c = a("dW"),
        e = a("gU"),
        g = a("iU"),
        d = a("hd"),
        f = a("hw"),
        h = a("jq"),
        j = a("hs"),
        p = a("ko"),
        k = a("eI"),
        l = a("O"),
        q = a("kJ"),
        o = a("da"),
        t = a("bo"),
        s = a("ho"),
        v = a("gY"),
        u = a("hQ"),
        w = a("iq"),
        x = a("eW"),
        z = a("kq"),
        C = a("jK"),
        A = a("lo");
        a("bH");
        a = {};
        x.factory = a;
        a.create = function (a) {
            if (a instanceof e)
                return a;
            if (b(a,
                    ["HDRPanorama", "LivePanorama", "Panorama", "VideoPanorama"]))
                return new l(a);
            if (b(a, ["CubicPanoramaFrame", "SphericPanoramaFrame"]))
                return b(a, "SphericPanoramaFrame") && a.Jh() ? new o(a) : new q(a);
            if (b(a, ["DustPanoramaOverlay"]))
                return new d(a);
            if (b(a, "HotspotPanoramaOverlay"))
                return new h(a);
            if (b(a, ["HotspotPanoramaOverlayImage", "HotspotPanoramaOverlayMap"]))
                return new j(a);
            if (b(a, "Menu"))
                return new k(a);
            if (b(a, ["CeilingCapPanoramaOverlay", "TripodCapPanoramaOverlay"]))
                return new g(a);
            if (b(a, ["FlatHotspotPanoramaOverlayImage",
                        "FlatHotspotPanoramaOverlayMap"]))
                return new f(a);
            if (b(a, ["LensFlarePanoramaOverlay"]))
                return new p(a);
            if (b(a, ["RainPanoramaOverlay"]))
                return new w(a);
            if (b(a, ["SnowPanoramaOverlay"]))
                return new z(a);
            if (b(a, ["PopupPanoramaOverlay"]))
                return new t(a);
            if (b(a, ["QuadFramePanoramaOverlay"]))
                return new s(a);
            if (b(a, ["QuadHotspotPanoramaOverlayImage", "QuadHotspotPanoramaOverlayMap"]))
                return new v(a);
            if (b(a, ["QuadVideoPanoramaOverlay"]))
                return new u(a);
            if (b(a, ["FramePanoramaOverlay"]))
                return new C(a);
            if (b(a,
                    ["VideoPanoramaOverlay"]))
                return new A(a);
            i("Invalid script object")
        };
        return a
    });
    define("lf", ["require"], function () {
        var a = {
            jca: function (b, c, e, g, d, f) {
                return a.jva(b, 2 * (c / g) - 1, 2 *  - (e / d) + 1, f)
            },
            jva: function (a, c, e, g) {
                g || (g = new THREE.Ray);
                g.origin.setFromMatrixPosition(a.matrixWorld);
                g.direction.set(c, e, 0.5).unproject(a).sub(g.origin).normalize();
                return g
            },
            xva: function (a, c) {
                c || (c = new THREE.Ray);
                c.origin.set(0, 0, 0);
                c.direction.set(0, 0, -1).applyQuaternion(a.quaternion);
                return c
            },
            wva: function (a, c) {
                c || (c = new THREE.Ray);
                c.origin.set(0, 0, 0).applyMatrix4(a);
                c.direction.set(0, 0, -1).applyMatrix4(a).sub(c.origin).normalize();
                return c
            }
        };
        return a
    });
    define("eD", ["require"], function () {
        function a(a) {
            this.Ub = this.FB(a.get("vrPointerColor"));
            this.bn = this.FB(a.get("vrPointerSelectionColor"));
            this.Bp = this.xk([0, 0, 0], 0);
            this.aL = this.xk([0, 0, 0], 0.125);
            this.fka = this.xk(this.Ub, 1);
            this.gka = this.xk(this.bn, 1);
            this.Lia = this.xk(this.bn, 1);
            this.Kia = this.xk(this.Ub, 0.5);
            this.Iia = this.xk(this.Ub, 1);
            this.Jia = this.xk(this.bn, 1);
            this.Rh = this.Ce = 64;
            this.OP = 4E3;
            this.a4 = 0.1;
            this.Sh = 0.16;
            this.zk = 0.04;
            this.b3 = this.zH = 0.68 - this.zk;
            this.yH = 1 - this.zk;
            this.u = document.createElement("canvas");
            this.u.width = this.Ce;
            this.u.height = this.Rh;
            this.ka = this.u.getContext("2d");
            this.Wf = this.tQ = y;
            this.by = this.SJ = m;
            this.Ht = 0
        }
        a.prototype.FB = function (a) {
            a = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
            return [parseInt(a[1], 16), parseInt(a[2], 16), parseInt(a[3], 16)]
        };
        a.prototype.xk = function (a, c) {
            return "rgba(" + a.join(",") + ", " + c + ")"
        };
        a.prototype.Rya = function (a, c) {
            this.Wf = a;
            this.SJ = c
        };
        a.prototype.sN = P("tQ");
        a.prototype.ad = Q("Ce");
        a.prototype.Pd = Q("Rh");
        a.prototype.yg = Q("u");
        a.prototype.update = function (a) {
            return this.tQ ?
            this.jka(a) : this.Wf ? this.oka() : this.nka()
        };
        a.prototype.AH = function () {
            this.ka.clearRect(0, 0, this.Ce, this.Rh)
        };
        a.prototype.nka = function () {
            if ("initial" == this.by)
                return y;
            this.AH();
            this.e4(this.fka);
            this.by = "initial";
            return n
        };
        a.prototype.oka = function () {
            if (this.SJ === m) {
                if ("over" == this.by)
                    return y;
                this.AH();
                this.e4(this.gka)
            } else
                this.Toa(this.SJ);
            this.by = "over";
            return n
        };
        a.prototype.jka = function (a) {
            for (this.Ht += a; this.Ht > this.OP; )
                this.Ht -= this.OP;
            this.Fia(this.Ht / this.OP);
            this.by = "changing";
            return n
        };
        a.prototype.e4 = function (a) {
            this.qh(this.a4 + this.zk, 0, this.Bp, this.aL, 0, 2 * Math.PI);
            this.qh(this.a4, 0, this.Bp, a, 0, 2 * Math.PI)
        };
        a.prototype.pka = function (a) {
            this.qh(this.zH - 0.5 * (this.Sh + this.zk), this.Sh + this.zk, this.aL, this.Bp, 0, 2 * Math.PI);
            this.qh(this.zH - 0.5 * this.Sh, this.Sh, this.Kia, this.Bp, 0, 2 * Math.PI);
            this.qh(this.zH - 0.5 * this.Sh, this.Sh, this.Lia, this.Bp, 0.5 * Math.PI, (0.5 + 2 * a) * Math.PI)
        };
        a.prototype.kka = function (a, c) {
            this.qh(this.b3 - 0.5 * (this.Sh + this.zk), this.Sh + this.zk, this.aL, this.Bp, 0, 2 * Math.PI);
            this.qh(this.b3 -
                0.5 * this.Sh, this.Sh, this.Iia, this.Bp, 0, 2 * Math.PI);
            a = (0.5 + 2 * a) * Math.PI;
            for (c = (0.5 + 2 * c) * Math.PI; c < a; )
                c += 2 * Math.PI;
            var e = a - this.zk / (2 * this.yH * Math.PI),
            g = c + this.zk / (2 * this.yH * Math.PI);
            Math.abs(g - e + 2 * Math.PI) < 2 * this.zk && (e = 0, g = c);
            this.qh(this.yH - 0.5 * (this.Sh + this.zk), this.Sh + this.zk, this.aL, this.Bp, e, g);
            this.qh(this.yH - 0.5 * this.Sh, this.Sh, this.Jia, this.Bp, a, c)
        };
        a.prototype.qh = function (a, c, e, g, d, f) {
            var h = Math.round(0.5 * this.Ce),
            j = Math.round(0.5 * this.Rh),
            p = Math.min(h, j),
            a = Math.round(a * p),
            k = this.ka;
            k.pwa =
                k.WBa = n;
            k.lineWidth = c * p;
            k.strokeStyle = e;
            k.fillStyle = g;
            k.beginPath();
            k.arc(h, j, a, d, f, y);
            k.stroke();
            k.fill()
        };
        a.prototype.Fia = function (a) {
            this.AH();
            var c;
            0.25 > a ? (c = a / 0.25, a = 0.5 * c) : 0.5 > a ? (c = (a - 0.25) / 0.25, a = 0.5 + c, c = 1 + 0.5 * c) : 0.75 > a ? (c = (a - 0.5) / 0.25, a = 0.5 + 0.5 * c, c = 0.5 + c) : (a = c = (a - 0.75) / 0.25, c = 0.5 + 0.5 * c);
            this.kka(a, c)
        };
        a.prototype.Toa = function (a) {
            this.AH();
            this.pka(a)
        };
        return a
    });
    define("jv", "require,fg,dv,hk,eD,dX,bi".split(","), function (a) {
        var b = a("fg"),
        c = a("dv"),
        e = a("hk"),
        g = a("eD"),
        d = a("dX"),
        f = a("bi"),
        a = b.extend(e, function () {
            e.call(this);
            this.u = r;
            this.set("tag", "Reticle");
            this.set("changing", y);
            this.set("over", y);
            this.set("overProgress", m);
            this.set("visible", n);
            this.set("attachToCamera", n);
            this.gp = r
        });
        a.prototype.L = function (a) {
            this.Cp(a);
            this.vg(a);
            this.Ne(a);
            e.prototype.L.call(this, a)
        };
        a.prototype.Cp = function (a) {
            if (a.sb && !this.gp && f.wd() == f.vA.Oj)
                this.jf([this.gp = new e])
        };
        a.prototype.vg = function (a) {
            if (!this.u) {
                this.set("textureSource", new d);
                this.u = new g(this.Va.C);
                this.get("textureSource").Di(this.u.yg());
                this.set("contentWidth", this.u.ad());
                this.set("contentHeight", this.u.Pd());
                this.set("hfov", 6);
                this.set("distance", this.Va.C.get("vrPointerDistance"))
            }
            this.p("changing") && this.u.sN(this.get("changing"));
            this.p("over", "overProgress") && this.u.Rya(this.get("over"), this.get("overProgress"));
            this.u.update(a.vd) && this.get("textureSource").update();
            this.get("changing") &&
            this.Ia()
        };
        a.prototype.Ne = function () {
            this.Fk()
        };
        a.prototype.si = function () {
            this.p("composedAlpha", "meshGroup", "visible") && this.Dq()
        };
        a.prototype.Dq = function () {
            c.xd(this.get("meshGroup"), this.get("visible") ? this.get("composedAlpha") : 0)
        };
        return a
    });
    define("Y", "require,jquery.mod,do,ll,r,lC,dK".split(","), function (a) {
        function b(a) {
            this.ra = a;
            this.caa = this.ra.ik;
            this.ra.bind(g.Mc, this.ij, this);
            this.K = c("<span></span>");
            this.K.css({
                "pointer-events": "none",
                position: "absolute",
                "z-index": d.d1,
                "text-align": "center",
                display: "none"
            });
            this.Ad = c("<span></span>");
            this.Ad.css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0
            });
            this.K.append(this.Ad);
            this.sL = c("<span></span>");
            this.sL.css({
                position: "relative"
            });
            this.K.append(this.sL);
            this.ug = this.NI = this.sf =
                r;
            this.w8 = this.v8 = m;
            this.Lo = y;
            this.daa = m
        }
        var c = a("jquery.mod"),
        e = a("do"),
        g = a("ll");
        a("r");
        var d = a("lC"),
        f = a("dK"),
        h = {
            toolTip: m,
            toolTipBackgroundColor: "#F6F6F6",
            toolTipBackgroundOpacity: 1,
            toolTipBorderColor: "#767676",
            toolTipBorderRadius: 3,
            toolTipBorderSize: 1,
            toolTipFontFamily: "Segoe UI",
            toolTipFontSize: 12,
            toolTipFontColor: "#606060",
            toolTipFontWeight: "normal",
            toolTipFontStyle: "normal",
            toolTipHorizontalAlign: "center",
            toolTipOpacity: 1,
            toolTipPaddingBottom: 2,
            toolTipPaddingLeft: 4,
            toolTipPaddingTop: 2,
            toolTipPaddingRight: 4,
            toolTipShadowBlurRadius: 3,
            toolTipShadowColor: "#333333",
            toolTipShadowHorizontalLength: 3,
            toolTipShadowOpacity: 1,
            toolTipShadowSpread: 0,
            toolTipShadowVerticalLength: 3,
            toolTipTextShadowBlurRadius: 3,
            toolTipTextShadowColor: "#000000",
            toolTipTextShadowHorizontalLength: 0,
            toolTipTextShadowOpacity: 0,
            toolTipTextShadowVerticalLength: 0,
            toolTipDisplayTime: 600
        };
        b.prototype.Gb = Q("K");
        b.prototype.pw = function (a) {
            if (!this.caa) {
                for (; a && a.get("toolTipDisabled"); )
                    a = a.getParent();
                this.hide();
                this.sf && e(e(h).keys()).each(function (a) {
                    this.sf.unbind(g.D(a),
                        this.qU, this)
                }, this);
                if (this.sf = a) {
                    e(e(h).keys()).each(function (a) {
                        this.sf.bind(g.D(a), this.qU, this)
                    }, this);
                    this.qU()
                }
            }
        };
        b.prototype.rza = function (a, b) {
            this.sf = a;
            this.daa = b;
            this.SI() || (this.Lo ? this.t$() : this.UD())
        };
        b.prototype.r$ = function (a, b, c) {
            this.Lo && this.sf.trigger(g.lP);
            this.Rsa(a);
            this.sL.html(this.bma(b));
            this.W2 = c;
            this.Ne();
            this.sf.trigger(g.c1);
            this.Lo = n;
            this.K.css("display", "inline");
            (c || a.get("checkToolTipOcclusion")) && this.Dra(a)
        };
        b.prototype.Ne = function () {
            var a = this.ir(),
            b = a.x,
            a = a.y,
            c = this.K.outerWidth(),
            d = this.K.outerHeight();
            if (this.W2) {
                b = b - this.K.width() * 0.5;
                a = a - this.K.height() * 0.5
            }
            b = Math.max(Math.min(b, this.ra.Aa() - c - 3), 3);
            a = Math.max(Math.min(a, this.ra.eb() - d - 3), 3);
            this.K.css("left", b + "px");
            this.K.css("top", a + "px")
        };
        b.prototype.ir = function () {
            var a = {};
            if (this.W2) {
                var b = this.sf.Gb().offset();
                a.x = b.left + this.sf.Aa() * 0.5;
                a.y = b.top + this.sf.eb() * 0.5
            } else {
                a.x = this.v8;
                a.y = this.w8 + 25
            }
            return a
        };
        b.prototype.hide = function () {
            this.Tt();
            this.I$();
            if (this.Lo) {
                this.K.css("display", "none");
                this.sf.trigger(g.lP);
                this.Lo = y
            }
        };
        b.prototype.qU = function () {
            this.sf.get("toolTip") ? this.SI() || (this.Lo ? this.s$() : this.UD()) : this.SI() ? this.Tt() : this.Lo && this.hide()
        };
        b.prototype.ij = function (a) {
            this.v8 = a.pageX;
            this.w8 = a.pageY;
            this.Lo && this.sf.get("toolTipFollowMouse") && this.Ne()
        };
        b.prototype.s$ = function () {
            this.r$(this.sf, this.sf.get("toolTip"), y)
        };
        b.prototype.t$ = function () {
            this.r$(this.sf, this.daa, n)
        };
        b.prototype.SI = function () {
            return this.ug != r
        };
        b.prototype.UD = function () {
            var a = this.sf && this.sf.get("toolTipDisplayTime");
            if (a === m || a === r)
                a = h.toolTipDisplayTime;
            this.Tt();
            this.ug = setTimeout(function () {
                this.ug = r;
                this.caa ? this.t$() : this.s$()
            }
                    .bind(this), a)
        };
        b.prototype.Tt = function () {
            if (this.SI()) {
                clearTimeout(this.ug);
                this.ug = r
            }
        };
        b.prototype.Dra = function (a) {
            var b = this.ir();
            this.I$();
            var c = function () {
                this.K.css("display", this.Lo && !this.Wma(a, b.x, b.y) ? "inline" : "none")
            }
            .bind(this);
            this.NI = setInterval(c, 300);
            c()
        };
        b.prototype.I$ = function () {
            if (this.NI) {
                clearInterval(this.NI);
                this.NI = r
            }
        };
        b.prototype.Rsa = function (a) {
            function b(c) {
                var d =
                    a.get(c);
                return d === m ? h[c] : d
            }
            var c = {};
            c.opacity = b("toolTipOpacity");
            c.filter = c["-ms-filter"] = "alpha(opacity=" + Math.round(b("toolTipOpacity") * 100) + ")";
            c.paddingTop = b("toolTipPaddingTop") + "px";
            c.paddingBottom = b("toolTipPaddingBottom") + "px";
            c.paddingLeft = b("toolTipPaddingLeft") + "px";
            c.paddingRight = b("toolTipPaddingRight") + "px";
            c["text-align"] = b("toolTipHorizontalAlign");
            this.K.css(c);
            c = {};
            c.opacity = b("toolTipBackgroundOpacity");
            c.filter = c["-ms-filter"] = "alpha(opacity=" + Math.round(b("toolTipBackgroundOpacity") *
                    100) + ")";
            c["background-color"] = b("toolTipBackgroundColor");
            c.border = [b("toolTipBorderSize") + "px", "solid", b("toolTipBorderColor")].join(" ");
            var d = b("toolTipShadowColor");
            c["-moz-box-shadow"] = c["-webkit-box-shadow"] = c["box-shadow"] = [b("toolTipShadowHorizontalLength") + "px", b("toolTipShadowVerticalLength") + "px", b("toolTipShadowBlurRadius") + "px", b("toolTipShadowSpread") + "px", "rgba(" + parseInt("0x" + d.substr(1, 2)) + ", " + parseInt("0x" + d.substr(3, 2)) + ", " + parseInt("0x" + d.substr(5, 2)) + ", " + b("toolTipShadowOpacity") +
                    ")"].join(" ");
            c["-moz-border-radius"] = c["-webkit-border-radius"] = c.borderRadius = b("toolTipBorderRadius") + "px";
            this.Ad.css(c);
            c = {};
            c["font-family"] = f.Fs(b("toolTipFontFamily"));
            d = b("toolTipFontSize");
            e(d).isNumber() ? d = d + "px" : e(d).isString() || (d = "");
            c["font-size"] = d;
            c["font-weight"] = b("toolTipFontWeight");
            c["font-style"] = b("toolTipFontStyle");
            c.color = b("toolTipFontColor");
            d = b("toolTipTextShadowColor");
            c["-moz-text-shadow"] = c["-webkit-text-shadow"] = c["text-shadow"] = [b("toolTipTextShadowHorizontalLength") +
                    "px", b("toolTipTextShadowVerticalLength") + "px", b("toolTipTextShadowBlurRadius") + "px", "rgba(" + parseInt("0x" + d.substr(1, 2)) + ", " + parseInt("0x" + d.substr(3, 2)) + ", " + parseInt("0x" + d.substr(5, 2)) + ", " + b("toolTipTextShadowOpacity") + ")"].join(" ");
            var g = b("toolTipTextShadowVerticalLength") == 0 && b("toolTipTextShadowHorizontalLength") == 0 ? 135 : Math.round(4 * Math.atan2("toolTipTextShadowHorizontalLength", -b("toolTipTextShadowVerticalLength")) / Math.PI) * 45;
            c.filter = "progid:DXImageTransform.Microsoft.Shadow(color=#" +
            function (a) {
                for (a = a.toString(16); a.length < 2; )
                    a = "0" + a;
                return a
            }
            (255 * b("toolTipTextShadowOpacity")) + d.substr(1, 6) + ",direction=" + g + ")";
            this.sL.css(c)
        };
        b.prototype.Wma = function (a, b, c) {
            for (var b = document.elementsFromPoint(b, c), a = a.Gb()[0], c = this.ra.Gb()[0], d = 0; d < b.length; d++) {
                var e = b[d];
                if (a == e || a.contains(e))
                    break;
                if (!this.K[0].contains(e) && c.contains(e)) {
                    var f = window.getComputedStyle(e);
                    if (f.display != "none" && f.visibility != "hidden" && (e.tagName == "CANVAS" ? 1 : this.cja(f.backgroundColor)) * f.opacity > 0.29)
                        return n
                }
            }
            return y
        };
        b.prototype.cja = function (a) {
            if (!a)
                return 0;
            var a = a.toLowerCase(),
            b = a.match(/rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*(\d*\.?\d*)\s*\)/);
            return b ? parseFloat(b[1]) : a.match(/transparent/) ? 0 : 1
        };
        b.prototype.bma = function (a) {
            for (var a = (a || "").split("\n"), b = 0; b < a.length; b++)
                a[b] = this.wka(a[b]);
            return a.map(function (a) {
                return "<div>" + a + "</div>"
            })
        };
        b.prototype.wka = function (a) {
            b.S1.nodeValue = a;
            return b.O1.innerHTML
        };
        b.xfa = h;
        b.O1 = document.createElement("pre");
        b.S1 = document.createTextNode("");
        b.O1.appendChild(b.S1);
        b.DAa = 600;
        return b
    });
    define("cl", ["require", "Y", "bA", "dK"], function (a) {
        function b(a, b) {
            this.C = a;
            this.ri = b;
            this.ura()
        }
        var c = a("Y"),
        e = a("bA"),
        g = a("dK");
        b.prototype.yg = Q("u");
        b.prototype.ad = function () {
            return this.u.width
        };
        b.prototype.Pd = function () {
            return this.u.height
        };
        b.prototype.ura = function () {
            this.u = document.createElement("canvas");
            var a = this.ri.split("\n"),
            b = this.Fe("toolTipBackgroundColor"),
            c = this.Fe("toolTipBackgroundOpacity"),
            j = this.Fe("toolTipBorderRadius"),
            p = this.Fe("toolTipBorderColor"),
            k = this.Fe("toolTipBorderSize");
            this.Fe("toolTipDisplayTime");
            var l = this.Fe("toolTipFontFamily"),
            q = this.Fe("toolTipFontSize"),
            o = this.Fe("toolTipFontColor"),
            t = this.Fe("toolTipFontWeight"),
            s = this.Fe("toolTipFontStyle"),
            v = this.Fe("toolTipPaddingBottom"),
            u = this.Fe("toolTipPaddingLeft"),
            w = this.Fe("toolTipPaddingTop"),
            x = this.Fe("toolTipPaddingRight"),
            z = this.Fe("toolTipOpacity"),
            C = this.Fe("toolTipTextShadowBlurRadius"),
            A = this.Fe("toolTipTextShadowColor"),
            K = this.Fe("toolTipTextShadowHorizontalLength"),
            F = this.Fe("toolTipTextShadowVerticalLength"),
            J = this.Fe("toolTipTextShadowOpacity"),
            B = new e.Y0;
            B.fontFamily = l;
            B.fontSize = q + (isNaN(q) ? "" : "px");
            B.fontWeight = t;
            B.fontStyle = s;
            var O = a.map(function (a) {
                return e(a, B, G)
            }),
            N = 0,
            I = 0;
            O.forEach(function (a) {
                N = Math.max(a.width, N);
                I += a.height
            });
            var L = 1 < a.length ? 0.25 * (I / a.length) : 0,
            I = I + (a.length - 1) * L,
            x = k + u + N + x + k,
            v = k + w + I + v + k;
            this.u = document.createElement("canvas");
            var G = this.u.getContext("2d");
            this.u.width = x;
            this.u.height = v;
            G.globalAlpha = z;
            G.strokeStyle = p;
            G.fillStyle = "transparent" === b ? "rgba(0,0,0,0)" : this.h2(c,
                    b);
            G.lineWidth = k;
            G.beginPath();
            G.moveTo(j, 0);
            G.lineTo(x - j, 0);
            G.quadraticCurveTo(x, 0, x, j);
            G.lineTo(x, v - j);
            G.quadraticCurveTo(x, v, x - j, v);
            G.lineTo(j, v);
            G.quadraticCurveTo(0, v, 0, v - j);
            G.lineTo(0, j);
            G.quadraticCurveTo(0, 0, j, 0);
            G.closePath();
            G.fill();
            0 < k && G.stroke();
            G.fillStyle = o;
            G.font = t + " " + ("normal" != s ? s + " " : "") + q + (isNaN(q) ? "" : "px") + " " + g.Fs(l);
            G.shadowColor = this.h2(J, A);
            G.shadowOffsetX = K;
            G.shadowOffsetY = F;
            G.shadowBlur = C;
            G.textBaseline = "middle";
            G.textAlign = "center";
            var E = k + u + 0.5 * N,
            H = k + w;
            a.forEach(function (a,
                    b) {
                G.fillText(a, Math.round(E), Math.round(H + 0.5 * O[b].height));
                H += O[b].height + L
            })
        };
        b.prototype.Fe = function (a) {
            var b = this.C.get(a);
            return b === m ? c.xfa[a] : b
        };
        b.prototype.h2 = function (a, b) {
            return "rgba(" + parseInt("0x" + b.substr(1, 2)) + ", " + parseInt("0x" + b.substr(3, 2)) + ", " + parseInt("0x" + b.substr(5, 2)) + ", " + a + ")"
        };
        return b
    });
    define("lh", "require,fg,gW,hk,cl,dX".split(","), function (a) {
        var b = a("fg"),
        c = a("gW"),
        e = a("hk"),
        g = a("cl"),
        d = a("dX"),
        a = b.extend(e, function () {
            e.call(this);
            this.u = r;
            this.set("tag", "ToolTip");
            this.set("text", "");
            this.Ek = new THREE.Vector3(0, 0, -c.Np())
        });
        a.prototype.L = function (a) {
            this.vg(a);
            e.prototype.L.call(this, a)
        };
        a.prototype.vg = function (a) {
            if (!this.u || this.p("text")) {
                this.get("textureSource") || this.set("textureSource", new d);
                this.u = new g(this.Va.C, this.get("text"));
                this.get("textureSource").Di(this.u.yg());
                this.set("contentWidth", this.u.ad());
                this.set("contentHeight", this.u.Pd());
                this.set("hfov", 2 * Math.atan2(this.u.ad() * 0.5, 600) * f);
                this.set("distance", this.Va.C.get("vrPointerDistance"));
                var b = this.get("matrix");
                if (b) {
                    this.Ek.applyMatrix4(b);
                    (this.Ek.x != 0 || this.Ek.z != 0) && this.set("yaw", f * Math.atan2(this.Ek.x, -this.Ek.z));
                    (this.Ek.y != 0 || this.Ek.z != 0) && this.set("pitch", f * Math.atan2(this.Ek.y, Math.sqrt(this.Ek.z * this.Ek.z + this.Ek.x * this.Ek.x)) + h)
                } else {
                    this.set("yaw", a.ma);
                    this.set("pitch", a.pitch + j)
                }
            }
        };
        var f = 180 / Math.PI,
        h = 2,
        j = 5;
        return a
    });
    define("kN", ["require", "lf", "M"], function (a) {
        function b(a, b) {
            this.Zd = a;
            this.g = b;
            this.vB = r
        }
        var c = a("lf"),
        e = a("M");
        b.prototype.update = D();
        b.prototype.clear = D();
        b.prototype.wd = Q("Zd");
        b.prototype.oS = function () {
            var a = this.m.ye && e.Hs(this.m.ye);
            return this.vB = a ? c.xva(a, this.vB) : r
        };
        b.NG = "gaze";
        b.nP = "gaze_click";
        b.sA = "laser";
        b.tA = "mouse";
        b.uA = "touch";
        return b
    });
    define("eb", ["require", "kN"], function (a) {
        function b(a, b, c, e) {
            this.mi = a;
            this.Ol = b;
            this.vB = c;
            this.Vd = e;
            this.U2 = [];
            this.ji = [];
            this.ML = [];
            this.QS = [];
            this.ya = "";
            this.ns = Number.MAX_VALUE
        }
        function c(a) {
            return a === m ? [] : Array.isArray(a) ? a : [a]
        }
        var e = a("kN");
        b.prototype.Ms = function () {
            return this.mi.wd() == e.tA
        };
        b.prototype.hda = function () {
            return this.mi.wd() == e.sA
        };
        b.prototype.dw = function () {
            return this.mi.wd() == e.uA
        };
        b.prototype.Awa = function () {
            return this.mi.wd() == e.NG
        };
        b.prototype.ys = function (a) {
            this.ML = this.ML.concat(c(a))
        };
        b.prototype.$z = function () {
            return 0 < this.ML.length
        };
        b.prototype.cua = function (a) {
            this.QS = this.QS.concat(c(a))
        };
        b.prototype.Mua = function () {
            return 0 == this.ML.length && 0 < this.QS.length
        };
        b.prototype.xs = function (a) {
            this.ji = this.ji.concat(c(a))
        };
        b.prototype.kxa = function () {
            return 0 < this.ji.length
        };
        b.prototype.vi = function (a) {
            if (a && (this.TH === m || this.TH > a))
                this.TH = a
        };
        b.prototype.cM = function (a, b) {
            if ("" == this.ya || this.ns > b)
                this.ya = a, this.ns = b
        };
        b.prototype.ZF = Q("ya");
        b.prototype.dq = function (a) {
            this.U2 = c(a)
        };
        b.prototype.Eh =
        function () {
            return 0 < this.U2.length
        };
        return b
    });
    define("cg", "require,fg,ll,lf,M,jv,lh,eb,kN".split(","), function (a) {
        var b = a("fg"),
        c = a("ll");
        a("lf");
        a("M");
        var e = a("jv"),
        g = a("lh"),
        d = a("eb"),
        f = a("kN"),
        a = b.extend(f, function (a) {
            f.call(this, f.NG, a);
            this.Je = this.m = r;
            this.ji = [];
            this.vL = r;
            this.o8 = m;
            this.Nb = new e;
            this.g.add(this.Nb);
            this.df = "";
            this.ya = r;
            this.I9 = this.g.C.get("vrPointerSelectionTime")
        });
        a.prototype.clear = function () {
            this.tW();
            this.g.remove(this.Nb);
            this.Nb = r;
            this.ya && this.g.remove(this.ya);
            this.ya = r
        };
        a.prototype.update = function (a) {
            this.m =
                a;
            this.Nb.set("changing", a.hM);
            this.wg()
        };
        a.prototype.qx = function () {
            this.Zf(this.Pf(c.Li));
            this.Nb.set("over", y)
        };
        a.prototype.wg = function () {
            var a = this.Pf(c.Nh);
            this.Zf(a);
            this.Ul(a.ZF());
            var b;
            a: {
                b = this.ji;
                for (var d = a.ji, e = 0; e < b.length; e++)
                    if (d.indexOf(b[e]) < 0) {
                        b = y;
                        break a
                    }
                for (e = 0; e < d.length; e++)
                    if (b.indexOf(d[e]) < 0) {
                        b = y;
                        break a
                    }
                b = n
            }
            if (!b) {
                this.tW();
                this.Nb.set("over", y);
                this.ji = a.ji;
                if (this.ji.length) {
                    this.Nb.set("over", a.$z());
                    this.Nb.set("overProgress", 0);
                    this.Qra()
                }
            }
        };
        a.prototype.Ul = function (a) {
            if (this.df !=
                a) {
                this.df && this.g.remove(this.ya);
                if (this.df = a) {
                    this.ya = new g(this.df);
                    this.ya.set("text", this.df);
                    this.g.add(this.ya)
                }
            }
        };
        a.prototype.Zf = function (a) {
            this.g.kF().sort(function (a, b) {
                return b.get("index") - a.get("index")
            }).forEach(function (b) {
                b.Lj(a)
            }
                .bind(this))
        };
        a.prototype.Pf = function (a) {
            this.Je = this.oS();
            return new d(this, this.Je ? [this.Je] : [], this.Je, a)
        };
        a.prototype.tW = function () {
            this.vL && (clearInterval(this.vL), this.vL = r)
        };
        a.prototype.Qra = function () {
            this.o8 = (new Date).getTime();
            this.vL = setInterval(this.Zna.bind(this),
                    100)
        };
        a.prototype.Zna = function () {
            var a = (new Date).getTime() - this.o8;
            if (a >= this.I9) {
                this.tW();
                this.qx()
            } else
                this.Nb.set("overProgress", a / this.I9)
        };
        return a
    });
    define("iJ", "require,fg,ll,jv,lh,eb,kN,bi".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("jv"),
        g = a("lh"),
        d = a("eb"),
        f = a("kN"),
        h = a("bi"),
        a = b.extend(f, function (a) {
            f.call(this, f.nP, a);
            this.Je = this.m = r;
            this.Nb = new e;
            this.g.add(this.Nb);
            this.df = "";
            this.ya = r;
            this.yL = this.yL.bind(this);
            document.body.addEventListener("touchend", this.yL);
            h.bind(c.Mi, this.gba, this, n)
        });
        a.prototype.clear = function () {
            document.body.removeEventListener("touchend", this.yL);
            h.unbind(c.Mi, this.gba, this, n);
            this.g.remove(this.Nb);
            this.Nb = r;
            this.ya && this.g.remove(this.ya);
            this.ya = r
        };
        a.prototype.update = function (a) {
            this.m = a;
            this.Nb.set("changing", a.hM);
            this.wg()
        };
        a.prototype.yL = function () {
            this.qx()
        };
        a.prototype.gba = function () {
            this.qx()
        };
        a.prototype.qx = function () {
            this.Zf(this.Pf(c.Li));
            this.Nb.set("over", y)
        };
        a.prototype.wg = function () {
            var a = this.Pf(c.Nh);
            this.Zf(a);
            this.Ul(a.ZF());
            this.Nb.set("over", a.$z())
        };
        a.prototype.Ul = function (a) {
            if (this.df != a) {
                this.df && this.g.remove(this.ya);
                if (this.df = a) {
                    this.ya = new g(this.df);
                    this.ya.set("text",
                        this.df);
                    this.g.add(this.ya)
                }
            }
        };
        a.prototype.Zf = function (a) {
            this.g.kF().sort(function (a, b) {
                return b.get("index") - a.get("index")
            }).forEach(function (b) {
                b.Lj(a)
            }
                .bind(this))
        };
        a.prototype.Pf = function (a) {
            this.Je = this.oS();
            return new d(this, this.Je ? [this.Je] : [], this.Je, a)
        };
        return a
    });
    define("il", "require,fg,gW,bU,dv,dX,y,kA".split(","), function (a) {
        var b = a("fg"),
        c = a("gW"),
        e = a("bU"),
        g = a("dv"),
        d = a("dX"),
        f = a("y"),
        h = a("kA"),
        j = new THREE.Matrix4,
        p = Math.PI / 180,
        a = b.extend(f, function () {
            f.call(this);
            this.set("tag", "Laser");
            this.set("matrix", r);
            this.set("over", y);
            this.set("pressed", y);
            this.set("intersectionDistance", 0);
            this.set("visible", y);
            this.set("attachToCamera", y);
            this.set("dotVisible", n);
            this.iV = this.pD = this.Ym = this.hV = r;
            new THREE.Matrix4;
            this.jV = new THREE.Matrix4;
            this.jV.multiply(j.makeRotationX(-90 *
                    p));
            this.jV.multiply(j.makeTranslation(0, k * 0.5, 0));
            this.YH = this.XH = this.WH = this.Eo = this.CR = r;
            new THREE.Matrix4;
            this.DR = new THREE.Matrix4;
            this.aB = this.VH = this.BR = r;
            new THREE.Matrix4;
            this.Xt = [new THREE.Matrix4, new THREE.Matrix4, new THREE.Matrix4];
            this.Xt[0].multiply(j.makeRotationX(-90 * p));
            this.Xt[0].multiply(j.makeTranslation(0, -q * 0.5, 0));
            this.Xt[1].multiply(j.makeRotationX(-90 * p));
            this.Xt[1].multiply(j.makeTranslation(0, -q * 0.5, -l * 0.5));
            this.Xt[2].multiply(j.makeRotationX(-90 * p));
            this.Xt[2].multiply(j.makeTranslation(0,
                    -q * 0.5, -l))
        });
        a.prototype.L = function (a) {
            f.prototype.L.call(this, a);
            this.rX();
            this.ts()
        };
        a.prototype.rX = function () {
            if (this.p("visible"))
                this.get("meshGroup").visible = this.get("visible");
            this.p("dotVisible") && g.xd([this.XH, this.VH], this.get("dotVisible") ? 1 : 0)
        };
        a.prototype.ts = function () {
            if (this.p("over", "pressed")) {
                this.Caa();
                this.Maa()
            }
        };
        var k = 0.35,
        l = 0.012,
        q = 0.1;
        a.prototype.Vi = function () {
            this.VH = g.create(new THREE.SphereGeometry(2.3, 32, 32), this.sja());
            this.XH = g.create(new THREE.SphereGeometry(2, 32,
                        32), this.tja());
            this.iV = g.create(new THREE.CylinderGeometry(0.003, 0.003, k, 8), this.Oja());
            this.ux = [];
            this.ux.push(g.create(new THREE.CylinderGeometry(l, l, q, 32), this.TQ()));
            this.ux.push(g.create(new THREE.BoxGeometry(2 * l, q, l), this.TQ()));
            this.ux.push(g.create(new THREE.CylinderGeometry(l, l, q, 32), this.TQ()));
            return [this.VH, this.XH, this.iV].concat(this.ux)
        };
        a.prototype.sja = function () {
            if (this.BR == r) {
                var a = document.createElement("canvas");
                a.width = a.height = 256;
                var b = a.getContext("2d"),
                c = new d;
                c.Di(a);
                this.BR =
                    e.Ds(c.texture(), new e.Wn);
                b.fillStyle = "rgba(0, 0, 0, 0.75)";
                b.clearRect(0, 0, a.width, a.height);
                b.fillRect(0, 0, a.width, a.height)
            }
            return this.BR
        };
        a.prototype.tja = function () {
            if (this.CR == r) {
                this.Eo = document.createElement("canvas");
                this.Eo.width = this.Eo.height = 256;
                this.WH = this.Eo.getContext("2d");
                this.YH = new d;
                this.YH.Di(this.Eo);
                this.CR = e.Ds(this.YH.texture(), new e.Wn);
                this.Caa()
            }
            return this.CR
        };
        a.prototype.Caa = function () {
            this.WH.fillStyle = this.gS();
            this.WH.clearRect(0, 0, this.Eo.width, this.Eo.height);
            this.WH.fillRect(0, 0, this.Eo.width, this.Eo.height);
            this.YH.update()
        };
        a.prototype.Oja = function () {
            if (this.hV == r) {
                this.Ym = document.createElement("canvas");
                this.Ym.width = this.Ym.height = 256;
                this.pD = this.Ym.getContext("2d");
                this.kV = new d;
                this.kV.Di(this.Ym);
                this.hV = e.Ds(this.kV.texture(), new e.Wn);
                this.Maa()
            }
            return [this.hV]
        };
        a.prototype.Maa = function () {
            var a = h.CF(this.gS()).join(", "),
            b = this.pD.createLinearGradient(0, 0, 0, this.Ym.height);
            b.addColorStop(0, "rgba(" + a + ", 0)");
            b.addColorStop(0.5, "rgba(" + a + ", 1)");
            b.addColorStop(1, "rgba(" + a + ", 1)");
            this.pD.fillStyle = b;
            this.pD.clearRect(0, 0, this.Ym.width, this.Ym.height);
            this.pD.fillRect(0, 0, this.Ym.width, this.Ym.height);
            this.kV.update()
        };
        a.prototype.TQ = function () {
            if (this.aB == r) {
                var a = document.createElement("canvas");
                a.width = a.height = 256;
                var b = a.getContext("2d"),
                c = new d;
                c.Di(a);
                this.aB = e.Ds(c.texture(), new e.Wn);
                b.fillStyle = "rgba(64, 64, 64, 1)";
                b.clearRect(0, 0, a.width, a.height);
                b.fillRect(0, 0, a.width, a.height)
            }
            return [this.aB, this.aB, this.aB]
        };
        a.prototype.Zl =
        function () {
            var a = y,
            b = y,
            d = y;
            if (this.p("intersectionDistance")) {
                var b = (b = this.get("intersectionDistance")) ? c.Uv(b) : c.Np(),
                e = b / c.Np();
                this.DR.makeTranslation(0, 0, -b);
                this.DR.multiply(j.makeScale(e, e, e));
                b = n
            }
            if (this.p("matrix"))
                d = b = a = n;
            if (b) {
                j.identity();
                (b = this.get("matrix")) && j.multiply(b);
                j.multiply(this.DR);
                g.fm(this.XH, j);
                g.fm(this.VH, j)
            }
            if (a) {
                j.identity();
                (b = this.get("matrix")) && j.multiply(b);
                j.multiply(this.jV);
                g.fm(this.iV, j)
            }
            if (d) {
                b = this.get("matrix");
                for (a = 0; a < this.ux.length; a++) {
                    j.identity();
                    b && j.multiply(b);
                    j.multiply(this.Xt[a]);
                    g.fm(this.ux[a], j)
                }
            }
        };
        a.prototype.yv = function () {
            if (this.p("index", "meshGroup")) {
                var a = this.get("meshGroup");
                a && a.children.forEach(function (a) {
                    g.DN(a, this.get("index"))
                }
                    .bind(this))
            }
        };
        a.prototype.gS = function () {
            return this.get("pressed") ? this.Va.C.get("vrPointerSelectionColor") : this.get("over") ? this.Va.C.get("vrPointerOverColor") : this.Va.C.get("vrPointerColor")
        };
        return a
    });
    define("ds", "require,fg,ll,lf,il,jv,lh,eb,kN,db,bi,ku".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("lf"),
        g = a("il"),
        d = a("jv"),
        f = a("lh"),
        h = a("eb"),
        j = a("kN"),
        p = a("db"),
        k = a("bi"),
        l = a("ku"),
        q = new THREE.Matrix4,
        o = Math.PI / 180,
        a = b.extend(j, function (a) {
            j.call(this, j.sA, a);
            this.Je = this.m = r;
            this.ji = [];
            this.Lg = new g;
            this.g.add(this.Lg);
            this.Nb = new d;
            this.g.add(this.Nb);
            this.ni = y;
            this.df = "";
            this.ya = r;
            this.Vh = new THREE.Matrix4
        });
        a.prototype.clear = function () {
            this.g.remove(this.Lg);
            this.g.remove(this.Nb);
            this.Nb = this.Lg = r;
            this.ya && this.g.remove(this.ya);
            this.ya = r
        };
        a.prototype.update = function (a) {
            this.m = a;
            this.Nb.set("changing", a.hM);
            this.Nb.set("visible", a.hM);
            var b = p.cN();
            if (b && !b.Dwa()) {
                var c = b.quaternion(),
                d = b.position(),
                e = k.Dn().position,
                f = l.ma(k.Dn().orientation);
                this.Vh.identity();
                if (d) {
                    this.Vh.multiply(q.makeRotationY((f - a.ma) * o));
                    this.Vh.multiply(q.makeTranslation(-e.x, -e.y, -e.z));
                    this.Vh.multiply(q.makeTranslation(d.x, d.y, d.z));
                    this.Vh.multiply(q.makeRotationFromQuaternion(c))
                } else {
                    this.Vh.multiply(q.makeRotationY(-a.ma *
                            o));
                    b.hand() == p.qa ? this.Vh.multiply(q.makeTranslation(-0.2, -0.4, 0)) : this.Vh.multiply(q.makeTranslation(0.2, -0.4, 0));
                    this.Vh.multiply(q.makeRotationY(f * o));
                    this.Vh.multiply(q.makeRotationFromQuaternion(c));
                    this.Vh.multiply(q.makeTranslation(0, 0, -0.3))
                }
                this.Lg.set("matrix", r);
                this.Lg.set("matrix", this.Vh);
                this.Lg.set("pressed", b.pressed());
                this.Lg.set("visible", n)
            } else
                this.Lg.set("visible", y);
            this.wg();
            a = !!b && b.pressed();
            if (this.ni != a) {
                this.ni && this.qx();
                this.ni = a
            }
            this.Lg.Fk();
            this.Nb.Fk()
        };
        a.prototype.qx =
        function () {
            var a = this.Pf(c.Li);
            this.Zf(a);
            this.Lg.set("over", n);
            this.Lg.set("dotVisible", n);
            this.Lg.set("intersectionDistance", a.TH);
            (a = p.cN()) && a.pulse(0.6, 50)
        };
        a.prototype.wg = function () {
            var a = this.Pf(c.Nh);
            this.Zf(a);
            this.Ul(a.ZF());
            var b;
            a: {
                b = this.ji;
                for (var d = a.ji, e = 0; e < b.length; e++)
                    if (d.indexOf(b[e]) < 0) {
                        b = y;
                        break a
                    }
                for (e = 0; e < d.length; e++)
                    if (b.indexOf(d[e]) < 0) {
                        b = y;
                        break a
                    }
                b = n
            }
            if (!b && (a.$z() || this.Lg.get("over"))) {
                this.ji = a.ji;
                (b = p.cN()) && b.pulse(0.6, 5)
            }
            this.Lg.set("over", a.$z());
            this.Lg.set("intersectionDistance",
                a.TH);
            this.Lg.set("dotVisible", !a.Mua())
        };
        a.prototype.Ul = function (a) {
            if (this.df != a) {
                this.df && this.g.remove(this.ya);
                if (this.df = a) {
                    this.ya = new f(this.df);
                    this.ya.set("text", this.df);
                    this.ya.set("matrix", r);
                    this.ya.set("matrix", this.Vh);
                    this.g.add(this.ya)
                }
            }
        };
        a.prototype.Zf = function (a) {
            this.g.kF().sort(function (a, b) {
                return b.get("index") - a.get("index")
            }).forEach(function (b) {
                b.Lj(a)
            }
                .bind(this))
        };
        a.prototype.Pf = function (a) {
            this.Je = e.wva(this.Vh, this.Je);
            return new h(this, [this.Je], this.oS(), a)
        };
        return a
    });
    define("hf", "require,fg,ll,lf,M,eb,kN,R".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("lf"),
        g = a("M"),
        d = a("eb"),
        f = a("kN"),
        h = a("R"),
        a = b.extend(f, function (a) {
            f.call(this, f.tA, a);
            this.g.C.bind(c.Mc, this.Ng, this, n);
            this.g.C.bind(c.Kf, this.t6, this, n);
            this.g.C.bind(c.Qb, this.aqa, this, n);
            this.g.C.bind(c.Hb, this.pc, this, n);
            this.g.C.bind(c.fc, this.Og, this, n);
            this.kp = this.pj = this.Hc = this.Gc = m;
            this.Je = this.m = r;
            this.pn = y;
            this.ya = ""
        });
        a.prototype.clear = function () {
            this.g.C.unbind(c.Mc, this.Ng, this, n);
            this.g.C.unbind(c.Kf,
                this.t6, this, n);
            this.g.C.unbind(c.Hb, this.pc, this, n);
            this.g.C.unbind(c.fc, this.Og, this, n);
            this.pn && (this.g.Lz(h.Ue), this.pn = y);
            this.Ul("")
        };
        a.prototype.update = function (a) {
            this.m = a;
            this.fX()
        };
        a.prototype.Ng = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            this.HL()
        };
        a.prototype.t6 = function () {
            this.Hc = this.Gc = m;
            this.HL()
        };
        a.prototype.aqa = function () {
            this.Hc = this.Gc = m;
            this.HL()
        };
        a.prototype.pc = function (a) {
            this.Gc = this.pj = a.x;
            this.Hc = this.kp = a.y;
            this.Zf(this.Pf(c.O0))
        };
        a.prototype.Og = function (a) {
            this.Gc = a.x;
            this.Hc =
                a.y;
            this.Zf(this.Pf(c.P0));
            this.uT(this.pj, this.kp, this.Gc, this.Hc) && this.Zf(this.Pf(c.Li))
        };
        a.prototype.fX = function () {
            if (!this.$l)
                this.$l = setTimeout(function () {
                    this.$l = r;
                    this.wg()
                }
                        .bind(this), 300)
        };
        a.prototype.HL = function () {
            if (this.$l) {
                clearTimeout(this.$l);
                this.$l = r
            }
            this.wg()
        };
        a.prototype.wg = function () {
            var a = this.Pf(c.Nh);
            this.Zf(a);
            this.Ul(a.ZF());
            if (this.pn != a.$z()) {
                this.pn && this.g.Lz(h.Ue);
                (this.pn = a.$z()) && this.g.lN(h.Ue)
            }
        };
        a.prototype.Ul = function (a) {
            if (this.ya != a) {
                this.ya = a;
                this.g.C.set("toolTip",
                    this.ya)
            }
        };
        a.prototype.Zf = function (a) {
            this.g.kF().sort(function (a, b) {
                return b.get("index") - a.get("index")
            }).forEach(function (b) {
                b.Lj(a)
            }
                .bind(this))
        };
        a.prototype.Pf = function (a) {
            return new d(this, this.wI(), r, a)
        };
        a.prototype.wI = function () {
            if (this.Gc !== m && this.Hc !== m && this.m.ye) {
                var a = g.Hs(this.m.ye);
                if (a) {
                    this.Je = e.jca(a, this.Gc, this.Hc, this.m.width, this.m.height, this.Je);
                    return [this.Je]
                }
            }
            return []
        };
        a.prototype.uT = function (a, b, c, d) {
            a = c - a;
            b = d - b;
            return Math.sqrt(a * a + b * b) <= 5
        };
        return a
    });
    define("fb", "require,fg,ll,lf,M,eb,kN".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("lf"),
        g = a("M"),
        d = a("eb"),
        f = a("kN"),
        a = b.extend(f, function (a) {
            f.call(this, f.uA, a);
            this.g.C.bind(c.Hb, this.pc, this, n);
            this.g.C.bind(c.fc, this.Og, this, n);
            this.kp = this.pj = this.Hc = this.Gc = m;
            this.m = r;
            this.Dia = Array(h.length);
            this.kpa = Array(j.length);
            this.ya = "";
            this.wg = this.wg.bind(this)
        });
        a.prototype.clear = function () {
            this.g.C.unbind(c.Hb, this.pc, this, n);
            this.g.C.unbind(c.fc, this.Og, this, n);
            this.Ul("")
        };
        a.prototype.update =
        function (a) {
            this.m = a;
            this.fX()
        };
        a.prototype.pc = function (a) {
            this.Gc = this.pj = a.x;
            this.Hc = this.kp = a.y;
            this.Zf(this.Pf(c.O0))
        };
        a.prototype.Og = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            this.Zf(this.Pf(c.P0));
            this.uT(this.pj, this.kp, this.Gc, this.Hc) && this.Zf(this.Pf(c.Li))
        };
        a.prototype.fX = function () {
            if (!this.$l)
                this.$l = setTimeout(this.wg, 300)
        };
        a.prototype.HL = function () {
            if (this.$l) {
                clearTimeout(this.$l);
                this.$l = r
            }
            this.wg()
        };
        a.prototype.wg = function () {
            this.$l = r;
            var a = this.Pf(c.Nh);
            this.Zf(a);
            this.Ul(a.ZF())
        };
        a.prototype.Ul =
        function (a) {
            if (this.ya != a) {
                this.ya = a;
                a = this.g.C;
                a.set("toolTip", this.ya);
                if (!a.get("toolTipDisabled")) {
                    var b = a.Ta().ya;
                    this.ya ? b.rza(a, this.ya) : b.hide()
                }
            }
        };
        a.prototype.Zf = function (a) {
            this.g.kF().sort(function (a, b) {
                return b.get("index") - a.get("index")
            }).forEach(function (b) {
                b.Lj(a)
            }
                .bind(this))
        };
        a.prototype.Pf = function (a) {
            var b;
            b = a == c.Nh ? this.wI(this.m.width * 0.5, this.m.height * 0.5, h, this.Dia) : this.wI(this.Gc, this.Hc, j, this.kpa);
            return new d(this, b, r, a)
        };
        a.prototype.wI = function (a, b, c, d) {
            var f = this.m.ye &&
                g.Hs(this.m.ye);
            if (f) {
                var h = this.m.width,
                j = this.m.height,
                v = Math.min(h, j) / 100;
                c.forEach(function (c, g) {
                    d[g] = e.jca(f, a + c[0] * v, b + c[1] * v, h, j, d[g])
                });
                return d
            }
            return []
        };
        a.prototype.uT = function (a, b, c, d) {
            a = c - a;
            b = d - b;
            b = Math.sqrt(a * a + b * b);
            d = 4 * Math.round(1 * Math.min(window.screen.width, window.screen.height) / 100);
            return b <= d
        };
        var h = function () {
            for (var a = [], b = -5; b <= 5; b++)
                for (var c = -5; c <= 5; c++) {
                    var d = Math.sqrt(c * c + b * b);
                    d < 5 && a.push([c, b, d])
                }
            for (c = -30; c < -5; c++)
                a.push([c, 0, Math.sqrt(c * c)]);
            for (c = 6; c <= 30; c++)
                a.push([c,
                        0, Math.sqrt(c * c)]);
            for (b = -15; b < -5; b++)
                a.push([0, b, Math.sqrt(b * b)]);
            for (b = 6; b <= 15; b++)
                a.push([0, b, Math.sqrt(b * b)]);
            a.sort(function (a, b) {
                return a[2] - b[2]
            });
            return a.map(function (a) {
                return [a[0], a[1]]
            })
        }
        (),
        j = function () {
            for (var a = [], b = 0; b < 5; b++)
                for (var c = -2 + 4 * b / 4, d = 0; d < 5; d++) {
                    var e = -2 + 4 * d / 4,
                    f = Math.sqrt(e * e + c * c);
                    f <= 2 && a.push([e, c, f])
                }
            a.sort(function (a, b) {
                return a[2] - b[2]
            });
            return a.map(function (a) {
                return [a[0], a[1]]
            })
        }
        ();
        return a
    });
    define("fD", "require,cg,iJ,ds,hf,kN,fb".split(","), function (a) {
        var b = a("cg"),
        c = a("iJ"),
        e = a("ds"),
        g = a("hf"),
        d = a("kN"),
        f = a("fb");
        return {
            create: function (a, j) {
                switch (a) {
                case d.NG:
                    return new b(j);
                case d.nP:
                    return new c(j);
                case d.sA:
                    return new e(j);
                case d.tA:
                    return new g(j);
                case d.uA:
                    return new f(j)
                }
            }
        }
    });
    define("lF", ["require", "R"], function (a) {
        function b(a) {
            this.Tb = a;
            this.$f = []
        }
        var c = a("R");
        b.prototype.push = function (a) {
            this.$f.push(a);
            this.L()
        };
        b.prototype.pop = function (a) {
            for (var b = this.$f.length - 1; 0 <= b; b--)
                if (this.$f[b] == a) {
                    this.$f.splice(b, 1);
                    this.L();
                    break
                }
        };
        b.prototype.clear = function () {
            0 < this.$f.length && (this.Tb.set("cursor", c.dd), this.$f = [])
        };
        b.prototype.L = function () {
            this.Tb.set("cursor", 0 <= this.$f.indexOf(c.zG) ? c.zG : 0 <= this.$f.indexOf(c.Ue) ? c.Ue : 0 < this.$f.length ? this.$f[this.$f.length - 1] : c.dd)
        };
        return b
    });
    define("kG", ["require", "r"], function (a) {
        function b(a) {
            for (var a = atob(a.split(",")[1]), b = [], c = 0; c < a.length; c++)
                b.push(a.charCodeAt(c));
            return new Blob([new Uint8Array(b)], {
                type: "image/jpeg"
            })
        }
        var c = a("r");
        return {
            Lza: function (a, g) {
                g || (g = "screenshot.jpg");
                var d;
                a: {
                    try {
                        d = a.toDataURL("image/jpeg");
                        break a
                    } catch (f) {}
                    d = m
                }
                if (!d)
                    return y;
                var h = g,
                j = document.createElement("a");
                "string" === typeof j.download ? (document.body.appendChild(j), j.download = h, j.href = d, j.click(), document.body.removeChild(j)) : c.browser() ==
                c.nq ? window.navigator.msSaveOrOpenBlob(b(d), h) : window.location.replace(d);
                return n
            }
        }
    });
    define("dQ", "require,fg,ih,ll,bZ,d,R,r,db,gm,dS,lr,hy,dG,dd,eW,fD,kN,lF,jN,hZ,it,bi,V,kG".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("bZ"),
        d = a("d"),
        f = a("R"),
        h = a("r"),
        j = a("db"),
        p = a("gm"),
        k = a("dS"),
        l = a("lr"),
        q = a("hy"),
        o = a("dG"),
        t = a("dd"),
        s = a("eW"),
        v = a("fD"),
        u = a("kN"),
        w = a("lF"),
        x = a("jN"),
        z = a("hZ"),
        C = a("it"),
        A = a("bi"),
        K = a("V"),
        F = a("kG"),
        J = Math.PI / 180,
        B = b.extend(d, function (a, b, g) {
            d.call(this);
            this.Tc("Renderer");
            this.set("toolTipDisabled", n);
            this.set("cursor", f.qq);
            this.set("layout",
                "absolute");
            this.jb = a;
            this.C = b;
            this.Vb = g;
            this.mR = new w(b);
            this.mi = r;
            this.m = new l;
            this.Va = new s(this.jb, this.C, this.Vb, this);
            this.Va.bind(e.aa, this.Ma, this, n);
            this.rj = new o;
            this.m.ye = this.rj.tj;
            this.m.VE = this.rj.L3;
            this.m.WE = this.rj.M3;
            this.m.Jc = this.rj.Hs();
            this.a6 = (new Date).getTime();
            this.Ra().append(this.rj.Gb());
            this.s4 = new k;
            this.Ra().append(this.s4.Gb());
            this.Uy = new q(b, g);
            this.Ra().append(this.Uy.Gb());
            this.W$ = new z;
            this.W$.bind(e.S, this.Eoa, this, n);
            this.H6 = new x;
            this.H6.bind(e.aa, this.joa,
                this, n);
            this.lI = new p(this.m.width, this.m.height, this.m.bd * J);
            this.bind(e.yb, this.kb, this, n);
            this.bind(e.od, this.wh, this, n);
            this.bind(e.zd, this.th, this, n);
            A.bind(e.aa, this.pk, this, n);
            j.bind(e.aa, this.Yna, this, n);
            c.Eb(this.Vb, ["fxaaEnabled", "aaEnabled", "hotspotsEnabled", "preloadEnabled"], function () {
                this.m.aw = this.Vb.get("hotspotsEnabled");
                this.m.DF = this.Vb.get("preloadEnabled");
                this.m.xM = this.Vb.get("fxaaEnabled");
                this.m.aM = this.Vb.get("aaEnabled");
                this.Ma()
            }
                .bind(this), n);
            c.Eb(this.Vb, ["surfaceSelectionEnabled"],
                this.nX.bind(this));
            this.nX();
            this.pk();
            c.Eb(this.jb, ["defaultVRPointer"], this.bm.bind(this));
            this.bm()
        });
        B.prototype.create = function (a) {
            return t.create(a)
        };
        B.prototype.add = function (a) {
            this.Va.appendChild(a)
        };
        B.prototype.remove = function (a) {
            (a = this.Va.bg(a)) && a.remove()
        };
        B.prototype.bg = function (a) {
            return this.Va.bg(a)
        };
        B.prototype.kF = function () {
            return this.Va.all()
        };
        B.prototype.Hea = function (a) {
            this.m.fN = a
        };
        B.prototype.lN = function (a) {
            this.mR.push(a)
        };
        B.prototype.Lz = function (a) {
            this.mR.pop(a)
        };
        B.prototype.sN =
        function (a) {
            this.m.hM = a;
            this.Ma()
        };
        B.prototype.HZ = function () {
            h.browser() != h.If && this.s4.trigger();
            this.m.lF = n;
            this.vV();
            var a = F.Lza(this.rj.yg());
            this.m.lF = y;
            this.vV();
            return a
        };
        B.prototype.getPixelRatio = function () {
            return this.rj.getPixelRatio()
        };
        B.prototype.bm = function () {
            var a;
            a = this.m.sb ? j.cN() && this.jb.get("defaultVRPointer") == "laser" ? u.sA : A.HM() == A.sga.NO ? u.nP : u.NG : h.Za() ? u.uA : u.tA;
            if (!(this.mi && this.mi.wd() == a)) {
                this.mi && this.mi.clear();
                this.mi = v.create(a, this);
                this.nX();
                this.mi.update(this.m)
            }
        };
        B.prototype.nX = function () {
            this.m.XF = this.Vb.get("surfaceSelectionEnabled") && [u.tA, u.sA, u.uA].indexOf(this.mi && this.mi.wd()) >= 0
        };
        B.prototype.qj = function () {
            this.mR.clear();
            d.prototype.qj.call(this)
        };
        B.prototype.kb = function () {
            var a = this.Aa(),
            c = this.eb();
            if (this.m.width != a || this.m.height != c)
                if (!a || !c)
                    b.log("Invalid size values: " + a + " " + c);
                else {
                    this.m.width = a;
                    this.m.height = c;
                    this.lI.WF(this.m.width);
                    this.lI.Cea(this.m.height);
                    this.Ma()
                }
        };
        B.prototype.wh = function () {
            this.m.enabled = n;
            this.Ma()
        };
        B.prototype.th =
        function () {
            this.m.enabled = y;
            this.Ma()
        };
        B.prototype.pk = function () {
            this.m.sb = A.isPresenting();
            this.bm();
            this.Ma()
        };
        B.prototype.Yna = function () {
            this.bm();
            this.Ma()
        };
        B.prototype.Eoa = function () {
            this.Ma()
        };
        B.prototype.joa = function () {
            this.Ma()
        };
        B.prototype.ww = function (a) {
            if (this.m.Ei != a) {
                this.m.Ei = a;
                this.Ma()
            }
        };
        B.prototype.Ka = function (a, c, d, e) {
            if (this.m.ma != a || this.m.pitch != c || this.m.md != d || this.m.bd != e)
                if (isNaN(a) || isNaN(c) || isNaN(d) || !e)
                    b.log("Invalid position values: " + a + " " + c + " " + d + " " + e);
                else {
                    this.m.ma =
                        a;
                    this.m.pitch = c;
                    this.m.md = d;
                    this.m.bd = e;
                    this.lI.sw(this.m.bd * J);
                    this.Ma()
                }
        };
        B.prototype.ac = function () {
            return this.m.ma
        };
        B.prototype.ec = function () {
            return this.m.pitch
        };
        B.prototype.Qd = function () {
            return this.m.md
        };
        B.prototype.Pe = function () {
            return this.m.bd
        };
        B.prototype.qY = function () {
            return this.m.sb ? this.m.Gf : C.Sn(this.m.Gf, this.m.width, this.m.height)
        };
        B.prototype.rY = function () {
            return this.m.Gf
        };
        B.prototype.unproject = function (a) {
            return this.lI.unproject(a)
        };
        B.prototype.Ma = function () {
            K.Ma(this.Pg, this)
        };
        B.prototype.Pg = function () {
            if (K.VY) {
                var a = (new Date).getTime(),
                b = Math.max(1, Math.min(a - this.a6, 33));
                this.a6 = a;
                this.trigger(new g(B.HO, {
                        frameTime: b
                    }));
                if (this.m.enabled) {
                    this.m.vd = b;
                    this.vV()
                }
            } else
                this.Ma()
        };
        B.prototype.vV = function () {
            this.rj.update(this.m);
            this.m.gM = this.rj.lva();
            this.m.PE = this.rj.kva();
            this.m.Gf = this.rj.iva();
            this.m.eh = this.rj.getPixelRatio();
            this.Va.update(this.m);
            this.W$.update(this.m);
            this.H6.update(this.m);
            this.mi.update(this.m);
            this.rj.render()
        };
        B.HO = "render start";
        B.Vea = R(n);
        return B
    });
    define("dt", ["require"], function () {
        function a() {}
        a.prototype.clear = D();
        a.cBa = function (b) {
            return a.create(b, D())
        };
        a.create = function (b, c) {
            c.prototype = Object.create(a.prototype);
            c.prototype.constructor = c;
            c.id = b;
            c.not = "!" + b;
            return c
        };
        a.Lv = function (b, c) {
            var e = a.create(b, c);
            e.fZ = n;
            return e
        };
        return a
    });
    define("eo", ["require", "dt"], function (a) {
        var a = a("dt"),
        b = {};
        b.Geometry = a.create("GeometryComponent", function () {
            this.geometry = r
        });
        b.tq = a.create("MaterialComponent", function () {
            this.material = r
        });
        b.Mesh = a.create("MeshComponent", function () {
            this.Mk = r
        });
        b.ym = a.Lv("MeshSystemStateComponent", function () {
            this.Mk = r
        });
        b.uq = a.create("ModelComponent", function () {
            this.xda = r
        });
        b.vq = a.create("ModelComponentSystemState", function () {
            this.manager = r
        });
        b.OrthographicCamera = a.create("OrthographicCameraComponent", D());
        b.Qw =
            a.Lv("OrthographicCameraSystemStateComponent", function () {
                this.Jc = r
            });
        b.Oh = a.create("ParentComponent", function () {
            this.YE = r
        });
        b.al = a.Lv("ParentSystemStateComponent", function () {
            this.Vc = this.parent = r
        });
        b.Uw = a.create("TransformComponent", function () {
            this.jea = this.iea = this.hea = this.wZ = this.Sda = this.Rda = 0;
            this.nea = this.mea = this.lea = 1
        });
        b.Lf = a.create("RendererComponent", function () {
            this.canvas = r;
            this.antialias = n;
            this.height = this.width = 100;
            this.eM = this.IZ = this.hf = r
        });
        b.wq = a.Lv("RendererSystemStateComponent",
                function () {
                this.height = this.width = m;
                this.Jc = this.Gj = this.hf = r
            });
        b.Scene = a.create("SceneComponent", function () {
            this.Gj = r
        });
        b.Tw = a.Lv("SceneSystemStateComponent", function () {
            this.Gj = r
        });
        b.Texture = a.create("TextureComponent", function () {
            this.texture = r
        });
        b.xq = a.create("VideoMaterialComponent", function () {
            this.Mba = this.lfa = this.Xp = r
        });
        b.yq = a.Lv("VideoMaterialSystemStateComponent", function () {
            this.manager = r
        });
        b.mh = a.create("ViewportComponent", function () {
            this.height = this.width = this.lw = r
        });
        b.zq = a.create("ViewportPlaneGeometryComponent",
                function () {
                this.Xp = this.lw = r
            });
        b.co = a.Lv("ViewportPlaneGeometrySystemStateComponent", function () {
            this.geometry = r;
            this.zIndex = this.kea = this.verticalAlign = this.Sca = this.Sea = this.Tea = m
        });
        return b
    });
    define("ji", ["require"], function () {
        function a(b, c) {
            this.Tn = b;
            this.Cza = c || "Entity";
            this.id = this.Cza + "_" + a.bxa++;
            this.Gk = {};
            this.FF = {};
            this.k_ = 0
        }
        a.prototype.Wb = function (a) {
            return this.Gk[a.id]
        };
        a.prototype.km = function (a) {
            var c = this.Gk[a.id];
            c && this.Tn.uua(this, a);
            return c
        };
        a.prototype.ke = function (a) {
            if (a.id in this.Gk)
                return this.Gk[a.id];
            a.fZ && this.k_++;
            var c = this.Gk[a.id] = new a;
            this.Tn.aua(this, a);
            return c
        };
        a.prototype.Pk = function (a) {
            a.id in this.Gk && (a.fZ && this.k_--, this.FF[a.id] = this.Gk[a.id], delete this.Gk[a.id],
                this.Tn.$da(this, a, m))
        };
        a.prototype.xua = function () {
            for (var a in this.FF)
                this.FF[a].clear(), delete this.FF[a]
        };
        a.prototype.Fxa = function () {
            for (var a in this.Gk) {
                var c = this.Gk[a].constructor;
                c.fZ || (this.FF[a] = this.Gk[a], delete this.Gk[a], this.Tn.$da(this, c, y))
            }
        };
        a.bxa = 0;
        return a
    });
    define("bI", ["require"], function () {
        function a() {
            this.id = a.cU++;
            this.entities = []
        }
        a.cU = 0;
        return a
    });
    define("ip", ["require"], function () {
        function a(b, c) {
            this.id = a.cU++;
            this.name = c;
            this.entities = b.entities;
            this.zs = b.entities.slice();
            this.Yg = [];
            this.oN = []
        }
        a.prototype.vua = function () {
            !this.zs.length || (this.zs = []);
            !this.Yg.length || (this.Yg = []);
            !this.oN.length || (this.oN = [])
        };
        a.cU = 0;
        return a
    });
    define("bd", ["require", "bI", "ip"], function (a) {
        function b() {
            this.jwa = {};
            this.ub = {};
            this.iw = {};
            this.qz = {};
            this.Kp = {};
            this.hw = {};
            this.UE = {};
            this.gw = {}
        }
        function c(a) {
            return "string" == typeof a ? a : a.id
        }
        var e = a("bI"),
        g = a("ip");
        b.prototype.me = function (a) {
            this.UE[a.id] = {};
            this.UE[a.not] = {}
        };
        b.prototype.Hua = function (a, b) {
            var c = this.Ula(a),
            e = new g(c, b);
            this.iw[c.id].push(e);
            return e
        };
        b.prototype.Ula = function (a) {
            var b = this.jwa[this.Vla(a)];
            if (b)
                return b;
            b = new e;
            this.ub[b.id] = b;
            a = a.map(c);
            this.gw[b.id] = {};
            for (var g =
                    0; g < a.length; g++) {
                var j = a[g];
                this.gw[b.id][j] = n;
                this.UE[j][b.id] = n
            }
            this.hw[b.id] = {};
            this.iw[b.id] = [];
            return b
        };
        b.prototype.Vla = function (a) {
            a = a.map(c);
            a.sort();
            return a.join("-")
        };
        b.prototype.gxa = function (a) {
            this.qz[a.id] = {};
            this.Kp[a.id] = {}
        };
        b.prototype.hxa = function (a) {
            delete this.qz[a.id];
            delete this.Kp[a.id]
        };
        b.prototype.dxa = function (a, b) {
            var c = b.id,
            e = b.not,
            g = a.id;
            this.qz[g][c] = n;
            for (var k in this.Kp[g])
                if (e in this.gw[k]) {
                    delete this.hw[k][g];
                    delete this.Kp[g][k];
                    var l = this.ub[k].entities;
                    l.splice(l.indexOf(a),
                        1);
                    for (var l = this.iw[k], q = 0, o = l.length; q < o; q++) {
                        var t = l[q];
                        t.oN.push(a)
                    }
                }
            for (k in this.UE[c])
                if (!(g in this.hw[k])) {
                    var e = n,
                    s;
                    for (s in this.gw[k])
                        if (l = "!" != s[0], (l ? s : s.slice(1))in this.qz[g] != l) {
                            e = y;
                            break
                        }
                    if (e) {
                        this.hw[k][g] = n;
                        this.Kp[g][k] = n;
                        this.ub[k].entities.push(a);
                        l = this.iw[k];
                        q = 0;
                        for (o = l.length; q < o; q++)
                            t = l[q], t.zs.push(a)
                    }
                }
        };
        b.prototype.fxa = function (a, b) {
            var c = b.id,
            e = "!" + c,
            g = a.id;
            delete this.qz[g][c];
            for (var k in this.Kp[g])
                if (c in this.gw[k]) {
                    delete this.hw[k][g];
                    delete this.Kp[g][k];
                    var l =
                        this.ub[k].entities;
                    l.splice(l.indexOf(a), 1);
                    for (var l = this.iw[k], q = 0, o = l.length; q < o; q++) {
                        var t = l[q];
                        t.oN.push(a)
                    }
                }
            for (k in this.UE[e])
                if (!(g in this.hw[k])) {
                    var c = n,
                    s;
                    for (s in this.gw[k])
                        if (l = "!" != s[0], (l ? s : s.slice(1))in this.qz[g] != l) {
                            c = y;
                            break
                        }
                    if (c) {
                        this.hw[k][g] = n;
                        this.Kp[g][k] = n;
                        this.ub[k].entities.push(a);
                        l = this.iw[k];
                        q = 0;
                        for (o = l.length; q < o; q++)
                            t = l[q], t.zs.push(a)
                    }
                }
        };
        b.prototype.exa = function (a, b) {
            var c = b.id,
            e = a.id,
            g;
            for (g in this.Kp[e])
                if (c in this.gw[g])
                    for (var k = this.iw[g], l = 0, q = k.length; l <
                        q; l++) {
                        var o = k[l];
                        0 > o.Yg.indexOf(a) && o.Yg.push(a)
                    }
        };
        return b
    });
    define("iC", ["require", "V", "ji", "bd"], function (a) {
        function b(a) {
            this.jb = a;
            this.RR = {};
            this.lB = [];
            this.eja = {};
            this.XD = [];
            this.cv = new g;
            this.cI = [];
            this.Wr = y
        }
        var c = a("V"),
        e = a("ji"),
        g = a("bd");
        b.prototype.me = function (a) {
            this.eja[a.id] = a;
            this.cv.me(a);
            return this
        };
        b.prototype.kw = function (a, b) {
            var c = new a(this, b);
            c.order = this.XD.length;
            this.XD.push(c);
            for (var e in a.ub)
                c[e] = this.cv.Hua(a.ub[e], b + "." + e);
            this.XD.sort(function (a, b) {
                return a.Td - b.Td || a.order - b.order
            });
            return this
        };
        b.prototype.Kv = function (a) {
            a =
                new e(this, a);
            this.RR[a.id] = a;
            this.cv.gxa(a);
            this.Ps();
            return a
        };
        b.prototype.nM = function (a) {
            a.id in this.RR && (delete this.RR[a.id], this.lB.push(a), a.Fxa(), this.Ps())
        };
        b.prototype.aua = function (a, b) {
            this.cv.dxa(a, b);
            this.Ps()
        };
        b.prototype.$da = function (a, b, c) {
            this.cv.fxa(a, b);
            c || this.cI.push(a);
            this.Ps()
        };
        b.prototype.uua = function (a, b) {
            this.cv.exa(a, b);
            this.Ps()
        };
        b.prototype.Ps = function () {
            this.Wr || (this.Wr = n, c.Ma(this.update, this))
        };
        b.prototype.update = function () {
            this.Wr = y;
            var a = (new Date).getTime(),
            b =
                this.b6 ? a - this.b6 : 0;
            this.b6 = a;
            for (var c = 0; c < this.XD.length; c++) {
                var e = this.XD[c];
                e.execute(b, a);
                for (var g in e.constructor.ub)
                    e[g].vua()
            }
            for (c = 0; c < this.cI.length; c++)
                this.cI[c].xua();
            this.cI.length = 0;
            for (c = this.lB.length - 1; 0 <= c; c--)
                0 == this.lB[c].k_ && (this.cv.hxa(this.lB[c]), this.lB.splice(c, 1))
        };
        return b
    });
    define("iT", ["require"], function () {
        function a(a, c) {
            this.Tn = a;
            this.name = c;
            this.Td = 0
        }
        a.prototype.execute = D();
        return a
    });
    define("fZ", ["require", "eo"], function (a) {
        var b = a("eo"),
        a = {
            Ys: function (a) {
                var c = a.ke(b.ym);
                a.ke(b.Uw);
                var d = a.km(b.Mesh);
                c.Mk = d.Mk = new THREE.Mesh(a.Wb(b.Geometry).geometry, a.Wb(b.tq).material)
            }
        },
        c = new THREE.Euler;
        a.update = function (a) {
            var g = a.km(b.ym);
            g.Mk.geometry = a.Wb(b.Geometry).geometry;
            g.Mk.material = a.Wb(b.tq).material;
            var a = a.Wb(b.Uw),
            g = g.Mk,
            d = y;
            if (g.position.x != a.Rda || g.position.y != a.Sda || g.position.z != a.wZ)
                g.position.x = a.Rda, g.position.y = a.Sda, g.position.z = a.wZ, d = n;
            if (g.rotation.x != a.hea || g.rotation.y !=
                a.iea || g.rotation.z != a.jea)
                c.x = a.hea, c.y = a.iea, c.z = a.jea, g.LBa(c), d = n;
            if (g.scale.x != a.lea || g.scale.y != a.mea || g.scale.z != a.nea)
                g.scale.x = a.lea, g.scale.y = a.mea, g.scale.z = a.nea, d = n;
            d && g.updateMatrix()
        };
        a.Qn = function (a) {
            a.Wb(b.ym).Mk = r;
            a.Pk(b.ym)
        };
        return a
    });
    define("eh", ["require", "fg", "iT", "eo", "fZ"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("fZ"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            this.wF.entities.length && this.wF.entities.forEach(function (a) {
                g.Ys(a)
            });
            this.vF.Yg.length && this.vF.Yg.forEach(function (a) {
                g.update(a)
            });
            this.dN.entities.length && this.dN.entities.forEach(function (a) {
                g.Qn(a)
            });
            this.Zwa.entities.length && this.dN.entities.forEach(function (a) {
                g.Qn(a)
            });
            this.$wa.entities.length && this.dN.entities.forEach(function (a) {
                g.Qn(a)
            })
        };
        a.ub = {};
        a.ub.wF = [e.Mesh, e.Geometry, e.tq, e.ym.not];
        a.ub.vF = [e.Mesh, e.Geometry, e.tq, e.Uw, e.ym];
        a.ub.dN = [e.Mesh.not, e.ym];
        a.ub.Zwa = [e.Geometry.not, e.ym];
        a.ub.$wa = [e.tq.not, e.ym];
        return a
    });
    define("bz", ["require", "eo"], function (a) {
        function b(a) {
            this.Fo = a;
            this.Wg = y;
            this.jma = new THREE.GLTFLoader;
            this.jma.load(this.Fo.Wb(c.uq).xda.get("url"), this.Vna.bind(this), this.Xna.bind(this), this.Wna.bind(this))
        }
        var c = a("eo");
        b.prototype.Vna = function (a) {
            console.log("GLTF loaded", a)
        };
        b.prototype.Xna = function (a) {
            console.log("GLTF loading progress", a.loaded + "/" + a.total)
        };
        b.prototype.Wna = function (a) {
            console.log("GLTF loading error", a)
        };
        b.prototype.update = function () {
            this.Wg && (this.Wg = y)
        };
        b.prototype.Ia =
        function () {
            this.Wg || (this.Wg = n, this.Fo.Tn.Ps())
        };
        b.prototype.dispose = D();
        b.Ys = function (a) {
            a.ke(c.vq).manager = new b(a)
        };
        b.Qn = function (a) {
            var b = a.Wb(c.vq);
            b.manager.dispose();
            b.manager = r;
            a.Pk(c.vq)
        };
        b.update = function (a) {
            a.Wb(c.vq).manager.update()
        };
        return b
    });
    define("iv", ["require", "fg", "iT", "eo", "bz"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("bz"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            this.zda.entities.length && this.zda.entities.forEach(function (a) {
                g.Ys(a)
            });
            this.yda.Yg.length && this.yda.Yg.forEach(function (a) {
                g.update(a)
            });
            this.Ada.entities.length && this.Ada.entities.forEach(function (a) {
                g.Qn(a)
            })
        };
        a.ub = {};
        a.ub.zda = [e.uq, e.vq.not];
        a.ub.yda = [e.uq, e.vq];
        a.ub.Ada = [e.uq.not, e.vq];
        return a
    });
    define("fY", ["require", "eo"], function (a) {
        function b(a) {
            if (!a)
                return r;
            var b = a.Wb(c.Scene);
            return b ? b.Gj : (b = a.Wb(c.Mesh)) ? b.Mk : (a = a.Wb(c.OrthographicCamera)) ? a.Jc : r
        }
        var c = a("eo");
        return {
            Ys: function (a) {
                var g = a.ke(c.al);
                g.parent = b(a.Wb(c.Oh).YE);
                g.Vc = b(a);
                g.parent && g.Vc && g.parent.add(g.Vc)
            },
            update: function (a) {
                var g = a.km(c.al),
                d = b(a.Wb(c.Oh).YE),
                a = b(a);
                if (g.parent != d || g.Vc != a)
                    g.parent && g.Vc && g.parent.remove(g.Vc), g.parent = d, g.Vc = a, g.parent && g.Vc && g.parent.add(g.Vc)
            },
            Qn: function (a) {
                var b = a.Wb(c.al);
                b.parent &&
                b.Vc && b.parent.remove(b.Vc);
                b.parent = r;
                b.Vc = r;
                a.Pk(c.al)
            }
        }
    });
    define("jO", ["require", "fg", "iT", "eo", "fY"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("fY"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            this.wF.entities.length && this.wF.entities.forEach(function (a) {
                g.Ys(a)
            });
            this.AF.entities.length && this.AF.entities.forEach(function (a) {
                g.Ys(a)
            });
            this.vF.Yg.length && this.vF.Yg.forEach(function (a) {
                g.update(a)
            });
            this.Lda.Yg.length && this.Lda.Yg.forEach(function (a) {
                g.update(a)
            });
            this.yba.entities.length && this.yba.entities.forEach(function (a) {
                g.Qn(a)
            });
            this.zba.entities.length && this.zba.entities.forEach(function (a) {
                g.Qn(a)
            })
        };
        a.ub = {};
        a.ub.wF = [e.Mesh, e.Oh, e.al.not];
        a.ub.AF = [e.OrthographicCamera, e.Oh, e.al.not];
        a.ub.vF = [e.Mesh, e.Oh, e.al];
        a.ub.Lda = [e.OrthographicCamera, e.Oh, e.al];
        a.ub.yba = [e.OrthographicCamera.not, e.Mesh.not, e.Oh, e.al];
        a.ub.zba = [e.Oh.not, e.al];
        return a
    });
    define("eJ", ["require", "fK"], function (a) {
        return a("fK")
    });
    define("iP", ["require", "fg", "iT", "eo", "eJ"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("eJ"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            for (var a = 0, b = this.oea.entities.length; a < b; a++)
                this.lza(this.oea.entities[a]);
            a = 0;
            for (b = this.AF.entities.length; a < b; a++)
                this.jza(this.AF.entities[a]);
            a = 0;
            for (b = this.cea.entities.length; a < b; a++)
                this.kza(this.cea.entities[a]);
            a = 0;
            for (b = this.mw.entities.length; a < b; a++)
                this.Uua(this.mw.entities[a]);
            a = 0;
            for (b = this.pea.entities.length; a <
                b; a++)
                this.Hza(this.pea.entities[a]);
            a = 0;
            for (b = this.Mda.entities.length; a < b; a++)
                this.Fza(this.Mda.entities[a]);
            a = 0;
            for (b = this.dea.entities.length; a < b; a++)
                this.Gza(this.dea.entities[a])
        };
        a.prototype.lza = function (a) {
            var b = a.km(e.Scene);
            a.ke(e.Tw).Gj = b.Gj = new THREE.Scene
        };
        a.prototype.jza = function (a) {
            var b = a.km(e.OrthographicCamera);
            a.ke(e.Qw).Jc = b.Jc = new THREE.OrthographicCamera
        };
        a.prototype.kza = function (a) {
            var b = a.Wb(e.Lf),
            a = a.ke(e.wq);
            a.hf = new THREE.WebGLRenderer({
                precision: "mediump",
                alpha: n,
                canvas: b.canvas,
                context: g.hY(b.canvas, b.antialias || y)
            });
            a.hf.setPixelRatio(g.getPixelRatio());
            a.hf.autoClear = y;
            a.hf.setClearColor(0, 0);
            a.width = b.width;
            a.height = b.height
        };
        a.prototype.Uua = function (a) {
            var b = a.Wb(e.Lf),
            a = a.Wb(e.wq),
            c = a.hf,
            g = b.eM && b.eM.Wb(e.OrthographicCamera).Jc,
            p = b.width,
            k = b.height;
            if (a.width != p || a.height != k || a.Jc != g)
                a.width = p, a.height = k, a.Jc = g, c.setSize(p, k), g && (g.left = -0.5 * p, g.right = 0.5 * p, g.top = 0.5 * k, g.bottom = -0.5 * k, g.updateProjectionMatrix());
            b = b.IZ && b.IZ.Wb(e.Scene).Gj;
            a.Gj != b && (a.Gj = b);
            c.clear();
            b && g && c.render(b, g)
        };
        a.prototype.Gza = function (a) {
            var b = a.Wb(e.wq);
            b.hf.forceContextLoss();
            b.hf.dispose();
            b.hf = r;
            a.Pk(e.wq)
        };
        a.prototype.Fza = function (a) {
            var b = a.Wb(e.Qw);
            b.Jc.parent && b.Jc.parent.remove(b.Jc);
            b.Jc = r;
            a.Pk(e.Qw)
        };
        a.prototype.Hza = function (a) {
            a.Wb(e.Tw).Gj = r;
            a.Pk(e.Tw)
        };
        a.ub = {};
        a.ub.cea = [e.Lf, e.wq.not];
        a.ub.dea = [e.Lf.not, e.wq];
        a.ub.mw = [e.Lf, e.wq];
        a.ub.oea = [e.Scene, e.Tw.not];
        a.ub.pea = [e.Scene.not, e.Tw];
        a.ub.AF = [e.OrthographicCamera, e.Qw.not];
        a.ub.Mda = [e.OrthographicCamera.not, e.Qw];
        return a
    });
    define("eV", ["require", "ll", "fu", "bZ", "kT"], function (a) {
        function b(a, b, c, d) {
            this.F = a;
            this.V = b;
            this.dI = c;
            this.Ia = d;
            this.jb = a.Ta();
            this.qe = this.V.get("currentTime");
            this.m = this.V.get("state");
            this.fj = this.V.get("loop");
            this.nK = this.jb.get("mute");
            this.wJ = this.V.get("mute");
            this.m = this.V.get("autoplay") ? e.P : e.mc;
            this.JP();
            this.V.set("state", this.m);
            this.F.Kd(this.nK || this.wJ);
            this.F.sm(this.fj);
            this.F.rw(this.qe);
            this.F.Cc(this.m)
        }
        var c = a("ll"),
        e = a("fu"),
        g = a("bZ"),
        d = a("kT");
        b.prototype.dispose = function () {
            this.oV()
        };
        b.prototype.T7 = function () {
            var a = this.V.get("currentTime", 0);
            this.qe != a && this.F.rw(this.qe = a)
        };
        b.prototype.X7 = function () {
            var a = this.V.get("state", e.H);
            this.m != a && this.F.Cc(this.m = a)
        };
        b.prototype.V7 = function () {
            var a = this.V.get("mute", y);
            this.wJ != a && this.F.Kd(this.nK || (this.wJ = a))
        };
        b.prototype.U7 = function () {
            var a = this.V.get("loop", y);
            this.fj != a && this.F.sm(this.fj = a)
        };
        b.prototype.JC = function () {
            var a = this.jb.get("mute", y);
            this.nK != a && this.F.Kd((this.nK = a) || this.wJ)
        };
        b.prototype.QC = function () {
            this.V.set("currentTime",
                this.qe = this.F.yi())
        };
        b.prototype.OC = function () {
            this.V.set("duration", this.F.Cj())
        };
        b.prototype.PC = function () {
            this.V.set("state", this.m = this.F.Qe());
            this.Ia()
        };
        b.prototype.RC = function () {
            this.dI.trigger(new g(c.Ba))
        };
        b.prototype.JP = function () {
            this.jb.bind(c.D("mute"), this.JC, this, n);
            this.F.bind(d.Md, this.QC, this, n);
            this.F.bind(d.cg, this.OC, this, n);
            this.F.bind(c.gc, this.PC, this, n);
            this.F.bind(c.Ba, this.RC, this, n);
            this.V.bind(c.D("currentTime"), this.T7, this, n);
            this.V.bind(c.D("state"), this.X7, this, n);
            this.V.bind(c.D("mute"), this.V7, this, n);
            this.V.bind(c.D("loop"), this.U7, this, n)
        };
        b.prototype.oV = function () {
            this.jb.unbind(c.D("mute"), this.JC, this, n);
            this.F.unbind(d.Md, this.QC, this, n);
            this.F.unbind(d.cg, this.OC, this, n);
            this.F.unbind(c.gc, this.PC, this, n);
            this.F.unbind(c.Ba, this.RC, this, n);
            this.V.unbind(c.D("currentTime"), this.T7, this, n);
            this.V.unbind(c.D("state"), this.X7, this, n);
            this.V.unbind(c.D("mute"), this.V7, this, n);
            this.V.unbind(c.D("loop"), this.U7, this, n)
        };
        return b
    });
    define("s", "require,ll,fu,ge,bS,iG,eJ".split(","), function (a) {
        function b(a, b, d, e, f) {
            this.xb = a;
            this.F = b;
            this.V = d;
            this.ab = e;
            this.Ia = f;
            this.yy = this.ab.get("posterURL");
            this.Lta = this.ab.get("url");
            this.jc = r;
            this.f6();
            this.ab.bind(c.D("posterURL"), this.R7, this, n);
            this.Ia();
            this.ka = this.u = r
        }
        var c = a("ll"),
        e = a("fu"),
        g = a("ge"),
        d = a("bS"),
        f = a("iG"),
        h = a("eJ");
        b.prototype.update = function () {
            var a = this.F.AM();
            a.isEmpty() && (a = r);
            if (a && (!this.jc || this.jc && !this.jc.isEqual(a))) {
                this.jc = a;
                a = this.jc.cu;
                if (!this.u && h.kfa(this.Lta)) {
                    this.u =
                        document.createElement("canvas");
                    this.ka = this.u.getContext("2d")
                }
                if (this.u && h.Jh(a)) {
                    this.ka.drawImage(a, 0, 0, this.u.width = a.videoWidth, this.u.height = a.videoHeight);
                    a = this.u
                }
                this.xb.image = a;
                this.xb.needsUpdate = n
            } else if (!this.jc && this.jD && this.xb.image != this.jD) {
                this.xb.image = this.jD;
                this.xb.needsUpdate = n
            }
            (this.xb.needsUpdate || this.F.Qe() == e.P) && this.Ia()
        };
        b.prototype.R7 = function () {
            this.fra(this.ab.get("posterURL"))
        };
        b.prototype.fra = function (a) {
            if (this.yy != a) {
                this.taa();
                this.yy = a;
                this.f6()
            }
        };
        b.prototype.f6 =
        function () {
            if (this.yy) {
                this.jD = r;
                this.xy = new d;
                this.xy.g_([this.yy]);
                this.xy.bind(c.S, this.Q7, this, n);
                f.Mn(this.xy, this.V.get("loadPriority", g.Uj))
            }
        };
        b.prototype.taa = function () {
            if (this.yy) {
                this.xy.unbind(c.S, this.Q7, this, n);
                f.Fi(this.xy, this.V.get("loadPriority", g.Uj));
                this.jD = this.xy = r
            }
        };
        b.prototype.Q7 = function () {
            this.jD = f.we(this.yy);
            this.Ia()
        };
        b.prototype.dispose = function () {
            this.taa();
            this.ab.unbind(c.D("posterURL"), this.R7, this, n);
            this.ka = this.ab = r;
            this.u && (this.u = this.u.width = this.u.height = 0);
            this.Ia = this.Cf = this.F = this.xb = r
        };
        return b
    });
    define("in", ["require", "eJ"], function (a) {
        var b = a("eJ");
        return {
            vfa: function () {
                this.blending = 0;
                this.Hz = m;
                this.Qea = this.bfa = 0
            },
            Cga: function () {
                this.Ls = y;
                this.height = this.width = 100
            },
            create: function (a, e, g) {
                var d = a.Ls && b.Qca(),
                f = a.Ls && b.Pca(),
                h = {
                    uniforms: {},
                    transparent: n
                };
                h.uniforms.texture = {
                    type: "sampler2D",
                    value: g
                };
                h.uniforms.opacity = {
                    type: "float",
                    value: 1
                };
                g.flipY = !d;
                h.vertexShader = ["varying vec2 vUV;\nvoid main() {", "\tvUV = vec2( uv.x, " + (d ? "1.0 - uv.y" : "uv.y") + ");", "\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"].join("\n");
                if (f || e.blending || e.Hz) {
                    var d = [],
                    j = [],
                    d = d.concat(["uniform sampler2D texture;", "uniform float opacity;", "varying vec2 vUV;"]),
                    j = j.concat(["   vec4 color = texture2D(texture, vUV);", "   float alpha = color.a * opacity;"]);
                    if (e.blending) {
                        var p = 0.5 * Math.min(a.width, a.height) * e.blending;
                        h.uniforms.blendingLimit = {
                            type: "v2",
                            value: new THREE.Vector2(p / a.width, p / a.height)
                        };
                        d = d.concat(["uniform vec2 blendingLimit;"]);
                        j = j.concat("   float xCoef = 0.0;,   float yCoef = 0.0;,   if (vUV.x < blendingLimit.x) {,      xCoef = 1.0 - (vUV.x / blendingLimit.x);,      xCoef = xCoef * xCoef;,   } else if ((1.0 - vUV.x) < blendingLimit.x) {,      xCoef = 1.0 - ((1.0 - vUV.x) / blendingLimit.x);,      xCoef = xCoef * xCoef;,   },   if (vUV.y < blendingLimit.y) {,      yCoef = 1.0 - (vUV.y / blendingLimit.y);,      yCoef = yCoef * yCoef;,   } else if ((1.0 - vUV.y) < blendingLimit.y) {,      yCoef = 1.0 - ((1.0 - vUV.y) / blendingLimit.y);,      yCoef = yCoef * yCoef;,   },   alpha = alpha * (1.0 - sqrt(xCoef + yCoef));".split(","))
                    }
                    e.Hz &&
                    (h.uniforms.chromaColor = {
                            type: "v3",
                            value: new THREE.Vector3(parseInt(e.Hz.substr(1, 2), 16) / 255, parseInt(e.Hz.substr(3, 2), 16) / 255, parseInt(e.Hz.substr(5, 2), 16) / 255)
                        }, h.uniforms.chromaThreshold = {
                            type: "f",
                            value: e.bfa
                        }, h.uniforms.chromaSmoothing = {
                            type: "f",
                            value: e.Qea
                        }, d = d.concat(["uniform vec3 chromaColor;", "uniform float chromaThreshold;", "uniform float chromaSmoothing;"]), j = j.concat("    float maskY = 0.2989 * chromaColor.r + 0.5866 * chromaColor.g + 0.1145 * chromaColor.b;{    float maskCr = 0.7132 * (chromaColor.r - maskY);{    float maskCb = 0.5647 * (chromaColor.b - maskY);{    float Y = 0.2989 * color.r + 0.5866 * color.g + 0.1145 * color.b;{    float Cr = 0.7132 * (color.r - Y);{    float Cb = 0.5647 * (color.b - Y);{    float chromaBlendValue = smoothstep(chromaThreshold, chromaThreshold + chromaSmoothing, distance(vec2(Cr, Cb), vec2(maskCr, maskCb)));{    alpha = alpha * chromaBlendValue;".split("{")));
                    j = j.concat(["\tgl_FragColor = vec4(color" + (f ? ".bgr" : ".rgb") + ", alpha);"]);
                    g.format = THREE.RGBAFormat;
                    h.fragmentShader = [].concat(d, ["void main() {"], j, ["}"]).join("\n")
                } else
                    h.fragmentShader = "uniform sampler2D texture;\nuniform float opacity;\nvarying vec2 vUV;\nvoid main() {\n   vec4 color = texture2D(texture, vUV);\n   float alpha = color.a * opacity;\n\tgl_FragColor = vec4(color.rgb, alpha);\n}";
                a = new THREE.ShaderMaterial(h);
                a.transparent = n;
                a.depthWrite = n;
                a.side = THREE.FrontSide;
                a.depthTest = n;
                a.needsUpdate =
                    n;
                return a
            }
        }
    });
    define("dI", ["require"], function () {
        var a = {},
        b = r;
        a.nva = function () {
            if (!b) {
                var a = document.createElement("canvas");
                a.width = 128;
                a.height = 128;
                a.getContext("2d").clearRect(0, 0, a.width, a.height);
                b = a
            }
            return b
        };
        return a
    });
    define("Q", "require,ih,ll,fu,eV,s,in,dI,eJ,eo,jt,hT,kT".split(","), function (a) {
        function b(a) {
            this.Fo = a;
            this.mU = this.mU.bind(this);
            a = a.Wb(k.xq);
            this.dI = a.Mba;
            this.V = a.Xp;
            this.FX = a.lfa;
            this.jb = this.Fo.Tn.jb;
            this.Wg = y;
            this.ab = r;
            c.Eb(this.FX, ["levels.url", "levels.width", "levels.height"], this.mU, n)
        }
        var c = a("ih"),
        e = a("ll"),
        g = a("fu"),
        d = a("eV"),
        f = a("s"),
        h = a("in"),
        j = a("dI"),
        p = a("eJ"),
        k = a("eo");
        a("jt");
        var l = a("hT"),
        q = a("kT");
        b.prototype.update = function () {
            if (this.Wg) {
                this.Wg = y;
                this.zW.update()
            }
        };
        b.prototype.mU =
        function () {
            this.Z9(q.ah(this.FX))
        };
        b.prototype.Z9 = function (a) {
            a = a && a.get("url") ? a : r;
            if (this.ab != a) {
                if (this.ab) {
                    this.bba.dispose();
                    this.bba = r;
                    this.zW.dispose();
                    this.zW = r;
                    this.cka();
                    this.dka();
                    this.eka();
                    this.V.unbind(e.D("opacity"), this.W7, this, n);
                    this.Wg = y
                }
                if (this.ab = a) {
                    this.fB();
                    this.eB();
                    this.Tja();
                    this.Ia = this.Ia.bind(this);
                    this.bba = new d(this.F, this.V, this.dI, this.Ia);
                    this.zW = new f(this.xb, this.F, this.V, this.ab, this.Ia);
                    this.V.bind(e.D("opacity"), this.W7, this, n);
                    this.c$(this.Bb = this.V.get("opacity",
                                1));
                    this.Wg = y;
                    this.Ia()
                }
            }
        };
        b.prototype.Ia = function () {
            if (!this.Wg) {
                this.Wg = n;
                this.Fo.Tn.Ps()
            }
        };
        b.prototype.fB = function () {
            this.xb = new THREE.Texture;
            this.xb.image = j.nva();
            this.xb.generateMipmaps = y;
            this.xb.minFilter = THREE.LinearFilter;
            this.xb.magFilter = THREE.LinearFilter;
            this.xb.format = THREE.RGBFormat
        };
        b.prototype.dka = function () {
            this.xb.dispose();
            this.xb = r
        };
        b.prototype.Tja = function () {
            this.F = new q(this.Fo.Tn.jb, this.FX);
            this.wp = new l(this.V, this.F)
        };
        b.prototype.eka = function () {
            this.F.Cc(g.H);
            this.F.clear();
            this.F = r;
            this.wp.clear();
            this.wp = r
        };
        b.prototype.eB = function () {
            var a = new h.Cga;
            a.Ls = p.Ls(this.ab.get("url"));
            a.width = this.ab.get("width");
            a.height = this.ab.get("height");
            var b = new h.vfa;
            b.blending = this.V.get("blending", 0);
            b.Hz = this.V.get("chromaColor");
            b.bfa = this.V.get("chromaThreshold", 0);
            b.Qea = this.V.get("chromaSmoothing", 0);
            this.Au = h.create(a, b, this.xb);
            this.Fo.ke(k.tq).material = this.Au
        };
        b.prototype.cka = function () {
            this.Au.dispose();
            this.Au = r;
            this.Fo.Pk(k.tq)
        };
        b.prototype.dispose = function () {
            this.Z9(r);
            this.V.set("state", g.H);
            this.Fo = this.dI = this.V = this.jb = r
        };
        b.prototype.W7 = function () {
            var a = this.V.get("opacity");
            if (this.Bb != a) {
                this.c$(this.Bb = a);
                this.Ia()
            }
        };
        b.prototype.c$ = function (a) {
            this.Au.opacity = a;
            if (this.Au.isShaderMaterial && this.Au.uniforms.opacity)
                this.Au.uniforms.opacity.value = a
        };
        b.Ys = function (a) {
            a.ke(k.yq).manager = new b(a)
        };
        b.Qn = function (a) {
            var b = a.Wb(k.yq);
            b.manager.dispose();
            b.manager = r;
            a.Pk(k.yq)
        };
        b.update = function (a) {
            a.Wb(k.yq).manager.update()
        };
        return b
    });
    define("dA", ["require", "fg", "iT", "eo", "Q"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("Q"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            this.Vwa.entities.forEach(function (a) {
                g.Ys(a)
            });
            this.Wwa.entities.forEach(function (a) {
                g.Qn(a)
            });
            this.materials.entities.forEach(function (a) {
                g.update(a)
            })
        };
        a.ub = {};
        a.ub.Vwa = [e.xq, e.yq.not];
        a.ub.materials = [e.xq, e.yq];
        a.ub.Wwa = [e.xq.not, e.yq];
        return a
    });
    define("iA", ["require", "fg", "iT", "eo"], function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        a = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.prototype.execute = function () {
            for (var a = 0, b = this.v_.zs.length; a < b; a++)
                this.tra(this.v_.zs[a]);
            a = 0;
            for (b = this.mw.Yg.length; a < b; a++)
                this.Taa(this.mw.Yg[a]);
            a = 0;
            for (b = this.mw.zs.length; a < b; a++)
                this.Taa(this.mw.zs[a])
        };
        a.prototype.tra = function (a) {
            var b = a.Wb(e.mh),
            c = b.lw.Wb(e.Lf),
            h = c && c.height || 100;
            if (b.width != (c && c.width || 100) || b.height != h)
                b = a.km(e.mh), b.width = c && c.width ||
                    100, b.height = c && c.height || 100
        };
        a.prototype.Taa = function (a) {
            var b = a.Wb(e.Lf);
            this.v_.entities.forEach(function (c) {
                if (c.Wb(e.mh).lw == a) {
                    var h = c.Wb(e.mh);
                    if (h.width != b.width || h.height != b.height)
                        h = c.km(e.mh), h.width = b.width, h.height = b.height
                }
            })
        };
        a.ub = {};
        a.ub.v_ = [e.mh];
        a.ub.mw = [e.Lf];
        return a
    });
    define("di", ["require"], function () {
        return {
            create: function () {
                var a = new THREE.BufferGeometry;
                a.setAttribute("position", new THREE.BufferAttribute(new Float32Array(18), 3));
                a.setAttribute("normal", new THREE.BufferAttribute(new Float32Array(18), 3));
                a.setAttribute("uv", new THREE.BufferAttribute(new Float32Array(12), 2));
                a.setIndex(new THREE.BufferAttribute(new Uint32Array(6), 1));
                return a
            },
            set: function (a, b, c, e, g, d, f, h, j, p, k, l, q, o, t) {
                var s = a.getAttribute("position").array,
                v = a.getAttribute("normal").array,
                u =
                    a.getAttribute("uv").array,
                w = a.getIndex().array;
                s[9] = s[0] = b;
                s[10] = s[1] = c;
                s[11] = s[2] = e;
                u[6] = u[0] = g;
                u[7] = u[1] = d;
                s[3] = s[0] + k;
                s[4] = s[1] + l;
                s[5] = s[2] + q;
                u[2] = u[0];
                u[3] = u[1] + o;
                s[12] = s[6] = s[3] + f;
                s[13] = s[7] = s[4] + h;
                s[14] = s[8] = s[5] + j;
                u[8] = u[4] = u[2] + p;
                u[9] = u[5] = u[3];
                s[15] = s[12] - k;
                s[16] = s[13] - l;
                s[17] = s[14] - q;
                u[10] = u[8];
                u[11] = u[9] - o;
                b = h * q - j * l;
                j = j * k - f * q;
                f = f * l - h * k;
                h = 1 / Math.sqrt(b * b + j * j + f * f);
                v[0] = v[3] = v[6] = v[9] = v[12] = v[15] = b * h;
                v[1] = v[4] = v[7] = v[10] = v[13] = v[16] = j * h;
                v[2] = v[5] = v[8] = v[11] = v[14] = v[17] = f * h;
                w[0] = 0;
                w[1] = 2;
                w[2] = 1;
                w[3] = 3;
                w[4] = 5;
                w[5] = 4;
                a.getAttribute("position").needsUpdate = n;
                a.getAttribute("normal").needsUpdate = n;
                a.getAttribute("uv").needsUpdate = n;
                a.clearGroups();
                a.addGroup(0, 6, t);
                a.computeBoundingBox();
                a.computeBoundingSphere();
                return a
            }
        }
    });
    define("kY", ["require", "ll", "iN"], function (a) {
        function b(a, b, e) {
            this.$i = a;
            this.V = b;
            this.GS = e;
            this.MK = this.MK.bind(this);
            this.dx = m;
            this.V.forEach(function (a) {
                this.$i.bind(c.D(a), this.Ju, this, n)
            }
                .bind(this));
            this.MK()
        }
        var c = a("ll"),
        e = a("iN");
        b.prototype.stop = function () {
            this.V.forEach(function (a) {
                this.$i.unbind(c.D(a), this.Ju, this, n)
            }
                .bind(this));
            this.dx && (e.cancel(this.dx), this.dx = m)
        };
        b.prototype.Ju = function () {
            this.dx || (this.dx = e.nw(this.MK))
        };
        b.prototype.MK = function () {
            this.dx = m;
            var a = this.$i;
            this.GS.apply(window,
                this.V.map(function (b) {
                    return a.get(b)
                }))
        };
        return b
    });
    define("ek", "require,fg,iT,eo,di,kY,jY,jn".split(","), function (a) {
        var b = a("fg"),
        c = a("iT"),
        e = a("eo"),
        g = a("di"),
        d = a("kY"),
        f = a("jY"),
        h = a("jn"),
        j = b.extend(c, function () {
            c.apply(this, arguments)
        });
        j.prototype.execute = function () {
            for (var a = 0, b = this.Oda.entities.length; a < b; a++)
                this.sra(this.Oda.entities[a]);
            a = 0;
            for (b = this.Nda.Yg.length; a < b; a++)
                this.mta(this.Nda.Yg[a]);
            a = 0;
            for (b = this.Pda.entities.length; a < b; a++)
                this.hsa(this.Pda.entities[a])
        };
        j.prototype.sra = function (a) {
            var b = a.Wb(e.zq),
            c = a.ke(e.mh);
            c.lw = b.lw;
            var f = b.lw.Wb(e.Lf);
            if (f) {
                c.width = f.width;
                c.height = f.height
            }
            c = a.ke(e.co);
            c.geometry = g.create();
            c.Tda = new d(b.Xp, ["width", "height", "horizontalAlign", "verticalAlign", "scaleMode", "zIndex"], function (b, c, d, f, g, h) {
                var j = a.km(e.co);
                j.Tea = b;
                j.Sea = c;
                j.Sca = d;
                j.verticalAlign = f;
                j.kea = g;
                j.zIndex = h
            });
            a.ke(e.Geometry).geometry = c.geometry
        };
        j.prototype.hsa = function (a) {
            var b = a.Wb(e.co);
            b.geometry.dispose();
            b.geometry = r;
            b.Tda.stop();
            b.Tda = r;
            a.Pk(e.Geometry);
            a.Pk(e.mh);
            a.Pk(e.co)
        };
        j.prototype.mta = function (a) {
            var b = a.Wb(e.co),
            c = a.Wb(e.mh),
            d = c.width,
            o = c.height,
            t = b.Tea,
            s = b.Sea,
            v;
            switch (b.kea) {
            case h.NONE:
                c = t;
                v = s;
                break;
            case h.Zk:
                c = d;
                v = s * d / t;
                break;
            case h.kh:
                v = o;
                c = t * o / s;
                break;
            case h.xm:
                if (t * o > s * d) {
                    v = o;
                    c = t * o / s
                } else {
                    c = d;
                    v = s * d / t
                }
                break;
            default:
                if (t * o > s * d) {
                    c = d;
                    v = s * d / t
                } else {
                    v = o;
                    c = t * o / s
                }
            }
            switch (b.Sca) {
            case f.qa:
                d = -d * 0.5;
                break;
            case f.Na:
                d = d * 0.5 - c;
                break;
            default:
                d = -c * 0.5
            }
            switch (b.verticalAlign) {
            case f.nb:
                o = o * 0.5 - v;
                break;
            case f.mb:
                o = -o * 0.5;
                break;
            default:
                o = -v * 0.5
            }
            t = b.zIndex - j.Wfa;
            g.set(b.geometry, d, o, 0, 0, 0, c, 0, 0, 1, 0, v, 0, 1, 0);
            (a.km(e.Uw) ||
                a.ke(e.Uw)).wZ = t;
            a.Tn.Ps()
        };
        j.Wfa = 100;
        j.ub = {};
        j.ub.Oda = [e.zq, e.co.not];
        j.ub.Nda = [e.zq, e.co, e.mh];
        j.ub.Pda = [e.zq.not, e.co];
        return j
    });
    define("gD", "require,eh,iv,jO,iP,dA,iA,ek".split(","), function (a) {
        var b = a("eh"),
        c = a("iv"),
        e = a("jO"),
        g = a("iP"),
        d = a("dA"),
        f = a("iA"),
        a = a("ek"),
        h = {};
        h.Mesh = b;
        h.uq = c;
        h.Oh = e;
        h.Lf = g;
        h.xq = d;
        h.mh = f;
        h.zq = a;
        return h
    });
    define("eP", "require,fg,ll,d,iC,eo,gD".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("d"),
        g = a("iC"),
        d = a("eo"),
        f = a("gD"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.GE = (new g(a)).me(d.Geometry).me(d.tq).me(d.Mesh).me(d.ym).me(d.uq).me(d.vq).me(d.OrthographicCamera).me(d.Qw).me(d.Oh).me(d.al).me(d.Uw).me(d.Lf).me(d.wq).me(d.Scene).me(d.Tw).me(d.Texture).me(d.xq).me(d.yq).me(d.mh).me(d.zq).me(d.co).kw(f.mh, "Viewport").kw(f.Oh, "Parent").kw(f.xq, "VideoMaterial").kw(f.zq, "ViewportPlaneGeometry").kw(f.Mesh,
                "Mesh").kw(f.uq, "Model").kw(f.Lf, "Renderer");
            this.tj = this.GE.Kv("Scene");
            this.tj.ke(d.Scene);
            this.zb = this.GE.Kv("Camera");
            this.zb.ke(d.OrthographicCamera);
            this.zb.ke(d.Oh).YE = this.tj;
            this.g = this.GE.Kv("Renderer");
            this.bind(c.yb, this.kb, this, n);
            this.bind(c.od, this.wh, this, n);
            this.bind(c.zd, this.th, this, n)
        });
        a.prototype.Kv = function (a) {
            return this.GE.Kv(a)
        };
        a.prototype.nM = function (a) {
            this.GE.nM(a)
        };
        a.prototype.Hs = Q("zb");
        a.prototype.Qs = function (a) {
            if (this.zb != a) {
                this.zb = a;
                if (a = this.g.km(d.Lf))
                    a.eM = this.zb
            }
        };
        a.prototype.kb = function () {
            var a = this.g.km(d.Lf);
            if (a) {
                a.width = this.Id();
                a.height = this.Hd()
            }
        };
        a.prototype.wh = function () {
            this.xra()
        };
        a.prototype.th = function () {
            this.isa()
        };
        a.prototype.xra = function () {
            var a = this.g.Wb(d.Lf);
            if (!a) {
                a = this.g.ke(d.Lf);
                a.canvas = document.createElement("canvas");
                this.Ra().WX(a.canvas);
                a.eM = this.zb;
                a.IZ = this.tj;
                a.antialias = n;
                a.width = this.Id();
                a.height = this.Hd()
            }
        };
        a.prototype.isa = function () {
            var a = this.g.Wb(d.Lf);
            if (a) {
                this.Ra().Ixa(a.canvas);
                this.g.Pk(d.Lf)
            }
        };
        return a
    });
    define("ba", ["require", "fg", "ll", "fu", "cR"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("cR"),
        a = b.extend(g, function (a, b) {
            g.call(this, a);
            this.F = b;
            this.F.bind(c.D("video"), this.NC, this);
            this.F.bind(c.gc, this.NC, this);
            this.NC()
        });
        a.prototype.clear = function () {
            this.F && (this.F.unbind(c.D("video"), this.NC, this), this.F.unbind(c.gc, this.NC, this), this.F = r);
            g.prototype.clear.call(this)
        };
        a.prototype.NC = function () {
            this.f_(this.F.get("state") != e.H ? this.F.get("video") : r)
        };
        return a
    });
    define("dZ", "require,fg,ll,R,d,dc,ba".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("R"),
        g = a("d"),
        d = a("dc"),
        f = a("ba"),
        a = b.extend(g, function (a, b, p) {
            g.call(this);
            this.jb = a;
            this.C = b;
            this.F = p;
            this.set("toolTipDisabled", n);
            this.set("cursor", e.qq);
            this.bind(c.yb, this.kb, this, n);
            this.Uy = new f(b, p);
            this.oj = new d.HG;
            this.oj.uN(d.HG.BG);
            this.oj.xe(this.hp = y);
            [this.Uy.Gb(), this.oj.Gb()].forEach(function (a, b) {
                this.Ra().append(a);
                a.css({
                    position: "absolute",
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0,
                    overflow: "hidden",
                    "z-index": b
                })
            }
                .bind(this))
        });
        a.prototype.tw = function (a, b) {
            if (this.hp != a) {
                this.hp = a;
                this.oj.JZ(b);
                this.oj.xe(a)
            }
        };
        a.prototype.kb = function () {
            this.ND = n;
            this.oj.setSize(this.Aa(), this.eb())
        };
        return a
    });
    define("jr", "require,fg,R,c,kS,eo,eP,dZ".split(","), function (a) {
        var b = a("fg"),
        c = a("R"),
        e = a("c"),
        g = a("kS"),
        d = a("eo"),
        f = a("eP"),
        h = a("dZ"),
        a = b.extend(g, function (a, b, d) {
            g.call(this);
            this.jb = a;
            this.C = b;
            this.F = d;
            this.Tc("Renderer");
            this.set("toolTipDisabled", n);
            this.set("cursor", c.qq);
            this.set("layout", e.gG);
            this.Ha = this.ff = r;
            this.TL = [];
            this.DE = [];
            this.am()
        });
        a.prototype.Ga = function () {
            g.prototype.Ga.call(this);
            if (this.ff == r) {
                this.ff = new f(this.jb);
                this.ff.M({
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0
                });
                this.la(this.ff);
                this.TL.forEach(function (a) {
                    this.cB(a)
                }
                    .bind(this))
            }
            if (this.Ha == r) {
                this.Ha = new h(this.jb, this.C, this.F);
                this.Ha.M({
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0
                });
                this.la(this.Ha);
                this.am()
            }
        };
        a.prototype.hua = function (a) {
            this.TL.push(a);
            this.ff && this.cB(a)
        };
        a.prototype.cB = function (a) {
            var b = this.ff.Kv("Video");
            b.ke(d.Oh).YE = this.ff.tj;
            b.ke(d.Mesh).Xp = a;
            var c = b.ke(d.zq);
            c.Xp = a;
            c.lw = this.ff.g;
            c = b.ke(d.xq);
            c.Xp = a;
            c.lfa = a.get("video");
            c.Mba = a;
            this.DE.push(b);
            this.am()
        };
        a.prototype.bea = function (a) {
            a = this.TL.indexOf(a);
            if (!(a < 0)) {
                this.TL.splice(a, 1);
                this.ff && this.wR(this.DE[a])
            }
        };
        a.prototype.wR = function (a) {
            var b = this.DE.indexOf(a);
            if (!(b < 0)) {
                this.DE.splice(b, 1);
                this.ff.nM(a);
                this.am()
            }
        };
        a.prototype.tw = function (a) {
            this.hp = a;
            this.am()
        };
        a.prototype.am = function () {
            this.Ha && this.Ha.tw(this.hp && this.DE.length > 0)
        };
        return a
    });
    define("bl", "require,do,fg,ll,fu,bZ,dW,jT,eT,cr,dQ,jr,r,dm,ck,fm,kS".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("fu"),
        d = a("bZ"),
        f = a("dW"),
        h = a("jT"),
        j = a("eT"),
        p = a("cr"),
        k = a("dQ"),
        l = a("jr"),
        q = a("r"),
        o = a("dm"),
        t = a("ck"),
        s = a("fm"),
        v = a("kS"),
        u = c.extend(v, function () {
            v.call(this);
            this.set("childrenInteractionEnabled", n);
            this.set("contentOpaque", n);
            this.set("creationPolicy", t.ut);
            this.set("vrPointerColor", "#ffffff");
            this.set("vrPointerOverColor", "#007acc");
            this.set("vrPointerSelectionColor",
                "#ff6600");
            this.set("vrPointerDistance", 2);
            this.set("vrPointerSelectionTime", 1200);
            this.set("surfaceReticleColor", "#ffffff");
            this.set("surfaceReticleSelectionColor", "#ffffff");
            this.set("surfaceReticleOpacity", 0.6);
            this.set("surfaceReticleSelectionOpacity", 1);
            this.set("displayTooltipInSurfaceSelection", n);
            this.set("doubleClickAction", "toggle_fullscreen");
            this.set("subtitlesEnabled", n);
            this.set("checkToolTipOcclusion", n);
            this.Jm = this.Rb = this.eI = this.af = r;
            this.OU = this.Xm = y;
            this.Yf = g.H;
            this.Pi = this.nh =
                r;
            this.hk = y;
            this.bind(u.N0, this.roa, this, n);
            this.bind(u.M0, this.qoa, this, n);
            this.bind(e.Hb, this.O7, this);
            this.bind(e.Hb, this.O7, this);
            this.bind(e.xc, this.Koa, this);
            this.bind(e.Qb, this.Joa, this);
            this.bind(e.od, this.RJ, this, n);
            this.bind(e.zd, this.Ioa, this, n);
            this.aY = new h(this, "buttonPause", o.Qh);
            this.aY.bind(e.U, this.Nu, this);
            this.aY.set("state", s.dd);
            this.cY = new h(this, "buttonPlay", o.Qh);
            this.cY.bind(e.U, this.Ou, this);
            this.cY.set("state", s.dd);
            this.bY = new h(this, "buttonPlayPause", o.Qh);
            this.bY.bind(e.U,
                this.noa, this);
            this.bY.set("state", s.dd);
            this.dY = new h(this, "buttonStop", o.Qh);
            this.dY.bind(e.U, this.Or, this);
            this.dY.set("state", s.Ca);
            this.kua = new h(this, "buttonRestart", o.Wc);
            this.kua.bind(e.U, this.Nr, this);
            this.dM = new h(this, "buttonToggleSubtitles", o.Qh);
            this.dM.bind(e.Dg, function () {
                this.set("subtitlesEnabled", n)
            }, this, n);
            this.dM.bind(e.Ph, function () {
                this.set("subtitlesEnabled", y)
            }, this, n);
            this.bind(e.D("subtitlesEnabled"), function () {
                this.dM.set("pressed", this.get("subtitlesEnabled"))
            }, this);
            this.dM.set("pressed", this.get("subtitlesEnabled"));
            this.Sma = c.nm(this.Eta, this);
            this.bind(e.DG, this.Hoa, this, n)
        });
        f.A("ViewerArea", u).B("UIComponent").J({
            buttonPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlay: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonStop: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRestart: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleSubtitles: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            cardboardPointerColor: "color",
            cardboardPointerSelectionTime: "number",
            cardboardPointerSelectionColor: "color",
            cardboardPointerDistance: "number",
            externalPlaybackBar: "PlaybackBar",
            vrPointerColor: "color",
            vrPointerOverColor: "color",
            vrPointerSelectionTime: "number",
            vrPointerSelectionColor: "color",
            vrPointerDistance: "number",
            transitionMode: "enum[blending, fade_out_fade_in]",
            transitionDuration: "number",
            blendingTransitionDuration: "number",
            disolveTransitionDuration: "number",
            displayTooltipInSurfaceSelection: "bool",
            displayTooltipInTouchScreens: "bool",
            doubleClickAction: "enum[toggle_fullscreen, none]",
            firstTransitionDuration: "number",
            translationTransitionDuration: "number",
            translationTransitionEnabled: "bool",
            progressBackgroundColor: "or[array[color], color]",
            progressBackgroundColorDirection: "enum[horizontal, vertical]",
            progressBackgroundColorRatios: "array[number]",
            progressBackgroundOpacity: "number",
            progressBarBackgroundColor: "or[array[color], color]",
            progressBarBackgroundColorDirection: "enum[horizontal, vertical]",
            progressBarBackgroundColorRatios: "array[number]",
            progressBarBorderColor: "color",
            progressBarBorderRadius: "number",
            progressBarBorderSize: "number",
            progressBarOpacity: "number",
            progressBorderColor: "color",
            progressBorderRadius: "number",
            progressBorderSize: "number",
            progressBottom: "or[number, percent]",
            progressHeight: "or[number, percent]",
            progressLeft: "or[number, percent]",
            progressOpacity: "number",
            progressRight: "or[number, percent]",
            externalProgressBar: "ProgressBar",
            playbackBarBackgroundColor: "or[array[color], color]",
            playbackBarBackgroundColorDirection: "enum[horizontal, vertical]",
            playbackBarBackgroundOpacity: "number",
            playbackBarBorderColor: "color",
            playbackBarBorderRadius: "number",
            playbackBarBorderSize: "number",
            playbackBarBottom: "or[number, percent]",
            playbackBarHeight: "or[number, percent]",
            playbackBarWidth: "or[number, percent]",
            playbackBarLeft: "or[number, percent]",
            playbackBarOpacity: "number",
            playbackBarRight: "or[number, percent]",
            playbackBarRollOverDisplay: "bool",
            playbackBarLiveDragging: "bool",
            playbackBarProgressBackgroundColor: "or[array[color], color]",
            playbackBarProgressBackgroundColorDirection: "enum[horizontal, vertical]",
            playbackBarProgressBackgroundColorRatios: "array[number]",
            playbackBarProgressBorderColor: "color",
            playbackBarProgressBorderRadius: "number",
            playbackBarProgressBorderSize: "number",
            playbackBarProgressOpacity: "number",
            playbackBarHeadBackgroundColor: "or[array[color], color]",
            playbackBarHeadBackgroundColorDirection: "enum[horizontal, vertical]",
            playbackBarHeadBackgroundColorRatios: "array[number]",
            playbackBarHeadBorderColor: "color",
            playbackBarHeadBorderRadius: "number",
            playbackBarHeadBorderSize: "number",
            playbackBarHeadOpacity: "number",
            playbackBarHeadWidth: "or[number, percent]",
            playbackBarHeadHeight: "or[number, percent]",
            playbackBarHeadShadow: "bool",
            playbackBarHeadShadowBlurRadius: "number",
            playbackBarHeadShadowColor: "color",
            playbackBarHeadShadowHorizontalLength: "number",
            playbackBarHeadShadowOpacity: "number",
            playbackBarHeadShadowSpread: "number",
            playbackBarHeadShadowVerticalLength: "number",
            playbackState: "enum[stopped, playing, paused]",
            subtitlesBackgroundColor: "color",
            subtitlesBackgroundOpacity: "number",
            subtitlesBorderColor: "color",
            subtitlesBorderSize: "number",
            subtitlesBottom: "or[number, percent]",
            subtitlesEnabled: "bool",
            subtitlesFontFamily: "string",
            subtitlesFontColor: "color",
            subtitlesFontSize: "or[number, size]",
            subtitlesFontStyle: "enum[italic, normal]",
            subtitlesFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            subtitlesGap: "number",
            subtitlesHorizontalAlign: "enum[left, center, right]",
            subtitlesOpacity: "number",
            subtitlesPaddingTop: "number",
            subtitlesPaddingBottom: "number",
            subtitlesPaddingLeft: "number",
            subtitlesPaddingRight: "number",
            subtitlesShadow: "bool",
            subtitlesShadowBlurRadius: "number",
            subtitlesShadowColor: "color",
            subtitlesShadowOpacity: "number",
            subtitlesShadowHorizontalLength: "number",
            subtitlesShadowVerticalLength: "number",
            subtitlesTextDecoration: "enum[underline, overline, line-through, none]",
            subtitlesTextShadowBlurRadius: "number",
            subtitlesTextShadowColor: "color",
            subtitlesTextShadowHorizontalLength: "number",
            subtitlesTextShadowOpacity: "number",
            subtitlesTextShadowVerticalLength: "number",
            subtitlesTop: "or[number, percent]",
            subtitlesVerticalAlign: "enum[top, middle, bottom]",
            surfaceReticleColor: "color",
            surfaceReticleOpacity: "number",
            surfaceReticleSelectionColor: "color",
            surfaceReticleSelectionOpacity: "number"
        }).Cg({
            play: function () {
                this.Ou()
            },
            pause: function () {
                this.Nu()
            },
            stop: function () {
                this.Or()
            },
            restart: function () {
                this.Nr()
            }
        });
        u.ob = {
            progressBackgroundColor: m,
            progressBackgroundColorDirection: m,
            progressBackgroundColorRatios: m,
            progressBackgroundOpacity: m,
            progressBarBackgroundColor: m,
            progressBarBackgroundColorDirection: m,
            progressBarBackgroundColorRatios: m,
            progressBarBorderColor: m,
            progressBarBorderRadius: m,
            progressBarBorderSize: m,
            progressBarOpacity: m,
            progressBorderColor: m,
            progressBorderRadius: m,
            progressBorderSize: m,
            progressBottom: 0,
            progressHeight: 20,
            progressLeft: 0,
            progressOpacity: m,
            progressPercent: 0,
            progressRight: 0,
            progressVisible: y,
            externalPlaybackBar: m,
            externalProgressBar: m,
            playbackBarBackgroundColor: m,
            playbackBarBackgroundColorDirection: m,
            playbackBarBackgroundOpacity: m,
            playbackBarBorderColor: m,
            playbackBarBorderRadius: m,
            playbackBarBorderSize: m,
            playbackBarBottom: 10,
            playbackBarHeight: m,
            playbackBarWidth: m,
            playbackBarLeft: m,
            playbackBarOpacity: m,
            playbackBarRight: m,
            playbackBarLiveDragging: m,
            playbackBarDuration: 100,
            playbackBarPosition: 0,
            playbackBarRollOverDisplay: y,
            plabackBarSteps: m,
            plabackBarSelectedStep: m,
            playbackBarVisible: y,
            playbackBarProgressBackgroundColor: m,
            playbackBarProgressBackgroundColorDirection: m,
            playbackBarProgressBackgroundColorRatios: m,
            playbackBarProgressBorderColor: m,
            playbackBarProgressBorderRadius: m,
            playbackBarProgressBorderSize: m,
            playbackBarProgressOpacity: m,
            playbackBarHeadBackgroundColor: m,
            playbackBarHeadBackgroundColorDirection: m,
            playbackBarHeadBackgroundColorRatios: m,
            playbackBarHeadBorderColor: m,
            playbackBarHeadBorderRadius: m,
            playbackBarHeadBorderSize: m,
            playbackBarHeadOpacity: m,
            playbackBarHeadWidth: m,
            playbackBarHeadHeight: m,
            playbackBarHeadShadow: m,
            playbackBarHeadShadowBlurRadius: m,
            playbackBarHeadShadowColor: m,
            playbackBarHeadShadowHorizontalLength: m,
            playbackBarHeadShadowOpacity: m,
            playbackBarHeadShadowSpread: m,
            playbackBarHeadShadowVerticalLength: m,
            playbackBarStepBackgroundColor: m,
            playbackBarStepBackgroundColorDirection: m,
            playbackBarStepBackgroundColorRatios: m,
            playbackBarStepBorderColor: m,
            playbackBarStepBorderRadius: m,
            playbackBarStepBorderSize: m,
            playbackBarStepOpacity: m,
            playbackBarStepWidth: m,
            playbackBarStepHeight: m,
            playbackBarStepShadow: m,
            playbackBarStepShadowBlurRadius: m,
            playbackBarStepShadowColor: m,
            playbackBarStepShadowHorizontalLength: m,
            playbackBarStepShadowOpacity: m,
            playbackBarStepShadowSpread: m,
            playbackBarStepShadowVerticalLength: m,
            playbackBarStepSelectedBackgroundColor: m,
            playbackBarStepSelectedBackgroundColorDirection: m,
            playbackBarStepSelectedBackgroundColorRatios: m,
            playbackBarStepSelectedBorderColor: m,
            playbackBarStepSelectedBorderRadius: m,
            playbackBarStepSelectedBorderSize: m,
            playbackBarStepSelectedOpacity: m,
            playbackBarStepSelectedWidth: m,
            playbackBarStepSelectedHeight: m,
            playbackBarStepSelectedShadow: m,
            playbackBarStepSelectedShadowBlurRadius: m,
            playbackBarStepSelectedShadowColor: m,
            playbackBarStepSelectedShadowHorizontalLength: m,
            playbackBarStepSelectedShadowOpacity: m,
            playbackBarStepSelectedShadowSpread: m,
            playbackBarStepSelectedShadowVerticalLength: m,
            subtitlesBackgroundColor: "#000000",
            subtitlesBackgroundOpacity: 1,
            subtitlesBorderColor: m,
            subtitlesBorderSize: 0,
            subtitlesBottom: "10%",
            subtitlesFontFamily: m,
            subtitlesFontColor: "#ffffff",
            subtitlesFontSize: "12px",
            subtitlesFontStyle: m,
            subtitlesFontWeight: m,
            subtitlesGap: 10,
            subtitlesHorizontalAlign: "center",
            subtitlesOpacity: 1,
            subtitlesPaddingTop: 5,
            subtitlesPaddingBottom: 5,
            subtitlesPaddingLeft: 5,
            subtitlesPaddingRight: 5,
            subtitlesShadow: y,
            subtitlesShadowBlurRadius: m,
            subtitlesShadowHorizontalLength: 0,
            subtitlesShadowVerticalLength: 0,
            subtitlesShadowColor: "#000000",
            subtitlesShadowOpacity: 0,
            subtitlesTextDecoration: m,
            subtitlesTextShadowBlurRadius: m,
            subtitlesTextShadowColor: "#000000",
            subtitlesTextShadowHorizontalLength: 0,
            subtitlesTextShadowOpacity: 0,
            subtitlesTextShadowVerticalLength: 0,
            subtitlesTop: m,
            subtitlesVerticalAlign: "bottom",
            transitionDuration: 500,
            blendingTransitionDuration: m,
            disolveTransitionDuration: m,
            translationTransitionDuration: m,
            translationTransitionEnabled: n,
            toolTipEnabled: n
        };
        b.defaults(u.ob, v.ob);
        u.prototype.set = function (a, b) {
            if (a == "playbackState") {
                b = this.Yf;
                if (this.get(a) != b) {
                    this.OU = n;
                    this.Sma()
                }
            }
            switch (a) {
            case "toolTipEnabled":
                this.set("toolTipDisabled", b === y);
                break;
            case "cardboardPointerDistance":
                this.set("vrPointerDistance",
                    b);
                break;
            case "cardboardPointerColor":
                this.set("vrPointerColor", b);
                break;
            case "cardboardPointerSelectionColor":
                this.set("vrPointerSelectionColor", b);
                break;
            case "cardboardPointerSelectionTime":
                this.set("vrPointerSelectionTime", b);
                break;
            case "playbackBarVisible":
            case "playbackBarRollOverDisplay":
                this.qE()
            }
            v.prototype.set.call(this, a, b)
        };
        u.prototype.za = function () {
            this.bk(u.ob)
        };
        u.prototype.Ga = function () {
            v.prototype.Ga.call(this);
            if (this.af == r) {
                this.af = new p;
                this.la(this.af)
            }
            if (this.Rb == r) {
                this.Rb = new j;
                this.Rb.bind(e.aa, this.MU, this, n);
                this.la(this.Rb);
                this.qE()
            }
        };
        u.prototype.Ava = Q("Rb");
        u.prototype.Gi = function () {
            v.prototype.Gi.call(this);
            var a = this.Pa(),
            c = b(a).find(function (a) {
                return a instanceof k
            }),
            d = b(a).find(function (a) {
                return a instanceof l
            }),
            e = this.af && this.dF(this.af) >= 0 ? this.af : r,
            f = this.Rb && this.dF(this.Rb) >= 0 ? this.Rb : r;
            b([{
                        child: c,
                        index: 0
                    }, {
                        child: d,
                        index: c ? 1 : 0
                    }, {
                        child: f,
                        index: a.length - (e ? 2 : 1)
                    }, {
                        child: e,
                        index: a.length - 1
                    }
                ]).each(function (a) {
                var b = a.child,
                a = a.index;
                b && this.dF(b) != a && this.Hj(b,
                    a)
            }, this)
        };
        u.prototype.ja = function () {
            if (this.n("externalProgressBar")) {
                (this.eI = this.k("externalProgressBar")) ? this.removeChild(this.af) : this.la(this.af);
                this.q("externalProgressBar");
                b(u.P1).each(function (a) {
                    this.kv(a)
                }, this)
            }
            this.ib(u.Kga, u.E1, [this.af], n, n);
            var a = [this.af];
            this.eI && a.push(this.eI);
            this.ib(u.P1, u.Q1, a, n, n);
            if (this.n("externalPlaybackBar")) {
                this.Jm && this.Jm.unbind(e.aa, this.MU, this, n);
                (this.Jm = this.k("externalPlaybackBar")) ? this.removeChild(this.Rb) : this.la(this.Rb);
                this.qE();
                this.Jm &&
                this.Jm.bind(e.aa, this.MU, this, n);
                this.q("externalPlaybackBar");
                b(u.L1).each(function (a) {
                    this.kv(a)
                }, this)
            }
            this.ib(u.Jga, u.D1, [this.Rb], n, n);
            a = [this.Rb];
            this.Jm && a.push(this.Jm);
            this.ib(u.L1, u.M1, a, n, n);
            v.prototype.ja.call(this)
        };
        u.prototype.Eta = function () {
            if (this.OU) {
                this.OU = y;
                this.aY.set("state", this.Yf == g.mc ? s.Ca : s.dd);
                this.cY.set("state", this.Yf == g.P || this.Yf == g.mc ? s.Ca : s.dd);
                this.bY.set("state", this.Yf == g.P ? s.Ca : s.dd);
                this.dY.set("state", this.Yf == g.H ? s.Ca : s.dd)
            }
        };
        u.prototype.Zb = function (a) {
            this.Yf =
                a;
            this.set("playbackState", a)
        };
        u.prototype.RJ = function () {
            u.wh(this)
        };
        u.prototype.Ioa = function () {
            u.th(this)
        };
        u.prototype.Nu = function () {
            this.Yf == g.mc ? this.Rg() : this.rk()
        };
        u.prototype.Ou = function () {
            this.Rg()
        };
        u.prototype.noa = function () {
            this.Yf == g.P ? this.rk() : this.Rg()
        };
        u.prototype.Or = function () {
            this.vj()
        };
        u.prototype.Nr = function () {
            this.vj();
            this.Rg()
        };
        u.prototype.Hoa = function () {
            if (!this.nh || !this.nh.xba())
                switch (this.get("doubleClickAction")) {
                case "toggle_fullscreen":
                    var a = this.Ta().mg;
                    a && a.available() &&
                    a.toggle()
                }
        };
        u.prototype.Rg = function () {
            this.Pi && this.Pi.play()
        };
        u.prototype.rk = function () {
            this.Pi && this.Pi.pause()
        };
        u.prototype.vj = function () {
            this.Pi && this.Pi.stop()
        };
        u.prototype.roa = function (a) {
            this.N9(a.data.player)
        };
        u.prototype.qoa = function (a) {
            this.nh == a.data.player && this.N9(r)
        };
        u.prototype.O7 = function () {
            u.rm(this)
        };
        u.prototype.Koa = function () {
            this.hk = n;
            this.qE()
        };
        u.prototype.Joa = function () {
            this.hk = y;
            this.qE()
        };
        u.prototype.qE = function () {
            this.Rb && this.Rb.set("visible", this.get("playbackBarVisible") &&
                (this.hk || !this.get("playbackBarRollOverDisplay") || q.HN()))
        };
        u.prototype.N9 = function (a) {
            if (this.nh != a) {
                this.set("playbackBarVisible", y);
                this.nh && this.nh.rm(y);
                this.Pi && this.Pi.unbind(e.D("state"), this.GP, this);
                this.opa = this.nh;
                (this.nh = a) && this.nh.rm(!!this.Yx);
                (this.Pi = this.nh && this.nh.xia ? this.nh : r) && this.Pi.bind(e.D("state"), this.GP, this, n);
                this.GP()
            }
        };
        u.prototype.rm = function (a) {
            this.Yx = a;
            this.nh && this.nh.rm(!!this.Yx)
        };
        u.prototype.Xza = function () {
            return !this.opa
        };
        u.prototype.GP = function () {
            this.Pi ?
            this.Zb(this.Pi.get("state")) : this.Zb(g.H)
        };
        u.prototype.MU = function () {
            var a = (this.Jm ? this.Jm : this.Rb).get("position");
            this.trigger(new d(u.FO, {
                    position: a
                }))
        };
        u.E1 = {
            progressBackgroundColor: "backgroundColor",
            progressBackgroundColorDirection: "backgroundColorDirection",
            progressBackgroundColorRatios: "backgroundColorRatios",
            progressBackgroundOpacity: "backgroundOpacity",
            progressBarBackgroundColor: "barBackgroundColor",
            progressBarBackgroundColorDirection: "barBackgroundColorDirection",
            progressBarBackgroundColorRatios: "barBackgroundColorRatios",
            progressBarBorderColor: "barBorderColor",
            progressBarBorderRadius: "barBorderRadius",
            progressBarBorderSize: "barBorderSize",
            progressBarOpacity: "barOpacity",
            progressBorderColor: "borderColor",
            progressBorderRadius: "borderRadius",
            progressBorderSize: "borderSize",
            progressHeight: "height",
            progressOpacity: "opacity",
            progressBottom: "bottom",
            progressLeft: "left",
            progressRight: "right"
        };
        u.Kga = b(u.E1).keys();
        u.Q1 = {
            progressPercent: "percent",
            progressVisible: "visible"
        };
        u.P1 = b(u.Q1).keys();
        u.D1 = {
            playbackBarBackgroundColor: "backgroundColor",
            playbackBarBackgroundColorDirection: "backgroundColorDirection",
            playbackBarBackgroundOpacity: "backgroundOpacity",
            playbackBarBorderColor: "borderColor",
            playbackBarBorderRadius: "borderRadius",
            playbackBarBorderSize: "borderSize",
            playbackBarBottom: "bottom",
            playbackBarHeight: "height",
            playbackBarWidth: "width",
            playbackBarLeft: "left",
            playbackBarOpacity: "opacity",
            playbackBarRight: "right",
            playbackBarLiveDragging: "liveDragging",
            playbackBarProgressBackgroundColor: "barBackgroundColor",
            playbackBarProgressBackgroundColorDirection: "barBackgroundColorDirection",
            playbackBarProgressBackgroundColorRatios: "barBackgroundColorRatios",
            playbackBarProgressBorderColor: "barBorderColor",
            playbackBarProgressBorderRadius: "barBorderRadius",
            playbackBarProgressBorderSize: "barBorderSize",
            playbackBarProgressOpacity: "barOpacity",
            playbackBarHeadBackgroundColor: "playheadBackgroundColor",
            playbackBarHeadBackgroundColorDirection: "playheadBackgroundColorDirection",
            playbackBarHeadBackgroundColorRatios: "playheadBackgroundColorRatios",
            playbackBarHeadBorderColor: "playheadBorderColor",
            playbackBarHeadBorderRadius: "playheadBorderRadius",
            playbackBarHeadBorderSize: "playheadBorderSize",
            playbackBarHeadOpacity: "playheadOpacity",
            playbackBarHeadWidth: "playheadWidth",
            playbackBarHeadHeight: "playheadHeight",
            playbackBarHeadShadow: "playheadShadow",
            playbackBarHeadShadowBlurRadius: "playheadShadowBlurRadius",
            playbackBarHeadShadowColor: "playheadShadowColor",
            playbackBarHeadShadowHorizontalLength: "playheadShadowHorizontalLength",
            playbackBarHeadShadowOpacity: "playheadShadowOpacity",
            playbackBarHeadShadowSpread: "playheadShadowSpread",
            playbackBarHeadShadowVerticalLength: "playheadShadowVerticalLength",
            playbackBarStepBackgroundColor: "stepBackgroundColor",
            playbackBarStepBackgroundColorDirection: "stepBackgroundColorDirection",
            playbackBarStepBackgroundColorRatios: "stepBackgroundColorRatios",
            playbackBarStepBorderColor: "stepBorderColor",
            playbackBarStepBorderRadius: "stepBorderRadius",
            playbackBarStepBorderSize: "stepBorderSize",
            playbackBarStepOpacity: "stepOpacity",
            playbackBarStepWidth: "stepWidth",
            playbackBarStepHeight: "stepHeight",
            playbackBarStepShadow: "stepShadow",
            playbackBarStepShadowBlurRadius: "stepShadowBlurRadius",
            playbackBarStepShadowColor: "stepShadowColor",
            playbackBarStepShadowHorizontalLength: "stepShadowHorizontalLength",
            playbackBarStepShadowOpacity: "stepShadowOpacity",
            playbackBarStepShadowSpread: "stepShadowSpread",
            playbackBarStepShadowVerticalLength: "stepShadowVerticalLength",
            playbackBarSelectedStepBackgroundColor: "selectedStepBackgroundColor",
            playbackBarSelectedStepBackgroundColorDirection: "selectedStepBackgroundColorDirection",
            playbackBarSelectedStepBackgroundColorRatios: "selectedStepBackgroundColorRatios",
            playbackBarSelectedStepBorderColor: "selectedStepBorderColor",
            playbackBarSelectedStepBorderRadius: "selectedStepBorderRadius",
            playbackBarSelectedStepBorderSize: "selectedStepBorderSize",
            playbackBarSelectedStepOpacity: "selectedStepOpacity",
            playbackBarSelectedStepWidth: "selectedStepWidth",
            playbackBarSelectedStepHeight: "selectedStepHeight",
            playbackBarSelectedStepShadow: "selectedStepShadow",
            playbackBarSelectedStepShadowBlurRadius: "selectedStepShadowBlurRadius",
            playbackBarSelectedStepShadowColor: "selectedStepShadowColor",
            playbackBarSelectedStepShadowHorizontalLength: "selectedStepShadowHorizontalLength",
            playbackBarSelectedStepShadowOpacity: "selectedStepShadowOpacity",
            playbackBarSelectedStepShadowSpread: "selectedStepShadowSpread",
            playbackBarSelectedStepShadowVerticalLength: "selectedStepShadowVerticalLength"
        };
        u.Jga = b(u.D1).keys();
        u.M1 = {
            playbackBarDuration: "duration",
            playbackBarPosition: "position",
            playbackBarSteps: "steps",
            playbackBarSelectedStep: "selectedStep",
            playbackBarVisible: "visible"
        };
        u.L1 = b(u.M1).keys();
        u.bP = "requestByPlayer";
        u.N0 = "playerShow";
        u.M0 = "playerHide";
        u.FO = "playbackBarPositionChange";
        u.wu = r;
        u.rm = function (a) {
            if (u.wu != a) {
                u.wu && u.wu.rm(y);
                u.wu = a;
                u.wu && u.wu.rm(n)
            }
        };
        u.ws = [];
        u.wh = function (a) {
            var b = u.ws.indexOf(a);
            b < 0 && u.ws.splice(b, 1);
            u.ws.push(a);
            this.rm(a)
        };
        u.th = function (a) {
            var b = u.ws.indexOf(a);
            b < 0 && u.ws.splice(b, 1);
            u.wu == a && u.rm(u.ws.length ? u.ws[u.ws.length - 1] : r)
        };
        return u
    });
    define("cu", "fg,jd,ll,bZ,dW,bl".split(","), function (a, b, c, e, g, d) {
        var f = a.extend(b, function (a) {
            b.call(this);
            this.xia = a;
            this.LD = this.Dr = r
        });
        f.ne = "mediaShow";
        f.dg = "mediaHide";
        f.prototype.rm = D();
        f.prototype.xba = R(y);
        f.prototype.HD = function (a) {
            if (this.Dr != a) {
                this.Dr && this.TW(this.Dr);
                (this.Dr = a) && this.hQ(this.Dr)
            }
        };
        f.prototype.hQ = function (a) {
            a.bind(d.bP, this.dba, this);
            a.bind(d.FO, this.eD, this)
        };
        f.prototype.TW = function (a) {
            a.unbind(d.bP, this.dba, this);
            a.unbind(d.FO, this.eD, this)
        };
        f.prototype.tD = function () {
            this.Dr.trigger(new e(d.bP, {
                    player: this
                }))
        };
        f.prototype.dba = function (a) {
            a.data.player != this && this.Ty()
        };
        f.prototype.eD = D();
        f.prototype.Ty = D();
        f.prototype.iC = function (a) {
            this.trigger(new e(f.ne, {
                    media: a
                }));
            this.LD = this.Dr;
            this.LD.trigger(new e(d.N0, {
                    player: this
                }))
        };
        f.prototype.hC = function (a) {
            this.trigger(new e(f.dg, {
                    media: a
                }));
            if (this.LD) {
                this.LD.trigger(new e(d.M0, {
                        player: this
                    }));
                this.LD = r
            }
        };
        return f
    });
    define("dk", "fg,jd,ll,bZ,dW,jT,cu,bl,fu,dm,fm".split(","), function (a, b, c, e, g, d, f, h, j, p, k) {
        b = a.extend(f, function () {
            f.call(this, n);
            this.Xm = y;
            this.up = n;
            this.m = j.H;
            this.kQ = new d(this, "buttonPlayPause", p.Qh);
            this.kQ.bind(c.Dg, this.ooa, this, n);
            this.kQ.bind(c.Ph, this.poa, this, n);
            this.H2 = new d(this, "buttonPause", p.Wc);
            this.H2.bind(c.U, this.Nu, this, n);
            this.I2 = new d(this, "buttonPlay", p.Wc);
            this.I2.bind(c.U, this.Ou, this, n);
            this.N2 = new d(this, "buttonStop", p.Wc);
            this.N2.bind(c.U, this.Or, this, n);
            this.pia = new d(this,
                    "buttonRestart", p.Wc);
            this.pia.bind(c.U, this.Nr, this, n);
            this.N5 = a.nm(this.ota, this);
            this.N5()
        });
        b.prototype.set = function (a, b) {
            a != "state" && f.prototype.set.call(this, a, b)
        };
        b.prototype.get = function (a, b) {
            switch (a) {
            case "state":
                return this.m
            }
            return f.prototype.get.call(this, a, b)
        };
        b.prototype.ota = function () {
            if (this.up) {
                this.up = y;
                this.H2.set("state", this.m == j.mc ? k.Ca : k.dd);
                this.I2.set("state", this.m == j.P || this.m == j.mc ? k.Ca : k.dd);
                this.kQ.set("pressed", this.m == j.P);
                this.N2.set("state", this.m == j.H ? k.Ca : k.dd)
            }
        };
        b.prototype.ls = function (a) {
            if (this.Xm != a)
                (this.Xm = a) || this.Zb(j.H)
        };
        b.prototype.Zb = function (a) {
            var b = this.m;
            this.m = a;
            f.prototype.set.call(this, "state", a);
            if (b != this.m) {
                this.up = n;
                this.N5();
                this.trigger(new e(c.gc, {
                        oldState: b,
                        state: this.m
                    }))
            }
        };
        b.prototype.Nu = function () {
            this.Xm && (this.m == j.mc ? this.Rg() : this.rk())
        };
        b.prototype.Ou = function () {
            this.Xm && this.Rg()
        };
        b.prototype.ooa = function () {
            this.Xm && this.Rg()
        };
        b.prototype.poa = function () {
            this.Xm && this.rk()
        };
        b.prototype.Or = function () {
            this.Xm && this.vj()
        };
        b.prototype.Nr =
        function () {
            if (this.Xm) {
                this.vj();
                this.Rg()
            }
        };
        b.prototype.Rg = D();
        b.prototype.rk = D();
        b.prototype.vj = D();
        return b
    });
    define("hG", [], function () {
        return {
            dt: "constrained",
            Ffa: "free_drag",
            hAa: "free_drag_and_rotation",
            iP: "sync_with_field_of_view"
        }
    });
    define("ii", ["fg", "hG", "jn"], function (a, b, c) {
        function e() {
            this.Z = n;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = 1;
            this.Ed = c.Te;
            this.gj = b.dt;
            this.ST = this.WT = 1;
            this.Rc = this.Sc = this.Qi = this.Ri = 100;
            this.sj = e.At
        }
        e.prototype.Ica = function () {
            return this.sj !== e.At
        };
        e.prototype.Hca = function () {
            return this.sj & e.Vw ? n : y
        };
        e.prototype.Jca = function () {
            return this.sj & e.Ww ? n : y
        };
        e.prototype.Kca = function () {
            return this.sj & e.Et ? n : y
        };
        e.prototype.Gca = function () {
            return this.sj & e.zt ? n : y
        };
        e.prototype.getX = function () {
            this.zj();
            return this.da
        };
        e.prototype.getY = function () {
            this.zj();
            return this.fa
        };
        e.prototype.lm = function () {
            this.zj();
            return this.ta
        };
        e.prototype.rz = function () {
            this.zj();
            return this.Mb
        };
        e.prototype.IF = function (a, b, c, e, j) {
            this.Sc = a;
            this.Rc = b;
            this.Ed = c;
            this.WT = e;
            this.ST = j;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = e;
            this.Z = n
        };
        e.prototype.Ka = function (a, b, c, e) {
            this.da = a;
            this.fa = b;
            this.Mb = c;
            this.ta = e;
            this.Z = n
        };
        e.prototype.tm = function (a) {
            this.gj = a;
            this.Z = n
        };
        e.prototype.setSize = function (a, b) {
            this.Ri = a;
            this.Qi = b;
            this.Z = n
        };
        e.prototype.zj =
        function () {
            if (this.Z) {
                this.Z = y;
                var a = e.At;
                this.ta > this.ST ? (this.ta = this.ST, a |= e.Lga) : this.ta < this.WT && (this.ta = this.WT, a |= e.Mga);
                var d,
                f,
                h,
                j;
                if (this.gj == b.dt) {
                    switch (this.Ed) {
                    case c.NONE:
                        f = this.Sc;
                        j = this.Rc;
                        break;
                    case c.Zk:
                        f = this.Ri;
                        j = this.Rc * this.Ri / this.Sc;
                        break;
                    case c.kh:
                        f = this.Sc * this.Qi / this.Rc;
                        j = this.Qi;
                        break;
                    case c.xm:
                        this.Sc * this.Qi > this.Rc * this.Ri ? (f = this.Sc * this.Qi / this.Rc, j = this.Qi) : (f = this.Ri, j = this.Rc * this.Ri / this.Sc);
                        break;
                    default:
                    case c.Te:
                        this.Sc * this.Qi > this.Rc * this.Ri ? (f = this.Ri,
                            j = this.Rc * this.Ri / this.Sc) : (f = this.Sc * this.Qi / this.Rc, j = this.Qi)
                    }
                    f *= this.ta;
                    j *= this.ta;
                    d = Math.min(0.5 * this.Ri / f, 0.5);
                    f = Math.max(1 - 0.5 * this.Ri / f, 0.5);
                    h = Math.min(0.5 * this.Qi / j, 0.5);
                    j = Math.max(1 - 0.5 * this.Qi / j, 0.5)
                } else
                    d = 0, f = 1, h = 0, j = 1;
                this.da < d ? (this.da = d, a |= e.Vw) : this.da > f && (this.da = f, a |= e.Ww);
                this.fa < h ? (this.fa = h, a |= e.Et) : this.fa > j && (this.fa = j, a |= e.zt);
                if ((this.gj == b.dt || this.gj == b.Ffa) && 0 != this.Mb)
                    this.Mb = 0, a |= e.Qga;
                this.sj = a
            }
        };
        e.At = 0;
        e.Vw = 1;
        e.Ww = 2;
        e.Et = 4;
        e.zt = 8;
        e.Mga = 16;
        e.Lga = 32;
        e.Qga = 64;
        return e
    });
    define("eS", [], function () {
        function a() {
            this.pB = 0.1;
            this.PH = this.cR = this.fR = this.eR = this.lR = this.bR = this.jR = this.iR = this.ME = this.SX = this.Gt = this.MP = this.KE = this.PX = this.IE = this.NX = 0
        }
        a.prototype.tN = P("pB");
        a.prototype.Iea = function (a, c, e, g, d, f, h, j) {
            this.NX = a;
            this.PX = c;
            this.MP = e;
            this.SX = g;
            this.IE += d;
            this.KE += f;
            this.Gt += h;
            this.ME += j
        };
        a.prototype.ld = function () {
            return 0 != this.iR || 0 != this.jR || 0 != this.bR || 0 != this.lR || 0 != this.NX || 0 != this.PX || 0 != this.MP || 0 != this.SX || 0 != this.IE || 0 != this.KE || 0 != this.Gt || 0 != this.ME
        };
        a.prototype.fb = function (a) {
            a = 1E3 / a;
            this.eR = this.ZH(this.iR / a, this.NX / a + this.IE, this.pB);
            this.fR = this.ZH(this.jR / a, this.PX / a + this.KE, this.pB);
            this.cR = this.ZH(this.bR / a, this.MP / a + this.Gt, this.pB);
            this.PH = this.ZH(this.lR / a, this.SX / a + this.ME, this.pB);
            this.iR = this.eR * a;
            this.jR = this.fR * a;
            this.bR = this.cR * a;
            this.lR = this.PH * a;
            this.ME = this.Gt = this.KE = this.IE = 0
        };
        a.prototype.ZH = function (a, c, e) {
            return 0 == c ? this.Ee(a, c, e) : c
        };
        a.prototype.Ee = function (a, c, e) {
            a = (c - a) * (1 - e);
            0.01 > Math.abs(a) && (a = 0);
            return c - a
        };
        return a
    });
    define("eX", ["fg", "ll", "bZ", "eO", "jn"], function (a, b, c, e) {
        var g = a.extend(e, function () {
            e.call(this);
            this.Ex = 7;
            this.tJ = this.qT = y;
            this.vJ = m;
            this.Mb = 0;
            this.ta = 1;
            this.Rc = this.Sc = 100;
            this.XI = 1;
            this.TU = n;
            this.UU = y;
            this.Wta = n;
            this.RX = y;
            this.ua = r
        });
        g.prototype.JF = P("Ex");
        g.prototype.Cc = function (a, b, c, e) {
            this.Mb = a;
            this.ta = b;
            this.Sc = c;
            this.Rc = e
        };
        g.prototype.bza = function (a) {
            this.TU = a;
            this.WK(this.TU && !!this.ua)
        };
        g.prototype.ow = function (a) {
            this.ua != a && (this.WK(y), this.$V(y), this.wi(), this.ua = a, this.WK(this.TU &&
                    !!this.ua), this.$V(this.Wta && !!this.ua))
        };
        g.prototype.wi = function () {
            this.WK(y);
            this.$V(y);
            this.ua = r
        };
        g.prototype.WK = function (a) {
            this.UU != a && ((this.UU = a) ? this.Zha() : this.Lsa())
        };
        g.prototype.$V = function (a) {
            this.RX != a && ((this.RX = a) ? this.$ha() : this.Msa())
        };
        g.prototype.Zha = function () {
            this.ua.bind(b.Hb, this.pc, this, n);
            this.ua.bind(b.Mc, this.Ng, this, n);
            this.ua.bind(b.fc, this.Og, this, n)
        };
        g.prototype.Lsa = function () {
            this.ua.unbind(b.Hb, this.pc, this);
            this.ua.unbind(b.Mc, this.Ng, this);
            this.ua.unbind(b.fc, this.Og,
                this)
        };
        g.prototype.$ha = function () {
            this.ua.bind(b.sq, this.Eu, this, n);
            this.ua.bind(b.Jw, this.ku, this, n)
        };
        g.prototype.Msa = function () {
            this.ua.unbind(b.sq, this.Eu, this);
            this.ua.unbind(b.Jw, this.ku, this)
        };
        g.prototype.pc = function (a) {
            this.Lra(a)
        };
        g.prototype.Ng = function (a) {
            this.Iaa(a)
        };
        g.prototype.Og = function () {
            this.PR()
        };
        g.prototype.Eu = function (a) {
            this.sX(a)
        };
        g.prototype.ku = function (a) {
            this.tX(a)
        };
        g.prototype.Lra = function (a) {
            this.qT = n;
            this.tJ = y;
            this.vJ = a;
            this.Iaa(a)
        };
        g.prototype.Iaa = function (a) {
            if (this.qT) {
                var b =
                    a.pageX - this.vJ.pageX,
                e = a.pageY - this.vJ.pageY;
                this.tJ || (Math.sqrt(b * b + e * e) > this.Ex ? this.tJ = n : b = e = 0);
                this.tJ && (this.vJ = a);
                a = this.Mb * Math.PI / 180;
                this.trigger(new c(g.Vk, {
                        xDelta:  - ((b * Math.cos(a) + e * Math.sin(a)) / this.Sc),
                        yDelta:  - ((e * Math.cos(a) - b * Math.sin(a)) / this.Rc)
                    }))
            }
        };
        g.prototype.PR = function () {
            this.qT = y
        };
        g.prototype.tX = function (a) {
            if (this.XI != a.scale) {
                this.PR();
                var b = this.XI;
                this.XI = a.scale;
                this.trigger(new c(g.Yk, {
                        zoomDelta: this.ta * this.XI / b - this.ta
                    }))
            }
        };
        g.prototype.sX = function (a) {
            0 != a.Jp && (this.PR(),
                this.trigger(new c(g.Yk, {
                        zoomDelta: 0.1 * this.ta * a.kY
                    })))
        };
        g.Vk = "position change";
        g.Yk = "zoom change";
        g.tAa = "vieport navigation";
        g.sAa = "relative navigation";
        g.rAa = "relative exponential navigation";
        g.qAa = "dragging";
        return g
    });
    define("hr", [], function () {
        return {
            cP: "rotateClockwise",
            dP: "rotateCounterClockwise",
            eo: "zoomIn",
            fo: "zoomOut",
            pe: "stop"
        }
    });
    define("kv", "fg,bZ,eO,jn,eS,eX,hr,ll".split(","), function (a, b, c, e, g, d, f) {
        var h = a.extend(c, function (a, b) {
            c.call(this);
            this.g = a;
            this.I = b;
            this.Nm = this.uK = this.W = y;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = 1;
            this.Rc = this.Sc = 100;
            this.Ed = e.dt;
            this.bb = new g;
            this.wa = new d;
            if (this.g.ik) {
                this.wa.JF(h.BP);
                this.bb.tN(h.CP)
            } else {
                this.wa.JF(0);
                this.bb.tN(1)
            }
            this.wa.bind(d.Vk, this.goa, this, n);
            this.wa.bind(d.Yk, this.Jr, this, n)
        });
        h.prototype.clear = function () {
            this.wa.unbind(d.Vk, this.EBa, this, n);
            this.wa.unbind(d.Yk, this.Jr,
                this, n);
            this.wa.wi();
            this.g = this.I = this.bb = this.wa = r
        };
        h.prototype.fh = function (a) {
            switch (a) {
            case f.cP:
                this.Cb(0, 0, +h.wP, 0, 0, 0, 0, 0);
                break;
            case f.dP:
                this.Cb(0, 0, -h.wP, 0, 0, 0, 0, 0);
                break;
            case f.eo:
                this.Cb(0, 0, 0, +h.xA, 0, 0, 0, 0);
                break;
            case f.fo:
                this.Cb(0, 0, 0, -h.xA, 0, 0, 0, 0);
                break;
            case f.pe:
                this.Cb(0, 0, 0, 0, 0, 0, 0, 0)
            }
        };
        h.prototype.Ka = function (a, b, c, d, e, f) {
            this.da = a;
            this.fa = b;
            this.Mb = c;
            this.ta = d;
            this.Sc = e;
            this.Rc = f;
            this.wa.Cc(this.Mb, this.ta, this.Sc, this.Rc)
        };
        h.prototype.ld = function () {
            return this.W && this.bb.ld()
        };
        h.prototype.fb = function (a) {
            this.bb.fb(a);
            this.I.Ka(this.da + this.bb.eR, this.fa + this.bb.fR, this.Mb + this.bb.cR, this.ta + this.bb.PH);
            this.da = this.I.getX();
            this.fa = this.I.getY();
            this.Mb = this.I.rz();
            this.ta = this.I.lm()
        };
        h.prototype.NF = function (a) {
            this.Nm = a;
            this.wa.bza(!this.Nm)
        };
        h.prototype.nd = function (a) {
            (this.W = a) ? this.wa.ow(this.g.getParent()) : this.wa.wi()
        };
        h.prototype.goa = function (a) {
            this.Cb(0, 0, 0, 0, a.data.xDelta, a.data.yDelta, 0, 0)
        };
        h.prototype.Jr = function (a) {
            this.Cb(0, 0, 0, 0, 0, 0, 0, a.data.zoomDelta)
        };
        h.prototype.Cb = function (a, b, c, d, e, f, g, h) {
            this.bb.Iea(a, b, c, d, e, f, g, h);
            this.Bf()
        };
        h.prototype.Bf = function () {
            this.trigger(new b(h.nf))
        };
        h.nf = "position change request";
        h.BP = 7;
        h.CP = 0.2;
        h.xA = 0.5;
        h.wP = 30;
        return h
    });
    define("jR", "fg,bZ,eO,kX,bq,eS,eX,hr,ll".split(","), function (a, b, c, e, g, d, f, h) {
        var j = a.extend(c, function (a, b) {
            c.call(this);
            this.g = a;
            this.I = b;
            this.W = y;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = 1;
            this.Rc = this.Sc = 100;
            this.O = r;
            this.MR = n;
            this.Kb = r;
            this.$J = 0;
            this.jn = this.zp = this.yp = m;
            this.bb = new d;
            this.wa = new f;
            if (this.g.ik) {
                this.wa.JF(j.BP);
                this.bb.tN(j.CP)
            } else {
                this.wa.JF(0);
                this.bb.tN(1)
            }
            this.wa.bind(f.Yk, this.Jr, this, n)
        });
        j.prototype.Lya = function (a, b) {
            this.Sc = a;
            this.Rc = b;
            this.LL()
        };
        j.prototype.fq = function (a) {
            if (this.Kb !=
                a) {
                this.Kb = a;
                this.$J = m;
                this.LL()
            }
        };
        j.prototype.Kj = function (a, b) {
            if (this.Kb == a) {
                this.$J = b;
                this.LL()
            }
        };
        j.prototype.LL = function () {
            var a,
            b,
            c;
            if (this.Kb && this.$J != m) {
                a = this.Kb.get("x", 0) / this.Sc;
                b = this.Kb.get("y", 0) / this.Rc;
                c =  - (this.$J + this.Kb.get("angle", 0))
            } else
                c = b = a = m;
            if (this.jn != c) {
                this.jn = c;
                this.Bf()
            }
            if (this.yp != a || this.zp != b) {
                this.yp = a;
                this.zp = b;
                this.Rma();
                this.Bf()
            }
        };
        j.prototype.Rma = function () {
            this.MR = n;
            this.Bf()
        };
        j.prototype.nE = function () {
            if (this.MR || this.O && this.O.Re()) {
                this.MR = y;
                this.O = r;
                if (this.yp !=
                    m && this.zp != m && this.jn != m) {
                    for (var a = this.jn - this.Mb; a > 180; )
                        a = a - 360;
                    for (; a < -180; )
                        a = a + 360;
                    if (this.da != this.yp || this.fa != this.zp)
                        this.O = new e("quad_in_out", [new g("x", this.da, this.yp, 1), new g("y", this.fa, this.zp, 1), new g("angleDif", a, a, 360)], 500);
                    else if (this.jn != this.Mb)
                        this.O = new e("quad_in_out", [new g("x", this.da, this.da, 1), new g("y", this.fa, this.fa, 1), new g("angleDif", a, 0, 360)], 500)
                }
            }
        };
        j.prototype.clear = function () {
            this.wa.unbind(f.Yk, this.Jr, this, n);
            this.wa.wi();
            this.g = this.I = this.O = this.bb = this.wa =
                r
        };
        j.prototype.fh = function (a) {
            switch (a) {
            case h.eo:
                this.Cb(+j.xA, 0);
                break;
            case h.fo:
                this.Cb(-j.xA, 0);
                break;
            case h.pe:
                this.Cb(0, 0)
            }
        };
        j.prototype.Ka = function (a, b, c, d, e, f) {
            this.da = a;
            this.fa = b;
            this.Mb = c;
            this.ta = d;
            this.wa.Cc(this.Mb, this.ta, e, f)
        };
        j.prototype.ld = function () {
            return this.W && (this.O || this.bb.ld() || this.yp != m && this.da != this.yp || this.zp != m && this.fa != this.zp || this.jn != m && this.Mb != this.jn) ? n : y
        };
        j.prototype.fb = function (a) {
            this.nE();
            if (this.O) {
                this.O.fb(a);
                this.da = this.O.Fb("x");
                this.fa = this.O.Fb("y");
                this.Mb = this.jn - this.O.Fb("angleDif")
            } else {
                if (this.yp != m)
                    this.da = this.yp;
                if (this.zp != m)
                    this.fa = this.zp;
                if (this.jn != m)
                    this.Mb = this.jn
            }
            this.bb.fb(a);
            this.I.Ka(this.da, this.fa, this.Mb, this.ta + this.bb.PH);
            this.da = this.I.getX();
            this.fa = this.I.getY();
            this.Mb = this.I.rz();
            this.ta = this.I.lm()
        };
        j.prototype.nd = function (a) {
            if (this.W = a) {
                this.wa.ow(this.g.getParent());
                this.LL()
            } else
                this.wa.wi()
        };
        j.prototype.Jr = function (a) {
            this.Cb(0, a.data.zoomDelta)
        };
        j.prototype.Cb = function (a, b) {
            this.bb.Iea(0, 0, 0, a, 0, 0, 0, b);
            this.Bf()
        };
        j.prototype.Bf = function () {
            this.trigger(new b(j.nf))
        };
        j.nf = "position change request";
        j.BP = 7;
        j.CP = 0.2;
        j.xA = 0.5;
        j.wP = 30;
        return j
    });
    define("kK", "fg,bZ,eO,hG,jn,ii,kv,jR,ll".split(","), function (a, b, c, e, g, d, f, h, j) {
        var p = a.extend(c, function (a) {
            c.call(this);
            this.g = a;
            this.g.bind(j.yb, this.kb, this);
            this.gj = e.dt;
            this.Kb = r;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = 1;
            this.na = r;
            this.KK = this.JK = this.vn = this.un = y;
            this.wj = n;
            this.W = y;
            this.I = new d;
            this.I.tm(this.gj);
            this.Ua = new f(this.g, this.I);
            this.Ua.bind(f.nf, this.El, this, n);
            this.ag = new h(this.g, this.I);
            this.ag.bind(h.nf, this.El, this, n);
            this.wK()
        });
        p.prototype.clear = function () {
            this.Ua.unbind(f.nf,
                this.El, this);
            this.Ua.clear();
            this.Ua = r;
            this.ag.unbind(h.nf, this.El, this);
            this.ag.clear();
            this.na = this.I = this.ag = r;
            this.g.unbind(j.yb, this.kb, this);
            this.g = r
        };
        p.prototype.stop = function () {
            this.Bc = this.na = r;
            this.W = y;
            this.Ua.nd(y);
            this.ag.nd(y);
            this.qp(0, 0, 0, 0)
        };
        p.prototype.start = function (a) {
            var b = a.na,
            c = b.get("width", 100),
            d = b.get("height", 100),
            e = b.get("scaleMode", g.Te),
            f = b.get("minimumZoomFactor", 1),
            h = b.get("maximumZoomFactor", 1),
            j = b.get("initialZoomFactor", 1);
            this.na = b;
            this.W = n;
            this.Bc = a.getItem();
            this.qp(0, 0, 0, 0);
            this.ag.Lya(c, d);
            this.I.IF(c, d, e, f, h);
            this.I.Ka(0.5, 0.5, 0, j);
            this.g.OF(this.Bc, this.I.getX(), this.I.getY(), this.I.rz(), this.I.lm());
            this.wK()
        };
        p.prototype.fh = function (a) {
            this.Ua.fh(a);
            this.ag.fh(a)
        };
        p.prototype.tm = function (a) {
            if (this.gj != a) {
                this.gj = a;
                this.I.tm(a);
                this.wK()
            }
        };
        p.prototype.fq = function (a) {
            if (this.Kb != a) {
                this.Kb = a;
                this.ag.fq(a);
                this.wK()
            }
        };
        p.prototype.NF = function (a) {
            this.Ua && this.Ua.NF(a)
        };
        p.prototype.Kj = function (a, b, c, d) {
            this.ag.Kj(a, b, c, d)
        };
        p.prototype.Yp = function (a) {
            if (this.W)
                if (this.ag.ld()) {
                    this.ag.fb(a);
                    this.qi(this.ag.da, this.ag.fa, this.ag.Mb, this.ag.ta);
                    this.ea()
                } else if (this.Ua.ld()) {
                    this.Ua.fb(a);
                    this.qi(this.Ua.da, this.Ua.fa, this.Ua.Mb, this.Ua.ta);
                    this.ea()
                } else
                    this.qp(0, 0, 0, 0)
        };
        p.prototype.dc = function () {
            if (this.Bc) {
                var a = this.g.iF(this.Bc),
                b = this.g.jF(this.Bc),
                c = this.g.DM(this.Bc),
                d = this.g.dca(this.Bc),
                e = this.g.hF(this.Bc),
                f = this.g.gF(this.Bc),
                g = a - this.da,
                h = b - this.fa,
                j = c - this.Mb,
                p = d - this.ta;
                this.da = a;
                this.fa = b;
                this.Mb = c;
                this.ta = d;
                this.qp(g, h, j, p);
                this.ag.Ka(a, b, c, d, e, f);
                this.Ua.Ka(a, b, c, d,
                    e, f)
            }
        };
        p.prototype.wK = function () {
            if (this.gj == e.iP && this.Kb != r && this.Kb.get("map") == this.na) {
                this.Ua.nd(y);
                this.ag.nd(n)
            } else {
                this.Ua.nd(n);
                this.ag.nd(y)
            }
        };
        p.prototype.El = function () {
            this.ea()
        };
        p.prototype.kb = function () {
            this.I.setSize(this.g.Aa(), this.g.eb());
            this.ea()
        };
        p.prototype.ea = function () {
            this.trigger(new b(p.La))
        };
        p.prototype.qi = function (a, b, c, d) {
            this.g.OF(this.Bc, a, b, c, d)
        };
        p.prototype.qp = function (a, c, d, e) {
            a = y;
            if (this.vn != e < 0) {
                this.vn = !this.vn;
                a = n
            }
            if (this.un != e > 0) {
                this.un = !this.un;
                a = n
            }
            if (this.JK !=
                this.Gt > 0) {
                this.JK = !this.JK;
                a = n
            }
            if (this.KK != this.Gt < 0) {
                this.KK = !this.KK;
                a = n
            }
            if (this.wj != (e == 0)) {
                this.wj = !this.wj;
                a = n
            }
            a && this.trigger(new b(p.ih, {
                    rotatingClockwise: this.JK,
                    rotatingCounterClockwise: this.KK,
                    zoomingIn: this.un,
                    zoomingOut: this.vn,
                    stopped: this.wj
                }))
        };
        p.La = "request frame";
        p.ih = "movement change";
        return p
    });
    define("ja", "require,fg,bZ,eO,jn,ii".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = a("jn"),
        d = a("ii"),
        f = b.extend(e, function (a, b) {
            e.call(this);
            this.C = a;
            this.g = b;
            this.I = new d;
            this.$e = [];
            this.T = f.pf;
            this.ck = this.ph = this.ck = this.Uh = r;
            this.Me = this.C.get("transitionDuration");
            this.ve = m
        });
        f.prototype.tm = function (a) {
            this.I.tm(a)
        };
        f.prototype.XE = function (a) {
            a.pF() && this.BQ();
            this.$e.push(a);
            this.JJ()
        };
        f.prototype.hide = function () {
            this.BQ();
            this.$e.push(r);
            this.JJ()
        };
        f.prototype.clear = function () {
            this.T =
                f.pf;
            this.BQ();
            this.Epa();
            this.nV();
            this.g = r
        };
        f.prototype.dc = function (a) {
            if (this.T != f.pf && (this.T == f.Wj || this.T == f.Aq)) {
                this.ve = this.ve + a;
                a = Math.min(1, this.ve / this.Me);
                this.T == f.Wj ? this.g.qm(this.ck, a) : this.g.qm(this.SH, 1 - a);
                this.ve < this.Me ? this.ea() : this.T == f.Wj ? this.tka() : this.vka()
            }
        };
        f.prototype.JJ = function () {
            if (this.T == f.pf) {
                for (; this.$e.length > 0 && this.wha(this.$e[0], this.ph); )
                    this.$e.shift();
                this.$e.length > 0 && this.il()
            }
        };
        f.prototype.wha = function (a, b) {
            return a == b || !!a && !!b && a.isEqual(b)
        };
        f.prototype.il =
        function () {
            this.ph && (!this.$e[0] || this.$e[0].pF()) && this.trigger(new c(f.gt, {
                    map: this.ph.na
                }));
            if (this.C.get("transitionMode", "blending") == "fade_out_fade_in" && this.ph && (!this.$e[0] || this.$e[0].pF()))
                this.Fq();
            else {
                this.ck = (this.Uh = this.$e.shift()) && this.Uh.getItem();
                this.Uh ? this.LA() : this.ph && this.Fq()
            }
        };
        f.prototype.LA = function () {
            this.aha();
            this.Uh.pF() && this.pqa();
            this.ve = 0;
            this.T = f.Wj;
            this.ea()
        };
        f.prototype.tka = function () {
            this.nV();
            this.ph = this.Uh;
            this.SH = this.ck;
            this.ck = this.Uh = r;
            this.br()
        };
        f.prototype.Fq =
        function () {
            this.ve = 0;
            this.T = f.Aq;
            this.ea()
        };
        f.prototype.vka = function () {
            this.nV();
            this.ph = r;
            this.br()
        };
        f.prototype.br = function () {
            this.T = f.pf;
            this.ph && this.ph.pF() && this.trigger(new c(f.ht, {
                    map: this.ph.na
                }));
            this.$e.length == 0 ? this.ph ? this.trigger(new c(f.tO, {
                    level: this.ph
                })) : this.trigger(new c(f.gO)) : this.il()
        };
        f.prototype.pqa = function () {
            var a = this.Uh.na;
            this.Uh.ah();
            this.I.IF(a.get("width", 100), a.get("height", 100), a.get("scaleMode", g.Te), a.get("minimumZoomFactor", 1), a.get("maximumZoomFactor", 1));
            this.I.Ka(0.5,
                0.5, 0, a.get("initialZoomFactor", 1));
            this.g.OF(this.ck, this.I.getX(), this.I.getY(), this.I.rz(), this.I.lm())
        };
        f.prototype.ea = function () {
            this.trigger(new c(f.La))
        };
        f.prototype.BQ = function () {
            for (; this.$e.length > 0; ) {
                var a = this.$e.shift();
                a && this.g.Fi(a.getItem())
            }
        };
        f.prototype.aha = function () {
            if (this.Uh) {
                this.g.UX(this.ck);
                this.g.$X(this.ck);
                this.g.qm(this.ck, 0);
                this.trigger(new c(f.sO, {
                        level: this.Uh
                    }))
            }
        };
        f.prototype.nV = function () {
            if (this.ph) {
                this.g.removeItem(this.SH);
                this.trigger(new c(f.pG, {
                        level: this.ph
                    }));
                this.g.Fi(this.SH);
                this.SH = this.ph = r
            }
        };
        f.prototype.Epa = function () {
            if (this.Uh) {
                this.g.removeItem(this.ck);
                this.trigger(new c(f.pG, {
                        level: this.Uh
                    }));
                this.g.Fi(this.ck);
                this.ck = this.Uh = r
            }
        };
        f.pf = "stopped";
        f.Wj = "blending";
        f.Aq = "disolving";
        f.La = "request frame";
        f.sO = "level added";
        f.pG = "level removed";
        f.tO = "level fully displayed";
        f.gO = "all pending maps hidden";
        f.ht = "map show";
        f.gt = "map hide";
        return f
    });
    define("iy", [], function () {
        function a(a, c) {
            this.na = a;
            this.ha = a.get("image");
            this.Zd = c;
            this.oT = m
        }
        a.prototype.getItem = function () {
            switch (this.Zd) {
            case a.JG:
                return this.na.mca();
            default:
                return this.na.bh()
            }
        };
        a.prototype.ah = function () {
            switch (this.Zd) {
            case a.JG:
                return this.na.Vv();
            default:
                return this.na.jm()
            }
        };
        a.prototype.pF = function () {
            return this.oT === m ? 0 == this.getIndex() : this.oT
        };
        a.prototype.wya = P("oT");
        a.prototype.rF = function () {
            return this.Zd == a.h0
        };
        a.prototype.isEqual = function (a) {
            return a && this.na ==
            a.map && this.Zd == a.type
        };
        a.prototype.getIndex = function () {
            return this.Zd == a.JG || this.na.Bz() ? 0 : 1
        };
        a.prototype.Vba = function () {
            return this.na.Bz() ? 2 : 1
        };
        a.JG = "preload";
        a.h0 = "load";
        return a
    });
    define("hE", "require,fg,ih,ll,bZ,eO,iy,r".split(","), function (a) {
        var b = a("fg"),
        c = a("ih"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("iy"),
        h = a("r"),
        j = b.extend(d, function (a) {
            d.call(this);
            this.g = a;
            this.$e = [];
            this.kB = this.yu = this.De = r;
            this.su = y;
            this.ZI = r;
            this.HJ = b.nm(this.HJ, this)
        });
        j.prototype.clear = function () {
            this.stop();
            this.g = r
        };
        j.prototype.tda = function (a, b) {
            if (this.ZI != a || b) {
                this.stop();
                this.na = a;
                this.na.Sxa();
                c.Zta(this.na, "image.levels.url", this.HJ);
                var d = [];
                a.Bz() && h.Za() && d.push(new f(a, f.JG));
                d.push(new f(a,
                        f.h0));
                d = d.filter(function (a) {
                    return a.getItem().Dj()
                });
                if (d.length) {
                    this.$e = this.$e.concat(d);
                    this.JJ()
                }
            }
        };
        j.prototype.HJ = function () {
            this.reload()
        };
        j.prototype.reload = function () {
            this.tda(this.na, n)
        };
        j.prototype.stop = function () {
            c.Pb(this.na, "image.levels.url", this.HJ);
            this.ZI = this.na = r;
            this.$e = [];
            this.J$();
            if (this.su) {
                this.su = y;
                this.QW();
                this.g.Fi(this.De.getItem());
                this.De = r;
                this.trigger(new g(j.qG))
            }
        };
        j.prototype.JJ = function () {
            this.su || this.LT()
        };
        j.prototype.LT = function () {
            if (this.$e.length > 0) {
                this.De =
                    this.$e.shift();
                if (!this.su) {
                    this.su = n;
                    this.trigger(new g(j.oG, {
                            level: this.De,
                            percent: 0
                        }))
                }
                this.Uha();
                this.g.Mn(this.De.getItem());
                this.g.FN(this.De.getItem()) && this.jU()
            } else if (this.su) {
                this.su = y;
                this.trigger(new g(j.qG))
            }
        };
        j.prototype.jU = function () {
            this.QW();
            this.Era();
            this.De = r;
            this.LT()
        };
        j.prototype.Era = function () {
            this.J$();
            this.yu = this.De;
            var a = this;
            this.kB = setTimeout(function () {
                a.kB = r;
                a.Qna()
            }, 500)
        };
        j.prototype.Qna = function () {
            var a = this.yu.na;
            this.yu.wya(a != this.ZI);
            this.ZI = a;
            this.trigger(new g(j.uO, {
                    level: this.yu
                }));
            this.yu = r
        };
        j.prototype.J$ = function () {
            if (this.kB != r) {
                clearTimeout(this.kB);
                this.kB = r;
                this.g.Fi(this.yu.getItem());
                this.yu = r
            }
        };
        j.prototype.X6 = function () {
            this.QW();
            this.De = r;
            this.LT()
        };
        j.prototype.Y6 = function (a) {
            this.trigger(new g(j.oG, {
                    level: this.De,
                    percent: a.Kh
                }))
        };
        j.prototype.Uha = function () {
            var a = this.De.getItem();
            a.bind(e.S, this.jU, this);
            a.bind(e.oe, this.X6, this);
            a.bind(e.wc, this.Y6, this)
        };
        j.prototype.QW = function () {
            var a = this.De.getItem();
            a.unbind(e.S, this.jU, this);
            a.unbind(e.oe,
                this.X6, this);
            a.unbind(e.wc, this.Y6, this)
        };
        j.oG = "level loading progress";
        j.uO = "level loaded";
        j.qG = "load stopped";
        return j
    });
    define("ch", ["require"], function () {
        function a(a, c) {
            this.x = a;
            this.y = c
        }
        a.prototype.rotate = function (a) {
            var c = Math.cos(a),
            a = Math.sin(a),
            e = this.x * a + this.y * c;
            this.x = this.x * c - this.y * a;
            this.y = e;
            return this
        };
        a.prototype.translate = function (a, c) {
            this.x += a;
            this.y += c;
            return this
        };
        a.prototype.scale = function (a, c) {
            this.x *= a;
            this.y *= c;
            return this
        };
        return a
    });
    define("jJ", ["require", "jn", "jY"], function (a) {
        function b(a, b, f) {
            this.ue = a;
            this.y$ = b;
            this.x$ = f;
            this.Ed = c.Zn;
            this.Zh = e.Lc;
            this.ti = e.vc
        }
        var c = a("jn"),
        e = a("jY");
        b.prototype.Xs = P("Ed");
        b.prototype.Uz = P("Zh");
        b.prototype.Yz = P("ti");
        b.prototype.pz = function (a, b, f) {
            var h = this.y$,
            j = this.x$,
            p,
            k;
            switch (this.Ed) {
            case c.NONE:
                k = p = 1;
                break;
            case c.Te:
                p = k = Math.min(b / h, f / j);
                break;
            case c.xm:
                p = k = Math.max(b / h, f / j);
                break;
            case c.Zk:
                p = k = b / h;
                break;
            case c.kh:
                p = k = f / j;
                break;
            default:
                p = b / h,
                k = f / j
            }
            var l = b / p;
            p = Math.min(this.y$ * p, b);
            l = Math.min(l, h);
            switch (this.Zh) {
            case e.qa:
                h = b = 0;
                break;
            case e.Na:
                b -= p;
                h -= l;
                break;
            default:
                b = 0.5 * (b - p),
                h = 0.5 * (h - l)
            }
            var q = f / k;
            k = Math.min(this.x$ * k, f);
            q = Math.min(q, j);
            switch (this.ti) {
            case e.nb:
                j = f = 0;
                break;
            case e.mb:
                f -= k;
                j -= q;
                break;
            default:
                f = 0.5 * (f - k),
                j = 0.5 * (j - q)
            }
            a.drawImage(this.ue, Math.round(h), Math.round(j), Math.round(l + h - Math.round(h)), Math.round(q + j - Math.round(j)), Math.round(b), Math.round(f), Math.round(p + b - Math.round(b)), Math.round(k + f - Math.round(f)))
        };
        return b
    });
    define("ju", "require,ll,ge,ch,id,jJ".split(","), function (a) {
        function b(a, b, f, g) {
            this.g = a;
            this.na = b;
            this.Sc = this.na.get("width");
            this.Rc = this.na.get("height");
            this.Bc = this.na.bh();
            this.y5 = f;
            this.gk = g;
            this.ou = r;
            if (this.gk) {
                this.Iy = this.y5.Iy;
                this.X = this.gk.get("width");
                this.ia = this.gk.get("height");
                this.da = this.gk.get("x", 0);
                this.fa = this.gk.get("y", 0);
                this.Fu = this.gk.get("offsetX", 0);
                this.Gu = this.gk.get("offsetY", 0);
                if (this.ab = this.gk.jm()) {
                    this.xf = new d(e.Uj);
                    this.xf.load(this.ab.get("url"));
                    this.xf.bind(c.S,
                        this.z7, this)
                }
            } else
                this.xf = r
        }
        var c = a("ll"),
        e = a("ge"),
        g = a("ch"),
        d = a("id"),
        f = a("jJ");
        b.prototype.clear = function () {
            this.gk = this.y5 = this.Bc = this.na = this.g = r;
            if (this.xf) {
                this.xf.unbind(c.S, this.z7, this);
                this.xf.cancel();
                this.xf = r
            }
            this.ou = r
        };
        b.prototype.fca = function (a, b) {
            this.z5 = m;
            if (this.ou && a != m && b != m) {
                var c = this.g.Aa() * 0.5,
                d = this.g.eb() * 0.5,
                e = this.g.DM(this.Bc) * Math.PI / 180,
                f = this.g.hF(this.Bc),
                o = this.g.gF(this.Bc),
                t = this.g.iF(this.Bc),
                s = this.g.jF(this.Bc),
                v = new g(a, b);
                v.translate(-c, -d);
                v.rotate(-e);
                v.scale(1 / f, 1 / o);
                v.translate(t, s);
                v.scale(this.Sc, this.Rc);
                v.translate(-this.da, -this.fa);
                if (!this.Iy) {
                    v.rotate(e);
                    v.scale(f / this.Sc, o / this.Rc)
                }
                v.translate(this.Fu, this.Gu);
                c = Math.round(v.x);
                v = Math.round(v.y);
                if (c >= 0 && c < this.ou.width && v >= 0 && v < this.ou.height) {
                    v = (this.ou.width * v + c) * 4;
                    c = this.ou.data;
                    this.z5 = c[v + 3] > 0 ? "#" + this.nQ(c[v + 0]) + this.nQ(c[v + 1]) + this.nQ(c[v + 2]) : "transparent"
                }
            }
            return this.z5
        };
        b.prototype.z7 = function () {
            var a = new f(this.xf.we(), this.ab.get("width"), this.ab.get("height"));
            a.Xs(this.gk.get("scaleMode"));
            a.Uz(this.gk.get("horizontalAlign"));
            a.Yz(this.gk.get("verticalAlign"));
            var b = document.createElement("canvas");
            b.width = Math.round(this.X);
            b.height = Math.round(this.ia);
            var c = b.getContext("2d");
            a.pz(c, b.width, b.height);
            this.ou = c.getImageData(0, 0, b.width, b.height);
            b.width = b.height = 0
        };
        b.prototype.nQ = function (a) {
            for (a = a.toString(16); a.length < 2; )
                a = "0" + a;
            return a
        };
        return b
    });
    define("iu", "require,do,fg,ll,bZ,eO,kA,ju,R,kX,bq".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("kA"),
        h = a("ju"),
        j = a("R"),
        p = a("kX"),
        k = a("bq"),
        l = c.extend(d, function (a, b, c) {
            d.call(this);
            this.g = a;
            this.na = b;
            this.Ha = c;
            this.Y = this.Ha.getItem();
            this.Sl = this.Ha.nca();
            this.Tl = this.Ha.pca();
            this.Mo = this.hk = m;
            this.C = this.g.getParent();
            this.C.bind(e.Mc, this.ij, this);
            this.C.bind(e.Qb, this.zC, this);
            this.C.bind(e.Hb, this.Ir, this);
            this.C.bind(e.fc, this.BC, this);
            c.bind(e.D("selected"),
                this.a8, this);
            c.bind(e.D("enabled"), this.Sna, this);
            this.gJ = new h(this.g, this.na, this.Ha, this.Ha.get("map", r));
            this.iJ = new h(this.g, this.na, this.Ha, this.Ha.get("rollOverMap", this.Ha.get("map", r)));
            this.jJ = new h(this.g, this.na, this.Ha, this.Ha.get("selectedMap", this.Ha.get("rollOverMap", this.Ha.get("map", r))));
            this.CI = new h(this.g, this.na, this.Ha, this.Ha.get("image", r));
            this.DI = new h(this.g, this.na, this.Ha, this.Ha.get("rollOverImage", this.Ha.get("image", r)));
            this.EI = new h(this.g, this.na, this.Ha, this.Ha.get("selectedImage",
                        this.Ha.get("rollOverImage", this.Ha.get("image", r))));
            this.Hc = this.Gc = m;
            this.Yy = r;
            this.ko = [];
            this.GA = [];
            this.qf = {};
            this.m6 = [];
            this.FS = y;
            this.pn = this.Ha.get("useHandCursor");
            this.O = r;
            this.Sy = m;
            this.RK = this.HK = this.TI = 0;
            a = this.Ha.get("areas", []);
            for (b = 0; b < a.length; b++) {
                var c = a[b],
                f = c.get("mapColor");
                if (f) {
                    f = f.toLowerCase();
                    if (this.qf[f] === m) {
                        this.qf[f] = [];
                        this.m6.push(f)
                    }
                    this.qf[f].push(c)
                }
            }
            if (this.Y) {
                this.g.bM(this.na.bh(), this.Y);
                this.g.qm(this.Y, this.TI)
            }
            if (this.Sl) {
                this.g.bM(this.na.bh(), this.Sl);
                this.g.qm(this.Sl, this.HK)
            }
            if (this.Tl) {
                this.g.bM(this.na.bh(), this.Tl);
                this.g.qm(this.Tl, this.RK)
            }
            this.GD("none");
            this.aX();
            this.W9(y);
            this.X9(this.Ha.get("selected"))
        });
        l.prototype.clear = function () {
            this.C.unbind(e.Mc, this.ij, this);
            this.C.unbind(e.Qb, this.zC, this);
            this.C.unbind(e.Hb, this.Ir, this);
            this.C.unbind(e.fc, this.BC, this);
            this.C = r;
            this.gJ && this.gJ.clear();
            this.gJ = r;
            this.iJ && this.iJ.clear();
            this.iJ = r;
            this.jJ && this.jJ.clear();
            this.jJ = r;
            this.CI && this.CI.clear();
            this.CI = r;
            this.DI && this.DI.clear();
            this.DI = r;
            this.EI && this.EI.clear();
            this.EI = r;
            this.ko = [];
            this.hk = y;
            this.aX();
            this.GA = [];
            this.qf = {};
            this.N$();
            this.tE();
            this.na = this.g = r;
            this.Ha.unbind(e.D("selected"), this.a8, this);
            this.Tl = this.Sl = this.Y = this.Ha = r
        };
        l.prototype.match = function (a) {
            return this.Ha == a
        };
        l.prototype.dc = function (a) {
            this.Wx(y);
            if (this.O) {
                this.O.fb(a);
                this.TI = this.O.Fb("itemAlpha");
                this.HK = this.O.Fb("rollOverItemAlpha");
                this.RK = this.O.Fb("selectedItemAlpha");
                this.Y && this.g.qm(this.Y, this.TI);
                this.Sl && this.g.qm(this.Sl, this.HK);
                this.Tl && this.g.qm(this.Tl, this.RK);
                this.O.Re() ? this.O = r : this.ea()
            }
        };
        l.prototype.Ir = function (a) {
            this.Gc = a.x - this.C.xi();
            this.Hc = a.y - this.C.Cn();
            this.Wx(n);
            this.GA = this.ko.slice()
        };
        l.prototype.ij = function (a) {
            this.Gc = a.x - this.C.xi();
            this.Hc = a.y - this.C.Cn();
            this.Wx(n)
        };
        l.prototype.BC = function (a) {
            this.Gc = a.x - this.C.xi();
            this.Hc = a.y - this.C.Cn();
            this.Wx(n);
            a = b.intersection(this.GA, this.ko);
            this.GA = [];
            this.LW(a, "click")
        };
        l.prototype.zC = function () {
            this.Hc = this.Gc = m;
            this.Wx(n);
            this.GA = this.ko.slice()
        };
        l.prototype.a8 =
        function () {
            this.X9(this.Ha.get("selected"))
        };
        l.prototype.Sna = function () {
            this.Wx(n);
            this.je();
            this.ea()
        };
        l.prototype.Wx = function (a) {
            this.M5 = n;
            a ? this.Xy() : this.cna() || this.Sra()
        };
        l.prototype.Sra = function () {
            this.N$();
            var a = this;
            this.Yy = setTimeout(function () {
                a.Yy = r;
                a.Xy()
            }, 200)
        };
        l.prototype.cna = function () {
            return this.Yy ? n : y
        };
        l.prototype.N$ = function () {
            if (this.Yy) {
                clearTimeout(this.Yy);
                this.Yy = r
            }
        };
        l.prototype.Xy = function () {
            if (this.M5) {
                this.M5 = y;
                var a = this.ko,
                c = this.Xka();
                this.ko = c;
                if (!this.C.ik) {
                    this.LW(b.difference(c,
                            a), "rollOver");
                    this.W9(c.length > 0);
                    this.LW(b.difference(a, c), "rollOut");
                    this.tE()
                }
            }
        };
        l.prototype.tE = function () {
            for (var a = "", b = 0; b < this.ko.length && !a; b++) {
                var c = this.ko[b];
                c.get("toolTip") && (a = c.get("toolTip"))
            }
            if (this.ya != a) {
                this.ya && this.g.txa(this.ya);
                (this.ya = a) && this.g.Axa(this.ya)
            }
        };
        l.prototype.aX = function () {
            var a = this.hk && (this.pn !== y || b(this.ko).any(function (a) {
                        return a.get("useHandCursor") === n
                    }));
            if (this.FS != a)
                (this.FS = a) ? this.g.lN(j.Ue) : this.g.Lz(j.Ue)
        };
        l.prototype.Xka = function () {
            if (this.Ha.get("enabled") ===
                y)
                return [];
            var a = [],
            b = this.Mo ? this.jJ : this.hk ? this.iJ : this.gJ;
            if (b)
                if (b = b.fca(this.Gc, this.Hc)) {
                    this.qf.any && (a = a.concat(this.qf.any));
                    b == "transparent" && this.qf.transparent && (a = a.concat(this.qf.transparent));
                    if (b != "transparent") {
                        a = this.qf[b] ? a.concat(this.qf[b]) : a.concat(this.qf[f.Vxa(b, this.m6, 5)] || []);
                        this.qf.image && (a = a.concat(this.qf.image))
                    }
                }
            if (b = this.Mo ? this.EI : this.hk ? this.DI : this.CI)
                if (b = b.fca(this.Gc, this.Hc)) {
                    this.qf.any && (a = a.concat(this.qf.any));
                    b == "transparent" && this.qf.transparent &&
                    (a = a.concat(this.qf.transparent));
                    b != "transparent" && this.qf.image && (a = a.concat(this.qf.image))
                }
            for (var b = [], c = 0; c < a.length; c++) {
                var d = a[c];
                b.indexOf(d) < 0 && b.push(d)
            }
            return b
        };
        l.prototype.LW = function (a, b) {
            if (a)
                for (var c = 0; c < a.length; c++)
                    a[c].trigger(new g(b))
        };
        l.prototype.W9 = function (a) {
            if (this.hk != a) {
                this.hk = a;
                this.trigger(new g(l.oO));
                this.je();
                this.aX();
                this.ea()
            }
        };
        l.prototype.X9 = function (a) {
            if (this.Mo != a) {
                this.Mo = a;
                this.je();
                this.ea()
            }
        };
        l.prototype.je = function () {
            (this.hk || this.Ha.get("rollOverDisplay") !=
                n) && this.Ha.get("enabled") !== y ? this.Mo ? this.GD("selected") : this.hk ? this.GD("roll over") : this.GD("visible") : this.GD("none")
        };
        l.prototype.GD = function (a) {
            if (this.Sy != a) {
                this.Sy = a;
                var c,
                d;
                if (b(["selected"]).contains(this.Sy) && this.Tl) {
                    d = 1;
                    a = c = 0
                } else if (b(["selected", "roll over"]).contains(this.Sy) && this.Sl) {
                    c = 1;
                    a = d = 0
                } else if (b(["selected", "roll over", "visible"]).contains(this.Sy)) {
                    a = 1;
                    d = c = 0
                } else
                    a = d = c = 0;
                var e = this.TI,
                f = this.HK,
                g = this.RK,
                h = this.Sy == "none" ? "quad_out" : "quad_in",
                j = Math.max(200 * Math.abs(a -
                            e), 200 * Math.abs(c - f), 200 * Math.abs(d - g));
                this.O = new p(h, [new k("itemAlpha", e, a), new k("rollOverItemAlpha", f, c), new k("selectedItemAlpha", g, d)], j)
            }
        };
        l.prototype.ea = function () {
            this.trigger(new g(l.La))
        };
        l.La = "request frame";
        l.oO = "is over update";
        return l
    });
    define("jX", ["fg", "hC"], function (a, b) {
        var c = a.extend(b, function (a, c, d, f, h, j, p) {
            b.call(this, b.g1, a, c);
            this.Ima = d;
            this.Jma = f;
            this.Roa = h;
            this.Soa = j;
            this.rb = p;
            this.wE = []
        });
        c.prototype.Xv = Q("rb");
        return c
    });
    define("eq", "fg,ll,bZ,eO,ch,jX".split(","), function (a, b, c, e, g, d) {
        var f = a.extend(e, function (a, c, d) {
            e.call(this);
            this.g = a;
            this.C = this.g.getParent();
            this.C.bind(b.Hb, this.Ir, this, n);
            this.C.bind(b.Mc, this.ij, this, n);
            this.C.bind(b.Kf, this.zC, this, n);
            this.na = c;
            this.Sc = this.na.get("width");
            this.Rc = this.na.get("height");
            this.upa = Math.sqrt(this.Sc * this.Sc + this.Rc * this.Rc) * this.na.get("fieldOfViewOverlayRadiusScale", 1);
            this.Bc = this.na.bh();
            this.Kb = d;
            this.qy = this.Kb.get("x", 0);
            this.ry = this.Kb.get("y", 0);
            this.ZJ =
                this.Kb.get("angle", 0);
            this.Y = this.Gja();
            this.Nm = y;
            this.$ = 0;
            this.ba = Math.PI * 0.5;
            this.pc = y;
            this.Hc = this.Gc = m;
            this.g.bM(this.na.bh(), this.Y)
        });
        f.prototype.Jea = function (a, b) {
            this.$ = a + this.ZJ - 90;
            this.ba = b;
            this.ea()
        };
        f.prototype.clear = function () {
            this.C.unbind(b.Hb, this.Ir, this);
            this.C.unbind(b.Mc, this.ij, this);
            this.C.unbind(b.Kf, this.zC, this);
            this.C = r;
            this.g.Hxa(this.na.bh(), this.Y);
            this.Y = this.Kb = this.Bc = this.na = this.g = r
        };
        f.prototype.dc = function () {
            this.g.Aya(this.Y, this.$, this.ba)
        };
        f.prototype.Gja = function () {
            return new d(this.qy,
                this.ry, this.na.get("fieldOfViewOverlayInsideColor", "#FFFFFF"), this.na.get("fieldOfViewOverlayInsideOpacity", 0), this.na.get("fieldOfViewOverlayOutsideColor", "#000000"), this.na.get("fieldOfViewOverlayOutsideOpacity", 0), this.na.get("fieldOfViewOverlayRadiusScale", 1))
        };
        f.prototype.ea = function () {
            this.trigger(new c(f.La))
        };
        f.prototype.cX = function () {
            var a = y;
            if (this.Gc != m && this.Hc != m) {
                var b = this.g.Aa() * 0.5,
                d = this.g.eb() * 0.5,
                e = this.g.DM(this.Bc) * Math.PI / 180,
                l = this.g.hF(this.Bc),
                q = this.g.gF(this.Bc),
                o = this.g.iF(this.Bc),
                t = this.g.jF(this.Bc),
                a = new g(this.Gc, this.Hc);
                a.translate(-b, -d);
                a.rotate(-e);
                a.scale(1 / l, 1 / q);
                a.translate(o, t);
                a.scale(this.Sc, this.Rc);
                a.translate(-this.qy, -this.ry);
                a.rotate(-this.$ * Math.PI / 180);
                b = Math.round(Math.atan2(a.y, a.x) * 180 / Math.PI);
                a = Math.round(Math.sqrt(a.x * a.x + a.y * a.y)) <= this.upa && Math.abs(b) < this.ba * 0.5
            }
            if (this.Nm != a) {
                this.Nm = a;
                this.trigger(new c(f.SO, {
                        inFOV: this.Nm
                    }))
            }
        };
        f.prototype.qwa = Q("Nm");
        f.prototype.Ir = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            this.pc = n;
            this.cX()
        };
        f.prototype.ij = function (a) {
            if (!this.pc) {
                this.Gc =
                    a.x;
                this.Hc = a.y;
                this.cX()
            }
        };
        f.prototype.zC = function () {
            this.Hc = this.Gc = m;
            this.pc = y;
            this.cX()
        };
        f.La = "request frame";
        f.SO = "mouse in fov change";
        return f
    });
    define("lc", "require,do,fg,bZ,eO,gs,iu,eq".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("bZ"),
        g = a("eO"),
        d = a("gs"),
        f = a("iu"),
        h = a("eq"),
        j = c.extend(g, function (a) {
            g.call(this);
            this.g = a;
            this.dC = [];
            this.Jo = [];
            this.Zi = [];
            this.kj = this.Kb = r
        });
        j.prototype.clear = function () {
            for (var a = 0; a < this.Jo.length; a++)
                this.Jo[a].clear();
            for (a = 0; a < this.Zi.length; a++)
                this.Zi[a].clear();
            this.g = this.dC = this.Kb = this.Zi = this.Jo = r
        };
        j.prototype.XE = function (a) {
            a.rF() && this.kha(a.na)
        };
        j.prototype.QY = function (a) {
            a.rF() && this.Opa(a.na)
        };
        j.prototype.fq = function (a) {
            if (this.Kb != a) {
                this.Kb && this.pV(this.Kb.get("map"));
                this.Kb = a;
                this.kj = r;
                if (this.Kb) {
                    a = this.Kb.get("map");
                    this.pT(a) && this.e2(a)
                }
            }
        };
        j.prototype.Kj = function (a, b, c, d) {
            this.kj = {
                yaw: b,
                pitch: c,
                hfov: d
            };
            for (c = 0; c < this.Zi.length; c++) {
                var e = this.Zi[c];
                if (e.Kb == a) {
                    e.Jea(b, d);
                    break
                }
            }
        };
        j.prototype.kha = function (a) {
            if (this.pT(a)) {
                this.j9(a);
                this.pV(a)
            }
            this.dC.push(a);
            this.dha(a);
            this.e2(a)
        };
        j.prototype.Opa = function (a) {
            var b = this.dC.indexOf(a);
            b >= 0 && this.dC.splice(b, 1);
            if (!this.pT(a)) {
                this.j9(a);
                this.pV(a)
            }
        };
        j.prototype.pT = function (a) {
            return b(this.dC).indexOf(a) >= 0
        };
        j.prototype.dc = function (a) {
            for (var b = 0; b < this.Jo.length; b++)
                this.Jo[b].dc(a);
            for (b = 0; b < this.Zi.length; b++)
                this.Zi[b].dc(a)
        };
        j.prototype.dha = function (a) {
            for (var b = a.get("overlays", []), c = 0; c < b.length; c++) {
                var e = b[c];
                if (e instanceof d) {
                    e = new f(this.g, a, e);
                    e.bind(f.La, this.ea, this, n);
                    e.bind(f.oO, this.U5, this, n);
                    this.Jo.push(e)
                }
            }
        };
        j.prototype.e2 = function (a) {
            if (this.Kb && this.Kb.get("map") == a && this.Kb.get("visible") !== y) {
                a = new h(this.g,
                        a, this.Kb);
                a.bind(h.La, this.ea, this, n);
                a.bind(h.SO, this.DJ, this, n);
                this.Zi.push(a);
                this.kj && a.Jea(this.kj.yaw, this.kj.hfov)
            }
            this.DJ()
        };
        j.prototype.j9 = function (a) {
            for (var a = a.get("overlays", []), b = 0; b < a.length; b++)
                for (var c = a[b], d = 0; d < this.Jo.length; d++) {
                    var e = this.Jo[d];
                    if (e.match(c)) {
                        e.unbind(f.La, this.ea, this);
                        e.unbind(f.oO, this.U5, this);
                        e.clear();
                        this.Jo.splice(d, 1);
                        break
                    }
                }
        };
        j.prototype.pV = function (a) {
            for (var b = 0; b < this.Zi.length; b++) {
                var c = this.Zi[b];
                if (c.na == a) {
                    c.unbind(h.La, this.ea, this);
                    c.unbind(h.SO,
                        this.DJ, this);
                    c.clear();
                    this.Zi.splice(b, 1);
                    break
                }
            }
            this.DJ()
        };
        j.prototype.U5 = D();
        j.prototype.ea = function () {
            this.trigger(new e(j.La))
        };
        j.prototype.DJ = function () {
            for (var a = y, b = 0; b < this.Zi.length; b++)
                this.Zi[b].qwa() && (a = n);
            this.trigger(new e(j.nO, {
                    inFOV: a
                }))
        };
        j.La = "request frame";
        j.nO = "in fov change";
        return j
    });
    define("B", "fg,ll,bZ,eO,hG,ch".split(","), function (a, b, c, e, g, d) {
        var f = a.extend(e, function (a) {
            e.call(this);
            this.g = a;
            this.C = this.g.getParent();
            this.C.bind(b.Mc, this.ij, this, n);
            this.C.bind(b.Hb, this.Ir, this, n);
            this.C.bind(b.fc, this.BC, this, n);
            this.na = r;
            this.Bc = this.Rc = this.Sc = m;
            this.Kb = r;
            this.ZJ = this.ry = this.qy = m;
            this.Nm = y;
            this.Hc = this.Gc = this.gj = m;
            this.pc = y;
            this.$ = 0
        });
        f.prototype.clear = function () {
            this.C.unbind(b.Mc, this.ij, this);
            this.C.unbind(b.Hb, this.Ir, this);
            this.C.unbind(b.fc, this.BC, this);
            this.g =
                this.Kb = this.Bc = this.na = this.C = r
        };
        f.prototype.NF = function (a) {
            this.Nm = a;
            this.XW()
        };
        f.prototype.XE = function (a) {
            a.rF() && this.b$(a.na)
        };
        f.prototype.QY = function (a) {
            a.rF() && this.na == a.na && this.b$(r)
        };
        f.prototype.b$ = function (a) {
            if (this.na != a)
                if (this.na = a) {
                    this.Sc = this.na.get("width");
                    this.Rc = this.na.get("height");
                    this.Bc = this.na.bh()
                } else {
                    this.Rc = this.Sc = m;
                    this.Bc = r
                }
        };
        f.prototype.fq = function (a) {
            if (this.Kb != a)
                if (this.Kb = a) {
                    this.qy = this.Kb.get("x", 0);
                    this.ry = this.Kb.get("y", 0);
                    this.ZJ = this.Kb.get("angle",
                            0)
                } else
                    this.ZJ = this.ry = this.qy = m
        };
        f.prototype.Kj = function (a, b) {
            if (this.Kb == a)
                this.$ = b
        };
        f.prototype.tm = P("gj");
        f.prototype.Ir = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            this.pc = n;
            this.XW()
        };
        f.prototype.ij = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            if (this.HR) {
                a = this.e5();
                this.trigger(new c(f.jh, {
                        yawDelta: a - this.Mb
                    }));
                this.Mb = a
            }
        };
        f.prototype.BC = function (a) {
            this.Gc = a.x;
            this.Hc = a.y;
            this.pc = y;
            this.XW()
        };
        f.prototype.XW = function () {
            var a = this.pc && this.Kb && this.na && (this.gj == g.iP || this.Nm);
            if (this.HR != a)
                if (this.HR = a)
                    this.Mb =
                        this.e5()
        };
        f.prototype.e5 = function () {
            var a = this.g.Aa() * 0.5,
            b = this.g.eb() * 0.5,
            c = new d(this.Gc, this.Hc);
            c.translate(-a, -b);
            if (this.gj == g.iP)
                return -Math.atan2(c.y, c.x) * 180 / Math.PI;
            var a = this.g.DM(this.Bc) * Math.PI / 180,
            b = this.g.hF(this.Bc),
            e = this.g.gF(this.Bc),
            f = this.g.iF(this.Bc),
            q = this.g.jF(this.Bc);
            c.rotate(-a);
            c.scale(1 / b, 1 / e);
            c.translate(f, q);
            c.scale(this.Sc, this.Rc);
            c.translate(-this.qy, -this.ry);
            return Math.atan2(c.y, c.x) * 180 / Math.PI
        };
        f.jh = "request yaw change";
        return f
    });
    define("jQ", ["fg", "bZ", "eO", "V"], function (a, b, c, e) {
        var g = a.extend(c, function (a) {
            c.call(this);
            this.W = n;
            this.iu = y;
            this.g = a
        });
        g.prototype.clear = function () {
            this.W = y;
            this.g = r
        };
        g.prototype.Ma = function () {
            this.iu || (this.iu = n, e.Ma(this.Pg, this))
        };
        g.prototype.Pg = function (a) {
            this.W && (this.iu = y, this.trigger(new b(g.Wk, {
                        frameTime: a
                    })), this.trigger(new b(g.Xk, {
                        frameTime: a
                    })), this.g.render())
        };
        g.Wk = "frameStart";
        g.Xk = "positionSet";
        return g
    });
    define("jm", "require,fg,ll,bZ,eO,kK,ja,hE,lc,B,jQ".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("kK"),
        f = a("ja"),
        h = a("hE"),
        j = a("lc"),
        p = a("B"),
        k = a("jQ"),
        l = b.extend(g, function (a, b) {
            g.call(this);
            this.C = a;
            this.g = b;
            this.g.set("visible", y);
            this.dK = r;
            this.ge = new k(this.g);
            this.ee = new h(this.g);
            this.ga = new f(this.C, this.g);
            this.oa = new d(this.g);
            this.Jl = new j(this.g);
            this.Vm = new p(this.g);
            this.C.bind(c.od, this.RJ, this, n);
            this.ge.bind(k.Wk, this.Lr, this, n);
            this.ge.bind(k.Xk, this.Mr,
                this, n);
            this.ee.bind(h.qG, this.vC, this);
            this.ee.bind(h.uO, this.r7, this);
            this.ee.bind(h.oG, this.s7, this);
            this.ga.bind(f.La, this.Zc, this, n);
            this.ga.bind(f.sO, this.p7, this, n);
            this.ga.bind(f.pG, this.t7, this, n);
            this.ga.bind(f.tO, this.q7, this, n);
            this.ga.bind(f.gt, this.$o, this, n);
            this.ga.bind(f.ht, this.Gr, this, n);
            this.ga.bind(f.gO, this.L6, this, n);
            this.oa.bind(d.La, this.Zc, this, n);
            this.oa.bind(d.ih, this.Cl, this);
            this.Jl.bind(j.La, this.Zc, this, n);
            this.Jl.bind(j.nO, this.i7, this, n);
            this.Vm.bind(p.jh, this.KC,
                this, n);
            this.i4 = y
        });
        l.prototype.tm = function (a) {
            this.oa.tm(a);
            this.ga.tm(a);
            this.Vm.tm(a)
        };
        l.prototype.clear = function () {
            this.i4 = n;
            this.ee.clear();
            this.ge.clear();
            this.oa.clear();
            this.ga.clear();
            this.Jl.clear();
            this.Vm.clear();
            this.C.unbind(c.od, this.RJ, this);
            this.ee.unbind(h.qG, this.vC, this);
            this.ee.unbind(h.uO, this.r7, this);
            this.ee.unbind(h.oG, this.s7, this);
            this.ge.unbind(k.Wk, this.Lr, this);
            this.ge.unbind(k.Xk, this.Mr, this);
            this.ga.unbind(f.La, this.Zc, this);
            this.ga.unbind(f.sO, this.p7, this);
            this.ga.unbind(f.pG,
                this.t7, this);
            this.ga.unbind(f.tO, this.q7, this);
            this.ga.unbind(f.gt, this.$o, this);
            this.ga.unbind(f.ht, this.Gr, this);
            this.ga.unbind(f.gO, this.L6, this);
            this.oa.unbind(d.Cfa, this.Zc, this);
            this.oa.unbind(d.ih, this.Cl, this);
            this.Jl.unbind(j.La, this.Zc, this);
            this.Jl.unbind(j.nO, this.i7, this);
            this.Vm.unbind(p.jh, this.KC, this);
            this.C = this.g = this.Vm = this.Jl = this.ga = this.oa = this.ge = this.ee = r
        };
        l.prototype.RJ = function () {
            if (this.dK) {
                this.Gea(this.dK);
                this.dK = r
            }
        };
        l.prototype.Gea = function (a) {
            this.g.set("visible",
                n);
            if (this.C.vr)
                this.ee.tda(a);
            else {
                this.ee.stop();
                this.oa.stop();
                this.ga.hide();
                this.dK = a
            }
        };
        l.prototype.cq = function () {
            this.ee.stop();
            this.oa.stop();
            this.ga.hide()
        };
        l.prototype.fh = function (a) {
            this.oa.fh(a)
        };
        l.prototype.fq = function (a) {
            if (!this.i4) {
                this.oa.fq(a);
                this.Jl.fq(a);
                this.Vm.fq(a)
            }
        };
        l.prototype.Kj = function (a, b, c, d) {
            this.oa.Kj(a, b, c, d);
            this.Jl.Kj(a, b, c, d);
            this.Vm.Kj(a, b, c, d)
        };
        l.prototype.s7 = function (a) {
            var b = a.data.level,
            a = (a.data.percent + 100 * b.getIndex()) / b.Vba();
            this.trigger(new e(l.wm, {
                    percent: a
                }))
        };
        l.prototype.r7 = function (a) {
            this.g.set("visible", n);
            a = a.data.level;
            this.oa.stop();
            this.ga.XE(a)
        };
        l.prototype.vC = function () {
            this.trigger(new e(l.ft))
        };
        l.prototype.Zc = function () {
            this.ge.Ma()
        };
        l.prototype.Lr = function (a) {
            this.oa.Yp(a.data.frameTime)
        };
        l.prototype.Mr = function (a) {
            a = a.data.frameTime;
            this.ga.dc(a);
            this.oa.dc(a);
            this.Jl.dc(a)
        };
        l.prototype.p7 = function (a) {
            a = a.data.level;
            this.Jl.XE(a);
            this.Vm.XE(a)
        };
        l.prototype.t7 = function (a) {
            a = a.data.level;
            this.Jl.QY(a);
            this.Vm.QY(a)
        };
        l.prototype.q7 = function (a) {
            a =
                a.data.level;
            a.rF() && this.oa.start(a)
        };
        l.prototype.L6 = function () {
            this.g.set("visible", y)
        };
        l.prototype.i7 = function (a) {
            a = a.data.inFOV;
            this.oa.NF(a);
            this.Vm.NF(a)
        };
        l.prototype.Gr = function (a) {
            this.trigger(new e(l.ht, {
                    map: a.data.map
                }))
        };
        l.prototype.$o = function (a) {
            this.trigger(new e(l.gt, {
                    map: a.data.map
                }))
        };
        l.prototype.Cl = function (a) {
            this.trigger(new e(l.ih, a.data))
        };
        l.prototype.KC = function (a) {
            this.trigger(new e(l.jh, {
                    yawDelta: a.data.yawDelta
                }))
        };
        l.ih = "movementChange";
        l.ft = "loadingEnd";
        l.wm = "loadingProgress";
        l.ht = "mapShow";
        l.gt = "mapHide";
        l.jh = "requestYawChange";
        return l
    });
    define("fN", ["require", "jquery.mod", "r"], function (a) {
        function b(a, b) {
            this.Y = a;
            this.Q = b;
            this.YB = 0;
            this.an = this.$m = 0.5;
            this.ie = 0;
            this.Bb = 1;
            this.Ap = this.So = this.ia = this.X = 0;
            this.rb = 1;
            this.hT = this.kT = n;
            this.K = c("<canvas/>");
            this.u = this.K.get(0);
            this.ka = this.u.getContext("2d")
        }
        var c = a("jquery.mod"),
        a = a("r");
        b.prototype.getItem = Q("Y");
        b.prototype.ZE = function (a) {
            return this.Y == a ? this : r
        };
        b.prototype.sM = function (a) {
            return this.Y == a ? [this] : []
        };
        b.prototype.Fk = function () {
            this.Q && this.Q.ZX(this)
        };
        b.prototype.xd =
        function (a) {
            this.Yqa(a)
        };
        b.prototype.Y9 = function (a) {
            this.YB != a && (this.YB = a, this.Q && this.Q.YM())
        };
        b.prototype.Yqa = function (a) {
            this.Bb != a && (this.Bb = a, this.XM())
        };
        b.prototype.XK = function (a) {
            this.ie != a && (this.ie = a, this.XM())
        };
        b.prototype.FD = function (a, b) {
            if (this.X != a || this.ia != b)
                this.X = a, this.ia = b, this.UM()
        };
        b.prototype.qi = function (a, b) {
            if (this.So != a || this.Ap != b)
                this.So = a, this.Ap = b, this.XM()
        };
        b.prototype.XM = function () {
            this.Q && this.Q.VM()
        };
        b.prototype.Dc = function () {
            this.kT = n
        };
        b.prototype.ja = function () {
            this.kT &&
            (this.kT = y, this.Oe())
        };
        b.prototype.Oe = D();
        b.prototype.UM = function () {
            this.hT = n;
            this.XM()
        };
        b.prototype.IN = function () {
            if (this.hT) {
                this.hT = y;
                if (this.u.width != this.X || this.u.height != this.ia)
                    this.u.width = Math.round(this.X), this.u.height = Math.round(this.ia);
                this.ka.clearRect(0, 0, this.u.width, this.u.height);
                this.vg()
            }
        };
        b.prototype.vg = D();
        b.prototype.Rua = function (a) {
            if (0 < this.Bb && 1 <= this.X && 1 <= this.ia) {
                a.save();
                var b = Math.round(this.So),
                c = Math.round(this.Ap),
                f = Math.round(this.X * this.$m),
                h = Math.round(this.ia *
                        this.an);
                a.scale(this.rb, this.rb);
                a.translate(b + f, c + h);
                a.rotate(this.ie * Math.PI / 180);
                a.globalAlpha = this.Bb;
                a.drawImage(this.u, -f, -h);
                a.restore()
            }
        };
        b.i0 = window.devicePixelRatio || 1;
        b.eh = b.i0;
        b.Vfa = a.Rd() == a.Lh ? 16E6 : 256E6;
        return b
    });
    define("jP", ["require", "do", "fg", "fN"], function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("fN"),
        a = c.extend(e, function (a, b) {
            e.call(this, a, b);
            this.qb = [];
            this.$L = r;
            this.Gp = n
        });
        a.prototype.lba = function (a) {
            (a = this.SQ(a)) || i("Container renderer can't create child renderer for an item");
            this.qb.push(a);
            this.YM();
            this.VM()
        };
        a.prototype.SQ = D();
        a.prototype.Yda = function (a) {
            if (a = this.yn(a))
                this.qb = b.without(this.qb, a), this.YM(), this.VM()
        };
        a.prototype.ZE = function (a) {
            for (var b = e.prototype.ZE.call(this, a), c = 0; c < this.qb.length &&
                !b; c++)
                b = this.qb[c].ZE(a);
            return b
        };
        a.prototype.sM = function (a) {
            for (var b = e.prototype.sM.call(this, a), c = 0; c < this.qb.length; c++)
                b = b.concat(this.qb[c].sM(a));
            return b
        };
        a.prototype.yn = function (a) {
            for (var b = r, c = 0; c < this.qb.length && !b; c++)
                this.qb[c].getItem() == a && (b = this.qb[c]);
            for (c = 0; c < this.qb.length && !b; c++)
                this.qb[c].getItem().gwa(a) && (b = this.qb[c]);
            return b
        };
        a.prototype.ZX = function (a) {
            this.qb = b.without(this.qb, a);
            this.qb.push(a);
            this.YM();
            this.VM()
        };
        a.prototype.YM = function () {
            this.Gp = n;
            this.Dc()
        };
        a.prototype.VM =
        function () {
            this.UM()
        };
        a.prototype.ja = function () {
            e.prototype.ja.call(this);
            for (var a = 0; a < this.qb.length; a++)
                this.qb[a].ja()
        };
        a.prototype.Oe = function () {
            if (this.Gp) {
                this.Gp = y;
                for (var a = [], b = 0; b < this.qb.length; b++) {
                    var c = this.qb[b];
                    a.push({
                        l: c.YB,
                        z: b,
                        r: c
                    })
                }
                a.sort(function (a, b) {
                    return a.l == b.l ? a.z - b.z : a.l - b.l
                });
                this.$L = [];
                for (b = 0; b < a.length; b++)
                    this.$L.push(a[b].r);
                this.UM()
            }
            e.prototype.Oe.call(this)
        };
        a.prototype.IN = function () {
            for (var a = 0; a < this.qb.length; a++)
                this.qb[a].IN();
            e.prototype.IN.call(this)
        };
        a.prototype.vg = function () {
            for (var a = 0; a < this.$L.length; a++)
                this.$L[a].Rua(this.ka);
            e.prototype.vg.call(this)
        };
        return a
    });
    define("H", ["require", "fg", "fN"], function (a) {
        var b = a("fg"),
        c = a("fN"),
        a = b.extend(c, function (a, b) {
            c.call(this, a, b)
        });
        a.prototype.wN = D();
        return a
    });
    define("jp", ["require", "fg", "H"], function (a) {
        var b = a("fg"),
        c = a("H"),
        a = b.extend(c, function (a, b) {
            c.call(this, a, b);
            this.cK = this.Q.getItem().ad();
            this.bK = this.Q.getItem().Pd();
            this.rb = 2;
            this.Dx = 0;
            this.ba = 0.5 * Math.PI;
            this.iT = this.jT = n;
            this.bi = 1;
            this.OI = n;
            this.Y9(1)
        });
        a.prototype.wN = function (a, b) {
            this.bi != b && (this.bi = b, this.OI = n, this.Dc())
        };
        a.prototype.oya = function (a, b) {
            this.ba != b && (this.ba = b, this.jT = n, this.Dc());
            this.Dx != a && (this.Dx = a, this.iT = n, this.Dc())
        };
        a.prototype.Oe = function () {
            this.jT && (this.jT = y,
                this.UM());
            if (this.OI || this.iT) {
                this.iT = this.OI = y;
                this.rb = Math.max(1, Math.ceil(Math.sqrt(this.cK * this.cK + this.bK * this.bK)) / 4096);
                var a = this.bi / this.rb,
                b = this.Y.getX() * a,
                d = this.Y.getY() * a,
                f = a * this.bK,
                a = Math.max(b, a * this.cK - b),
                f = Math.max(d, f - d),
                f = 2 * Math.ceil(Math.sqrt(a * a + f * f)),
                h = this.Dx * Math.PI / 180,
                a = Math.cos(h),
                h = Math.sin(h),
                b = b - this.$m * f - (0.5 - this.$m) * f * a + (0.5 - this.an) * f * h,
                d = d - this.an * f - (0.5 - this.an) * f * a - (0.5 - this.$m) * f * h;
                this.OI = y;
                this.qi(b, d);
                this.FD(f, f);
                this.XK(this.Dx)
            }
            c.prototype.Oe.call(this)
        };
        a.prototype.vg = function () {
            var a = this.Y.Jma,
            b = this.Y.Soa;
            if (0 < b || 0 < a) {
                var d = this.bi * this.cK,
                f = this.bi * this.bK,
                d = Math.ceil(Math.sqrt(d * d + f * f)) * this.Y.Xv() / this.rb,
                f = Math.round(0.5 * this.X),
                h = Math.round(0.5 * this.ia),
                j = this.ba * Math.PI / 180,
                p = 0.5 * -j,
                j = p + j;
                0 < b && (this.ka.fillStyle = this.Y.Roa, this.ka.globalAlpha = b, this.ka.rect(0, 0, this.X, this.ia), this.ka.fill(), this.ka.globalCompositeOperation = "destination-out", this.ka.fillStyle = "#FFFFFF", this.ka.globalAlpha = 1, this.ka.beginPath(), this.ka.moveTo(f, h), this.ka.arc(f,
                        h, d, p, j, y), this.ka.lineTo(f, h), this.ka.closePath(), this.ka.fill(), this.ka.globalCompositeOperation = "source-over");
                0 < a && (this.ka.fillStyle = this.Y.Ima, this.ka.globalAlpha = a, this.ka.beginPath(), this.ka.moveTo(f, h), this.ka.arc(f, h, d, p, j, y), this.ka.lineTo(f, h), this.ka.closePath(), this.ka.fill())
            }
            c.prototype.vg.call(this)
        };
        return a
    });
    define("i", "require,fg,fN,H,iG,jJ".split(","), function (a) {
        var b = a("fg"),
        c = a("fN"),
        e = a("H"),
        g = a("iG"),
        d = a("jJ"),
        a = b.extend(e, function (a, b) {
            e.call(this, a, b);
            this.Y9(this.Y.A9 ? 0 : 2);
            this.Ab = g.we(this.Y.Dj());
            this.OK = new d(this.Ab, this.Ab.width, this.Ab.height);
            this.OK.Xs(this.Y.Ed);
            this.OK.Yz(this.Y.ti);
            this.OK.Uz(this.Y.Zh);
            this.bC = 0;
            this.bi = 1;
            this.PT = n
        });
        a.prototype.wN = function (a, b) {
            if (this.bC != a || this.bi != b) {
                this.bC = a;
                this.bi = b;
                this.PT = n;
                this.Dc()
            }
        };
        a.prototype.Oe = function () {
            if (this.PT) {
                this.PT = y;
                var a =
                    this.Y.getX(),
                b = this.Y.getY(),
                d = this.Y.ad(),
                g = this.Y.Pd(),
                k = this.Y.Fu,
                l = this.Y.Gu;
                if (this.Y.A9) {
                    this.XK(0);
                    this.qi((a - k) * this.bi, (b - l) * this.bi);
                    this.FD(d * this.bi, g * this.bi)
                } else {
                    var d = d * c.eh,
                    g = g * c.eh,
                    k = k * c.eh,
                    l = l * c.eh,
                    q = Math.cos(-this.bC * Math.PI / 180),
                    o = Math.sin(-this.bC * Math.PI / 180),
                    a = a * this.bi - this.$m * d - (k - this.$m * d) * q + (l - this.an * g) * o,
                    b = b * this.bi - this.an * g - (l - this.an * g) * q - (k - this.$m * d) * o;
                    this.XK(-this.bC);
                    this.qi(a, b);
                    this.FD(d, g)
                }
            }
            e.prototype.Oe.call(this)
        };
        a.prototype.vg = function () {
            this.OK.pz(this.ka,
                this.u.width, this.u.height);
            e.prototype.vg.call(this)
        };
        return a
    });
    define("gq", "require,fg,jn,iG,cD,hC,jp,i,jP".split(","), function (a) {
        var b = a("fg"),
        c = a("jn"),
        e = a("iG"),
        g = a("cD"),
        d = a("hC"),
        f = a("jp"),
        h = a("i"),
        j = a("jP"),
        a = b.extend(j, function (a, b) {
            j.call(this, a, b, a.qk);
            this.Oa = this.Y.ad();
            this.Ya = this.Y.Pd();
            this.Ed = this.Y.Ed;
            this.fI = this.Y.VR;
            this.hc = this.cc = 100;
            this.KQ = n;
            this.fa = this.da = 0.5;
            this.Mb = 0;
            this.ta = 1;
            this.hD = n;
            this.sd = 1;
            this.Ab = e.we(this.Y.Dj())
        });
        a.prototype.SQ = function (a) {
            a.wd() != g.j1 && i("Invalid item type");
            switch (a.Uoa) {
            case d.g1:
                a = new f(a, this);
                break;
            case d.h1:
                a = new h(a, this);
                break;
            default:
                a = r
            }
            a && a.wN(this.Mb, this.sd * this.ta);
            return a
        };
        a.prototype.getX = Q("da");
        a.prototype.getY = Q("fa");
        a.prototype.rz = Q("Mb");
        a.prototype.lm = Q("ta");
        a.prototype.Aa = function () {
            return Math.round(this.Oa * this.ta * this.sd)
        };
        a.prototype.eb = function () {
            return Math.round(this.Ya * this.ta * this.sd)
        };
        a.prototype.qw = function (a, b) {
            if (this.cc != a || this.hc != b) {
                this.cc = a;
                this.hc = b;
                this.KQ = n;
                this.Dc()
            }
        };
        a.prototype.Ka = function (a, b, c, d) {
            if (this.da != a || this.fa != b || this.Mb != c || this.ta !=
                d) {
                this.da = a;
                this.fa = b;
                this.Mb = c;
                this.ta = d;
                this.hD = n;
                this.Dc()
            }
        };
        a.prototype.Oe = function () {
            if (this.KQ) {
                this.KQ = y;
                switch (this.Ed) {
                case c.NONE:
                    this.sd = 1;
                    break;
                case c.Zk:
                    this.sd = this.cc / this.Oa;
                    break;
                case c.kh:
                    this.sd = this.hc / this.Ya;
                    break;
                case c.xm:
                    this.sd = this.Oa * this.hc > this.Ya * this.cc ? this.hc / this.Ya : this.cc / this.Oa;
                    break;
                default:
                    this.sd = this.Oa * this.hc > this.Ya * this.cc ? this.cc / this.Oa : this.hc / this.Ya
                }
                this.hD = n
            }
            if (this.hD) {
                this.hD = y;
                var a = this.Aa(),
                b = this.eb(),
                d = Math.cos(this.Mb * Math.PI / 180),
                e = Math.sin(this.Mb *
                        Math.PI / 180);
                this.qi(this.cc * 0.5 - this.$m * a + (this.$m - this.da) * d * a - (this.an - this.fa) * e * b, this.hc * 0.5 - this.an * b + (this.an - this.fa) * d * b + (this.$m - this.da) * e * a);
                this.XK(this.Mb);
                this.FD(a, b);
                for (a = 0; a < this.qb.length; a++)
                    this.qb[a].wN(this.Mb, this.sd * this.ta)
            }
            j.prototype.Oe.call(this)
        };
        a.prototype.vg = function () {
            var a = Math.round(this.X),
            b = Math.round(this.ia);
            if (this.fI) {
                this.ka.save();
                this.ka.translate(a, 0);
                this.ka.scale(-1, 1);
                this.ka.drawImage(this.Ab, 0, 0, a, b);
                this.ka.restore()
            } else
                this.ka.drawImage(this.Ab,
                    0, 0, a, b);
            j.prototype.vg.call(this)
        };
        return a
    });
    define("fq", "require,do,fg,cD,jP,gq".split(","), function (a) {
        a("do");
        var b = a("fg"),
        c = a("cD"),
        e = a("jP"),
        g = a("gq"),
        a = b.extend(e, function () {
            e.call(this, r, r);
            this.vQ = n
        });
        a.prototype.Gb = Q("K");
        a.prototype.render = function () {
            this.ja();
            this.IN()
        };
        a.prototype.Hva = function () {
            for (var a = 1, b = 0; b < this.qb.length; b++) {
                var c = this.qb[b],
                c = c.Aa() * c.eb();
                a < c && (a = c)
            }
            return a
        };
        a.prototype.SQ = function (a) {
            a.wd() != c.i1 && i("Invalid item type");
            a = new g(a, this);
            a.qw(this.X, this.ia);
            a.Ka(0.5, 0.5, 0, 1);
            return a
        };
        a.prototype.setSize =
        function (a, b) {
            this.FD(a, b);
            this.vQ = n;
            this.Dc()
        };
        a.prototype.Oe = function () {
            if (this.vQ) {
                this.vQ = y;
                for (var a = 0; a < this.qb.length; a++)
                    this.qb[a].qw(this.X, this.ia)
            }
            e.prototype.Oe.call(this)
        };
        return a
    });
    define("ib", "require,do,fg,ll,ge,iG,fN,fq,bi,R,d".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("ge"),
        d = a("iG"),
        f = a("fN"),
        h = a("fq"),
        j = a("bi"),
        p = a("R"),
        k = a("d"),
        a = c.extend(k, function () {
            k.call(this);
            this.Tc("Renderer");
            this.set("toolTipDisabled", n);
            this.set("cursor", p.qq);
            this.Zq = [];
            this.qv = [];
            this.ya = "";
            this.yf = new h;
            this.Ra().append(this.yf.Gb());
            this.bind(e.yb, this.kb, this, n);
            this.bind(e.od, this.wh, this, n);
            this.bind(e.zd, this.th, this, n);
            j.bind(e.aa, this.iX, this, n);
            this.fv = this.wV =
                y
        });
        a.prototype.Mn = function (a) {
            d.Mn(a, g.Uj)
        };
        a.prototype.FN = function (a) {
            return d.FN(a)
        };
        a.prototype.Fi = function (a) {
            d.Fi(a, g.Uj)
        };
        a.prototype.UX = function (a) {
            this.yf.lba(a)
        };
        a.prototype.removeItem = function (a) {
            this.yf.Yda(a)
        };
        a.prototype.bM = function (a, b) {
            this.yf.yn(a).lba(b);
            this.gX()
        };
        a.prototype.Hxa = function (a, b) {
            var c = this.yf.yn(a);
            c && c.Yda(b)
        };
        a.prototype.$X = function (a) {
            this.yf.ZE(a).Fk()
        };
        a.prototype.qm = function (a, b) {
            this.yf.sM(a).forEach(function (a) {
                a.xd(b)
            })
        };
        a.prototype.OF = function (a, b, c, d, e) {
            this.yf.yn(a).Ka(b,
                c, d, e);
            this.gX()
        };
        a.prototype.gX = function () {
            var a = this.yf.Hva();
            if (a) {
                f.eh = Math.min(f.i0, f.eh * Math.sqrt(f.Vfa / a));
                this.Gaa()
            }
        };
        a.prototype.Aya = function (a, b, c) {
            this.yf.ZE(a).oya(b, c)
        };
        a.prototype.iF = function (a) {
            return this.yf.yn(a).getX()
        };
        a.prototype.jF = function (a) {
            return this.yf.yn(a).getY()
        };
        a.prototype.DM = function (a) {
            return this.yf.yn(a).rz()
        };
        a.prototype.dca = function (a) {
            return this.yf.yn(a).lm()
        };
        a.prototype.hF = function (a) {
            return this.yf.yn(a).Aa() / f.eh
        };
        a.prototype.gF = function (a) {
            return this.yf.yn(a).eb() /
            f.eh
        };
        a.prototype.render = function () {
            this.fv && this.yf.render()
        };
        a.prototype.lN = function (a) {
            this.Zq.push(a);
            this.Baa()
        };
        a.prototype.Lz = function (a) {
            a = b(this.Zq).lastIndexOf(a);
            a >= 0 && this.Zq.splice(a, 1);
            this.Baa()
        };
        a.prototype.Baa = function () {
            var a;
            a = this.Zq.length > 0 ? this.Zq[this.Zq.length - 1] : p.dd;
            this.getParent().set("cursor", a)
        };
        a.prototype.CH = function () {
            if (this.Zq.length > 0) {
                this.getParent().set("cursor", p.dd);
                this.Zq = []
            }
        };
        a.prototype.Axa = function (a) {
            this.qv.push(a);
            this.tE()
        };
        a.prototype.txa = function (a) {
            a =
                b(this.qv).lastIndexOf(a);
            a >= 0 && this.qv.splice(a, 1);
            this.tE()
        };
        a.prototype.tE = function () {
            var a = this.qv.length == 0 ? "" : this.qv[this.qv.length - 1] || "";
            if (this.ya != a) {
                this.ya = a;
                this.getParent().set("toolTip", this.ya)
            }
        };
        a.prototype.Via = function () {
            this.ya && this.getParent().set("toolTip", "");
            this.ya = "";
            this.qv = []
        };
        a.prototype.qj = function () {
            this.Via();
            this.CH();
            k.prototype.qj.call(this)
        };
        a.prototype.kb = function () {
            this.Gaa();
            this.gX()
        };
        a.prototype.Gaa = function () {
            this.yf.Gb().css({
                transform: f.eh != 1 ? "scale(" +
                (1 / f.eh).toFixed(3) + ")" : "none",
                "transform-origin": "0% 0%"
            });
            this.yf.setSize(this.Aa() * f.eh, this.eb() * f.eh);
            this.render()
        };
        a.prototype.wh = function () {
            this.wV = n;
            this.iX()
        };
        a.prototype.th = function () {
            this.wV = y;
            this.iX()
        };
        a.prototype.iX = function () {
            var a = this.wV && !j.isPresenting();
            if (this.fv != a)
                (this.fv = a) && this.render()
        };
        return a
    });
    define("I", "do,fg,jd,bZ,dW,jT,cu,dk,jm,hr,ib,ll,dm,fm".split(","), function (a, b, c, e, g, d, f, h, j, p, k, l, q, o) {
        var t = b.extend(f, function () {
            f.call(this, "map");
            this.uJ = this.OT = this.Df = y;
            this.kj = this.Kb = this.o = this.g = r;
            this.Jq = {};
            for (var a in t.ho)
                this.Jq[a] = this.oja(a);
            this.Ac = b.nm(this.Oe, this)
        });
        g.A("MapPlayer", t).B("Object").J({
            map: "Map",
            viewerArea: "ViewerArea",
            movementMode: "enum[constrained, free_drag, free_drag_and_rotation, sync_with_field_of_view]",
            buttonZoomIn: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonZoomOut: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRotateClockwise: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRotateCounterClockwise: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]"
        }).Xb([l.EG]).Cg({
            stop: function () {
                this.Cb(p.pe)
            },
            rotateClockwise: function () {
                this.Cb(p.cP)
            },
            rotateCounterClockwise: function () {
                this.Cb(p.dP)
            },
            zoomIn: function () {
                this.Cb(p.eo)
            },
            zoomOut: function () {
                this.Cb(p.fo)
            }
        });
        t.prototype.set = function (a,
            b) {
            if (this.get(a) != b) {
                switch (a) {
                case "map":
                    this.OT = n;
                    this.Ac();
                    break;
                case "viewerArea":
                    this.Df = n;
                    this.Ac();
                    break;
                case "panoramaMapLocation":
                    this.HU = n;
                    this.Ac();
                    break;
                case "movementMode":
                    this.uJ = n;
                    this.Ac()
                }
                f.prototype.set.call(this, a, b)
            }
        };
        t.prototype.oja = function (a) {
            var b = t.ho[a],
            a = new d(this, a, q.Wc);
            a.bind(l.Hb, function () {
                this.Cb(b.movement)
            }, this);
            b.stopOnRelease && a.bind(l.fc, function () {
                this.Cb(p.pe)
            }, this);
            return a
        };
        t.prototype.fua = function (a) {
            this.kj = r;
            this.set("map", a.get("map"));
            this.set("panoramaMapLocation",
                a)
        };
        t.prototype.Lxa = function (a) {
            if (this.get("panoramaMapLocation") == a) {
                this.set("panoramaMapLocation", r);
                this.kj = r
            }
        };
        t.prototype.Kj = function (a, b, c, d) {
            this.o && this.o.Kj(a, b, c, d);
            this.kj = {
                yaw: b,
                pitch: c,
                hfov: d
            }
        };
        t.prototype.Oe = function () {
            if (this.Df) {
                this.Df = y;
                this.Ao();
                this.get("viewerArea") && this.xo();
                this.HD(this.get("viewerArea"))
            }
            if (this.o) {
                if (this.OT) {
                    this.OT = y;
                    var a = this.get("map");
                    if (a) {
                        this.tD();
                        this.o.Gea(a)
                    } else
                        this.o.cq();
                    this.HU = this.uJ = n
                }
                if (this.HU) {
                    this.HU = y;
                    a = this.get("panoramaMapLocation");
                    this.o.fq(a);
                    a && this.kj && this.o.Kj(a, this.kj.yaw, this.kj.pitch, this.kj.hfov)
                }
                if (this.uJ) {
                    this.uJ = y;
                    this.o.tm(this.get("movementMode"))
                }
            }
        };
        t.prototype.Ty = function () {
            this.set("map", r)
        };
        t.prototype.xo = function () {
            var a = this.get("viewerArea");
            this.g = new k;
            this.g.M({
                left: 0,
                top: 0,
                bottom: 0,
                right: 0
            });
            a.la(this.g);
            this.o = new j(a, this.g);
            this.o.bind(j.ih, this.Cl, this);
            this.o.bind(j.wm, this.Zo, this);
            this.o.bind(j.ft, this.ly, this);
            this.o.bind(j.ht, this.Gr, this);
            this.o.bind(j.gt, this.$o, this);
            this.o.bind(j.jh,
                this.KC, this, n)
        };
        t.prototype.Ao = function () {
            if (this.g) {
                this.o.unbind(j.ih, this.Cl, this);
                this.o.unbind(j.wm, this.Zo, this);
                this.o.unbind(j.ft, this.ly, this);
                this.o.unbind(j.ht, this.Gr, this);
                this.o.unbind(j.gt, this.$o, this);
                this.o.unbind(j.jh, this.KC, this);
                this.o.clear();
                this.g.getParent().removeChild(this.g);
                this.g = r
            }
        };
        t.prototype.Gr = function (a) {
            this.iC(a.data.map)
        };
        t.prototype.$o = function (a) {
            this.hC(a.data.map)
        };
        t.prototype.Cl = function (a) {
            for (var b in t.ho)
                this.Jq[b].set("state", a.data[t.ho[b].pressedOn] ?
                    o.Ca : o.dd);
            this.trigger(new e(l.EG, a.data))
        };
        t.prototype.KC = function (a) {
            this.trigger(new e(t.jh, {
                    yawDelta: a.data.yawDelta
                }))
        };
        t.prototype.Zo = function (a) {
            this.g.getParent().M({
                progressPercent: a.data.percent,
                progressVisible: n
            })
        };
        t.prototype.ly = function () {
            this.g.getParent().set("progressVisible", y)
        };
        t.prototype.Cb = function (a) {
            this.o && this.o.fh(a)
        };
        t.ho = {
            buttonRotateClockwise: {
                movement: p.cP,
                pressedOn: "rotatingClockwise",
                stopOnRelease: n
            },
            buttonRotateCounterClockwise: {
                movement: p.dP,
                pressedOn: "rotatingCounterClockwise",
                stopOnRelease: n
            },
            buttonZoomIn: {
                movement: p.eo,
                pressedOn: "zoomingIn",
                stopOnRelease: n
            },
            buttonZoomOut: {
                movement: p.fo,
                pressedOn: "zoomingOut",
                stopOnRelease: n
            }
        };
        t.jh = "requestYawChange";
        return t
    });
    define("dl", ["fg", "jd", "ll", "bZ", "dW"], function (a, b, c, e, g) {
        a = a.extend(b, function () {
            b.call(this);
            this.pg = y
        });
        g.A("PlayListItem", a).B("Object").J({
            media: "Media",
            label: "string"
        }).Xb([c.lh, c.Sk, c.pe, c.Ba]);
        a.prototype.start = function () {
            this.trigger(new e(c.lh))
        };
        a.prototype.stop = function () {
            this.aG()
        };
        a.prototype.aG = function () {
            this.trigger(new e(c.pe))
        };
        a.prototype.Iv = function () {
            this.pg = n;
            this.trigger(new e(c.Sk))
        };
        a.prototype.end = function () {
            this.pg = y;
            this.trigger(new e(c.Ba))
        };
        return a
    });
    define("lG", ["fg", "dW", "cu", "dl"], function (a, b, c, e) {
        a = a.extend(e, function () {
            e.call(this)
        });
        b.A("MapPlayListItem", a).B("PlayListItem").J({
            media: "Map",
            player: "MapPlayer"
        });
        a.prototype.start = function () {
            e.prototype.start.call(this);
            var a = this.get("player");
            a && (a.bind(c.ne, this.Gr, this), a.set("map", this.get("media")))
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            a && a.get("map") == this.get("media") && a.set("map", r);
            e.prototype.stop.call(this)
        };
        a.prototype.Gr = function () {
            this.get("player").unbind(c.ne,
                this.Gr, this);
            this.get("player").bind(c.dg, this.$o, this);
            this.Iv();
            this.get("player").get("map") != this.get("media") && this.$o()
        };
        a.prototype.$o = function () {
            this.get("player").unbind(c.dg, this.$o, this);
            this.end()
        };
        return a
    });
    define("bE", ["require", "fg", "dW", "du"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("du"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("Model3D", a).B("Media").J({
            model: "Model3DResource",
            autoplay: "bool"
        });
        a.prototype.In = function () {
            return []
        };
        return a
    });
    define("dJ", ["require", "fg", "V", "bZ", "eO"], function (a) {
        var b = a("fg"),
        c = a("V"),
        e = a("bZ"),
        g = a("eO"),
        d = b.extend(g, function (a, b) {
            g.call(this);
            this.C = a;
            this.g = b;
            this.Tu = [];
            this.T = d.pf;
            this.jg = this.lg = r;
            this.ve = this.Me = m
        });
        d.prototype.display = function (a) {
            this.CQ();
            if (this.jg != a || this.T != d.pf)
                this.Tu.push(a), this.I7()
        };
        d.prototype.hide = function () {
            this.CQ();
            this.Tu.push(r);
            this.I7()
        };
        d.prototype.clear = function () {
            this.T = d.pf;
            this.CQ();
            this.Fpa();
            this.g9();
            this.g = r
        };
        d.prototype.Bi = function (a) {
            if (this.T != d.pf &&
                (this.T == d.Wj || this.T == d.Aq || this.T == d.Dt))
                this.ve += a, a = Math.min(1, this.ve / this.Me), this.T == d.Wj ? this.lg.set("opacity", a) : this.T == d.Dt ? (this.lg.set("opacity", Math.min(1, 2 * a)), this.jg.set("opacity", Math.min(1, 2 * (1 - a)))) : this.jg.set("opacity", 1 - a), this.ve < this.Me ? this.ea() : this.br()
        };
        d.prototype.I7 = function () {
            0 < this.Tu.length && this.T == d.pf && this.il()
        };
        d.prototype.il = function () {
            this.jg && this.trigger(new e(d.it, {
                    model: this.jg
                }));
            "fade_out_fade_in" == this.C.get("transitionMode", "blending") && this.jg ? this.Fq() :
            (this.lg = this.Tu.shift()) ? this.jg ? this.eQ() : this.LA() : this.jg && this.Fq()
        };
        d.prototype.LA = function () {
            this.c2();
            this.ve = 0;
            this.Me = this.C.get("transitionDuration");
            this.T = d.Wj;
            this.ea()
        };
        d.prototype.eQ = function () {
            this.c2();
            this.ve = 0;
            this.Me = 2 * this.C.get("transitionDuration");
            this.T = d.Dt;
            this.ea()
        };
        d.prototype.Fq = function () {
            this.lg = r;
            this.ve = 0;
            this.Me = this.C.get("transitionDuration");
            this.T = d.Aq;
            this.ea()
        };
        d.prototype.br = function () {
            this.g9();
            this.jg = this.lg;
            this.lg = r;
            this.T = d.pf;
            this.jg ? this.trigger(new e(d.jt, {
                    model: this.jg
                })) : 0 == this.Tu.length && this.trigger(new e(d.O_));
            0 != this.Tu.length && this.il()
        };
        d.prototype.ea = function () {
            c.Ma(this.Bi, this)
        };
        d.prototype.CQ = function () {
            this.Tu = []
        };
        d.prototype.c2 = function () {
            this.lg && (this.lg.set("opacity", 0), this.lg.set("zIndex", 1), this.jg && this.jg.set("zIndex", 0), this.lg.set("currentTime", 0), this.g.eua(this.lg), this.trigger(new e(d.vO, {
                        model: this.lg
                    })))
        };
        d.prototype.g9 = function () {
            this.jg && (this.g.aea(this.jg), this.trigger(new e(d.rG, {
                        model: this.jg
                    })), this.jg = r)
        };
        d.prototype.Fpa =
        function () {
            this.lg && (this.g.aea(this.lg), this.trigger(new e(d.rG, {
                        model: this.lg
                    })), this.lg = r)
        };
        d.pf = "stopped";
        d.Wj = "blending";
        d.Dt = "double blending";
        d.Aq = "disolving";
        d.La = "request frame";
        d.vO = "model added";
        d.rG = "model removed";
        d.jt = "model show";
        d.it = "model hide";
        d.O_ = "all pending models hidden";
        return d
    });
    define("hv", "require,fg,ll,bZ,eO,fu".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("fu"),
        f = b.extend(g, function () {
            g.call(this);
            this.Ud = r;
            this.Zt = d.H
        });
        f.prototype.start = function (a) {
            this.end();
            this.Jqa(a)
        };
        f.prototype.end = function () {
            this.stop();
            this.xQ()
        };
        f.prototype.clear = function () {
            this.xQ()
        };
        f.prototype.play = function () {
            this.Ud && this.Ud.set("state", d.P)
        };
        f.prototype.pause = function () {
            this.Ud && this.Ud.set("state", d.mc)
        };
        f.prototype.stop = function () {
            this.Ud && this.Ud.set("state",
                d.H)
        };
        f.prototype.setTime = function (a) {
            this.Ud && this.Ud.set("currentTime", a)
        };
        f.prototype.getTime = function () {
            if (this.Ud)
                return this.Ud.get("currentTime")
        };
        f.prototype.Jqa = function (a) {
            this.xQ();
            this.Ud = a;
            this.Ud.bind(c.D("state"), this.up, this, n);
            this.Ud.bind(c.D("currentTime"), this.Cu, this, n);
            this.Ud.bind(c.Ba, this.r6, this, n)
        };
        f.prototype.xQ = function () {
            if (this.Ud) {
                this.Ud.unbind(c.D("state"), this.up, this);
                this.Ud.unbind(c.D("currentTime"), this.Cu, this);
                this.Ud.unbind(c.Ba, this.r6, this);
                this.Ud = r
            }
        };
        f.prototype.Cu = function () {
            this.trigger(new e(f.kt, {
                    model: this.Ud,
                    time: this.Ud.get("currentTime"),
                    duration: this.Ud.get("duration")
                }))
        };
        f.prototype.r6 = function () {
            this.trigger(new e(f.lA, {
                    model: this.Ud
                }))
        };
        f.prototype.up = function () {
            var a = this.Ud.get("state");
            if (this.Zt != a) {
                this.Zt = a;
                this.trigger(new e(f.vb, {
                        state: this.Zt
                    }))
            }
        };
        f.vb = "playback state change";
        f.lA = "model end";
        f.kt = "model time change";
        return f
    });
    define("de", "require,fg,fu,bZ,eO,dJ,hv".split(","), function (a) {
        var b = a("fg"),
        c = a("fu"),
        e = a("bZ"),
        g = a("eO"),
        d = a("dJ"),
        f = a("hv"),
        h = b.extend(g, function (a, b) {
            g.call(this);
            this.C = a;
            this.g = b;
            this.g.set("visible", y);
            this.ga = new d(this.C, this.g);
            this.ca = new f(this.g);
            this.ga.bind(d.it, this.Hr, this, n);
            this.ga.bind(d.jt, this.ap, this, n);
            this.ga.bind(d.vO, this.B7, this, n);
            this.ga.bind(d.rG, this.D7, this, n);
            this.ga.bind(d.O_, this.Fna, this, n);
            this.ca.bind(f.vb, this.gd, this, n);
            this.ca.bind(f.lA, this.C7, this, n);
            this.ca.bind(f.kt,
                this.yC, this, n)
        });
        h.prototype.clear = function () {
            this.ga.clear();
            this.ca.clear();
            this.ga.unbind(d.it, this.Hr, this);
            this.ga.unbind(d.jt, this.ap, this);
            this.ga.unbind(d.vO, this.B7, this);
            this.ga.unbind(d.rG, this.D7, this);
            this.ca.unbind(f.vb, this.gd, this);
            this.ca.unbind(f.lA, this.C7, this);
            this.ca.unbind(f.kt, this.yC, this);
            this.C = this.g = this.ca = this.ga = r
        };
        h.prototype.Oya = function (a) {
            this.g.set("visible", n);
            this.ga.display(a)
        };
        h.prototype.cq = function () {
            this.ga.hide();
            this.ca.end()
        };
        h.prototype.play = function () {
            this.ca.play()
        };
        h.prototype.stop = function () {
            this.ca.stop()
        };
        h.prototype.pause = function () {
            this.ca.pause()
        };
        h.prototype.B7 = function (a) {
            this.ca.start(a.data.model)
        };
        h.prototype.D7 = D();
        h.prototype.ap = function (a) {
            a = a.data.model;
            a.get("autoplay") && a.get("state") != c.P && a.set("state", c.P);
            this.trigger(new e(h.jt, {
                    model: a
                }))
        };
        h.prototype.Hr = function (a) {
            this.trigger(new e(h.it, {
                    model: a.data.model
                }))
        };
        h.prototype.Fna = function () {
            this.g.set("visible", y)
        };
        h.prototype.C7 = function (a) {
            this.trigger(new e(h.lA, {
                    model: a.data.model
                }))
        };
        h.prototype.yC = function (a) {
            this.trigger(new e(h.kt, {
                    model: a.data.model,
                    time: a.data.time,
                    duration: a.data.duration
                }))
        };
        h.prototype.gd = function (a) {
            this.trigger(new e(h.vb, {
                    state: a.data.state
                }))
        };
        h.jt = "modelShow";
        h.it = "modelHide";
        h.lA = "modelEnd";
        h.kt = "modelTimeChange";
        h.vb = "playbackStateChange";
        return h
    });
    define("gQ", "require,fg,ll,R,d,dc".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("R"),
        g = a("d"),
        d = a("dc"),
        a = b.extend(g, function (a, b, j) {
            g.call(this);
            this.jb = a;
            this.C = b;
            this.s6 = j;
            this.set("toolTipDisabled", n);
            this.set("cursor", e.qq);
            this.bind(c.yb, this.kb, this, n);
            this.oj = new d.HG;
            this.oj.uN(d.HG.BG);
            this.oj.xe(this.hp = y);
            [this.oj.Gb()].forEach(function (a, b) {
                this.Ra().append(a);
                a.css({
                    position: "absolute",
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0,
                    overflow: "hidden",
                    "z-index": b
                })
            }
                .bind(this))
        });
        a.prototype.tw =
        function (a, b) {
            if (this.hp != a) {
                this.hp = a;
                this.oj.JZ(b);
                this.oj.xe(a)
            }
        };
        a.prototype.kb = function () {
            this.ND = n;
            this.oj.setSize(this.Aa(), this.eb())
        };
        return a
    });
    define("iF", "require,fg,R,c,kS,eo,eP,gQ".split(","), function (a) {
        var b = a("fg"),
        c = a("R"),
        e = a("c"),
        g = a("kS"),
        d = a("eo"),
        f = a("eP"),
        h = a("gQ"),
        a = b.extend(g, function (a, b, d) {
            g.call(this);
            this.jb = a;
            this.C = b;
            this.s6 = d;
            this.Tc("Renderer");
            this.set("toolTipDisabled", n);
            this.set("cursor", c.qq);
            this.set("layout", e.gG);
            this.Ha = this.ff = r;
            this.pJ = [];
            this.mC = [];
            this.am()
        });
        a.prototype.Ga = function () {
            g.prototype.Ga.call(this);
            if (this.ff == r) {
                this.ff = new f(this.jb);
                this.ff.M({
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0
                });
                this.la(this.ff);
                this.pJ.forEach(function (a) {
                    this.cB(a)
                }
                    .bind(this))
            }
            if (this.Ha == r) {
                this.Ha = new h(this.jb, this.C, this.s6);
                this.Ha.M({
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0
                });
                this.la(this.Ha);
                this.am()
            }
        };
        a.prototype.eua = function (a) {
            this.pJ.push(a);
            this.ff && this.cB(a)
        };
        a.prototype.cB = function (a) {
            var b = this.ff.Kv("Model");
            b.ke(d.uq).xda = a.get("model");
            b.ke(d.Oh).YE = this.ff.tj;
            this.mC.push(b);
            this.am()
        };
        a.prototype.aea = function (a) {
            a = this.pJ.indexOf(a);
            if (!(a < 0)) {
                this.pJ.splice(a, 1);
                this.ff && this.wR(this.mC[a])
            }
        };
        a.prototype.wR =
        function (a) {
            var b = this.mC.indexOf(a);
            if (!(b < 0)) {
                this.mC.splice(b, 1);
                this.ff.nM(a);
                this.am()
            }
        };
        a.prototype.tw = function (a) {
            this.hp = a;
            this.am()
        };
        a.prototype.am = function () {
            this.Ha && this.Ha.tw(this.hp && this.mC.length > 0)
        };
        return a
    });
    define("he", "require,fg,ll,bZ,dW,cu,dk,fu,de,iF".split(","), function (a) {
        var b = a("fg"),
        c = a("ll");
        a("bZ");
        var e = a("dW"),
        g = a("cu"),
        d = a("dk"),
        f = a("fu"),
        h = a("de"),
        j = a("iF"),
        a = b.extend(d, function () {
            d.call(this, "model");
            this.set("clickAction", "none");
            this.set("displayPlayOverlay", y);
            this.pl = this.ov = this.Cu = this.Df = y;
            this.o = this.g = r;
            this.gb = this.tc = 0;
            this.Ac = b.nm(this.Oe, this)
        });
        e.A("Model3DPlayer", a).B("Object").J({
            buttonPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlay: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonStop: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRestart: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            clickAction: "enum[play_pause, none]",
            displayPlayOverlay: "bool",
            displayPlaybackBar: "bool",
            currentTime: "number",
            state: "enum[stopped, playing, paused]",
            model: "Model",
            viewerArea: "ViewerArea"
        }).Cg({
            seek: function (a) {
                this.js(a)
            },
            play: function () {
                this.Ou()
            },
            pause: function () {
                this.Nu()
            },
            stop: function () {
                this.Or()
            },
            restart: function () {
                this.Nr()
            }
        }).Xb([g.ne, g.dg, c.gc]);
        a.prototype.set = function (a, b) {
            if (this.get(a) != b) {
                switch (a) {
                case "startTime":
                    this.ov = n;
                    this.Ac();
                    break;
                case "model":
                    this.Cu = n;
                    this.Ac();
                    break;
                case "viewerArea":
                    this.Df = n;
                    this.Ac();
                    break;
                case "displayPlaybackBar":
                    this.pl = n;
                    this.Ac()
                }
                d.prototype.set.call(this, a, b)
            }
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "currentTime":
                return this.o && this.o.getTime() || 0
            }
            return d.prototype.get.call(this, a, b)
        };
        a.prototype.Oe = function () {
            if (this.Df) {
                this.Df =
                    y;
                this.Ao();
                this.get("viewerArea") && this.xo();
                this.HD(this.get("viewerArea"));
                this.Cu = n
            }
            var a = y;
            if (this.g && (this.Cu || this.ov)) {
                var b = this.get("model");
                this.get("startTime");
                if (b && !this.g.Ta()) {
                    this.Ac();
                    return
                }
                this.ov = this.Cu = y;
                this.gb = this.tc = 0;
                a = n;
                if (b) {
                    this.tD();
                    this.o.Oya(b)
                } else
                    this.o.cq()
            }
            if (this.pl) {
                this.pl = y;
                a = n
            }
            a && this.us()
        };
        a.prototype.Ty = function () {
            this.set("model", r)
        };
        a.prototype.xo = function () {
            var a = this.get("application"),
            b = this.get("viewerArea");
            this.g = new j(a, b, this);
            this.g.M({
                left: 0,
                top: 0,
                bottom: 0,
                right: 0
            });
            b.la(this.g);
            b.bind(c.U, this.TC, this, n);
            this.o = new h(b, this.g);
            this.o.bind(h.jt, this.ap, this);
            this.o.bind(h.it, this.Hr, this);
            this.o.bind(h.kt, this.yC, this, n);
            this.o.bind(h.vb, this.gd, this);
            this.ls(n)
        };
        a.prototype.Ao = function () {
            if (this.g) {
                this.o.unbind(h.jt, this.ap, this);
                this.o.unbind(h.it, this.Hr, this);
                this.o.unbind(h.kt, this.yC, this);
                this.o.unbind(h.vb, this.gd, this);
                this.o.clear();
                var a = this.g.getParent();
                a.removeChild(this.g);
                a.unbind(c.U, this.TC, this, n);
                this.g = r;
                this.ls(y)
            }
        };
        a.prototype.gd = function (a) {
            a = a.data.state;
            this.g && this.g.tw(this.get("displayPlayOverlay") && a != f.P, this.tc < 0.5);
            this.Zb(a)
        };
        a.prototype.ap = function (a) {
            var b = this.get("viewerArea");
            (this.Rb = b && b.Rb) && this.Rb.bind(c.U, this.UC, this, n);
            this.Vu = y;
            this.iC(a.data.model)
        };
        a.prototype.Hr = function (a) {
            this.Rb && this.Rb.unbind(c.U, this.UC, this, n);
            this.Rb = r;
            this.hC(a.data.model)
        };
        a.prototype.yC = function (a) {
            this.tc = a.data.time;
            this.gb = a.data.duration;
            this.us()
        };
        a.prototype.TC = function () {
            if (this.Vu)
                this.Vu = y;
            else
                switch (this.get("clickAction")) {
                case "play_pause":
                    this.get("state") !=
                    f.P ? this.o.play() : this.o.pause()
                }
        };
        a.prototype.UC = function () {
            this.Vu = n
        };
        a.prototype.eD = function (a) {
            this.js(a.data.position)
        };
        a.prototype.Rg = function () {
            this.o.play()
        };
        a.prototype.vj = function () {
            this.o.stop()
        };
        a.prototype.rk = function () {
            this.o.pause()
        };
        a.prototype.js = function (a) {
            this.o && this.o.setTime(a)
        };
        a.prototype.us = function () {
            if (this.g) {
                var a = this.g.getParent();
                this.gb > 0 && this.get("displayPlaybackBar") ? a.M({
                    playbackBarPosition: this.tc,
                    playbackBarDuration: this.gb,
                    playbackBarVisible: n
                }) : a.set("playbackBarVisible",
                    y)
            }
        };
        return a
    });
    define("lA", ["require", "fg", "dW", "cu", "dl"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("cu"),
        g = a("dl"),
        a = b.extend(g, function () {
            g.call(this)
        });
        c.A("Model3DPlayListItem", a).B("PlayListItem").J({
            media: "Model3D",
            player: "Model3DPlayer",
            startTime: "number"
        });
        a.prototype.start = function () {
            g.prototype.start.call(this);
            var a = this.get("player");
            a && (a.bind(e.ne, this.ap, this), a.set("model", this.get("media")), a.set("startTime", this.get("startTime")))
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            a && (a.unbind(e.ne,
                    this.ap, this), a.get("model") == this.get("media") && a.set("model", r));
            g.prototype.stop.call(this)
        };
        a.prototype.ap = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(e.ne, this.ap, this), this.get("player").bind(e.dg, this.Hr, this), this.Iv())
        };
        a.prototype.Hr = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(e.dg, this.Hr, this), this.end())
        };
        return a
    });
    define("hA", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("Model3DResource", b).B("Object").J({
            url: "string",
            posterURL: "string"
        }).hh(["url", "posterURL"]);
        return b
    });
    define("gA", ["require", "fg", "jd", "ll", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("distance", 2)
        });
        a.A("Menu", b).B("MenuItem").J({
            backgroundColor: "color",
            rollOverBackgroundColor: "color",
            selectedBackgroundColor: "color",
            opacity: "number",
            rollOverOpacity: "number",
            fontFamily: "string",
            fontColor: "color",
            rollOverFontColor: "color",
            selectedFontColor: "color",
            distance: "number"
        }).Xb([e.xc, e.Qb]).Hf([e.U]);
        return b
    });
    define("m", ["require", "fg", "jd", "ll", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("MenuItem", b).B("Object").J({
            label: "string",
            children: "array[MenuItem]"
        }).Xb([e.xc, e.Qb]).Hf([e.U]);
        return b
    });
    define("if", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("MovementPhotoCamera", a).B("PhotoCamera").J({
            duration: "number",
            easing: "enum[linear, quad_in, quad_out, quad_in_out, cubic_in, cubic_out, cubic_in_out, quart_in, quart_out, quart_in_out, quint_in, quint_out, quint_in_out]",
            initialPosition: "PhotoCameraPosition",
            targetPosition: "PhotoCameraPosition"
        });
        return a
    });
    define("gd", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("Object", a).J({
            id: "identifier",
            data: "*"
        });
        return a
    });
    define("ce", [], function () {
        var a = {
            et: "drag_acceleration",
            Xn: "drag_rotation"
        };
        a.m0 = a.et;
        a.e1 = a.Xn;
        return a
    });
    define("lx", ["fg", "bZ"], function (a, b) {
        return a.extend(b, function (a) {
            b.call(this, a);
            this.Kz = this.cA = this.Wp = this.mq = 0
        })
    });
    define("kt", ["fg", "bZ"], function (a, b) {
        return a.extend(b, function (a) {
            b.call(this, a);
            this.PY = this.lwa = 0
        })
    });
    define("ee", "require,fg,do,ll,bZ,eO,ce,lx,kt".split(","), function (a) {
        function b(a, b) {
            return a * b
        }
        function c(a) {
            var b = a > 0 ? 1 : -1;
            return b * (Math.pow(10, b * a) - 1) / 9
        }
        function e(a, b) {
            return Math.min(Math.max(a / b, -1), 1)
        }
        var g = a("fg");
        a("do");
        var d = a("ll"),
        f = a("bZ"),
        h = a("eO"),
        j = a("ce"),
        p = a("lx"),
        k = a("kt"),
        l = g.extend(h, function () {
            h.call(this);
            this.o6 = this.p6 = 1800;
            this.Ex = 7;
            this.wna = this.vsa = 0;
            this.OB = y;
            this.oi = m;
            this.Du = j.m0;
            this.eaa = j.e1;
            this.Ex = 0;
            this.LK = m;
            this.zE = y;
            this.ix = r;
            this.nu = 3;
            this.ba = 90;
            this.GR = this.nv =
                this.rb = 1;
            this.Rb = this.ua = r;
            this.dD = y
        });
        l.prototype.Qs = function (a) {
            this.p6 = a.get("manualRotationSpeed");
            this.o6 = a.get("manualRotationSpeed");
            this.nu = a.get("manualZoomSpeed");
            this.GR = a.get("draggingFactor")
        };
        l.prototype.Us = function (a) {
            this.Du = a;
            this.kX()
        };
        l.prototype.xw = function (a) {
            this.eaa = a;
            this.kX()
        };
        l.prototype.sw = function (a) {
            this.ba = a;
            this.nv = this.ba / 90
        };
        l.prototype.ow = function (a) {
            this.wi();
            if (a) {
                this.ua = a;
                if (this.Rb = a.Ava && a.Rb) {
                    this.Rb.bind(d.Hb, this.E8, this, n);
                    this.Rb.bind(d.fc, this.F8, this,
                        n)
                }
                this.ua.bind(d.Hb, this.pc, this, n);
                this.ua.bind(d.Mc, this.Ng, this, n);
                this.ua.bind(d.fc, this.Og, this, n);
                this.ua.bind(d.sq, this.Eu, this, n);
                this.ua.Ta().get("settings").get(TDV.PlayerSettings.hga) !== y && this.ua.bind(d.Jw, this.ku, this, n);
                this.ua.bind(d.xG, this.B4, this, n);
                this.ua.bind(d.wG, this.z4, this, n);
                this.kX()
            }
        };
        l.prototype.wi = function () {
            if (this.ua != r) {
                if (this.Rb) {
                    this.Rb.unbind(d.Hb, this.E8, this);
                    this.Rb.unbind(d.fc, this.F8, this);
                    this.Rb = r
                }
                this.ua.unbind(d.Hb, this.pc, this);
                this.ua.unbind(d.Mc, this.Ng,
                    this);
                this.ua.unbind(d.fc, this.Og, this);
                this.ua.unbind(d.sq, this.Eu, this);
                this.ua.unbind(d.Jw, this.ku, this);
                this.ua.unbind(d.xG, this.B4, this);
                this.ua.unbind(d.wG, this.z4, this);
                this.ua = r;
                this.bI()
            }
        };
        l.prototype.kX = function () {
            if (this.ua)
                if (this.ua.ik) {
                    this.LK = this.eaa;
                    this.Ex = this.vsa
                } else {
                    this.LK = this.Du;
                    this.Ex = this.wna
                }
        };
        l.prototype.E8 = function () {
            this.dD = n
        };
        l.prototype.F8 = function () {
            this.dD = y
        };
        l.prototype.pc = function (a) {
            if (!this.dD) {
                this.Pra(a);
                this.oW()
            }
        };
        l.prototype.Ng = function (a) {
            this.dD || this.bz(a)
        };
        l.prototype.Og = function () {
            if (!this.dD) {
                this.QR();
                this.bI()
            }
        };
        l.prototype.Eu = function (a) {
            this.sX(a);
            this.oW(500)
        };
        l.prototype.B4 = function () {
            this.oW()
        };
        l.prototype.ku = function (a) {
            this.tX(a)
        };
        l.prototype.z4 = function () {
            this.bI()
        };
        l.prototype.Pra = function (a) {
            this.OB = n;
            this.oi = a;
            this.bz(a)
        };
        l.prototype.bz = function (a) {
            if (this.OB)
                switch (this.LK) {
                case j.et:
                    this.wta(a);
                    break;
                case j.Xn:
                    this.vta(a)
                }
        };
        l.prototype.wta = function (a) {
            this.Naa(+b(c(e(Math.abs(a.x - this.oi.x) < 3 ? 0 : a.x - this.oi.x, this.ua.Aa())), this.p6 *
                    this.nv), -b(c(e(Math.abs(a.y - this.oi.y) < 3 ? 0 : a.y - this.oi.y, this.ua.eb())), this.o6 * this.nv))
        };
        l.prototype.vta = function (a) {
            this.jX(-b(e(a.x - this.oi.x, this.ua.Aa()), this.ba * this.GR), +b(e(a.y - this.oi.y, this.ua.Aa()), this.ba * this.GR));
            this.oi = a
        };
        l.prototype.QR = function () {
            if (this.OB) {
                this.OB = y;
                switch (this.LK) {
                case j.et:
                    this.Naa(0, 0)
                }
            }
        };
        l.prototype.Naa = function (a, b) {
            var c = new p(l.Yn);
            c.mq = a;
            c.Wp = b;
            this.trigger(c)
        };
        l.prototype.jX = function (a, b) {
            var c = new p(l.Yn);
            c.cA = a;
            c.Kz = b;
            this.trigger(c)
        };
        l.prototype.tX =
        function (a) {
            if (this.rb != a.scale) {
                this.QR();
                var b = this.rb;
                this.rb = a.scale;
                a = new k(l.Yk);
                a.PY = this.ba * b / this.rb - this.ba;
                this.trigger(a)
            }
        };
        l.prototype.sX = function (a) {
            if (a.Jp != 0) {
                this.QR();
                var b = new k(l.Yk);
                b.PY = this.ba * -a.Jp * this.nu / 100;
                this.trigger(b)
            }
        };
        l.prototype.oW = function (a) {
            var b = this.ix != r;
            this.H$();
            if (a && (b || !this.zE)) {
                var c = this;
                this.ix = setTimeout(function () {
                    c.ix = r;
                    c.bI()
                }, a)
            }
            if (!this.zE) {
                this.zE = n;
                this.trigger(new f(l.Ae))
            }
        };
        l.prototype.bI = function () {
            this.H$();
            if (this.zE) {
                this.zE = y;
                this.trigger(new f(l.ze))
            }
        };
        l.prototype.H$ = function () {
            if (this.ix != r) {
                clearTimeout(this.ix);
                this.ix = r
            }
        };
        l.Yn = "rotation change";
        l.Yk = "zoom change";
        l.Ae = "user interaction start";
        l.ze = "user interaction end";
        return l
    });
    define("cM", ["require", "r"], function (a) {
        function b() {
            this.Ura = e.Za() ? 0.066 : 0.1;
            this.xna = 0.5;
            this.Gra = e.Za() ? 0.066 : 0.1;
            this.Vta = 0.1;
            this.hL = this.mL = y;
            this.reset()
        }
        function c(a, b, c) {
            a = (b - a) * (1 - c);
            0.01 > Math.abs(a) && (a = 0);
            return b - a
        }
        var e = a("r");
        b.prototype.reset = function () {
            this.N3 = this.dR = this.yx = this.Wq = this.iB = this.hR = this.gR = this.kR = this.Sx = this.nu = this.GK = this.IK = this.Ll = this.cD = this.tn = this.LE = 0
        };
        b.prototype.a_ = function (a, b, c, e, j, p, k, l, q) {
            return this.LE != a || (this.cD = b) || this.IK != c || 0 != e || 0 != j ||
            this.hL != k || this.z6 != l || this.mL != q ? (this.LE = a, this.cD = b, this.IK = c, this.tn += e, this.Ll += j, this.GK += p, this.hL = k, this.z6 = l, this.mL = q, n) : y
        };
        b.prototype.qza = function (a, b) {
            return this.nu != a || 0 != b ? (this.nu = a, this.Sx += b, n) : y
        };
        b.prototype.ld = function () {
            return 0 != this.kR || 0 != this.gR || 0 != this.hR || 0 != this.iB || 0 != this.LE || 0 != this.cD || 0 != this.IK || 0 != this.nu || 0 != this.tn || 0 != this.Ll || 0 != this.Sx
        };
        b.prototype.fb = function (a) {
            var a = 1E3 / a,
            b = this.kR / a,
            e = this.LE / a + this.tn;
            this.tn = 0;
            var h = this.gR / a,
            j = this.cD / a + this.Ll;
            this.Ll =
                0;
            var p = this.hR / a,
            k = this.IK / a + this.GK;
            this.GK = 0;
            var l = this.nu + this.Sx * a;
            this.Sx = 0;
            var q = 0 == e && 0 == j && 0 == k,
            o = 0 == b && 0 == h && 0 == p;
            this.hL && o && !q || this.mL && q && !o || this.z6 && !q && !o ? (q = q ? this.Ura : o ? this.Gra : this.xna, this.Wq = c(b, e, q), this.yx = c(h, j, q), this.dR = c(p, k, q)) : (this.Wq = e, this.yx = j, this.dR = k);
            b = 0 == this.iB;
            e = 0 == l;
            this.iB = this.hL && b && !e || this.mL && e && !b ? c(this.iB, l, this.Vta) : l;
            this.kR = this.Wq * a;
            this.gR = this.yx * a;
            this.hR = this.dR * a;
            this.N3 = this.iB / a
        };
        return b
    });
    define("ct", "jquery.mod,fg,d,ee,cM,V,ll".split(","), function (a, b, c, e, g, d, f) {
        b = b.extend(c, function () {
            c.call(this);
            this.Tc("Renderer");
            this.u = a("<canvas></canvas>");
            this.u.css({
                position: "absolute",
                left: 0,
                top: 0
            });
            this.Ra().append(this.u);
            this.sr = r;
            this.$ = this.Vx = this.Tx = this.Ux = 0;
            this.pg = y;
            this.jpa = 150;
            this.IB = 0;
            this.bj = r;
            this.bind(f.yb, this.kb, this, n);
            this.wa = new e;
            this.wa.KBa(720);
            this.wa.JF(0);
            this.wa.Us("drag_rotation");
            this.wa.sw(360);
            this.wa.bind(e.Yn, this.yoa, this);
            this.bb = new g
        });
        b.prototype.vya =
        function (a, b, c) {
            this.sr = a;
            this.Ux = b;
            this.Tx = c;
            this.Vx = Math.floor(this.sr.length * this.$ / 360);
            this.AV();
            this.wa.ow(this);
            this.ea()
        };
        b.prototype.wua = function () {
            this.sr = r;
            this.hn();
            this.AV();
            this.wa.wi()
        };
        b.prototype.play = function () {
            this.pg = n;
            this.ea()
        };
        b.prototype.yoa = function (a) {
            this.hn();
            this.bb.a_(a.mq, a.Wp, 0, a.cA, a.Kz, 0, y, n);
            this.ea()
        };
        b.prototype.kU = function () {
            this.play()
        };
        b.prototype.Pg = function (a) {
            if (this.sr)
                if (this.bb.ld()) {
                    this.pg = y;
                    this.bb.fb(a);
                    this.l2(this.bb.Wq);
                    this.ea()
                } else if (this.pg) {
                    this.l2(this.jpa *
                        a / 1E3);
                    this.ea()
                } else
                    this.Xx() || this.SD()
        };
        b.prototype.Pea = function (a) {
            for (this.$ = a; this.$ < 0; )
                this.$ = this.$ + 360;
            for (; this.$ >= 360; )
                this.$ = this.$ - 360;
            this.eta()
        };
        b.prototype.eta = function () {
            if (this.sr) {
                var a = Math.floor(this.sr.length * this.$ / 360);
                if (this.Vx != a) {
                    this.Vx = a;
                    this.e9()
                }
            }
        };
        b.prototype.l2 = function (a) {
            this.Pea(this.$ + a)
        };
        b.prototype.kb = function () {
            this.AV()
        };
        b.prototype.AV = function () {
            var a = this.u.get(0);
            if (this.Ux == 0 || this.Tx == 0) {
                a.width = 0;
                a.height = 0
            } else {
                var b = this.Id(),
                c = this.Hd();
                if (c * this.Ux >
                    b * this.Tx) {
                    a.width = b;
                    a.height = this.Tx * b / this.Ux
                } else {
                    a.height = c;
                    a.width = this.Ux * c / this.Tx
                }
                this.u.css({
                    left: Math.round((b - a.width) * 0.5) + "px",
                    top: Math.round((c - a.height) * 0.5) + "px"
                });
                this.e9()
            }
        };
        b.prototype.e9 = function () {
            if (this.sr) {
                var a = this.u.get(0),
                b = this.sr[this.Vx];
                a.getContext("2d").drawImage(b, 0, 0, this.Ux, this.Tx, 0, 0, a.width, a.height)
            }
        };
        b.prototype.Xx = function () {
            return this.bj ? n : y
        };
        b.prototype.SD = function () {
            this.hn();
            if (this.IB > 0) {
                var a = this;
                this.bj = setTimeout(function () {
                    a.bj = r;
                    a.kU()
                }, this.IB)
            }
        };
        b.prototype.hn = function () {
            if (this.bj) {
                clearTimeout(this.bj);
                this.bj = r
            }
        };
        b.prototype.ea = function () {
            d.Ma(this.Pg, this)
        };
        return b
    });
    define("jC", "require,jquery.mod,do,fg,ll,ge,bZ,dW,eH,cr,ct,kS,id".split(","), function (a) {
        a("jquery.mod");
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("ge"),
        d = a("bZ"),
        f = a("dW"),
        h = a("eH"),
        j = a("cr"),
        p = a("ct"),
        k = a("kS"),
        l = a("id"),
        a = c.extend(k, function () {
            k.call(this);
            this.fd = this.dj = this.af = this.g = r;
            this.bind(e.od, this.wh, this);
            this.bind(e.zd, this.th, this)
        });
        f.A("Object3D", a).B("UIComponent").J({
            frames: "array[ImageResource]",
            yaw: "number"
        }).Xb([e.S]);
        a.prototype.Ga = function () {
            k.prototype.Ga.call(this);
            if (!this.g) {
                this.g =
                    new p;
                this.g.M({
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0
                });
                this.la(this.g)
            }
            if (!this.af) {
                this.af = new j;
                this.af.M({
                    left: 0,
                    bottom: 0,
                    right: 0,
                    height: 20,
                    visible: y
                });
                this.la(this.af)
            }
        };
        a.prototype.wh = function () {
            this.ZB()
        };
        a.prototype.th = function () {
            this.vj()
        };
        a.prototype.ZB = function () {
            this.af.set("percent", 0);
            this.af.set("visible", n);
            this.g.Pea(this.get("yaw"));
            var a = this.get("frames", []);
            this.dj = [];
            this.fd = [];
            for (var b = 0; b < a.length; b++) {
                this.dj.push(h.jm(a[b]));
                var c = new l(g.Uj);
                c.bind(e.S, this.wC, this);
                c.bind(e.oe,
                    this.xC, this);
                this.fd.push(c)
            }
            for (b = 0; b < a.length; b++)
                this.fd[b].load(this.dj[b].get("url"))
        };
        a.prototype.wC = function () {
            var a = b(this.fd).filter(function (a) {
                return a.Sp()
            });
            this.af.set("percent", 100 * a.length / this.fd.length);
            a.length == this.fd.length && this.Ze()
        };
        a.prototype.xC = D();
        a.prototype.Ze = function () {
            this.af.set("visible", y);
            var a = this.dj[0].get("width", this.fd[0].ad()),
            c = this.dj[0].get("height", this.fd[0].Pd());
            this.g.vya(b(this.fd).map(function (a) {
                    return a.we()
                }), a, c);
            this.trigger(new d(e.S))
        };
        a.prototype.vj = function () {
            if (this.fd) {
                this.af.set("visible", y);
                this.g.wua();
                this.fd = b(this.fd).each(function (a) {
                    a.unbind(e.S, this.wC, this);
                    a.unbind(e.oe, this.xC, this);
                    a.cancel()
                });
                this.dj = this.fd = r
            }
        };
        return a
    });
    define("fj", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function (a, b, d) {
            c.call(this);
            a !== m && this.set("yaw", a);
            b !== m && this.set("pitch", b);
            d !== m && this.set("hfov", d)
        });
        a.A("RotationalCameraPosition", b).B("Object").J({
            stereographicFactor: "number",
            yaw: "number",
            pitch: "number",
            hfov: "number"
        });
        return b
    });
    define("cf", ["require", "fg", "fj", "dW"], function (a) {
        var b = a("fg"),
        c = a("fj"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.A("PanoramaCameraPosition", b).B("RotationalCameraPosition");
        return b
    });
    define("fE", "require,fg,jd,dW,cf,fj".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("dW"),
        g = a("cf"),
        d = a("fj"),
        f = b.extend(c, function () {
            c.call(this);
            this.set("initialPosition", new d);
            this.set("draggingFactor", 1);
            this.set("hoverFactor", 0);
            this.set("manualRotationSpeed", 1800);
            this.set("manualZoomSpeed", 1);
            this.set("automaticRotationSpeed", 10);
            this.set("automaticZoomSpeed", 10)
        });
        e.A("RotationalCamera", f).B("Object").J({
            displayOriginPosition: "RotationalCameraDisplayPosition",
            displayMovements: "array[TargetRotationalCameraDisplayMovement]",
            draggingFactor: "number",
            hoverFactor: "number",
            initialPosition: "RotationalCameraPosition",
            initialSequence: "RotationalCameraSequence",
            idleSequence: "RotationalCameraSequence",
            sequences: "array[RotationalCameraSequence]",
            timeToIdle: "number",
            manualRotationSpeed: "number",
            manualZoomSpeed: "number",
            automaticRotationSpeed: "number",
            automaticZoomSpeed: "number"
        });
        a = b.extend(f, function () {
            f.call(this);
            this.set("initialPosition", new g)
        });
        e.A("PanoramaCamera", a).B("RotationalCamera");
        return a
    });
    define("jo", ["require", "fg", "fj", "dW"], function (a) {
        var b = a("fg"),
        c = a("fj"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.A("RotationalCameraDisplayPosition", b).B("RotationalCameraPosition").J({
            stereographicFactor: "number"
        });
        return b
    });
    define("ir", ["require", "fg", "jo", "dW"], function (a) {
        var b = a("fg"),
        c = a("jo"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.apply(this, arguments)
        });
        a.A("PanoramaCameraDisplayPosition", b).B("RotationalCameraDisplayPosition");
        return b
    });
    define("bf", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("PanoramaCameraMovement", b).B("RotationalCameraMovement");
        return b
    });
    define("iz", "require,fg,jd,bZ,dW,ll".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("bZ"),
        g = a("dW"),
        d = a("ll"),
        a = b.extend(c, function () {
            c.call(this)
        });
        a.prototype.play = function () {
            this.trigger(new e(d.vt))
        };
        a.prototype.pause = function () {
            this.trigger(new e(d.IG))
        };
        g.A("RotationalCameraSequence", a).B("Object").J({
            movements: "array[RotationalCameraMovement]",
            mandatory: "bool",
            movementIndex: "number",
            repeat: "number",
            restartMovementOnUserInteraction: "bool",
            restartMovementDelay: "number"
        }).Cg({
            pause: a.prototype.pause,
            play: a.prototype.play
        }).Xb([d.Ba, d.wt]);
        return a
    });
    define("bw", ["require", "fg", "dW", "iz"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("iz"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("PanoramaCameraSequence", a).B("RotationalCameraSequence");
        return a
    });
    define("gz", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("PanoramaMapLocation", a).B("Object").J({
            map: "Map",
            x: "number",
            y: "number",
            angle: "number",
            visible: "bool"
        });
        return a
    });
    define("ly", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("PanoramaOverlay", b).B("Object");
        return b
    });
    define("cy", ["require", "fu", "fB", "a"], function (a) {
        function b(a) {
            this.g = a;
            this.hl = [];
            this.IS = y;
            this.pa = this.$ = 0
        }
        var c = a("fu"),
        e = a("fB"),
        g = a("a");
        b.prototype.clear = function () {
            this.stop();
            this.hl = this.g = r
        };
        b.prototype.end = function (a) {
            var b = [],
            e = [],
            g = this.g5(a);
            this.hl.forEach(function (a) {
                0 > g.indexOf(a) ? b.push(a) : e.push(a)
            });
            b.forEach(function (a) {
                a.Sv().Cc(c.H)
            });
            this.hl = e;
            this.IS = y
        };
        b.prototype.start = function (a) {
            this.end(a);
            this.hl = this.g5(a);
            this.IS = 0 < this.hl.filter(function (a) {
                return a instanceof e
            }).length;
            this.waa();
            this.SK(c.P, n)
        };
        b.prototype.play = function () {
            this.SK(c.P)
        };
        b.prototype.pause = function () {
            this.SK(c.mc)
        };
        b.prototype.stop = function () {
            this.SK(c.H)
        };
        b.prototype.dc = function () {
            this.$ = this.g.ac();
            this.pa = this.g.ec();
            this.waa()
        };
        b.prototype.waa = function () {
            if (this.IS) {
                var a = Math.PI / 180,
                b = this.$ * a,
                c = this.pa * a,
                j = new g(Math.sin(b) * Math.cos(c), Math.sin(c), Math.cos(b) * Math.cos(c));
                this.hl.forEach(function (p) {
                    if (p instanceof e) {
                        var k = p.get("yaw", b) * a,
                        l = p.get("pitch", c) * a,
                        q = p.get("maximumAngle", 360) * a,
                        k = new g(Math.sin(k) * Math.cos(l), Math.sin(l), Math.cos(k) * Math.cos(l)),
                        q = Math.min(1, Math.max(0, 1 - Math.acos(j.Mv(k)) / q));
                        p.Sv().hq(q)
                    }
                }
                    .bind(this))
            }
        };
        b.prototype.g5 = function (a) {
            return a ? a.get("audios", []) : []
        };
        b.prototype.SK = function (a, b) {
            (b ? this.hl.slice().reverse() : this.hl).forEach(function (b) {
                if (b.get("autoplay", y)) {
                    var b = b.Sv(),
                    e = b.Qe();
                    a == c.P && e != c.P ? b.Cc(c.P) : a == c.mc && e == c.P ? b.Cc(c.mc) : a == c.H && e != c.H && b.Cc(c.H)
                }
            })
        };
        return b
    });
    define("gw", "require,do,ll,it,ed,a,km".split(","), function (a) {
        function b(a) {
            this.g = a;
            this.Z = y;
            this.sj = b.At;
            this.XR = this.G5 = y;
            this.gh(r);
            this.g.bind(e.yb, this.kb, this, n);
            this.kb()
        }
        var c = a("do"),
        e = a("ll"),
        g = a("it"),
        d = a("ed"),
        f = a("a"),
        h = a("km");
        b.prototype.Ica = function () {
            return this.sj !== b.At
        };
        b.prototype.Hca = function () {
            return this.sj & b.Vw ? n : y
        };
        b.prototype.Jca = function () {
            return this.sj & b.Ww ? n : y
        };
        b.prototype.Kca = function () {
            return this.sj & b.Et ? n : y
        };
        b.prototype.Gca = function () {
            return this.sj & b.zt ? n : y
        };
        b.prototype.vN =
            P("G5");
        b.prototype.ac = function () {
            this.zj();
            return this.$
        };
        b.prototype.ec = function () {
            this.zj();
            return this.pa
        };
        b.prototype.Qd = function () {
            this.zj();
            return this.Ob
        };
        b.prototype.Op = function () {
            this.zj();
            return this.ba
        };
        b.prototype.gh = function (a) {
            if (a) {
                this.FU = a.get("hfov", 360);
                this.aK = a.get("vfov", 180);
                this.YC = a.get("pitch", 0);
                this.Qu = a.get("partial", y);
                this.KS = a.Nca();
                this.HS = a.Bca();
                this.PS = Math.min(a.get("hfovMax", 170), 170);
                this.GB = a.get("hfovMin");
                this.RT = h.hca(a)
            } else {
                this.FU = 360;
                this.aK = 180;
                this.YC =
                    0;
                this.HS = this.KS = this.Qu = y;
                this.PS = 120;
                this.RT = this.GB = 1
            }
            this.$ = 0;
            this.pa = this.YC;
            this.Ob = 0;
            this.Z = n
        };
        b.prototype.Ka = function (a, b, c, d, e) {
            this.$ = a;
            this.pa = b;
            this.Ob = c;
            this.ba = d;
            this.XR = e;
            this.Z = n
        };
        b.prototype.kb = function () {
            var a = this.g.Aa(),
            b = this.g.eb();
            if (this.X != a || this.ia != b) {
                this.X = a;
                this.ia = b;
                this.Z = n
            }
        };
        b.prototype.zj = function () {
            if (this.Z) {
                this.Z = y;
                var a = this.$ * k,
                e = this.pa * k,
                h = this.ba * k,
                s,
                v,
                u,
                w = (this.XR ? g.Sn(this.PS, this.X, this.ia) : this.PS) * k,
                x;
                a: {
                    x = this.GB;
                    if (c(x).isString())
                        if ((x = x.match(/^\s*([+-]?\d+\.?\d*)\s*%\s*$/)) &&
                            x.length >= 2) {
                            x = parseFloat(x[1]);
                            break a
                        }
                    x = m
                }
                x = x !== m ? 2 * Math.atan2(this.X * this.g.getPixelRatio() * 0.5, this.RT * 45 * x / 100) : this.GB ? (this.XR ? g.Sn(this.GB, this.X, this.ia) : this.GB) * k : 2 * Math.atan2(this.X * this.g.getPixelRatio() * 0.5, this.RT * 45);
                x = Math.min(w, x);
                if (this.G5) {
                    s = 360;
                    u = 180;
                    v = 0
                } else if (this.KS || this.HS) {
                    s = this.HS ? 90 : this.YC + this.aK * 0.5;
                    var z = this.KS ? -90 : this.YC - this.aK * 0.5;
                    u = s - z;
                    v = (s + z) * 0.5;
                    s = this.FU
                } else {
                    s = this.FU;
                    v = this.YC;
                    u = this.aK
                }
                s = s * k;
                u = u * k;
                v = v * k;
                for (z = this.X / this.ia; a < -j; )
                    a = a + 2 * j;
                for (; a > j; )
                    a =
                        a - 2 * j;
                h = Math.max(Math.min(h, w), x);
                w = b.At;
                e > p ? w = w | b.Et : e < -p && (w = w | b.zt);
                var e = Math.max(Math.min(e, j * 0.5), -j * 0.5),
                C = 2 * Math.atan(Math.tan(h * 0.5) / z);
                if (C >= u) {
                    h = 2 * Math.atan(Math.tan(u * 0.5) * z);
                    e = v;
                    w = w | b.Et | b.zt
                } else {
                    var A = Math.min(u * 0.5 + v, j * 0.5);
                    u = Math.max(-u * 0.5 + v, -j * 0.5);
                    v = !this.Qu && A >= j * 0.495 ? j * 0.5 : A - C * 0.5;
                    u = !this.Qu && u <= -j * 0.495 ? -j * 0.5 : u + C * 0.5;
                    if (e > v) {
                        e = v;
                        w = w | b.Et
                    } else if (e < u) {
                        e = u;
                        w = w | b.zt
                    }
                }
                if (this.Qu) {
                    u = Math.tan(h * 0.5);
                    z = u / z;
                    z = new f(-u, e > 0 ? z : -z, 1);
                    u = new d;
                    u.Nn(-e);
                    z.apply(u);
                    z = z.ac() * 2;
                    z < 0 && (z = z + 2 *
                            j);
                    u = s * 0.5 - z * 0.5;
                    C = -s * 0.5 + z * 0.5;
                    if (z > s) {
                        a = 0;
                        h = Math.max(x, h * s / z);
                        w = w | b.Vw | b.Ww
                    } else if (a > u) {
                        a = u;
                        w = w | b.Ww
                    } else if (a < C) {
                        a = C;
                        w = w | b.Vw
                    }
                }
                this.$ = a * l;
                this.pa = e * l;
                this.ba = h * l;
                this.sj = w
            }
        };
        var j = Math.PI,
        p = Math.PI * 0.5,
        k = Math.PI / 180,
        l = 180 / Math.PI;
        b.At = 0;
        b.Vw = 1;
        b.Ww = 2;
        b.Et = 4;
        b.zt = 8;
        return b
    });
    define("S", ["require", "fg", "ll", "eO", "lx"], function (a) {
        function b(a, b) {
            return a * b
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("eO"),
        d = a("lx"),
        f = c.extend(g, function () {
            g.call(this);
            this.OB = y;
            this.oi = m;
            this.ba = 90;
            this.UR = 0.1;
            this.zb = this.ua = r
        });
        f.prototype.Qs = function (a) {
            this.zb && this.zb.unbind(e.D("hoverFactor"), this.ZW, this);
            if (this.zb = a)
                this.zb.bind(e.D("hoverFactor"), this.ZW, this), this.ZW()
        };
        f.prototype.ZW = function () {
            this.UR = this.zb.get("hoverFactor")
        };
        f.prototype.sw = P("ba");
        f.prototype.ow = function (a) {
            this.wi();
            a && (this.ua = a, this.oi = m, this.ua.bind(e.Mc, this.Ng, this, n))
        };
        f.prototype.wi = function () {
            this.ua != r && (this.ua.unbind(e.Mc, this.Ng, this), this.ua = r)
        };
        f.prototype.Ng = function (a) {
            this.bz(a)
        };
        f.prototype.bz = function (a) {
            this.oi && this.jX(+b(Math.min(Math.max((a.x - this.oi.x) / this.ua.Aa(), -1), 1), this.ba * this.UR), -b(Math.min(Math.max((a.y - this.oi.y) / this.ua.Aa(), -1), 1), this.ba * this.UR));
            this.oi = a
        };
        f.prototype.jX = function (a, b) {
            if (!(0 == a && 0 == b)) {
                var c = new d(f.Yn);
                c.cA = a;
                c.Kz = b;
                this.trigger(c)
            }
        };
        f.Yn = "rotation change";
        return f
    });
    define("fz", "require,do,fg,bZ,eO,cM,S".split(","), function (a) {
        a("do");
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = a("cM"),
        d = a("S"),
        f = b.extend(e, function (a, b, c) {
            e.call(this);
            this.g = a;
            this.Vb = this.g.Vb;
            this.I = b;
            this.wb = c;
            this.Yr = this.XG = this.W = y;
            this.bb = new g;
            this.ug = r;
            this.Ob = this.pa = this.$ = 0;
            this.ba = 90;
            this.wa = new d;
            this.wa.bind(d.Yn, this.AC, this, n)
        });
        f.prototype.clear = function () {
            this.wa.unbind(d.Yn, this.AC, this, n);
            this.wa.wi();
            this.wa = r;
            this.Tt();
            this.g = this.Vb = this.wb = this.I = this.bb = r
        };
        f.prototype.Qs = function (a) {
            this.bb.reset();
            this.wa.Qs(a)
        };
        f.prototype.Ka = function (a, b, c, d) {
            if (this.$ != a || this.pa != b || this.Ob != c || this.ba != d) {
                this.$ = a;
                this.pa = b;
                this.Ob = c;
                this.ba = d;
                this.wa.sw(this.ba);
                this.OV(y);
                this.UD()
            }
        };
        f.prototype.ld = function () {
            return this.XG && this.Yr ? n : y
        };
        f.prototype.fb = function (a) {
            this.vs = y;
            this.bb.fb(a);
            this.Yr = y;
            var a = this.$ + this.bb.Wq,
            b = this.pa + this.bb.yx;
            this.wb.pm(this.ba);
            this.I.Ka(a, b, this.Ob, this.wb.Pe(), this.wb.Lp());
            this.$ = this.I.ac();
            this.pa = this.I.ec();
            this.Ob = this.I.Qd();
            this.ba = this.I.Op()
        };
        f.prototype.im =
            Q("$");
        f.prototype.hm = Q("pa");
        f.prototype.Is = Q("Ob");
        f.prototype.Tv = Q("ba");
        f.prototype.nd = function (a) {
            if (this.W != a)
                if (this.W = a)
                    this.UD();
                else {
                    this.Tt();
                    this.OV(y)
                }
        };
        f.prototype.AC = function (a) {
            this.Cb(a.mq, a.Wp, 0, 0, a.cA, a.Kz, 0, 0, y, y, n, n)
        };
        f.prototype.Cb = function (a, b, c, d, e, f, g, t, s, v, u, w) {
            var x = this.bb.a_(a, b, c, e, f, g, v, u, w) || x;
            x && this.Bf()
        };
        f.prototype.Bf = function () {
            this.Yr = n;
            this.trigger(new c(f.nf))
        };
        f.prototype.UD = function () {
            this.Tt();
            this.ug = setTimeout(this.MC.bind(this), 30)
        };
        f.prototype.Tt = function () {
            if (this.ug) {
                clearTimeout(this.ug);
                this.ug = r
            }
        };
        f.prototype.MC = function () {
            this.OV(this.W)
        };
        f.prototype.OV = function (a) {
            if (this.XG != a)
                if (this.XG = a) {
                    this.bb.reset();
                    this.wa.ow(this.g.getParent());
                    this.Bf()
                } else
                    this.wa.wi()
        };
        f.nf = "position change request";
        return f
    });
    define("fO", "fg,ll,bZ,eO,r,fT".split(","), function (a, b, c, e, g, d) {
        a = a.extend(e, function () {
            e.call(this);
            this.Zaa = this.W = y;
            this.Ob = this.pa = this.$ = 0;
            this.DK = y;
            this.Ll = this.tn = 0
        });
        a.prototype.nd = function (a) {
            if (this.W != a)
                if (this.W = a) {
                    d.bind(this.Ju, this, n);
                    var a = d.Fn(),
                    b = a.pitch;
                    this.tn = this.$ - a.yaw;
                    this.Ll = this.pa - b;
                    this.Dk()
                } else
                    d.unbind(this.Ju, this, n)
        };
        a.prototype.Ka = function (a, b, c) {
            if (this.$ != a) {
                this.tn = this.gv(this.tn + (a - this.gv(this.$, a)), 0);
                this.$ = a
            }
            if (this.pa != b) {
                this.Ll = this.Ll + (b - this.pa);
                this.pa =
                    b
            }
            this.Ob = c
        };
        a.prototype.im = Q("$");
        a.prototype.hm = Q("pa");
        a.prototype.Is = Q("Ob");
        a.prototype.ld = function () {
            return d.ixa()
        };
        a.prototype.fb = function (a) {
            var b = d.Fn(),
            a = 20 * a / 1E3,
            c = b.pitch + (this.Zaa ? this.Ll : 0),
            e = b.roll;
            this.$ = this.Ee(this.$, this.gv(this.gv(b.yaw, this.$) + this.tn, this.$), a);
            this.pa = this.Ee(this.pa, c, a);
            this.Ob = this.Ee(this.Ob, e, a)
        };
        a.prototype.mza = P("Zaa");
        a.prototype.Ee = function (a, b, c) {
            a = (b - a) * (1 - c);
            Math.abs(a) < 0.01 && (a = 0);
            return b - a
        };
        a.prototype.gv = function (a, b) {
            for (; a + 180 < b; )
                a = a + 360;
            for (; a - 180 > b; )
                a = a - 360;
            return a
        };
        a.prototype.Ju = function () {
            this.W && this.Dk()
        };
        a.prototype.Dk = function () {
            this.trigger(new c(b.aa))
        };
        return a
    });
    define("fW", ["require"], function () {
        return {
            OG: 38,
            nG: 40,
            Na: 39,
            qa: 37,
            PN: 65,
            pP: 90
        }
    });
    define("dr", [], function () {
        return {
            Nw: "left",
            Ow: "right",
            Mw: "down",
            Pw: "up",
            T0: "rotate10x",
            q1: "zoom2x",
            P: "playing",
            eo: "zoomIn",
            fo: "zoomOut",
            pe: "stop"
        }
    });
    define("ei", "require,fg,fW,bZ,eO,dr".split(","), function (a) {
        var b = a("fg"),
        c = a("fW"),
        e = a("bZ"),
        g = a("eO"),
        d = a("dr"),
        f = b.extend(g, function (a) {
            g.call(this);
            this.g = a;
            this.W = y;
            this.Rf = {};
            this.QD = r;
            this.JD = this.PD = y;
            this.VI = this.VI.bind(this);
            this.Qo = this.Qo.bind(this);
            this.Vb = this.g.Vb;
            document.addEventListener("keydown", this.VI);
            document.addEventListener("keyup", this.Qo)
        });
        f.prototype.clear = function () {
            this.W = y;
            this.Vb = this.g = r;
            document.removeEventListener("keydown", this.VI);
            document.removeEventListener("keyup",
                this.Qo)
        };
        f.prototype.nd = function (a) {
            if (this.W != a)
                (this.W = a) && this.EL()
        };
        var h = [c.OG, c.nG, c.qa, c.Na, c.PN, c.pP];
        f.prototype.VI = function (a) {
            var b = a.which,
            c = y;
            if (!this.Rf[b] && h.indexOf(b) >= 0) {
                if (!this.QD && !this.PD)
                    this.QD = setTimeout(this.Boa.bind(this), 100);
                c = this.Rf[b] = n
            }
            if (this.JD != a.shiftKey) {
                this.JD = a.shiftKey;
                c = n
            }
            c && this.EL()
        };
        f.prototype.Boa = function () {
            this.PD = n;
            this.EL()
        };
        f.prototype.Qo = function (a) {
            var b = a.which,
            c = y;
            if (b in this.Rf) {
                delete this.Rf[b];
                c = y;
                for (b in this.Rf)
                    this.Rf[b] && (c = n);
                if (!c) {
                    this.QD &&
                    clearTimeout(this.QD);
                    this.QD = r;
                    this.PD = y
                }
                c = n
            }
            if (this.JD != a.shiftKey) {
                this.JD = a.shiftKey;
                c = n
            }
            c && this.EL()
        };
        f.prototype.EL = function () {
            if (this.W) {
                var a = this.Vb.get("arrowKeysAction");
                if (a != "none") {
                    var a = a == "rotate",
                    b = [];
                    this.Rf[c.PN] ? b.push(d.eo) : this.Rf[c.pP] && b.push(d.fo);
                    this.PD && (this.Rf[c.PN] || this.Rf[c.pP]) && b.push(d.q1);
                    this.Rf[c.qa] ? b.push(d.Nw) : this.Rf[c.Na] && b.push(d.Ow);
                    if (a || this.JD)
                        this.Rf[c.OG] ? b.push(d.Pw) : this.Rf[c.nG] && b.push(d.Mw);
                    this.PD && (this.Rf[c.qa] || this.Rf[c.Na] || this.Rf[c.OG] ||
                        this.Rf[c.nG]) && b.push(d.T0);
                    b.length == 0 && b.push(d.pe);
                    this.trigger(new e(f.wO, {
                            Dda: b
                        }))
                }
            }
        };
        f.wO = "movementsChange";
        return f
    });
    define("ls", ["require"], function () {
        function a() {
            this.Ft = n;
            this.reset()
        }
        function b(a, b) {
            var g = 0.5 * (b - a);
            0.01 > Math.abs(g) && (g = 0);
            return b - g
        }
        a.prototype.reset = function () {
            this.Ft && (this.Ft = y, this.pL = this.qL = this.xp = this.xj = this.zx = this.Cx = this.Ax = this.Yq = m)
        };
        a.prototype.moveTo = function (a, b, g, d, f) {
            this.xj = a;
            this.xp = b;
            this.qL = g;
            this.pL = d;
            this.dT = f;
            this.Ft = n
        };
        a.prototype.Ka = function (a, b, g, d) {
            this.Yq = a;
            this.Ax = b;
            this.Cx = g;
            this.zx = d
        };
        a.prototype.im = Q("Yq");
        a.prototype.hm = Q("Ax");
        a.prototype.Is = Q("Cx");
        a.prototype.Tv =
            Q("zx");
        a.prototype.ld = Q("Ft");
        a.prototype.fb = function () {
            if (this.Ft)
                if (this.dT)
                    this.Yq = this.xj, this.Ax = this.xp, this.Cx = this.qL, this.zx = this.pL, this.Ft = y;
                else {
                    for (var a = this.Yq, e = this.xj - 180, g = this.xj + 180; a < e; )
                        a += g - e;
                    for (; a > g; )
                        a -= g - e;
                    this.Yq = a;
                    this.Yq = b(this.Yq, this.xj);
                    this.Ax = b(this.Ax, this.xp);
                    this.Cx = b(this.Cx, this.qL);
                    this.zx = b(this.zx, this.pL);
                    this.Yq == this.xj && this.Ax == this.xp && this.Cx == this.qL && this.zx == this.pL && (this.Ft = y)
                }
        };
        return a
    });
    define("bV", ["require", "ku", "jt", "bi"], function (a) {
        function b() {
            this.W = y;
            this.Ob = this.pa = this.$ = 0;
            this.YI = m
        }
        var c = a("ku"),
        e = a("jt"),
        g = a("bi");
        b.prototype.nd = function (a) {
            this.W != a && (this.W = a, this.YI = m)
        };
        b.prototype.Ka = function (a, b, c) {
            this.$ = a;
            this.pa = b;
            this.Ob = c
        };
        b.prototype.im = Q("$");
        b.prototype.hm = Q("pa");
        b.prototype.Is = Q("Ob");
        b.prototype.ld = R(n);
        b.prototype.fb = function () {
            var a = c.q_(g.Dn().orientation);
            this.$ += this.YI === m ? 0 : a.ma - this.YI;
            this.YI = a.ma;
            this.pa = a.pitch;
            this.Ob = a.md;
            this.pa = f === m ? a.pitch :
                f;
            this.Ob = d === m ? a.md : d
        };
        var d = e.zg("debug") ? e.BM("force_vr_roll") : m,
        f = e.zg("debug") ? e.BM("force_vr_pitch") : m;
        return b
    });
    define("f", "require,do,fg,ll,bZ,eO,ce,fO,ei,cM,ee,ls,bV,dr,bi,R".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("ce"),
        h = a("fO"),
        j = a("ei"),
        p = a("cM"),
        k = a("ee"),
        l = a("ls"),
        q = a("bV"),
        o = a("dr"),
        t = a("bi"),
        s = a("R"),
        v = c.extend(d, function (a, b, c) {
            d.call(this);
            this.g = a;
            this.Vb = this.g.Vb;
            this.I = b;
            this.wb = c;
            this.Yr = this.lr = this.CB = this.uK = this.W = y;
            this.bb = new p;
            this.Vl = new l;
            this.Ob = this.pa = this.$ = 0;
            this.ba = 90;
            this.nv = 1;
            this.tf = m;
            this.$P = this.IA = 5;
            this.vs = y;
            this.wa = new k;
            this.wa.bind(k.Yn,
                this.AC, this, n);
            this.wa.bind(k.Yk, this.Jr, this, n);
            this.wa.bind(k.Ae, this.Hl, this, n);
            this.wa.bind(k.ze, this.Gl, this, n);
            this.Xh = new h;
            this.Xh.bind(e.aa, this.d7, this);
            this.kr = y;
            this.cj = new j(this.g);
            this.cj.bind(j.wO, this.o7, this, n);
            this.sn = new q;
            t.bind(e.aa, this.pk, this, n);
            this.pk()
        });
        v.prototype.clear = function () {
            this.wa.unbind(k.Yn, this.AC, this, n);
            this.wa.unbind(k.Yk, this.Jr, this, n);
            this.wa.unbind(k.Ae, this.Hl, this, n);
            this.wa.unbind(k.ze, this.Gl, this, n);
            this.wa.wi();
            this.wa = r;
            this.Xh.unbind(e.aa, this.d7,
                this);
            this.Xh = r;
            this.cj.unbind(j.wO, this.o7, this, n);
            this.cj.clear();
            this.cj = r;
            t.unbind(e.aa, this.pk, this, n);
            this.wb = this.I = this.bb = r;
            this.CH();
            this.g = this.Vb = r
        };
        v.prototype.Qs = function (a) {
            this.bb.reset();
            this.Vl.reset();
            this.wa.Qs(a);
            this.IA = a.get("automaticRotationSpeed");
            this.$P = a.get("automaticZoomSpeed")
        };
        v.prototype.fh = function (a) {
            function c(d) {
                return b(a).contains(d)
            }
            b.isArray(a) || (a = [a]);
            var d = 0,
            e = 0,
            f = 0,
            g = y;
            if (!c(o.pe)) {
                c(o.Nw) ? d = -this.IA : c(o.Ow) && (d = +this.IA);
                c(o.Mw) ? e = -this.IA : c(o.Pw) && (e =
                            +this.IA);
                c(o.eo) ? f = -this.$P : c(o.fo) && (f = +this.$P);
                c(o.P) && (g = n);
                c(o.q1) && (f = f * 2);
                if (c(o.T0)) {
                    d = d * 10;
                    e = e * 10
                }
                d = d * this.nv;
                e = e * this.nv
            }
            this.Cb(d, e, 0, f, 0, 0, 0, 0, g, n, n, n)
        };
        v.prototype.Ka = function (a, b, c, d) {
            this.$ = a;
            this.pa = b;
            this.Ob = c;
            this.ba = d;
            this.nv = this.ba / 90;
            this.Xh.Ka(this.$, this.pa, this.Ob);
            this.sn.Ka(this.$, this.pa, this.Ob);
            this.wa.sw(this.ba);
            this.Vl.Ka(this.$, this.pa, this.Ob, this.ba)
        };
        v.prototype.moveTo = function (a, b, c, d, e) {
            this.Vl.moveTo(a, b, c, this.wb.Rba(d), e);
            this.uK = y;
            this.bb.reset();
            this.Bf()
        };
        v.prototype.b_ = function (a, b, c) {
            this.Cb(0, 0, 0, 0, a, b, c, 0, y, y, y)
        };
        v.prototype.ld = function () {
            return this.W && (this.Yr || this.LN()) ? n : y
        };
        v.prototype.zua = function () {
            this.Yr = this.vs = y
        };
        v.prototype.LN = function () {
            return this.W ? this.vs ? n : this.sn.W ? this.sn.ld() || this.bb.ld() : this.Xh.W ? this.kr ? n : this.Xh.ld() || this.bb.ld() : this.bb.ld() || this.Vl.ld() : y
        };
        v.prototype.fb = function (a) {
            this.vs = y;
            this.bb.fb(a);
            this.Yr = y;
            var b,
            c,
            d;
            d = this.ba;
            if (this.sn.W) {
                this.sn.fb(a);
                a = this.sn.im() + this.bb.Wq;
                b = this.sn.hm();
                c = this.sn.Is()
            } else if (this.Vl.ld()) {
                this.Vl.fb(a);
                a = this.Vl.im();
                b = this.Vl.hm();
                c = this.Vl.Is();
                d = this.Vl.Tv()
            } else {
                if (this.Xh.W) {
                    this.kr = y;
                    this.Xh.fb(a);
                    a = this.Xh.im() + this.bb.Wq;
                    b = this.Xh.hm();
                    this.CB && (b = b + this.bb.yx);
                    c = this.Xh.Is()
                } else {
                    a = this.$ + this.bb.Wq;
                    b = this.pa + this.bb.yx;
                    c = 0
                }
                d = d + this.bb.N3
            }
            this.wb.pm(d);
            this.I.Ka(a, b, c, this.wb.Pe(), this.wb.Lp());
            this.$ = this.I.ac();
            this.pa = this.I.ec();
            this.Ob = this.I.Qd();
            this.ba = this.I.Op();
            if (this.uK && this.I.Ica()) {
                d = this.bb.LE;
                if (this.I.Hca() || this.I.Jca())
                    d = -d;
                a = this.bb.cD;
                if (this.I.Kca() || this.I.Gca())
                    a =
                        -a;
                this.Cb(d, a, 0, 0, 0, 0, 0, 0, n, y, y, n)
            }
        };
        v.prototype.im = Q("$");
        v.prototype.hm = Q("pa");
        v.prototype.Is = Q("Ob");
        v.prototype.Tv = Q("ba");
        v.prototype.nd = function (a) {
            if (this.W != a) {
                if (this.W = a) {
                    this.ks(this.wa.Du == f.Xn ? s.yG : m);
                    this.wa.ow(this.g.getParent());
                    this.Bf()
                } else {
                    this.CH();
                    this.wa.wi()
                }
                this.eX()
            }
        };
        v.prototype.LF = function (a) {
            if (this.lr != a) {
                this.lr = a;
                this.eX();
                this.kr = n
            }
        };
        v.prototype.Ss = function (a) {
            this.cj.nd(a)
        };
        v.prototype.eX = function () {
            this.Xh.nd(this.W && this.lr && !t.isPresenting());
            this.sn.nd(this.W &&
                t.isPresenting())
        };
        v.prototype.d7 = function () {
            this.Bf()
        };
        v.prototype.MF = function (a) {
            this.CB = a;
            this.Xh.mza(this.CB)
        };
        v.prototype.Us = function (a) {
            this.wa.Us(a);
            this.ks(this.wa.Du == f.Xn ? s.yG : m)
        };
        v.prototype.xw = function (a) {
            this.wa.xw(a)
        };
        v.prototype.pk = function () {
            this.eX();
            this.Bf()
        };
        v.prototype.AC = function (a) {
            var b = !this.sn.W && (!this.Xh.W || this.CB);
            if (this.wa.Du == f.et) {
                var c = m;
                if (a.mq != 0 || a.Wp != 0) {
                    var d = Math.sqrt(a.Wp * a.Wp + a.mq * a.mq) > 25,
                    e = Math.atan2(a.Wp, a.mq) * 180 / Math.PI;
                    e >= -22.5 && e < 22.5 ? c = d ? s.p0 : s.o0 :
                        e >= 22.5 && e < 67.5 ? c = d ? s.r0 : s.y0 : e >= 67.5 && e < 112.5 ? c = d ? s.q0 : s.x0 : e >= 112.5 && e < 157.5 ? c = d ? s.s0 : s.z0 : e >= 157.5 || e < -157.5 ? c = d ? s.w0 : s.D0 : e >= -157.5 && e < -112.5 ? c = d ? s.v0 : s.C0 : e >= -112.5 && e < -67.5 ? c = d ? s.t0 : s.A0 : e >= -67.5 && e < -22.5 && (c = d ? s.u0 : s.B0)
                }
                this.ks(c);
                this.Cb(a.mq, a.Wp, 0, 0, a.cA, a.Kz, 0, 0, y, y, y, b)
            } else
                this.Cb(a.mq, a.Wp, 0, 0, a.cA, a.Kz, 0, 0, y, y, b, b)
        };
        v.prototype.Jr = function (a) {
            this.Cb(0, 0, 0, a.lwa, 0, 0, 0, a.PY, y, n, y, n)
        };
        v.prototype.Cb = function (a, b, c, d, e, f, g, h, j, k, l, o) {
            a = this.bb.a_(a, b, c, e, f, g, k, l, o) || y;
            this.Vb.get("zoomEnabled") &&
            (a = this.bb.qza(d, h) || a);
            if (a) {
                this.Vl.reset();
                this.uK = j;
                this.Bf()
            }
        };
        v.prototype.Bf = function () {
            this.Yr = n;
            this.trigger(new g(v.nf))
        };
        v.prototype.Hl = function () {
            this.vs = n;
            this.trigger(new g(v.Ae));
            this.wa.Du == f.Xn && this.ks(s.zG)
        };
        v.prototype.Gl = function () {
            this.trigger(new g(v.ze));
            this.wa.Du == f.Xn && this.ks(s.yG)
        };
        v.prototype.o7 = function (a) {
            this.fh(a.data.Dda);
            a.data.Dda.indexOf(o.pe) < 0 && this.g.Ta().trigger(new g(e.sG, {
                    Rea: a
                }))
        };
        v.prototype.ks = function (a) {
            if (this.tf != a && this.W) {
                this.tf && this.g.Lz(this.tf);
                (this.tf = a) && this.g.lN(this.tf)
            }
        };
        v.prototype.CH = function () {
            if (this.tf) {
                this.g.Lz(this.tf);
                this.tf = m
            }
        };
        v.nf = "position change request";
        v.Ae = "user interaction start";
        v.ze = "user interaction end";
        return v
    });
    define("jV", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("TargetRotationalCameraMovement", b).B("RotationalCameraMovement").J({
            path: "enum[left, right, shortest, longest]",
            targetYaw: "number",
            targetPitch: "number",
            targetHfov: "number"
        });
        return b
    });
    define("G", "require,fg,ll,fu,bZ,eO,dW,fo,jV,kX,bq".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("bZ"),
        d = a("eO"),
        f = a("dW");
        a("fo");
        a("jV");
        var h = a("kX"),
        j = a("bq"),
        p = b.extend(d, function (a, b, c) {
            d.call(this);
            this.g = a;
            this.I = b;
            this.wb = c;
            this.Fy = this.ud = r;
            this.Ur = this.Vr = y;
            this.Su = m;
            this.hy = [];
            this.xV = 0;
            this.O = r;
            this.pa = this.$ = 0;
            this.ba = 90
        });
        p.prototype.clear = function () {
            this.end();
            this.I = this.g = r
        };
        p.prototype.start = function (a) {
            this.jra(a);
            this.apa();
            this.Ur = y;
            this.g3();
            this.Vr = y;
            this.Bf();
            this.Vg()
        };
        p.prototype.end = function () {
            if (this.ud != r) {
                this.m3();
                this.Vr = this.Ur = y;
                this.O = r;
                this.Vg()
            }
        };
        p.prototype.nxa = function () {
            if (this.ud && this.ud.get("restartMovementOnUserInteraction")) {
                if (!this.Vr) {
                    this.O$();
                    this.sW();
                    this.O = r;
                    this.Vr = n;
                    this.Vg()
                }
            } else {
                this.O = r;
                this.pause()
            }
        };
        p.prototype.rxa = function () {
            if (this.Vr) {
                this.Vr = y;
                this.W5() || this.Ora()
            }
        };
        p.prototype.jra = function (a) {
            this.m3();
            this.ud = a;
            this.ud.bind(c.vt, this.c8, this, n);
            this.ud.bind(c.IG, this.b8, this, n);
            this.ud.bind(c.D("movementIndex"),
                this.IJ, this, n);
            this.hy = this.ud.get("movements", [])
        };
        p.prototype.m3 = function () {
            this.sW();
            if (this.ud != r) {
                this.ud.unbind(c.vt, this.c8, this);
                this.ud.unbind(c.IG, this.b8, this);
                this.ud.unbind(c.D("movementIndex"), this.IJ, this);
                this.ud.set("movementIndex", -1);
                this.ud = r;
                this.hy = []
            }
        };
        p.prototype.dh = function () {
            return this.ud ? this.Ur ? e.mc : e.P : e.H
        };
        p.prototype.Ka = function (a, b, c, d) {
            this.$ = a;
            this.pa = b;
            this.ba = d
        };
        p.prototype.ld = function () {
            return this.ud && this.O && !this.Ur && !this.Vr && !this.W5() ? n : y
        };
        p.prototype.fb =
        function (a) {
            if (this.ld()) {
                this.O.fb(a);
                a = this.O.Fb("hfov");
                if (this.wb.jda()) {
                    var b = this.O.Xba("hfov");
                    b.Rv = this.wb.jM(b.Rv);
                    b.Zz = this.wb.jM(b.Zz);
                    a = this.wb.jM(a)
                }
                this.I.Ka(this.O.Fb("yaw"), this.O.Fb("pitch"), 0, a, this.wb.Lp());
                this.$ = this.I.ac();
                this.pa = this.I.ec();
                this.ba = this.I.Op();
                this.O.Re() && this.hoa()
            }
        };
        p.prototype.im = Q("$");
        p.prototype.hm = Q("pa");
        p.prototype.Tv = Q("ba");
        p.prototype.play = function () {
            if (this.Ur) {
                this.Ur = y;
                this.O || this.IJ();
                this.g3();
                this.Bf();
                this.Vg()
            }
        };
        p.prototype.pause = function () {
            if (!this.Ur) {
                this.Ur =
                    n;
                this.O$();
                this.Vg()
            }
        };
        p.prototype.c8 = function () {
            this.play()
        };
        p.prototype.b8 = function () {
            this.pause()
        };
        p.prototype.apa = function () {
            this.xV = 0;
            var a = this.ud.get("movementIndex", -1);
            a == -1 && (a = 0);
            this.mK(a)
        };
        p.prototype.cpa = function () {
            this.xV++;
            var a = this.ud.get("repeat", 1);
            if (this.hy.length > 0 && (a == 0 || this.xV < a))
                this.mK(0);
            else {
                this.ud.trigger(new g(c.Ba));
                this.end();
                this.Hsa()
            }
        };
        p.prototype.bpa = function () {
            this.mK(this.ud.get("movementIndex", 0) + 1)
        };
        p.prototype.mK = function (a) {
            if (a < this.hy.length)
                this.ud.get("movementIndex") !=
                a ? this.ud.set("movementIndex", a) : this.IJ();
            else {
                this.ud.trigger(new g(c.wt));
                this.cpa()
            }
        };
        p.prototype.IJ = function () {
            var a = this.ud.get("movementIndex");
            this.O = a >= 0 ? this.uja(this.hy[a]) : r
        };
        p.prototype.hoa = function () {
            this.hy[this.ud.get("movementIndex")].trigger(new g(c.Ba));
            this.bpa()
        };
        p.prototype.W5 = function () {
            return this.Fy != r
        };
        p.prototype.Ora = function () {
            this.sW();
            var a = this,
            b = this.ud.get("restartMovementDelay") || 0;
            this.Fy = setTimeout(function () {
                a.Fy = r;
                a.voa()
            }, b);
            this.Vg()
        };
        p.prototype.sW = function () {
            if (this.Fy) {
                clearTimeout(this.Fy);
                this.Fy = r
            }
        };
        p.prototype.voa = function () {
            this.mK(this.ud.get("movementIndex"));
            this.Bf();
            this.Vg()
        };
        p.prototype.uja = function (a) {
            var b,
            c,
            d,
            e = this.ev(this.$, -180, 180),
            g = this.pa,
            p = this.ba;
            if (f.tb("TargetRotationalCameraMovement", a)) {
                b = a.get("targetYaw", e);
                c = a.get("targetPitch", g);
                if (d = a.get("targetHfov")) {
                    this.wb.Fea(d);
                    d = this.wb.Pe()
                } else
                    d = p;
                this.I.Ka(b, c, 0, d, this.wb.Lp());
                if (this.I.Qu)
                    b = this.I.ac();
                else
                    switch (this.Aka(a)) {
                    case "left":
                        b = this.ev(b, e - 360, e);
                        break;
                    case "right":
                        b = this.ev(b, e, e + 360);
                        break;
                    case "longest":
                        b = this.ev(b, e - 180, e + 180);
                        b = b >= e ? this.ev(b, e - 360, e) : this.ev(b, e, e + 360);
                        break;
                    default:
                        b = this.ev(b, e - 180, e + 180)
                    }
            } else if (f.tb("DistanceRotationalCameraMovement", a)) {
                b = e + a.get("yawDelta", 0);
                this.I.Qu && (b = Math.min(Math.max(-180, b), 180));
                c = g + a.get("pitchDelta", 0);
                d = p + a.get("hfovDelta", 0);
                this.I.Ka(b, c, 0, d, this.wb.Lp());
                this.I.Qu && (b = this.I.ac())
            }
            c = this.I.ec();
            d = this.I.Op();
            return new h(a.get("easing"), [new j("yaw", e, b, a.get("yawSpeed")), new j("pitch", g, c, a.get("pitchSpeed")), new j("hfov",
                        p, d, a.get("hfovSpeed"))], a.get("duration"))
        };
        p.prototype.g3 = function () {
            this.Su = m
        };
        p.prototype.O$ = function () {
            if (this.O) {
                this.Su = m;
                var a = this.O && this.O.Xba("yaw");
                if (a)
                    if (a.Zz > a.Rv)
                        this.Su = "right";
                    else if (a.Zz < a.Rv)
                        this.Su = "left"
            }
        };
        p.prototype.Aka = function (a) {
            a = a.get("path");
            if (a == "longest" && this.Su)
                a = this.Su;
            this.Su = m;
            return a
        };
        p.prototype.ev = function (a, b, c) {
            for (; a < b; )
                a = a + (c - b);
            for (; a > c; )
                a = a - (c - b);
            return a
        };
        p.prototype.Bf = function () {
            this.trigger(new g(p.nf))
        };
        p.prototype.Hsa = function () {
            this.trigger(new g(p.JO))
        };
        p.prototype.Vg = function () {
            this.trigger(new g(p.vb))
        };
        p.nf = "position change request";
        p.JO = "sequence end";
        p.vb = "playback state change";
        return p
    });
    define("bg", "require,do,fg,ll,bZ,eO,gw,fz,f,G,dr,bi,fu".split(","), function (a) {
        a("do");
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("gw"),
        f = a("fz"),
        h = a("f"),
        j = a("G"),
        p = a("dr"),
        k = a("bi"),
        l = a("fu"),
        q = b.extend(g, function (a, b) {
            g.call(this);
            this.g = a;
            this.g.bind(c.yb, this.kb, this);
            k.bind(c.aa, this.pk, this, n);
            this.wb = b;
            this.CV = y;
            this.ba = this.Ob = this.pa = this.$ = m;
            this.vn = this.un = this.oC = this.rC = this.qC = this.pC = y;
            this.wj = n;
            this.Sx = this.Ll = 0;
            this.W = y;
            this.bj = r;
            this.IB = 5E3;
            this.KB = this.$S = r;
            this.JV = [];
            this.Yf =
                this.Eq = l.H;
            this.I = new d(a);
            this.Ua = new h(this.g, this.I, this.wb);
            this.Ua.bind(h.nf, this.El, this, n);
            this.Ua.bind(h.Ae, this.Hl, this, n);
            this.Ua.bind(h.ze, this.Gl, this, n);
            this.aj = new f(this.g, this.I, this.wb);
            this.aj.bind(f.nf, this.El, this, n);
            this.kd = new j(this.g, this.I, this.wb);
            this.kd.bind(j.nf, this.El, this, n);
            this.kd.bind(j.JO, this.tU, this, n);
            this.kd.bind(j.vb, this.d8, this, n)
        });
        q.prototype.clear = function () {
            this.hn();
            this.Ua.unbind(h.nf, this.El, this);
            this.Ua.unbind(h.Ae, this.Hl, this, n);
            this.Ua.unbind(h.ze,
                this.Gl, this, n);
            this.Ua.clear();
            this.Ua = r;
            this.aj.unbind(f.nf, this.El, this, n);
            this.aj.clear();
            this.aj = r;
            this.kd.unbind(j.nf, this.El, this);
            this.kd.unbind(j.JO, this.tU, this);
            this.kd.unbind(j.vb, this.d8, this);
            this.kd.clear();
            this.I = this.kd = r;
            this.g.unbind(c.yb, this.kb, this);
            k.unbind(c.aa, this.pk, this, n);
            this.g = r;
            if (this.zb) {
                this.zb.unbind(c.D("sequences"), this.uU, this, n);
                this.zb = r
            }
            this.YK([])
        };
        q.prototype.end = function () {
            this.Eq = l.H;
            this.hn();
            this.Ua.nd(y);
            this.aj.nd(y);
            this.kd.end();
            this.W = y;
            this.qp(0,
                0, 0, 0);
            this.KB = this.$S = r;
            if (this.zb) {
                this.zb.unbind(c.D("sequences"), this.uU, this, n);
                this.zb = r
            }
            this.YK([]);
            this.vv()
        };
        q.prototype.start = function (a, b) {
            this.Eq = l.P;
            this.W = n;
            this.qp(0, 0, 0, 0);
            this.DD(a);
            this.Eqa(b);
            this.d9();
            this.iL(this.KB);
            this.aj.nd(n);
            this.vv()
        };
        q.prototype.dh = Q("Yf");
        q.prototype.play = function (a) {
            this.Eq = l.P;
            this.kd.dh() == l.mc ? this.kd.play() : this.kd.dh() == l.H && (!a && this.KB ? this.iL(this.KB) : this.Xx() || this.SD());
            this.vv()
        };
        q.prototype.resume = function () {
            if (this.Eq == l.mc) {
                this.Ua.zua();
                this.play(n)
            }
        };
        q.prototype.pause = function () {
            this.Ua.fh(p.pe);
            if (this.Eq == l.P) {
                this.Eq = l.mc;
                if (this.kd.dh() == l.P) {
                    this.kd.pause();
                    this.vv()
                } else
                    this.Xx() && this.hn()
            }
        };
        q.prototype.stop = function () {
            this.Eq = l.H;
            this.kd.dh() != l.H && this.kd.end();
            this.Ua.fh(p.pe);
            this.vv();
            this.Xx() && this.hn()
        };
        q.prototype.moveTo = function (a, b, c, d, e) {
            this.Ua.moveTo(a, b, c, d, e)
        };
        q.prototype.YK = function (a) {
            this.JV.forEach(function (a) {
                a.unbind(c.vt, this.J9, this, n)
            }
                .bind(this));
            this.JV = a;
            this.JV.forEach(function (a) {
                a.bind(c.vt,
                    this.J9, this, n)
            }
                .bind(this))
        };
        q.prototype.pk = function () {
            this.I.vN(k.isPresenting())
        };
        q.prototype.fh = function (a) {
            this.Ua.fh(a)
        };
        q.prototype.b_ = function (a, b, c) {
            this.Ua.b_(a, b, c)
        };
        q.prototype.LF = function (a) {
            if (this.lr != a) {
                this.lr = a;
                this.Ua.LF(this.lr);
                this.ea()
            }
        };
        q.prototype.MF = function (a) {
            this.Ua.MF(a)
        };
        q.prototype.Us = function (a) {
            this.Ua.Us(a)
        };
        q.prototype.xw = function (a) {
            this.Ua.xw(a)
        };
        q.prototype.Ss = function (a) {
            this.Ua.Ss(a)
        };
        q.prototype.Yp = function (a) {
            if (this.W)
                if (this.Ua.ld() || k.isPresenting() ||
                    this.lr && (this.Ua.W || !this.Ua.CB)) {
                    this.Ua.LN() && this.kd.nxa();
                    this.Ua.fb(a);
                    this.qi(this.Ua.im(), this.Ua.hm(), this.Ua.Is(), this.Ua.Tv());
                    this.ea()
                } else if (this.kd.Vr) {
                    this.kd.rxa();
                    this.ea()
                } else if (this.kd.ld()) {
                    this.kd.fb(a);
                    this.qi(this.kd.im(), this.kd.hm(), 0, this.kd.Tv());
                    this.ea()
                } else if (this.aj.ld()) {
                    this.aj.fb(a);
                    this.qi(this.aj.im(), this.aj.hm(), 0, this.aj.Tv());
                    this.ea()
                } else if (this.CV) {
                    this.CV = y;
                    this.wb.pm(this.g.Pe());
                    this.I.Ka(this.g.ac(), this.g.ec(), this.g.Qd(), this.wb.Pe(), this.wb.Lp());
                    this.qi(this.I.ac(), this.I.ec(), this.I.Qd(), this.I.Op());
                    this.ea()
                } else {
                    this.qp(0, 0, 0, 0);
                    this.Eq == l.P && this.kd.dh() != l.P && (this.Xx() || this.SD())
                }
        };
        q.prototype.dc = function () {
            this.pta();
            this.d9()
        };
        q.prototype.pta = function () {
            var a = this.g.ac() - this.$ || 0,
            b = this.g.ec() - this.pa || 0,
            c = this.g.Qd() - this.Ob || 0;
            this.qp(a, b, c, this.g.Pe() - this.ba || 0)
        };
        q.prototype.d9 = function () {
            this.$ = this.g.ac();
            this.pa = this.g.ec();
            this.Ob = this.g.Qd();
            this.ba = this.g.Pe();
            this.Ua.Ka(this.$, this.pa, this.Ob, this.ba);
            this.kd.Ka(this.$,
                this.pa, this.Ob, this.ba);
            this.aj.Ka(this.$, this.pa, this.Ob, this.ba)
        };
        q.prototype.DD = function (a) {
            this.I.gh(a)
        };
        q.prototype.Eqa = function (a) {
            this.zb = a;
            this.IB = a.get("timeToIdle", 5E3);
            this.$S = a.get("idleSequence");
            this.KB = a.get("initialSequence");
            this.Ua.Qs(a);
            this.aj.Qs(a);
            a.bind(c.D("sequences"), this.uU, this, n);
            this.YK(a.get("sequences", []))
        };
        q.prototype.uU = function () {
            this.YK(this.zb.get("sequences", []))
        };
        q.prototype.J9 = function (a) {
            this.iL(a.source)
        };
        q.prototype.El = function () {
            this.hn();
            this.ea()
        };
        q.prototype.Hl =
        function () {
            this.trigger(new e(q.Ae))
        };
        q.prototype.Gl = function () {
            this.trigger(new e(q.ze))
        };
        q.prototype.iL = function (a) {
            if (a) {
                this.Ua.nd(!a.get("mandatory", y));
                this.kd.start(a)
            } else
                this.tU()
        };
        q.prototype.tU = function () {
            this.Ua.nd(n);
            this.SD()
        };
        q.prototype.d8 = function () {
            this.vv()
        };
        q.prototype.kb = function () {
            this.CV = n;
            this.ea()
        };
        q.prototype.Xx = function () {
            return this.bj != r
        };
        q.prototype.SD = function () {
            this.hn();
            var a = this;
            this.bj = setTimeout(function () {
                a.bj = r;
                a.kU()
            }, this.IB)
        };
        q.prototype.hn = function () {
            if (this.bj) {
                clearTimeout(this.bj);
                this.bj = r
            }
        };
        q.prototype.kU = function () {
            this.iL(this.$S)
        };
        q.prototype.ea = function () {
            this.trigger(new e(q.La))
        };
        q.prototype.qi = function (a, b, c, d) {
            this.g.Ka(a, b, c, d)
        };
        q.prototype.qp = function (a, b, c, d) {
            var c = y,
            f = Math.abs(a) < 0.001 && Math.abs(b) < 0.001 && Math.abs(d) < 0.001;
            if (f || this.lr) {
                c = this.wj != n;
                this.vn = this.un = this.oC = this.rC = this.qC = this.pC = y;
                this.wj = n
            } else {
                if (this.pC != a < -0.001) {
                    this.pC = !this.pC;
                    c = n
                }
                if (this.qC != a > 0.001) {
                    this.qC = !this.qC;
                    c = n
                }
                if (this.oC != b < -0.001) {
                    this.oC = !this.oC;
                    c = n
                }
                if (this.rC != b > 0.001) {
                    this.rC =
                        !this.rC;
                    c = n
                }
                if (this.un != d < -0.001) {
                    this.un = !this.un;
                    c = n
                }
                if (this.vn != d > 0.001) {
                    this.vn = !this.vn;
                    c = n
                }
                if (this.wj != f) {
                    this.wj = !this.wj;
                    c = n
                }
            }
            f || this.trigger(new e(q.Vk, {
                    yaw: this.$,
                    pitch: this.pa,
                    roll: this.Ob,
                    hfov: this.ba
                }));
            if (c) {
                (this.W || this.wj) && this.trigger(new e(q.ih, {
                        movingLeft: this.pC,
                        movingRight: this.qC,
                        movingUp: this.rC,
                        movingDown: this.oC,
                        zoomingIn: this.un,
                        zoomingOut: this.vn,
                        stopped: this.wj
                    }));
                this.vv()
            }
        };
        q.prototype.vv = function () {
            var a;
            if (this.W) {
                a = this.kd.dh();
                if (!this.wj)
                    a = l.P
            } else
                a = l.H;
            if (this.Yf !=
                a) {
                this.Yf = a;
                this.trigger(new e(q.vb, {
                        state: this.Yf
                    }))
            }
        };
        q.La = "request frame";
        q.ih = "movement change";
        q.Vk = "position change";
        q.vb = "playback state change";
        q.Ae = "user interaction start";
        q.ze = "user interaction end";
        return q
    });
    define("fn", "require,ll,gw,r,fT,jt,bi,ku".split(","), function (a) {
        function b(a, d, e) {
            this.g = a;
            this.wb = d;
            this.rs = e;
            this.I = new c(a);
            e.Mj && this.I.gh(e.Mj);
            this.pp = new c(a);
            this.ay = this.Ro = m;
            this.$ = this.g.ac();
            this.pa = this.g.ec();
            this.Ob = this.g.Qd();
            this.ba = this.rs.Mj ? this.g.Pe() : b.I_;
            this.G$ = 0;
            this.N = r;
            this.e6 = n
        }
        a("ll");
        var c = a("gw");
        a("r");
        var e = a("fT"),
        g = a("jt"),
        d = a("bi"),
        f = a("ku");
        b.prototype.gh = function (a) {
            if (this.N != a) {
                this.Sr = n;
                this.N = a
            }
        };
        b.prototype.vw = function (a, b) {
            this.$ = a;
            this.pa = b
        };
        b.prototype.nz =
        function (a) {
            this.wb.Fea(a);
            return this.wb.Pe()
        };
        b.prototype.pm = P("ba");
        b.prototype.QF = P("e6");
        b.prototype.ww = P("G$");
        b.prototype.Yp = function () {
            if (this.wb.jda())
                this.ba = this.wb.jM(this.ba);
            if (this.rs.sb()) {
                var a = d.Dn().orientation,
                a = f.q_(a);
                this.$ = this.$ + (this.Ro === m ? 0 : a.ma - this.Ro);
                this.Ro = a.ma;
                this.pa = a.pitch;
                this.Ob = a.md;
                this.pa = j === m ? a.pitch : j;
                this.Ob = h === m ? a.md : h
            } else if (this.rs.yca()) {
                var a = e.Fn(),
                b = this.gv(a.yaw, this.$);
                this.$ = this.$ + (this.Ro === m ? 0 : b - this.Ro);
                this.pa = this.pa + (this.ay === m ? 0 :
                        a.pitch - this.ay);
                this.Ob = a.roll;
                this.Ro = a.yaw;
                this.ay = a.pitch
            } else {
                a = this.gv(this.g.ac(), this.$);
                b = this.g.ec();
                this.$ = this.$ + (this.Ro === m ? 0 : a - this.Ro);
                this.pa = this.pa + (this.ay === m ? 0 : b - this.ay);
                this.Ob = this.g.Qd()
            }
            this.Sr && this.I.gh(this.N);
            this.I.vN(d.isPresenting());
            this.I.Ka(this.$, this.pa, this.Ob, this.ba, this.wb.Lp());
            if (this.Sr) {
                this.Sr = y;
                if (this.rs && this.rs.Mj)
                    if (a = this.g.bg(this.rs.Mj)) {
                        a.set("deltaYaw", this.g.ac() - this.I.ac());
                        a.set("deltaPitch", this.g.ec() - this.I.ec());
                        a.set("deltaRoll", this.g.Qd() -
                            this.I.Qd())
                    }
            }
            this.$ = this.I.ac();
            this.pa = this.I.ec();
            this.Ob = this.I.Qd();
            if (!this.rs.sb() && !this.rs.yca()) {
                this.Ro = this.$;
                this.ay = this.pa
            }
            this.ba = this.e6 ? this.I.Op() : this.ba;
            this.g.Ka(this.$, this.pa, this.Ob, this.ba);
            this.g.ww(this.G$)
        };
        b.prototype.rN = function (a, b) {
            this.pp.gh(a);
            this.pp.Ka(0, 0, 0, b, this.wb.Lp());
            return this.pp.Op()
        };
        b.prototype.Uxa = function (a, b) {
            this.pp.gh(a);
            this.pp.Ka(b.ma, b.pitch, b.md, b.bd, this.wb.Lp());
            b.ma = this.pp.ac();
            b.pitch = this.pp.ec();
            b.md = this.pp.Qd();
            b.bd = this.pp.Op()
        };
        b.prototype.gv = function (a, b) {
            for (; a + 180 < b; )
                a = a + 360;
            for (; a - 180 > b; )
                a = a - 360;
            return a
        };
        b.prototype.Hba = function () {
            return b.I_
        };
        b.I_ = TDV.R0.wfa;
        var h = g.zg("debug") ? g.BM("force_vr_roll") : m,
        j = g.zg("debug") ? g.BM("force_vr_pitch") : m;
        return b
    });
    define("lD", "require,dW,fj,jo,r,bi".split(","), function (a) {
        function b(a, d, g, p) {
            this.g = a;
            a = this.g.C;
            this.s_ = a.get("transitionMode", "blending");
            var k = a.get("transitionDuration", 500);
            if (this.wma(d, g)) {
                this.s_ = b.uG;
                k = 1500
            }
            this.qba = a.get("blendingTransitionDuration", k);
            this.cva = a.get("firstTransitionDuration", k);
            this.Nua = a.get("disolveTransitionDuration", k);
            this.Mza = a.get("translationTransitionDuration", 1E3);
            this.Nza = a.get("translationTransitionEnabled", n);
            this.Ida = a.get("originTransitionDuration", 3E3);
            this.ON = 1E3;
            this.Mj = d;
            this.uza = !d || d.cda();
            this.cd = g;
            this.Eza = !g || g.bda();
            this.m_ = !g || g.cda();
            this.Dza = !!g && this.vT(g);
            a = (this.l_ = p) && p.get("initialPosition") || new c;
            this.zi = new c;
            this.zi.set("yaw", a.get("yaw", 0));
            this.zi.set("pitch", a.get("pitch"));
            this.zi.set("hfov", a.get("hfov"));
            this.Gd = new e;
            this.Gd.set("yaw", this.zi.get("yaw"));
            this.Gd.set("pitch", this.zi.get("pitch"));
            this.Gd.set("hfov", this.zi.get("hfov"));
            this.Gd.set("stereographicFactor", 0);
            this.Hk = [];
            if (!d) {
                this.Hk = p && p.get("displayMovements") ||
                    [];
                for (a = this.Hk.length - 1; a >= 0; a--) {
                    this.Gd.set("yaw", this.Gd.get("yaw", this.Hk[a].get("targetYaw")));
                    this.Gd.set("pitch", this.Gd.get("pitch", this.Hk[a].get("targetPitch")));
                    this.Gd.set("hfov", this.Gd.get("hfov", this.Hk[a].get("targethfov")));
                    this.Gd.set("stereographicFactor", this.Gd.get("stereographicFactor", this.Hk[a].get("stereographicFactor")))
                }
                p = p && p.get("displayOriginPosition") || this.zi;
                this.Gd.set("yaw", p.get("yaw"));
                this.Gd.set("pitch", p.get("pitch"));
                this.Gd.set("hfov", p.get("hfov"));
                this.Gd.set("stereographicFactor",
                    p.get("stereographicFactor"))
            }
            this.mode = (this.$F = this.s_ == b.vm && this.Nza && this.Eza ? this.fma(d, g) : r) ? b.f1 : d ? g ? this.s_ == "blending" ? b.vm : b.uG : b.b0 : b.a0;
            if (this.mode == b.vm && (!this.uza || !this.m_))
                if (this.Gd.get("stereographicFactor", 0) > 0 || this.Hk.filter(function (a) {
                        return a.get("targetStereographicFactor", 0) > 0
                    }).length > 0)
                    this.mode = b.uG
        }
        a("dW");
        var c = a("fj"),
        e = a("jo"),
        g = a("r"),
        d = a("bi");
        b.prototype.yca = function () {
            return this.g.Vb.get("gyroscopeEnabled")
        };
        b.prototype.sb = function () {
            return d.isPresenting()
        };
        b.prototype.fma = function (a, b) {
            if (!a || !b)
                return r;
            var c = (a.get("adjacentPanoramas") || []).filter(function (a) {
                return a.get("enabled") && a.oua() && a.get("panorama") == b
            });
            return c.length == 0 ? r : c[0]
        };
        b.prototype.wma = function (a, b) {
            return this.sb() && g.Rd() == g.Lh && (this.vT(a) || this.vT(b))
        };
        b.prototype.vT = function (a) {
            return !!a && a.Jh()
        };
        b.uG = "fade_out_fade_in";
        b.a0 = "fade_in";
        b.b0 = "fade_out";
        b.vm = "blending";
        b.f1 = "translation";
        return b
    });
    define("l", ["require"], function () {
        function a(a, c, e, g) {
            this.o = a;
            this.lb = c;
            this.g = e;
            this.R = g
        }
        a.prototype.Ej = R(y);
        a.prototype.Bi = D();
        a.prototype.oF = R(y);
        return a
    });
    define("je", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec) {
                if (!this.O) {
                    var b = this.g.bg(this.R.cd);
                    b.Fk();
                    b.set("alpha", 0.01);
                    this.O = new e("linear", [new g("alpha", 0, 1, m)], this.R.qba)
                }
                this.O.fb(a);
                a = this.O.Fb("alpha");
                b = this.g.bg(this.R.cd);
                b.set("alpha", a);
                this.O.Re() && (this.Ec = n)
            }
        };
        return a
    });
    define("jk", ["require", "fg", "l"], function (a) {
        var b = a("fg"),
        c = a("l"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f);
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function () {
            this.Ec || (this.as(), this.Ec = n)
        };
        a.prototype.as = D();
        return a
    });
    define("fS", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.as = function () {
            this.R.cd && !this.g.bg(this.R.cd) && (this.bf = this.g.create(this.R.cd), this.bf.set("alpha", 0), this.g.add(this.bf))
        };
        return a
    });
    define("fU", ["require", "fg", "jk", "bp"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        e = a("bp"),
        a = b.extend(c, function (a, b, e, h) {
            c.call(this, a, b, e, h)
        });
        a.prototype.as = function () {
            this.R.Dza && e.Bg(this.g.Ta())
        };
        return a
    });
    define("ea", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec && (this.O || (this.O = new e("linear", [new g("alpha", 0, 1, m)], this.g.C.Xza() ? this.R.cva : this.R.qba)), this.O.fb(a), a = this.O.Fb("alpha"), this.g.bg(this.R.cd).set("alpha", a), this.O.Re()))
                this.Ec = n
        };
        return a
    });
    define("bt", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec && (this.O || (this.O = new e("linear", [new g("alpha", 1, 0, m)], this.R.Nua)), this.O.fb(a), a = this.O.Fb("alpha"), this.g.bg(this.R.Mj).set("alpha", a), this.O.Re()))
                this.Ec = n
        };
        return a
    });
    define("bN", ["require", "fg", "l", "kX", "bq"], function (a) {
        function b(a, b, c) {
            for (; a < b; )
                a += c - b;
            for (; a > c; )
                a -= c - b;
            return a
        }
        var c = a("fg"),
        e = a("l"),
        g = a("kX"),
        d = a("bq"),
        a = c.extend(e, function (a, b, c, d) {
            e.call(this, a, b, c, d);
            this.O = r;
            this.Ec = y;
            this.sJ = 0
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec && (this.O || (this.O = this.sJ < this.R.Hk.length ? this.Lja(this.sJ) : this.vja()), this.O.fb(a), this.lb.vw(this.O.Fb("yaw"), this.O.Fb("pitch")), this.lb.pm(this.O.Fb("hfov")), this.lb.ww(this.O.Fb("stereographicFactor")),
                    this.O.Re()))
                this.O = r, this.sJ++, this.sJ > this.R.Hk.length && (this.lb.QF(n), this.Ec = n)
        };
        a.prototype.vja = function () {
            var a = b(this.g.ac(), -180, 180),
            c = this.g.ec();
            this.g.Qd();
            var e = this.g.Pe(),
            p = this.g.m.Ei,
            k = this.R.zi.get("hfov"),
            k = {
                ma: this.R.zi.get("yaw"),
                pitch: this.R.zi.get("pitch", c),
                md: this.g.Qd(),
                bd: k ? this.lb.nz(k) : e,
                Ei: 0
            };
            this.lb.Uxa(this.R.cd, k);
            k.ma = b(k.ma, a - 180, a + 180);
            var l = 0.5 < Math.abs(e - k.bd),
            q = Math.abs(p - k.Ei),
            o = 0.01 < q,
            l = this.R.sb() ? 1 : Math.max(l ? this.R.ON : 1, o ? this.R.Ida * q : 1);
            return new g(o ?
                "linear" : "cubic_in_out", [new d("yaw", a, k.ma, m), new d("pitch", c, k.pitch, m), new d("hfov", e, k.bd, m), new d("stereographicFactor", p, k.Ei, m)], l)
        };
        a.prototype.Lja = function (a) {
            var c = this.R.Hk[a],
            e = b(this.g.ac(), -180, 180),
            p = this.g.ec();
            this.g.Qd();
            var k = this.g.Pe(),
            l = this.g.m.Ei,
            q = c.get("targetStereographicFactor", l),
            o = c.get("targetHfov");
            if (o)
                o = this.lb.nz(o);
            else {
                for (o = y; a < this.R.Hk.length && !o; a++)
                    o = this.R.Hk[a].get("targetHfov") !== m;
                o ? o = k : (o = this.lb.nz(this.R.zi.get("hfov", this.lb.Hba())), o = k + (o - k) * (l - q))
            }
            var a =
                c.get("targetYaw", e),
            t = c.get("targetPitch", p);
            this.g.Qd();
            switch (c.get("path")) {
            case "left":
                a = b(a, e - 360, e);
                break;
            case "right":
                a = b(a, e, e + 360);
                break;
            case "longest":
                a = b(a, -360, 360);
                a = a >= e ? b(a, e, e + 360) : b(a, e - 360, e);
                break;
            default:
                a = b(a, e - 180, e + 180)
            }
            return new g(c.get("easing"), [new d("yaw", e, a, c.get("yawSpeed")), new d("pitch", p, t, c.get("pitchSpeed")), new d("hfov", k, o, c.get("hfovSpeed")), new d("stereographicFactor", l, q, c.get("stereographicFactorSpeed"))], c.get("duration"))
        };
        return a
    });
    define("eB", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec) {
                if (!this.O) {
                    var b = this.g.ec(),
                    c = this.g.Pe(),
                    j = this.g.m.Ei,
                    p = this.R.Gd.get("stereographicFactor", 0),
                    k = Math.abs(j - p),
                    l = 0 < p ? this.R.Gd.get("pitch", b) : b,
                    q = this.R.Gd.get("hfov"),
                    q = q ? this.lb.nz(q) : c;
                    0 == p && (q = Math.min(c, this.lb.rN(this.R.cd, q)));
                    this.lb.QF(y);
                    k = this.R.sb() ? 1 :
                        Math.max(0.5 < Math.abs(c - q) ? this.R.ON : 1, 0.01 < k ? this.R.Ida : 1);
                    this.O = new e("cubic_in_out", [new g("hfov", c, q, m), new g("pitch", b, l, m), new g("stereographicFactor", j, p, m)], k)
                }
                this.O.fb(a);
                this.lb.pm(this.O.Fb("hfov"));
                this.lb.ww(this.O.Fb("stereographicFactor"));
                this.lb.vw(this.g.ac(), this.O.Fb("pitch"));
                this.O.Re() && (this.lb.gh(this.R.cd), this.lb.vw(this.R.Gd.get("yaw"), this.R.Gd.get("pitch", this.g.ec())), this.Ec = n)
            }
        };
        return a
    });
    define("dC", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.as = function () {
            this.g.remove(this.g.bg(this.R.Mj))
        };
        return a
    });
    define("o", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.as = function () {
            this.lb.gh(this.R.cd);
            this.lb.vw(this.R.zi.get("yaw"), this.R.zi.get("pitch", this.g.ec()));
            var a = this.R.zi.get("hfov");
            a && (a = this.lb.nz(a), this.lb.pm(a))
        };
        return a
    });
    define("fC", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.as = function () {
            this.lb.gh(this.R.cd);
            this.lb.ww(this.R.m_ ? this.R.Gd.get("stereographicFactor", 0) : 0);
            this.lb.vw(this.R.Gd.get("yaw"), this.R.Gd.get("pitch", this.g.ec()));
            var a = this.R.Gd.get("hfov");
            !a && !this.R.Mj && (a = this.lb.Hba());
            a && (a = this.lb.nz(a), this.lb.pm(a), this.lb.QF(!this.R.m_))
        };
        return a
    });
    define("eR", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.as = function () {
            this.lb.gh(this.R.cd);
            this.lb.pm(this.lb.rN(this.R.cd, this.g.Pe()));
            this.lb.vw(this.g.ac() + this.R.$F.Wba(), this.g.ec())
        };
        a.prototype.oF = R(n);
        return a
    });
    define("ld", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec) {
                if (!this.O) {
                    var b = this.g.Pe(),
                    c = this.lb.rN(this.R.cd, b),
                    j = !this.R.sb() && 0.01 < Math.abs(b - c) ? this.R.ON : 1;
                    this.O = new e("cubic_in_out", [new g("hfov", b, c, m)], j)
                }
                this.O.fb(a);
                this.lb.pm(this.O.Fb("hfov"));
                this.O.Re() && (this.lb.QF(n), this.Ec = n)
            }
        };
        return a
    });
    define("et", ["require", "fg", "l", "kX", "bq"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("kX"),
        g = a("bq"),
        a = b.extend(c, function (a, b, e, g) {
            c.call(this, a, b, e, g);
            this.O = r;
            this.Ec = y
        });
        a.prototype.Ej = Q("Ec");
        a.prototype.Bi = function (a) {
            if (!this.Ec) {
                if (!this.O) {
                    var b = this.g.Pe(),
                    c = Math.min(this.lb.rN(this.R.cd, b), b),
                    j = !this.R.sb() && 0.01 < Math.abs(b - c) ? this.R.ON : 1;
                    this.O = new e("cubic_in_out", [new g("hfov", b, c, m)], j);
                    this.lb.QF(y)
                }
                this.O.fb(a);
                this.lb.pm(this.O.Fb("hfov"));
                this.O.Re() && (this.lb.gh(this.R.cd), this.lb.vw(this.g.ac() +
                        this.R.$F.Wba(), this.g.ec()), this.Ec = n)
            }
        };
        a.prototype.oF = R(n);
        return a
    });
    define("bj", ["require", "fg", "l", "r"], function (a) {
        var b = a("fg"),
        c = a("l"),
        e = a("r"),
        a = b.extend(c, function (a, b, e, h) {
            c.call(this, a, b, e, h);
            this.m = "not initialized";
            this.va = 0
        });
        a.prototype.Ej = function () {
            return "ended" == this.m
        };
        a.prototype.Bi = function (a) {
            this.Ej() || ("not initialized" == this.m && this.eT(), "initialized" == this.m && (this.Wl.get("ready") || this.Wl.UY()) && this.Cra(), "started" == this.m && this.L(a), 1 <= this.va && this.qB())
        };
        a.prototype.eT = function () {
            this.G8 = this.R.Mza;
            this.NA = 0.25;
            this.aia = 0.75;
            this.Apa =
                0.25;
            this.faa = this.gma();
            this.FP = 0.5 * this.G8;
            this.Nsa = this.G8 - 2 * this.FP;
            this.Bu = 1 / (this.FP + this.Nsa);
            this.WG = this.Bu / this.FP;
            this.sp = 0;
            this.Wl = this.g.bg(this.R.cd);
            this.hW = this.g.bg(this.R.Mj);
            this.Gx = this.R.$F.tva();
            this.m = "initialized"
        };
        a.prototype.gma = function () {
            var a = this.R.$F.get("distance");
            return a ? Math.min(0.99, a / this.R.Mj.get("distanceToFloor")) : 0.75
        };
        a.prototype.Cra = function () {
            this.g.Hea(!this.R.sb() && e.browser() != e.Ji);
            this.Wl.Fk();
            this.m = "started"
        };
        a.prototype.L = function (a) {
            this.Wl.get("ready") ||
            this.va < this.Apa ? this.va >= 1 - 0.5 * this.sp * this.sp / this.WG ? this.sp = Math.sqrt(2 * (1 - this.va) * this.WG) : this.sp < this.Bu && (this.sp = Math.min(this.sp + this.WG * a, this.Bu)) : this.sp = Math.max(this.sp - this.WG * a, 0);
            this.va = Math.min(Math.max(0, this.va + this.sp * a), 1);
            this.Wl.get("ready") || (this.NA = Math.max(this.NA, this.va));
            this.hta(this.va, Math.max(0, Math.min(1, (this.va - this.NA) / (this.aia - this.NA))))
        };
        a.prototype.qB = function () {
            this.Wl.set("alpha", 1);
            this.g.Hea(y);
            this.m = "ended"
        };
        a.prototype.hta = function (a, b) {
            var c =
                (a - 1) * this.faa;
            this.Wl.set("translationX", c * this.Gx.x);
            this.Wl.set("translationY", c * this.Gx.y);
            this.Wl.set("translationZ", c * this.Gx.z);
            this.Wl.get("ready");
            c = a * this.faa;
            this.hW.set("translationX", c * this.Gx.x);
            this.hW.set("translationY", c * this.Gx.y);
            this.hW.set("translationZ", c * this.Gx.z);
            this.Wl.set("alpha", Math.max(0.01, Math.min(0.99, b)))
        };
        a.prototype.oF = function () {
            return this.va < this.NA
        };
        return a
    });
    define("gR", ["require", "fg", "jk"], function (a) {
        var b = a("fg"),
        c = a("jk"),
        a = b.extend(c, function (a, b, d, f, h) {
            c.call(this, a, b, d, f);
            this.wia = h
        });
        a.prototype.as = function () {
            this.wia.call(this.o)
        };
        return a
    });
    define("eL", ["require", "fg", "l"], function (a) {
        var b = a("fg"),
        c = a("l"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f)
        });
        a.prototype.Ej = function () {
            var a = this.g.Ta(),
            b = a && a.cz,
            a = a && a.gy;
            return !!b && !b.get("visible") && !!a && !a.get("visible")
        };
        return a
    });
    define("E", ["require", "fg", "l"], function (a) {
        var b = a("fg"),
        c = a("l"),
        a = b.extend(c, function (a, b, d, f) {
            c.call(this, a, b, d, f);
            this.yK = r
        });
        a.prototype.Ej = function () {
            this.yK || (this.yK = this.R.cd && this.g.bg(this.R.cd));
            return this.yK && this.yK.get("ready")
        };
        a.prototype.oF = R(n);
        return a
    });
    define("lu", "require,bZ,eO,fn,lD,je,fS,fU,ea,bt,bN,eB,dC,o,fC,eR,ld,et,bj,gR,eL,E,fg".split(","), function (a) {
        var b = a("bZ"),
        c = a("eO"),
        e = a("fn"),
        g = a("lD"),
        d = a("je"),
        f = a("fS"),
        h = a("fU"),
        j = a("ea"),
        p = a("bt"),
        k = a("bN"),
        l = a("eB"),
        q = a("dC"),
        o = a("o"),
        t = a("fC"),
        s = a("eR"),
        v = a("ld"),
        u = a("et"),
        w = a("bj"),
        x = a("gR"),
        z = a("eL"),
        C = a("E"),
        A = a("fg").extend(c, function (a, b, d) {
            c.call(this);
            this.C = a;
            this.g = b;
            this.wb = d;
            this.lb = r;
            this.V3 = this.Hm = this.bD = this.fp = m;
            this.R = r;
            this.Le = []
        });
        A.prototype.clear = function () {
            this.sV(this.Hm);
            this.R && this.sV(this.R.cd);
            this.bD = this.fp = m;
            this.I = this.wb = this.g = this.C = this.R = r
        };
        A.prototype.start = function (a, b) {
            if (!this.R && a == this.Hm || this.R && a == this.R.cd)
                this.bD = this.fp = m;
            else {
                this.fp = a;
                this.bD = b;
                this.Le.length == 0 && this.kL()
            }
        };
        A.prototype.hide = function () {
            this.fp = r;
            !this.R && this.Hm && this.kL()
        };
        A.prototype.pva = function () {
            return this.R && this.R.cd
        };
        A.prototype.kL = function () {
            this.R = new g(this.g, this.Hm, this.fp, this.bD);
            this.lb = new e(this.g, this.wb, this.R);
            this.bD = this.fp = m;
            this.bc(f);
            switch (this.R.mode) {
            case g.b0:
                this.Oc(this.iE);
                this.bc(p);
                this.Oc(this.hE);
                this.bc(q);
                this.Oc(this.sv);
                break;
            case g.a0:
                this.Oc(this.CL);
                this.bc(C);
                this.bc(h);
                this.bc(t);
                this.Oc(this.Wy);
                this.bc(j);
                this.bc(z);
                this.bc(k);
                this.Oc(this.BL);
                break;
            case g.uG:
                this.Oc(this.CL);
                this.Oc(this.iE);
                this.bc(p);
                this.Oc(this.hE);
                this.bc(q);
                this.Oc(this.sv);
                this.bc(C);
                this.bc(h);
                this.bc(t);
                this.Oc(this.Wy);
                this.bc(j);
                this.bc(z);
                this.bc(k);
                this.Oc(this.BL);
                break;
            case g.f1:
                this.Oc(this.CL);
                this.Oc(this.iE);
                this.Oc(this.hE);
                if (this.R.sb()) {
                    this.bc(s);
                    this.Oc(this.Wy);
                    this.bc(w);
                    this.bc(q);
                    this.Oc(this.sv)
                } else {
                    this.bc(u);
                    this.Oc(this.Wy);
                    this.bc(w);
                    this.bc(q);
                    this.Oc(this.sv);
                    this.bc(v);
                    this.bc(h);
                    this.bc(z)
                }
                this.Oc(this.BL);
                break;
            case g.vm:
                this.Oc(this.CL);
                this.bc(C);
                if (this.R.sb()) {
                    this.Oc(this.iE);
                    this.Oc(this.hE);
                    this.bc(o);
                    this.Oc(this.Wy);
                    this.bc(d);
                    this.bc(q);
                    this.Oc(this.sv)
                } else {
                    this.Oc(this.iE);
                    this.Oc(this.hE);
                    this.bc(l);
                    this.Oc(this.Wy);
                    this.bc(d);
                    this.bc(q);
                    this.Oc(this.sv);
                    this.bc(h);
                    this.bc(z);
                    this.bc(k)
                }
                this.Oc(this.BL)
            }
            this.ea()
        };
        A.prototype.KW =
        function () {
            this.Hm = this.R.cd;
            this.V3 = this.R.l_;
            this.R = this.lb = r;
            this.fp === m ? this.Hm ? this.wsa(this.Hm, this.V3) : this.xsa() : this.kL()
        };
        A.prototype.Yp = function (a) {
            for (; this.Le.length; ) {
                var b = this.Le[0];
                if (this.fp !== m && this.fp !== this.Hm && b.oF()) {
                    this.sV(this.R.cd);
                    this.Le = [];
                    this.kL();
                    break
                } else {
                    b.Bi(a);
                    this.ea();
                    this.lb.Yp(a);
                    if (b.Ej()) {
                        this.Le.shift();
                        this.Le.length == 0 && this.KW()
                    } else
                        break
                }
            }
        };
        A.prototype.dc = D();
        A.prototype.bc = function (a) {
            this.Le.push(new a(this, this.lb, this.g, this.R))
        };
        A.prototype.Oc =
        function (a) {
            this.Le.push(new x(this, this.lb, this.g, this.R, a))
        };
        A.prototype.sV = function (a) {
            if (a)
                if (a = this.g.bg(a)) {
                    this.g.remove(a);
                    this.sv()
                }
        };
        A.prototype.CL = function () {
            this.trigger(new b(A.IO, {
                    panorama: this.R.cd
                }))
        };
        A.prototype.sv = function () {
            this.trigger(new b(A.zO, {
                    panorama: this.R ? this.R.Mj : this.Hm,
                    nextPanorama: this.R ? this.R.cd : r
                }))
        };
        A.prototype.iE = function () {
            this.trigger(new b(A.mt, {
                    panorama: this.R.Mj
                }))
        };
        A.prototype.hE = function () {
            this.trigger(new b(A.lt, {
                    panorama: this.R.Mj,
                    nextPanorama: this.R.cd
                }))
        };
        A.prototype.BL = function () {
            this.trigger(new b(A.nt, {
                    panorama: this.R.cd,
                    camera: this.R.l_
                }))
        };
        A.prototype.Wy = function () {
            this.trigger(new b(A.ot, {
                    panorama: this.R.cd,
                    camera: this.R.l_
                }))
        };
        A.prototype.wsa = function (a, c) {
            this.trigger(new b(A.hO, {
                    panorama: a,
                    camera: c
                }))
        };
        A.prototype.xsa = function () {
            this.trigger(new b(A.iO))
        };
        A.prototype.ea = function () {
            this.trigger(new b(A.La))
        };
        A.La = "request frame";
        A.IO = "request load";
        A.zO = "panorama removed";
        A.hO = "all pending panoramas displayed";
        A.iO = "all pending panoramas hidden";
        A.lt = "panorama end";
        A.ot = "panorama start";
        A.nt = "panorama show";
        A.mt = "panorama hide";
        return A
    });
    define("js", ["require", "fg", "bZ", "eO"], function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = b.extend(e, function (a) {
            e.call(this);
            this.g = a
        });
        g.prototype.clear = function () {
            this.end();
            this.g = r
        };
        g.prototype.Cz = function (a) {
            for (var b = this.qI(a), c = a.CM(), e = 0; e < b; e++)
                this.g.bg(this.nS(a, e)).set("alpha", e == c ? 1 : 0)
        };
        g.prototype.getTime = R(0);
        g.prototype.start = D();
        g.prototype.end = D();
        g.prototype.play = D();
        g.prototype.pause = D();
        g.prototype.Jz = D();
        g.prototype.Sz = D();
        g.prototype.EN = D();
        g.prototype.stop = D();
        g.prototype.uw =
            D();
        g.prototype.Rs = D();
        g.prototype.MN = D();
        g.prototype.dc = D();
        g.prototype.dh = D();
        g.prototype.qI = function (a) {
            return a.get("frames").length
        };
        g.prototype.nS = function (a, b) {
            return a.get("frames")[b]
        };
        g.prototype.ea = function () {
            this.trigger(new c(g.La))
        };
        g.prototype.Yl = function (a, b, e, j, p, k) {
            this.trigger(new c(g.Qj, {
                    time: a,
                    duration: b,
                    transitionPosition: e,
                    transitionLength: j,
                    steps: p,
                    selectedStep: k
                }))
        };
        g.prototype.Vg = function () {
            this.trigger(new c(g.vb, {
                    state: this.dh()
                }))
        };
        g.La = "request frame";
        g.zfa = "frame display";
        g.Afa = "frame hide";
        g.Qj = "time change";
        g.vb = "playback state change";
        return g
    });
    define("be", "require,jquery.mod,do,fg,ll,ge,bZ,js,fk,ed,jt,bi,id".split(","), function (a) {
        a("jquery.mod");
        var b = a("do"),
        c = a("fg"),
        e = a("ll"),
        g = a("ge");
        a("bZ");
        var d = a("js"),
        f = a("fk"),
        h = a("ed");
        a("jt");
        var j = a("bi"),
        p = a("id"),
        k = c.extend(d, function (a) {
            d.call(this, a);
            this.jI = r;
            this.ZR = this.ju = 0;
            this.N = this.zu = r;
            this.uB = m;
            this.VU = y;
            this.ba = 360;
            this.$aa = 180;
            this.pa = 0.5;
            this.mk = 0.2;
            this.Vo = 0.45;
            this.j6 = 5E3;
            this.n6 = 1;
            this.nJ = [[0.5, 0.25], [0.5, 0.375], [0.25, 0.5], [0.375, 0.5], [0.5, 0.5], [0.625, 0.5], [0.75, 0.5], [0.5,
                    0.625], [0.5, 0.75]];
            this.una = [0.05, 0.1, 0.05, 0.1, 0.4, 0.1, 0.05, 0.1, 0.05]
        });
        k.prototype.Cz = function (a) {
            d.prototype.Cz.call(this, a);
            this.DD(a)
        };
        k.prototype.start = function (a) {
            this.DD(a);
            this.ea()
        };
        k.prototype.end = function () {
            this.DD(r)
        };
        k.prototype.DD = function (a) {
            if (this.N != a) {
                if (this.N) {
                    this.Ksa();
                    this.N = r;
                    this.Osa()
                }
                if (this.N = a) {
                    this.Yha();
                    this.ba = a.get("hfov", 360);
                    this.$aa = a.get("vfov", 180);
                    this.pa = a.get("pitch", 0);
                    this.ZU = this.$u = m;
                    this.ona(a);
                    this.va = 0.5
                }
            }
        };
        k.prototype.MN = function () {
            this.VU = y
        };
        k.prototype.uw =
        function (a) {
            this.va = a / k.AA;
            this.ea();
            this.VU = n
        };
        k.prototype.Rs = function (a) {
            this.uw(a)
        };
        k.prototype.Yl = function () {
            var a = this.qI(this.N),
            b = this.va * (a - 1),
            c = Math.max(0, Math.min(a - 2, Math.floor(b))),
            e = m;
            b - c < 0.01 ? e = c : b - c > 0.99 && (e = c + 1);
            d.prototype.Yl.call(this, this.va * k.AA, k.AA, this.va * k.AA, k.AA, a, e)
        };
        k.prototype.dc = function (a) {
            if (this.N) {
                var b = this.g.ac(),
                c = this.g.ec(),
                d = this.g.Qd(),
                e = 0;
                if (this.$u !== m && this.ZU !== m && this.Q8 !== m)
                    var g = b - this.$u, k = c - this.ZU, p = d - this.Q8, e = Math.sqrt(g * g + k * k + p * p) * 1E3 / a;
                this.$u =
                    b;
                this.ZU = c;
                this.Q8 = d;
                for (var g = this.qI(this.N), x = this.va * (g - 1), k = Math.max(0, Math.min(g - 2, Math.floor(x))), p = k + 1, x = 1 - (x - k), z = 1 - x, C = [], A = 0; A < g; A++)
                    C.push(0);
                C[p] = z;
                C[k] = z < 1 ? 1 : 0;
                for (A = 0; A < g; A++)
                    this.g.bg(this.nS(this.N, A)).set("alpha", C[A]);
                this.Yl();
                if (this.jI && (e <= this.n6 || j.isPresenting()) && !this.VU) {
                    var A = Math.PI / 180,
                    e = 180 / Math.PI,
                    C = this.g.Aa(),
                    K = this.g.eb(),
                    F = new h;
                    F.bq(-d * A);
                    F.Nn(-c * A);
                    F.aq(-b * A);
                    b = [];
                    for (A = 0; A < this.nJ.length; A++) {
                        d = this.g.unproject(new f(this.nJ[A][0] * C, this.nJ[A][1] * K, 0)).tca();
                        d.apply(F);
                        c = d.ac() * e;
                        d = d.ec() * e;
                        b.push(Math.round((90 - d) * this.ZR / 180) * this.ju + Math.round((c + 180) * this.ju / 360))
                    }
                    c = [];
                    for (A = 0; A < g; A++) {
                        d = this.jI[A];
                        for (C = e = 0; C < this.nJ.length; C++)
                            e = e + this.una[C] * d[b[C]];
                        c.push(e)
                    }
                    A = c[k];
                    b = c[p];
                    k = x * c[k] + z * c[p];
                    a = Math.min(1 / g, a / this.j6);
                    g = this.va;
                    p = Math.max.apply(Math, c);
                    x = Math.min.apply(Math, c);
                    k < this.mk && k < p ? g = b > k ? g + a : g - a : k > this.Vo && k > x && (g = A < k ? g - a : g + a);
                    g = Math.min(1, Math.max(0, g));
                    if (this.va != g) {
                        this.va = g;
                        this.ea()
                    }
                }
            }
        };
        k.prototype.ona = function (a) {
            var c = b(a.get("frames",
                        [])).map(function (a) {
                    return a.get("thumbnailUrl")
                });
            this.zu = b(c).map(function (a) {
                var b = r;
                if (a) {
                    b = new p(g.Uj);
                    b.bind(e.S, this.w7, this);
                    b.bind(e.oe, this.x7, this)
                }
                return b
            }, this);
            b(this.zu).each(function (a, b) {
                a && a.load(c[b])
            })
        };
        k.prototype.Osa = function () {
            this.S3();
            this.jI = r
        };
        k.prototype.doa = function () {
            this.ju = 150;
            this.zu.map(function (a) {
                if (a)
                    this.ju = Math.min(a.ad() * 360 / this.ba, this.ju)
            }, this);
            this.ZR = Math.round(this.ju / 2);
            this.jI = this.zu.map(function (a) {
                return this.Hja(a, this.ju, this.ZR, this.ba, this.$aa,
                    this.pa)
            }, this);
            this.S3()
        };
        k.prototype.Hja = function (a, b, c, d, e, f) {
            var g = document.createElement("canvas");
            g.width = b;
            g.height = c;
            var h = g.getContext("2d");
            h.fillStyle = "#000000";
            h.fillRect(0, 0, b, c);
            if (a) {
                a = a.we();
                d = Math.round(b * d / 360);
                h.drawImage(a, (b - d) * 0.5, Math.round(c * (90 - (f + e * 0.5)) / 180), d, Math.round(c * e / 180))
            }
            b = [];
            g = h.getImageData(0, 0, g.width, g.height);
            for (c = h = 0; h < g.height; h++)
                for (e = 0; e < g.width; e++, c = c + 4)
                    b.push((0.299 * g.data[c] + 0.587 * g.data[c + 1] + 0.114 * g.data[c + 2]) / 255);
            return b
        };
        k.prototype.S3 = function () {
            b(this.zu).each(function (a) {
                if (a) {
                    a.unbind(e.S,
                        this.w7, this);
                    a.unbind(e.oe, this.x7, this);
                    a.cancel()
                }
            }, this);
            this.zu = r
        };
        k.prototype.w7 = function () {
            b(this.zu).filter(function (a) {
                return a && !a.Sp()
            }).length == 0 && this.doa()
        };
        k.prototype.x7 = D();
        k.prototype.Yha = function () {
            this.N.bind(e.D("minimumLuminance"), this.bp, this);
            this.N.bind(e.D("maximumLuminance"), this.bp, this);
            this.N.bind(e.D("luminanceChangeTime"), this.bp, this);
            this.N.bind(e.D("maxLuminanceChangeSpeed"), this.bp, this);
            this.bp()
        };
        k.prototype.Ksa = function () {
            this.N.unbind(e.D("minimumLuminance"),
                this.bp, this);
            this.N.unbind(e.D("maximumLuminance"), this.bp, this);
            this.N.unbind(e.D("luminanceChangeTime"), this.bp, this);
            this.N.unbind(e.D("maxLuminanceChangeSpeed"), this.bp, this)
        };
        k.prototype.bp = function () {
            this.mk = this.N.get("minimumLuminance");
            this.Vo = this.N.get("maximumLuminance");
            if (this.mk == m && this.Vo == m) {
                this.mk = 0.2;
                this.Vo = 0.45
            } else
                this.mk == m ? this.mk = Math.min(0.2, this.Vo) : this.mk == m ? this.Vo = Math.max(0.45, this.mk) : this.mk = Math.min(this.mk, this.Vo);
            this.Vo = Math.min(1, Math.max(0, this.Vo));
            this.mk =
                Math.min(1, Math.max(0, this.mk));
            this.j6 = Math.max(100, this.N.get("luminanceChangeTime", 5E3));
            this.n6 = this.N.get("maxLuminanceChangeSpeed", 1);
            this.ea()
        };
        k.AA = 1E3;
        return k
    });
    define("kp", ["require", "fg", "u", "fu", "js"], function (a) {
        var b = a("fg"),
        c = a("u"),
        e = a("fu"),
        g = a("js"),
        a = b.extend(g, function (a) {
            g.call(this, a);
            this.hI = this.iI = r;
            this.Ig = this.uf = 5E3;
            this.tc = m;
            this.gb = this.uf;
            this.dk = 1;
            this.N = r;
            this.tu = y
        });
        a.prototype.start = function (a) {
            this.N = a;
            this.tu = y;
            this.QI = n;
            this.iI = c.watch(this.N, "frameDisplayTime", this.$W, this);
            this.hI = c.watch(this.N, "frameTransitionTime", this.$W, this);
            this.dk = this.qI(this.N);
            this.tc = this.N.CM() * (this.uf + this.Ig);
            this.$W(n);
            this.Yl();
            this.ea();
            this.Vg()
        };
        a.prototype.$W = function (a) {
            var b = Math.max(100, this.N.get("frameDisplayTime", 5E3)),
            c = Math.max(100, this.N.get("frameTransitionTime", 5E3));
            if (this.uf != b || this.Ig != c || a) {
                var a = this.Ox(),
                e = this.lla();
                this.iS();
                this.uf = b;
                this.Ig = c;
                1 < this.dk ? (this.tc = a * (this.uf + this.Ig) + e * this.uf + e * this.Ig, this.gb = this.dk * (this.uf + this.Ig)) : (this.tc = e * this.uf, this.gb = this.uf)
            }
        };
        a.prototype.Ox = function () {
            return 1 < this.dk ? Math.floor(this.tc / (this.uf + this.Ig)) : 0
        };
        a.prototype.mla = function () {
            return 1 < this.dk ? (this.Ox() + 1) % this.dk :
            0
        };
        a.prototype.lla = function () {
            return 1 < this.dk ? Math.max(0, Math.min(1, this.tc - this.Ox() * (this.uf + this.Ig))) : this.tc / this.uf
        };
        a.prototype.iS = function () {
            return 1 < this.dk ? Math.max(0, Math.min(1, (this.tc - (this.Ox() * (this.uf + this.Ig) + this.uf)) / this.Ig)) : 0
        };
        a.prototype.Tra = function (a) {
            var b = Math.floor(a / this.Ig);
            return b * (this.uf + this.Ig) + this.uf + (a - b * this.Ig)
        };
        a.prototype.Y$ = function (a) {
            var b = Math.floor(a / (this.uf + this.Ig)),
            a = Math.max(0, a - b * (this.uf + this.Ig) - this.uf);
            return b * this.Ig + a
        };
        a.prototype.play =
        function () {
            this.tu && (this.tu = y, this.QI && this.ea(), this.Vg())
        };
        a.prototype.pause = function () {
            this.tu = n;
            this.Vg()
        };
        a.prototype.Jz = function () {
            this.pause()
        };
        a.prototype.Sz = function () {
            this.play()
        };
        a.prototype.end = function () {
            this.QI = y;
            this.N = r;
            this.iI && (this.iI.unwatch(), this.iI = r);
            this.hI && (this.hI.unwatch(), this.hI = r);
            this.Vg()
        };
        a.prototype.uw = function (a) {
            this.tc = a;
            this.ea()
        };
        a.prototype.Rs = function (a) {
            this.tc = this.Tra(a);
            this.ea();
            this.pause()
        };
        a.prototype.dc = function (a) {
            if (this.QI) {
                this.tu || (this.tc +=
                    a);
                this.tc %= this.gb;
                for (var a = this.Ox(), b = this.mla(), c = this.iS(), e = b > a ? c : 1, c = b > a ? 1 : 1 - c, g = 0; g < this.dk; g++) {
                    var k;
                    k = g == a ? c : g == b ? e : 0;
                    var l = this.g.bg(this.nS(this.N, g));
                    l.get("alpha") != k && (0 < k && 1 > k && l.Fk(), l.set("alpha", k))
                }
                this.Yl();
                this.tu || this.ea()
            }
        };
        a.prototype.dh = function () {
            return this.QI ? this.tu ? e.mc : e.P : e.H
        };
        a.prototype.Vg = function () {
            g.prototype.Vg.call(this, this.dh())
        };
        a.prototype.Yl = function () {
            var a = this.tc,
            b = this.gb,
            c = this.Y$(this.tc),
            e = this.Y$(this.gb),
            p = this.dk + 1,
            k = 0 === this.iS() ? this.Ox() :
                m;
            g.prototype.Yl.call(this, a, b, c, e, p, k)
        };
        return a
    });
    define("bv", ["require", "fg", "js"], function (a) {
        var b = a("fg"),
        c = a("js");
        return b.extend(c, function (a) {
            c.call(this, a)
        })
    });
    define("jA", ["require", "fg", "ll", "fu", "js"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("fu"),
        g = a("js"),
        a = b.extend(g, function (a) {
            g.call(this, a);
            this.rd = y
        });
        a.prototype.Cz = D();
        a.prototype.start = function (a) {
            this.end();
            this.N = a;
            this.N.set("mute", this.rd);
            this.N.get("autoplay") && this.N.set("state", e.P);
            this.io()
        };
        a.prototype.getTime = function () {
            return this.N ? this.N.get("currentTime") : 0
        };
        a.prototype.dh = function () {
            return this.N ? this.N.get("state") : e.H
        };
        a.prototype.play = function () {
            this.N && this.N.set("state",
                e.P)
        };
        a.prototype.pause = function () {
            this.N && this.N.set("state", e.mc)
        };
        a.prototype.EN = function () {
            this.N && this.N.set("state", e.mc)
        };
        a.prototype.stop = function () {
            this.N && this.N.set("state", e.H)
        };
        a.prototype.end = function () {
            this.N && (this.op(), this.N = r)
        };
        a.prototype.uw = function (a) {
            this.N && this.N.set("state", e.P);
            this.N && this.N.set("currentTime", a)
        };
        a.prototype.Kd = function (a) {
            this.rd = a;
            this.N && this.N.set("mute", this.rd)
        };
        a.prototype.io = function () {
            this.N.bind(c.D("currentTime"), this.hd, this, n);
            this.N.bind(c.D("duration"),
                this.hj, this, n);
            this.N.bind(c.D("state"), this.xh, this, n);
            this.N.get("state") != e.H && this.Vg()
        };
        a.prototype.op = function () {
            this.N.unbind(c.D("currentTime"), this.hd, this, n);
            this.N.unbind(c.D("duration"), this.hj, this, n);
            this.N.unbind(c.D("state"), this.xh, this, n)
        };
        a.prototype.xh = function () {
            this.Vg()
        };
        a.prototype.hd = function () {
            this.Yl()
        };
        a.prototype.hj = function () {
            this.Yl()
        };
        a.prototype.Yl = function () {
            this.N && g.prototype.Yl.call(this, this.N.get("currentTime"), this.N.get("duration"))
        };
        return a
    });
    define("t", "require,fg,fu,bZ,eO,dW,js,be,kp,bv,jA".split(","), function (a) {
        var b = a("fg");
        a("fu");
        var c = a("bZ"),
        e = a("eO"),
        g = a("dW"),
        d = a("js"),
        f = a("be"),
        h = a("kp"),
        j = a("bv"),
        p = a("jA"),
        k = b.extend(e, function (a) {
            e.call(this);
            this.g = a;
            this.JT = this.KH(h);
            this.MS = this.KH(f);
            this.SL = this.KH(p);
            this.lW = this.KH(j);
            this.oc = r
        });
        k.prototype.clear = function () {
            this.BH(this.JT);
            this.JT = r;
            this.BH(this.MS);
            this.MS = r;
            this.BH(this.SL);
            this.SL = r;
            this.BH(this.lW);
            this.g = this.oc = this.lW = r
        };
        k.prototype.KH = function (a) {
            a = new a(this.g);
            a.bind(d.La, this.Zc, this, n);
            a.bind(d.Qj, this.Pr, this, n);
            a.bind(d.vb, this.gd, this, n);
            return a
        };
        k.prototype.BH = function (a) {
            a.unbind(d.La, this.Zc, this);
            a.unbind(d.Qj, this.Pr, this);
            a.unbind(d.vb, this.gd, this);
            a.clear()
        };
        k.prototype.tT = function (a, b) {
            return g.tb(b, a)
        };
        k.prototype.M4 = function (a) {
            return this.tT(a, "HDRPanorama") ? this.MS : this.tT(a, "LivePanorama") ? this.JT : this.tT(a, "VideoPanorama") ? this.SL : this.lW
        };
        k.prototype.Cz = function (a) {
            (this.oc = this.M4(a)) && this.oc.Cz(a)
        };
        k.prototype.start = function (a) {
            this.Zc();
            (this.oc = this.M4(a)) && this.oc.start(a)
        };
        k.prototype.dh = function () {
            if (this.oc)
                return this.oc.dh()
        };
        k.prototype.getTime = function () {
            return this.oc ? this.oc.getTime() : 0
        };
        k.prototype.play = function () {
            this.oc && this.oc.play()
        };
        k.prototype.pause = function () {
            this.oc && this.oc.pause()
        };
        k.prototype.Jz = function () {
            this.oc && this.oc.Jz()
        };
        k.prototype.Sz = function () {
            this.oc && this.oc.Sz()
        };
        k.prototype.EN = function () {
            this.oc && this.oc.EN()
        };
        k.prototype.stop = function () {
            this.oc && this.oc.stop();
            this.trigger(new c(k.Qj, {
                    duration: 0,
                    time: 0,
                    steps: m,
                    selectedStep: m
                }))
        };
        k.prototype.end = function () {
            if (this.oc) {
                this.oc.end();
                this.oc = r
            }
        };
        k.prototype.uw = function (a) {
            this.oc && this.oc.uw(a)
        };
        k.prototype.Rs = function (a) {
            this.oc && this.oc.Rs(a)
        };
        k.prototype.MN = function () {
            this.oc && this.oc.MN()
        };
        k.prototype.dc = function (a) {
            this.oc && this.oc.dc(a)
        };
        k.prototype.Kd = function (a) {
            this.SL.Kd(a)
        };
        k.prototype.Zc = function () {
            this.trigger(new c(k.La))
        };
        k.prototype.Pr = function (a) {
            this.trigger(new c(k.Qj, a.data))
        };
        k.prototype.gd = function (a) {
            this.trigger(new c(k.vb,
                    a.data))
        };
        k.La = "request frame";
        k.zfa = "frame display";
        k.Afa = "frame hide";
        k.Qj = "time change";
        k.vb = "playback state change";
        return k
    });
    define("jB", ["require", "fg", "ll", "eO", "iL"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("eO"),
        g = a("iL"),
        a = b.extend(e, function (a) {
            e.call(this);
            this.g = a;
            this.bf = this.N = r
        });
        a.prototype.start = function (a) {
            this.N = a;
            this.bf = this.g.bg(this.N);
            this.bf.bind(c.S, this.Ze, this, n);
            this.bf.bind(c.wc, this.ep, this, n);
            this.bf.get("ready") ? this.trigger(c.Lb, {
                panorama: this.N
            }) : this.bf.bind(c.Lb, this.LJ, this, n);
            this.bf.set("loadingActive", n)
        };
        a.prototype.stop = function () {
            this.N = r;
            this.bf && (this.bf.unbind(c.Lb, this.LJ, this),
                this.bf.unbind(c.S, this.Ze, this), this.bf.unbind(c.wc, this.ep, this), this.bf.set("loadingActive", y), this.bf = r, this.trigger(c.pe))
        };
        a.prototype.clear = function () {
            this.stop()
        };
        a.prototype.LJ = function () {
            this.bf.unbind(c.Lb, this.LJ, this);
            this.trigger(c.Lb, {
                panorama: this.N
            })
        };
        a.prototype.Ze = function () {
            this.bf.unbind(c.Lb, this.LJ, this);
            this.bf.unbind(c.S, this.Ze, this);
            this.bf.unbind(c.wc, this.ep, this);
            this.bf = r;
            this.trigger(c.S, {
                panorama: this.N
            });
            this.N = r;
            this.trigger(c.pe)
        };
        a.prototype.ep = function (a) {
            this.trigger(new g(c.wc,
                    a.Kh))
        };
        return a
    });
    define("hD", "require,fg,ll,bZ,eO,I".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("I"),
        f = b.extend(g, function (a) {
            g.call(this);
            this.g = a;
            this.vl = this.N = this.Sf = r;
            this.pa = this.$ = 0;
            this.ba = Math.PI * 0.5
        });
        f.prototype.clear = function () {
            this.stop();
            this.k9();
            this.Sf = this.g = r
        };
        f.prototype.XZ = function (a) {
            if (this.Sf != a) {
                this.k9();
                this.DH();
                this.Sf = a;
                this.g2();
                this.lha()
            }
        };
        f.prototype.lha = function () {
            this.Sf && this.Sf.bind(c.D("map"), this.y7, this, y)
        };
        f.prototype.k9 = function () {
            this.Sf && this.Sf.unbind(c.D("map"),
                this.y7, this, y)
        };
        f.prototype.stop = function () {
            this.DH();
            this.N = r
        };
        f.prototype.dc = function () {
            this.$ = this.g.ac();
            this.pa = this.g.ec();
            this.ba = this.g.Pe();
            this.Sf && this.vl && this.Sf.Kj(this.vl, this.$, this.pa, this.ba)
        };
        f.prototype.y7 = function () {
            if (this.N) {
                this.DH();
                (this.vl = this.F9(this.N, this.Sf.get("map", r), y)) && this.u$()
            }
        };
        f.prototype.display = function (a) {
            if (this.N != a) {
                this.DH();
                this.N = a;
                this.g2()
            }
        };
        f.prototype.hide = function (a) {
            this.N == a && this.stop()
        };
        f.prototype.DH = function () {
            if (this.vl) {
                this.sma();
                this.vl =
                    r
            }
        };
        f.prototype.g2 = function () {
            if (this.Sf && this.N)
                (this.vl = this.F9(this.N, this.Sf.get("map", r), n)) && this.u$()
        };
        f.prototype.F9 = function (a, b, c) {
            for (var a = a.get("mapLocations", []), e = 0; e < a.length; e++) {
                var d = a[e];
                if (d.get("map") == b)
                    return d
            }
            return c && a.length > 0 ? a[0] : r
        };
        f.prototype.u$ = function () {
            this.Sf.fua(this.vl);
            this.Sf.bind(d.jh, this.q9, this, n);
            this.Sf.Kj(this.vl, this.$, this.pa, this.ba)
        };
        f.prototype.sma = function () {
            if (this.Sf) {
                this.Sf.Lxa(this.vl);
                this.Sf.unbind(d.jh, this.q9, this)
            }
        };
        f.prototype.q9 = function (a) {
            this.trigger(new e(f.jh, {
                    yawDelta: a.data.yawDelta
                }))
        };
        f.jh = "request yaw change";
        return f
    });
    define("eu", ["require", "fg", "bZ", "eO", "dQ"], function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("eO"),
        g = a("dQ"),
        d = b.extend(e, function (a) {
            e.call(this);
            this.g = a;
            this.g.bind(g.HO, this.Y7, this, n)
        });
        d.prototype.clear = function () {
            this.g.unbind(g.HO, this.Y7, this, n);
            this.g = r
        };
        d.prototype.Ma = function () {
            this.g.Ma()
        };
        d.prototype.Y7 = function (a) {
            a = a.data.frameTime;
            this.trigger(new c(d.Wk, {
                    frameTime: a
                }));
            this.trigger(new c(d.Xk, {
                    frameTime: a
                }))
        };
        d.Wk = "frameStart";
        d.Xk = "positionSet";
        return d
    });
    define("gv", ["require", "r", "it"], function (a) {
        function b() {
            this.ia = this.X = 0;
            this.ba = 90;
            this.ii = "landscape";
            this.xU = y;
            this.MB = c.Za()
        }
        var c = a("r"),
        e = a("it");
        b.prototype.Fea = function (a) {
            this.ba = this.Rba(a)
        };
        b.prototype.Rba = function (a) {
            return this.MB && "portrait" == this.ii ? e.Jv(a, this.ia, this.X) : a
        };
        b.prototype.Dva = function (a) {
            return this.MB && "portrait" == this.ii ? e.Kk(a, this.X, this.ia) : a
        };
        b.prototype.pm = function (a) {
            return this.ba = this.MB && this.xU ? e.Jv(a, this.ia, this.X) : a
        };
        b.prototype.jda = function () {
            return this.MB &&
            this.xU
        };
        b.prototype.Lp = function () {
            return this.MB && "portrait" == this.ii
        };
        b.prototype.Pe = Q("ba");
        b.prototype.jM = function (a) {
            return e.Jv(a, this.ia, this.X)
        };
        b.prototype.setSize = function (a, b) {
            this.X = a;
            this.ia = b;
            var c = this.Ila();
            this.xU = this.ii != c;
            this.ii = c
        };
        b.prototype.Ila = function () {
            return 0 === this.X || 0 === this.ia ? "landscape" : this.X < this.ia ? "portrait" : "landscape"
        };
        return b
    });
    define("kE", ["require", "fg", "fW", "bZ", "eO"], function (a) {
        var b = a("fg"),
        c = a("fW"),
        e = a("bZ"),
        g = a("eO"),
        d = b.extend(g, function (a) {
            g.call(this);
            this.g = a;
            this.W = y;
            this.Qo = this.Qo.bind(this);
            this.Vb = this.g.Vb
        });
        d.prototype.clear = function () {
            this.Vb = this.g = r
        };
        d.prototype.nd = function (a) {
            this.W != a && (this.W && document.removeEventListener("keyup", this.Qo), (this.W = a) && document.addEventListener("keyup", this.Qo))
        };
        d.prototype.Qo = function (a) {
            "translate" == this.Vb.get("arrowKeysAction") && (a.which == c.nG && !a.shiftKey ? this.trigger(new e(d.xO)) :
                a.which == c.OG && !a.shiftKey && this.trigger(new e(d.yO)))
        };
        d.yO = "moveForward";
        d.xO = "moveBackward";
        return d
    });
    define("gF", "require,do,fg,ll,bZ,eO,kE".split(","), function (a) {
        a("do");
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("kE"),
        a = b.extend(g, function (a) {
            g.call(this);
            this.g = a;
            this.cj = new d(a);
            this.cj.bind(d.yO, this.n7, this, n);
            this.cj.bind(d.xO, this.m7, this, n)
        });
        a.prototype.clear = function () {
            this.cj.unbind(d.yO, this.n7, this, n);
            this.cj.unbind(d.xO, this.m7, this, n);
            this.cj.clear();
            this.cj = r
        };
        a.prototype.Ss = function (a) {
            this.cj.nd(a)
        };
        a.prototype.gh = P("N");
        a.prototype.end = function () {
            this.N = r
        };
        a.prototype.n7 =
        function (a) {
            this.raa(a);
            (a = this.E9(this.g.ac(), this.a5())) && a.trigger(c.Mi)
        };
        a.prototype.m7 = function (a) {
            this.raa(a);
            (a = this.E9(this.g.ac() - 180, this.a5())) && a.trigger(c.Mi)
        };
        a.prototype.raa = function (a) {
            this.g.Ta().trigger(new e(c.sG, {
                    Rea: a
                }))
        };
        a.prototype.a5 = function () {
            return this.g.Vb.get("keyboardTranslateSelectionAngle")
        };
        a.prototype.E9 = function (a, b) {
            var c,
            e;
            if (!this.N)
                return r;
            c !== m || (c = -90);
            e !== m || (e = 360);
            var d = a - b * 0.5,
            f = a + b * 0.5,
            g = Math.max(-90, c - e * 0.5),
            t = Math.max(90, c + e * 0.5);
            e = this.N.get("adjacentPanoramas",
                    []).slice();
            e = e.filter(function (b) {
                if (!b.get("enabled"))
                    return y;
                b = this.ir(b);
                if (!b)
                    return y;
                var c;
                c = b.ma;
                for (var e = a - 180, j = a + 180; c < e; )
                    c = c + (j - e);
                for (; c > j; )
                    c = c - (j - e);
                b = b.pitch;
                return d <= c && c <= f && g <= b && b <= t
            }
                    .bind(this));
            if (e.length == 0)
                return r;
            e.sort(function (b, e) {
                var d = this.ir(b),
                f = this.ir(e);
                return (a - d.ma) * (a - d.ma) + (c - d.pitch) * (c - d.pitch) - ((a - f.ma) * (a - f.ma) + (c - f.pitch) * (c - f.pitch))
            }
                .bind(this));
            return e[0]
        };
        a.prototype.ir = function (a) {
            var b = a.get("yaw"),
            a = a.get("distance");
            if (b === m || a === m)
                return r;
            var c = this.N.get("distanceToFloor");
            return {
                ma: b,
                pitch: -90 + Math.atan2(a, c) * f
            }
        };
        var f = 180 / Math.PI;
        return a
    });
    define("iY", "require,fg,ll,bZ,eO,cy,bg,lu,t,jB,hD,eu,gv,gF,cU".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("cy"),
        f = a("bg"),
        h = a("lu"),
        j = a("t"),
        p = a("jB"),
        k = a("hD"),
        l = a("eu"),
        q = a("gv"),
        o = a("gF"),
        t = a("cU"),
        s = b.extend(g, function (a, b) {
            g.call(this);
            this.C = a;
            this.g = b;
            this.g.set("visible", y);
            this.wb = new q;
            this.ge = new l(this.g);
            this.ee = new p(this.g);
            this.Wa = new h(this.C, this.g, this.wb);
            this.oa = new f(this.g, this.wb);
            this.Cd = new j(this.g);
            this.Wo = new k(this.g);
            this.nc = new d(this.g);
            this.AL = new o(this.g);
            this.ge.bind(l.Wk, this.Lr, this, n);
            this.ge.bind(l.Xk, this.Mr, this, n);
            this.ee.bind(c.Lb, this.u7, this, n);
            this.ee.bind(c.pe, this.vC, this, n);
            this.ee.bind(c.wc, this.Zo, this, n);
            this.Wa.bind(h.La, this.Zc, this, n);
            this.Wa.bind(h.IO, this.v7, this, n);
            this.Wa.bind(h.zO, this.H7, this, n);
            this.Wa.bind(h.hO, this.M6, this, n);
            this.Wa.bind(h.iO, this.N6, this, n);
            this.Wa.bind(h.ot, this.EC, this, n);
            this.Wa.bind(h.mt, this.Kr, this, n);
            this.Wa.bind(h.nt, this.cp, this, n);
            this.Wa.bind(h.lt, this.DC, this, n);
            this.oa.bind(f.La,
                this.Zc, this, n);
            this.oa.bind(f.ih, this.Cl, this);
            this.oa.bind(f.Vk, this.P7, this);
            this.oa.bind(f.vb, this.gd, this, n);
            this.oa.bind(f.Ae, this.Hl, this, n);
            this.oa.bind(f.ze, this.Gl, this, n);
            this.Cd.bind(j.La, this.Zc, this, n);
            this.Cd.bind(j.Qj, this.Pr, this, n);
            this.Cd.bind(j.vb, this.gd, this, n);
            this.Wo.bind(k.jh, this.A7, this, n)
        });
        s.prototype.clear = function () {
            this.ee.clear();
            this.ge.clear();
            this.oa.clear();
            this.Wa.clear();
            this.Cd.clear();
            this.Wo.clear();
            this.nc.clear();
            this.ee.unbind(c.Lb, this.u7, this);
            this.ee.unbind(c.pe,
                this.vC, this);
            this.ee.unbind(c.wc, this.Zo, this);
            this.ge.unbind(l.Wk, this.Lr, this);
            this.ge.unbind(l.Xk, this.Mr, this);
            this.Wa.unbind(h.La, this.Zc, this);
            this.Wa.unbind(h.IO, this.v7, this);
            this.Wa.unbind(h.zO, this.H7, this);
            this.Wa.unbind(h.hO, this.M6, this);
            this.Wa.unbind(h.iO, this.N6, this);
            this.Wa.unbind(h.ot, this.EC, this);
            this.Wa.unbind(h.mt, this.Kr, this);
            this.Wa.unbind(h.nt, this.cp, this);
            this.Wa.unbind(h.lt, this.DC, this);
            this.oa.unbind(f.Cfa, this.Zc, this);
            this.oa.unbind(f.ih, this.Cl, this);
            this.oa.unbind(f.Vk,
                this.P7, this);
            this.oa.unbind(f.vb, this.gd, this, n);
            this.oa.unbind(f.Ae, this.Hl, this);
            this.oa.unbind(f.ze, this.Gl, this);
            this.Cd.unbind(j.La, this.Zc, this);
            this.Cd.unbind(j.Qj, this.Pr, this);
            this.Cd.unbind(j.vb, this.gd, this);
            this.Wo.unbind(k.jh, this.A7, this);
            this.C = this.g = this.AL = this.nc = this.Wo = this.Cd = this.Wa = this.oa = this.ge = this.ee = r
        };
        s.prototype.XZ = function (a) {
            this.Wo.XZ(a)
        };
        s.prototype.gh = function (a, b, c) {
            this.g.set("visible", n);
            this.Cd.EN();
            a.set("currentTime", c);
            this.Wa.start(a, b)
        };
        s.prototype.xz =
        function () {
            return this.ee.N || this.Wa.pva() || this.Wa.Hm
        };
        s.prototype.cq = function () {
            this.ee.stop();
            this.Cd.end();
            this.oa.end();
            this.Wa.hide();
            this.Wo.stop();
            this.nc.end();
            this.AL.end()
        };
        s.prototype.Sz = function () {
            this.oa.resume();
            this.Cd.Sz()
        };
        s.prototype.Jz = function () {
            this.oa.pause();
            this.Cd.Jz()
        };
        s.prototype.play = function () {
            this.oa.play();
            this.nc.play();
            this.Cd.play()
        };
        s.prototype.pause = function () {
            this.oa.pause();
            this.nc.pause();
            this.Cd.pause()
        };
        s.prototype.stop = function () {
            this.oa.stop();
            this.nc.stop();
            this.Cd.stop()
        };
        s.prototype.Ss = function (a) {
            this.oa.Ss(a);
            this.AL.Ss(a)
        };
        s.prototype.getTime = function () {
            return this.Cd.getTime()
        };
        s.prototype.moveTo = function (a, b, c, e, d) {
            this.oa.moveTo(a, b, c, e, d)
        };
        s.prototype.ac = function () {
            return this.g ? this.g.ac() : m
        };
        s.prototype.ec = function () {
            return this.g ? this.g.ec() : m
        };
        s.prototype.Qd = function () {
            return this.g ? this.g.Qd() : m
        };
        s.prototype.Pe = function () {
            return this.g ? this.wb.Dva(this.g.Pe()) : m
        };
        s.prototype.qY = function () {
            return this.g ? this.g.qY() : m
        };
        s.prototype.rY = function () {
            return this.g ?
            this.g.rY() : m
        };
        s.prototype.gd = function () {
            var a = this.Cd.dh() || this.oa.dh();
            this.trigger(new e(s.vb, {
                    state: a
                }))
        };
        s.prototype.fh = function (a) {
            this.oa.fh(a)
        };
        s.prototype.LF = function (a) {
            this.oa.LF(a)
        };
        s.prototype.Us = function (a) {
            this.oa.Us(a)
        };
        s.prototype.MF = function (a) {
            this.oa.MF(a)
        };
        s.prototype.Kd = function (a) {
            this.Cd.Kd(a)
        };
        s.prototype.xw = function (a) {
            this.oa.xw(a)
        };
        s.prototype.Rva = function (a, b) {
            var c = t.get(a, b, this.g.ac(), this.g.ec(), this.g.Qd(), this.g.Pe(), this.g.Aa(), this.g.eb());
            return c ? {
                x: c.x,
                y: c.y
            }
             :
            r
        };
        s.prototype.Iva = function (a, b) {
            var c = t.Wza(a, b, this.g);
            return c ? {
                yaw: c.ma,
                pitch: c.pitch
            }
             : r
        };
        s.prototype.HZ = function () {
            this.g.HZ()
        };
        s.prototype.v7 = function (a) {
            this.ee.start(a.data.panorama)
        };
        s.prototype.Zo = function (a) {
            this.g.sN(n);
            this.trigger(new e(s.wm, {
                    percent: a.Kh
                }))
        };
        s.prototype.u7 = function (a) {
            this.Cd.end();
            this.AL.gh(a.data.panorama)
        };
        s.prototype.vC = function () {
            this.g.sN(y);
            this.trigger(new e(s.ft))
        };
        s.prototype.Zc = function () {
            this.ge.Ma()
        };
        s.prototype.Lr = function (a) {
            a = a.data.frameTime;
            this.wb.setSize(this.g.Aa(),
                this.g.eb());
            this.Wa.Yp(a);
            this.oa.Yp(a)
        };
        s.prototype.Mr = function (a) {
            a = a.data.frameTime;
            this.Wa.dc(a);
            this.oa.dc(a);
            this.Cd.dc(a);
            this.Wo.dc(a);
            this.nc.dc(a)
        };
        s.prototype.EC = function (a) {
            this.Wo.display(a.data.panorama);
            this.Cd.Cz(a.data.panorama);
            this.trigger(new e(s.ot, {
                    panorama: a.data.panorama
                }))
        };
        s.prototype.H7 = function (a) {
            this.Wo.hide(a.data.panorama)
        };
        s.prototype.M6 = function (a) {
            this.Cd.start(a.data.panorama);
            this.nc.start(a.data.panorama)
        };
        s.prototype.N6 = function () {
            this.Cd.end();
            this.g.set("visible",
                y)
        };
        s.prototype.DC = function (a) {
            this.oa.end();
            this.nc.end(a.data.nextPanorama);
            this.trigger(new e(s.lt, {
                    panorama: a.data.panorama
                }))
        };
        s.prototype.cp = function (a) {
            this.oa.start(a.data.panorama, a.data.camera);
            this.trigger(new e(s.nt, {
                    panorama: a.data.panorama
                }))
        };
        s.prototype.Kr = function (a) {
            this.trigger(new e(s.mt, {
                    panorama: a.data.panorama
                }))
        };
        s.prototype.A7 = function (a) {
            this.oa.b_(a.data.yawDelta, 0)
        };
        s.prototype.Cl = function (a) {
            this.trigger(new e(s.ih, a.data))
        };
        s.prototype.P7 = function (a) {
            this.trigger(new e(s.Vk,
                    a.data))
        };
        s.prototype.Hl = function () {
            this.Cd.MN();
            this.trigger(new e(s.Ae))
        };
        s.prototype.Gl = function () {
            this.trigger(new e(s.ze))
        };
        s.prototype.xea = function (a) {
            this.Cd.uw(a)
        };
        s.prototype.Rs = function (a) {
            this.Cd.Rs(a)
        };
        s.prototype.Pr = function (a) {
            this.trigger(new e(s.Qj, a.data))
        };
        s.wm = "loadingProgress";
        s.ft = "loadingEnd";
        s.ih = "movementChange";
        s.Vk = "positionChange";
        s.ot = "panoramaStart";
        s.lt = "panoramaEnd";
        s.nt = "panoramaShow";
        s.mt = "panoramaHide";
        s.vb = "playbackStateChange";
        s.Ae = "userInteractionStart";
        s.ze = "userInteractionEnd";
        s.Qj = "timeChange";
        return s
    });
    define("kZ", "require,do,jquery.mod,fg,jd,ll,bZ,fu,ce,dW,jT,cu,dk,fE,iY,dr,dQ,fT,gL,bi,dm,fm".split(","), function (a) {
        a("do");
        a("jquery.mod");
        var b = a("fg");
        a("jd");
        var c = a("ll"),
        e = a("bZ"),
        g = a("fu"),
        d = a("ce"),
        f = a("dW"),
        h = a("jT"),
        j = a("cu"),
        p = a("dk"),
        k = a("fE"),
        l = a("iY"),
        q = a("dr"),
        o = a("dQ"),
        t = a("fT"),
        s = a("gL"),
        v = a("bi"),
        u = a("dm"),
        w = a("fm"),
        x = b.extend(p, function () {
            p.call(this, "panorama");
            p.prototype.set.call(this, "zoomEnabled", n);
            p.prototype.set.call(this, "surfaceSelectionEnabled", y);
            p.prototype.set.call(this,
                "surfaceSelectionHorizontalAngle", 90);
            p.prototype.set.call(this, "surfaceSelectionVerticalAngle", 180);
            p.prototype.set.call(this, "adjacentPanoramaPositionsEnabled", y);
            p.prototype.set.call(this, "fxaaEnabled", y);
            p.prototype.set.call(this, "aaEnabled", y);
            this.vW = this.XS = this.kr = this.hJ = this.pQ = this.Sr = this.Df = this.RP = y;
            this.DS = n;
            this.pl = this.Yx = this.IH = y;
            this.kI = this.aS = this.tc = this.gb = 0;
            this.NU = this.PU = m;
            this.$T = n;
            this.Yf = g.H;
            this.o = this.g = r;
            this.y6 = {};
            for (var a in x.ho)
                this.y6[a] = this.Kja(a);
            this.lH =
                new h(this, "buttonToggleGyroscope", u.Qh);
            this.lH.bind(c.Dg, function () {
                this.set("gyroscopeEnabled", n)
            }, this);
            this.lH.bind(c.Ph, function () {
                this.set("gyroscopeEnabled", y)
            }, this);
            this.lH.set("pressed", this.get("gyroscopeEnabled") && t.available);
            this.dia = new h(this, "buttonCardboardView", u.Wc);
            this.dia.bind(c.U, function () {
                this.set("viewMode", x.Bq)
            }, this, n);
            this.sia = new h(this, "buttonVRView", u.Wc);
            this.sia.bind(c.U, function () {
                this.set("viewMode", x.Bq)
            }, this, n);
            v.bind(c.aa, function () {
                this.qaa("viewMode");
                this.trigger(x.Z_)
            }, this, n);
            this.mH = new h(this, "buttonToggleHotspots", u.Qh);
            this.mH.bind(c.Dg, function () {
                this.set("hotspotsEnabled", n)
            }, this);
            this.mH.bind(c.Ph, function () {
                this.set("hotspotsEnabled", y)
            }, this);
            this.mH.set("pressed", this.get("hotspotsEnabled"));
            this.oH = new h(this, "buttonToggleSurfaceSelection", u.Qh);
            this.oH.bind(c.Dg, function () {
                this.set("surfaceSelectionEnabled", n)
            }, this);
            this.oH.bind(c.Ph, function () {
                this.set("surfaceSelectionEnabled", y)
            }, this);
            this.oH.set("pressed", this.get("surfaceSelectionEnabled"));
            this.qia = new h(this, "buttonScreenshot", u.Wc);
            this.qia.bind(c.U, this.z9, this, n);
            this.Ac = b.nm(this.Oe, this);
            this.set("arrowKeysAction", "rotate");
            this.set("doubleClickAction", "inherit");
            this.set("hotspotsEnabled", n);
            this.set("preloadEnabled", n);
            this.set("keyboardTranslateSelectionAngle", 90)
        });
        x.R_ = "cameraPositionChange";
        x.Ae = "userInteractionStart";
        x.ze = "userInteractionEnd";
        x.wm = "loadingProgress";
        x.W_ = "preloadMediaShow";
        x.Z_ = "viewModeChange";
        f.A("PanoramaPlayer", x).B("Object").J({
            aaEnabled: "bool",
            actualHFOV: "number",
            actualVFOV: "number",
            arrowKeysAction: "enum[rotate, translate, none]",
            buttonCardboardView: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonMoveDown: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonMoveLeft: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonMoveRight: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonMoveUp: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlay: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayDown: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayLeft: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayRight: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayUp: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRestart: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonStop: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleGyroscope: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleHotspots: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleSurfaceSelection: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonVRView: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonZoomIn: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonZoomOut: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonScreenshot: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            camera: "PanoramaCamera",
            currentTime: "number",
            displayPlaybackBar: "bool",
            doubleClickAction: "enum[toggle_fullscreen, translate, inherit]",
            fxaaEnabled: "bool",
            gyroscopeEnabled: "bool",
            gyroscopeVerticalDraggingEnabled: "bool",
            hdrPanoramaDisplayPlaybackBar: "bool",
            hdrPanoramaDisplayPlaybackBarSteps: "bool",
            hfov: "number",
            hotspotsEnabled: "bool",
            keyboardTranslateSelectionAngle: "number",
            livePanoramaDisplayPlaybackBar: "bool",
            livePanoramaDisplayPlaybackBarSteps: "bool",
            mapPlayer: "MapPlayer",
            mode: "enum[fast, quality]",
            mouseControlMode: "enum[drag_acceleration, drag_rotation]",
            panorama: "Panorama",
            pitch: "number",
            preloadEnabled: "bool",
            roll: "number",
            startTime: "number",
            state: "enum[stopped, playing, paused]",
            adjacentPanoramaPositionsEnabled: "bool",
            surfaceSelectionHorizontalAngle: "number",
            surfaceSelectionVerticalAngle: "number",
            surfaceSelectionEnabled: "bool",
            touchControlMode: "enum[drag_acceleration, drag_rotation]",
            video: "Video360",
            viewMode: "enum[standard, cardboard, vr]",
            videoPanoramaDisplayPlaybackBar: "bool",
            viewerArea: "ViewerArea",
            yaw: "number",
            zoomEnabled: "bool"
        }).Xb([c.EG, x.R_, x.wm, x.Ae, x.ze, x.W_, x.Z_, c.gc, j.ne, j.dg]).Cg({
            moveLeft: function () {
                this.Cb(q.Nw)
            },
            moveRight: function () {
                this.Cb(q.Ow)
            },
            moveUp: function () {
                this.Cb(q.Pw)
            },
            moveDown: function () {
                this.Cb(q.Mw)
            },
            playLeft: function () {
                this.Cb([q.Nw, q.P])
            },
            playRight: function () {
                this.Cb([q.Ow, q.P])
            },
            playUp: function () {
                this.Cb([q.Pw,
                        q.P])
            },
            playDown: function () {
                this.Cb([q.Mw, q.P])
            },
            play: function () {
                this.Rg()
            },
            pause: function () {
                this.rk()
            },
            stop: function () {
                this.Or()
            },
            seek: function (a) {
                this.js(a)
            },
            setFramePlaybackPosition: function (a) {
                this.Qqa(a)
            },
            setFrameTransitionPosition: function (a) {
                this.Rqa(a)
            },
            restart: function () {
                this.Nr()
            },
            zoomIn: function () {
                this.Cb(q.eo)
            },
            zoomOut: function () {
                this.Cb(q.fo)
            },
            resumeCamera: function () {
                this.$pa()
            },
            pauseCamera: function () {
                this.Yoa()
            },
            moveTo: function (a, b, c, e) {
                this.x6(a, b, c, e, y)
            },
            setPosition: function (a, b, c,
                e) {
                this.x6(a, b, c, e, n)
            },
            getScreenPosition: function (a, b) {
                return this.Xla(a, b)
            },
            getPanoramaPosition: function (a, b) {
                return this.Jla(a, b)
            },
            saveScreenshot: function () {
                return this.z9()
            }
        });
        x.prototype.get = function (a, b) {
            switch (a) {
            case "currentTime":
                return this.o && this.o.getTime() || 0;
            case "viewMode":
                return v.isPresenting() ? x.Bq : x.DP;
            case "video":
                a = "panorama";
                break;
            case "rendererPanorama":
                return this.o && this.o.xz()
            }
            if (!b)
                switch (a) {
                case "mouseControlMode":
                    b = d.m0;
                    break;
                case "touchControlMode":
                    b = d.e1
                }
            return p.prototype.get.call(this,
                a, b)
        };
        x.prototype.set = function (a, b) {
            if (this.get(a) != b) {
                switch (a) {
                case "application":
                    this.RP = n;
                    this.Ac();
                    break;
                case "startTime":
                    this.Sr = n;
                    this.Ac();
                    break;
                case "video":
                case "panorama":
                    a = "panorama";
                    this.Sr = n;
                    this.Ac();
                    break;
                case "camera":
                    this.pQ = n;
                    this.Ac();
                    break;
                case "viewerArea":
                    this.Df = n;
                    this.Ac();
                    break;
                case "displayPlaybackBar":
                case "hdrPanoramaDisplayPlaybackBarSteps":
                case "livePanoramaDisplayPlaybackBarSteps":
                case "buttonPlay":
                case "buttonPlayPause":
                    this.pl = n;
                    this.Ac();
                    break;
                case "mapPlayer":
                    this.hJ =
                        n;
                    this.Ac();
                    break;
                case "gyroscopeEnabled":
                    this.kr = n;
                    this.Ac();
                    break;
                case "gyroscopeVerticalDraggingEnabled":
                    this.DS = n;
                    this.Ac();
                    break;
                case "viewMode":
                    if (b == "vr")
                        b = x.Bq;
                    b == x.Bq && !v.isPresenting() ? v.Fh() : b != x.Bq && v.isPresenting() && v.$d();
                    b = v.isPresenting() ? x.Bq : x.DP;
                    break;
                case "hotspotsEnabled":
                    this.XS = n;
                    this.Ac();
                    break;
                case "mouseControlMode":
                case "touchControlMode":
                    this.IH = n;
                    this.Ac();
                    break;
                case "surfaceSelectionEnabled":
                    o.Vea() || (b = y);
                    this.vW = n;
                    this.Ac()
                }
                p.prototype.set.call(this, a, b)
            }
        };
        x.prototype.rm =
        function (a) {
            this.Yx = a;
            this.o && this.o.Ss(this.Yx)
        };
        x.prototype.xba = function () {
            return this.get("doubleClickAction") != "inherit"
        };
        x.prototype.hQ = function (a) {
            p.prototype.hQ.call(this, a);
            a.bind(c.DG, this.cba, this, n)
        };
        x.prototype.TW = function (a) {
            p.prototype.TW.call(this, a);
            a.unbind(c.DG, this.cba, this, n)
        };
        x.prototype.cba = function () {
            switch (this.get("doubleClickAction")) {
            case "toggle_fullscreen":
                var a = this.get("application").mg;
                a && a.available() && a.toggle()
            }
        };
        x.prototype.Kja = function (a) {
            var b = x.ho[a],
            a = new h(this,
                    a, u.Wc);
            a.bind(c.Hb, function () {
                this.Cb(b.movement)
            }, this);
            b.stopOnRelease && a.bind(c.fc, function () {
                this.Cb(q.pe)
            }, this);
            return a
        };
        x.prototype.Oe = function () {
            if (this.Df || this.RP) {
                this.Df = this.RP = y;
                this.IH = this.kr = this.hJ = n;
                this.Ao();
                this.get("viewerArea") && this.get("application") && this.xo();
                this.HD(this.get("viewerArea"))
            }
            var a = y;
            if (this.g) {
                if (this.hJ) {
                    this.hJ = y;
                    this.o.XZ(this.get("mapPlayer"))
                }
                if (this.IH) {
                    this.IH = y;
                    this.o.Us(this.get("mouseControlMode"));
                    this.o.xw(this.get("touchControlMode"))
                }
                if (this.Sr ||
                    this.pQ) {
                    this.kI = this.aS = this.gb = this.tc = 0;
                    this.NU = this.PU = m;
                    a = n;
                    this.pQ = this.Sr = y;
                    if (this.get("panorama")) {
                        this.tD();
                        this.o.gh(this.get("panorama"), this.get("camera", new k), this.get("startTime"))
                    } else {
                        this.o.cq();
                        this.$T = n;
                        this.Yf = g.H;
                        this.Zb(g.H)
                    }
                }
                if (this.DS) {
                    this.DS = y;
                    this.o.MF(this.get("gyroscopeVerticalDraggingEnabled", n))
                }
                if (this.kr) {
                    this.kr = y;
                    var b = this.get("gyroscopeEnabled") && t.available;
                    if (b && t.disabled) {
                        b = y;
                        s.e0.show(function () {
                            t.DZ(function () {
                                this.set("gyroscopeEnabled", n)
                            }
                                .bind(this))
                        }
                            .bind(this))
                    }
                    this.set("gyroscopeEnabled",
                        b);
                    this.o.LF(b);
                    this.lH.set("pressed", b)
                }
                if (this.XS) {
                    this.XS = y;
                    this.mH.set("pressed", this.get("hotspotsEnabled"))
                }
                if (this.pl) {
                    this.pl = y;
                    a = n
                }
                if (this.vW) {
                    this.vW = y;
                    this.oH.set("pressed", this.get("surfaceSelectionEnabled"))
                }
                a && this.us()
            }
        };
        x.prototype.Ty = function () {
            this.set("panorama", r)
        };
        x.prototype.xo = function () {
            var a = this.get("viewerArea"),
            b = this.get("application");
            this.g = new o(b, a, this);
            this.g.M({
                left: 0,
                top: 0,
                bottom: 0,
                right: 0
            });
            a.la(this.g);
            this.o = new l(a, this.g);
            this.o.bind(l.ih, this.Cl, this);
            this.o.bind(l.Vk,
                this.U6, this);
            this.o.bind(l.wm, this.Zo, this);
            this.o.bind(l.ft, this.ly, this);
            this.o.bind(l.nt, this.cp, this, n);
            this.o.bind(l.mt, this.Kr, this, n);
            this.o.bind(l.ot, this.EC, this, n);
            this.o.bind(l.lt, this.DC, this, n);
            this.o.bind(l.vb, this.gd, this);
            this.o.bind(l.Ae, this.Hl, this);
            this.o.bind(l.ze, this.Gl, this);
            this.o.bind(l.Qj, this.Pr, this);
            this.get("application").bind(c.D("mute"), this.CC, this);
            this.get("application").get("mute", y) && this.o.Kd(n);
            this.o && this.o.Ss(this.Yx);
            v.bind(c.aa, this.pk, this, n);
            this.QQ();
            this.ls(n)
        };
        x.prototype.Ao = function () {
            if (this.g) {
                this.o.unbind(l.ih, this.Cl, this);
                this.o.unbind(l.Vk, this.U6, this);
                this.o.unbind(l.wm, this.Zo, this);
                this.o.unbind(l.ft, this.ly, this);
                this.o.unbind(l.nt, this.cp, this, n);
                this.o.unbind(l.mt, this.Kr, this, n);
                this.o.unbind(l.ot, this.EC, this, n);
                this.o.unbind(l.lt, this.DC, this, n);
                this.o.unbind(l.vb, this.gd, this);
                this.o.unbind(l.Ae, this.Hl, this);
                this.o.unbind(l.ze, this.Gl, this);
                this.o.unbind(l.Qj, this.Pr, this);
                this.o.clear();
                this.o = r;
                this.get("application").unbind(c.D("mute"),
                    this.CC, this);
                this.g.getParent().removeChild(this.g);
                this.g = r;
                v.unbind(c.aa, this.pk, this, n);
                this.ls(y)
            }
        };
        x.prototype.CC = function () {
            this.g && this.o.Kd(this.get("application").get("mute", y))
        };
        x.prototype.gd = function (a) {
            this.Yf = a.data.state;
            this.je()
        };
        x.prototype.je = function () {
            this.Zb(this.$T || v.isPresenting() ? this.Yf : g.P)
        };
        x.prototype.Hl = function () {
            this.trigger(new e(x.Ae))
        };
        x.prototype.Gl = function () {
            this.trigger(new e(x.ze))
        };
        x.prototype.EC = function (a) {
            this.trigger(new e(x.W_, {
                    panorama: a.data.panorama
                }))
        };
        x.prototype.DC = D();
        x.prototype.cp = function (a) {
            this.QQ();
            this.iC(a.data.panorama)
        };
        x.prototype.Kr = function (a) {
            this.hC(a.data.panorama)
        };
        x.prototype.Cl = function (a) {
            for (var b in x.ho)
                this.y6[b].set("state", a.data[x.ho[b].pressedOn] ? w.Ca : w.dd);
            this.$T = a.data.stopped;
            this.je();
            this.trigger(new e(c.EG, a.data))
        };
        x.prototype.U6 = function (a) {
            this.QQ();
            this.trigger(new e(x.R_, a.data))
        };
        x.prototype.QQ = function () {
            if (this.o) {
                this.set("yaw", this.o.ac());
                this.set("pitch", this.o.ec());
                this.set("roll", this.o.Qd());
                this.set("hfov", this.o.Pe());
                this.set("actualHFOV", this.o.qY());
                this.set("actualVFOV", this.o.rY())
            }
        };
        x.prototype.Zo = function (a) {
            this.g.getParent().M({
                progressPercent: a.data.percent,
                progressVisible: n
            });
            this.trigger(new e(x.wm, a.data))
        };
        x.prototype.ly = function () {
            this.g.getParent().set("progressVisible", y)
        };
        x.prototype.pk = function () {
            this.set("viewMode", v.isPresenting() ? x.Bq : x.DP);
            this.je()
        };
        x.prototype.x6 = function (a, b, c, e, d) {
            this.o && this.o.moveTo(a, b, c, e, d)
        };
        x.prototype.Cb = function (a) {
            this.o && this.o.fh(a)
        };
        x.prototype.Rg = function () {
            this.o.play()
        };
        x.prototype.vj = function () {
            this.o.stop()
        };
        x.prototype.rk = function () {
            this.o.pause()
        };
        x.prototype.js = function (a) {
            this.o && (this.P4() ? this.o.Rs(a) : this.o.xea(a))
        };
        x.prototype.Qqa = function (a) {
            this.o && this.o.xea(a)
        };
        x.prototype.Rqa = function (a) {
            this.o && this.o.Rs(a)
        };
        x.prototype.Yoa = function () {
            this.o && this.o.Jz()
        };
        x.prototype.$pa = function () {
            this.o && this.o.Sz()
        };
        x.prototype.Xla = function (a, b) {
            if (this.o)
                return this.o.Rva(a, b)
        };
        x.prototype.Jla = function (a, b) {
            if (this.o)
                return this.o.Iva(a,
                    b)
        };
        x.prototype.z9 = function () {
            this.o && this.o.HZ()
        };
        x.prototype.eD = function (a) {
            this.js(a.data.position)
        };
        x.prototype.Pr = function (a) {
            this.tc = a.data.time;
            this.gb = a.data.duration;
            this.aS = a.data.transitionPosition;
            this.kI = a.data.transitionLength;
            this.PU = a.data.steps;
            this.NU = a.data.selectedStep;
            this.us()
        };
        x.prototype.us = function () {
            var a = this.g.getParent(),
            b = y;
            if (this.kla()) {
                var c = this.P4(),
                e = this.Lla();
                if (c) {
                    if (this.kI > 0) {
                        a.M({
                            playbackBarPosition: this.aS,
                            playbackBarDuration: this.kI,
                            playbackBarSteps: this.PU,
                            playbackBarSelectedStep: this.NU,
                            playbackBarLiveDragging: e
                        });
                        b = n
                    }
                } else if (this.gb > 0) {
                    a.M({
                        playbackBarPosition: this.tc,
                        playbackBarDuration: this.gb,
                        playbackBarSteps: m,
                        playbackBarSelectedStep: m,
                        playbackBarLiveDragging: e
                    });
                    b = n
                }
            }
            a.set("playbackBarVisible", b)
        };
        x.prototype.kla = function () {
            var a = this.get("panorama");
            return a ? f.tb("HDRPanorama", a) ? this.get("hdrPanoramaDisplayPlaybackBar", this.get("displayPlaybackBar", y)) : f.tb("LivePanorama", a) ? this.get("livePanoramaDisplayPlaybackBar", this.get("displayPlaybackBar",
                    y)) : f.tb("VideoPanorama", a) ? this.get("videoPanoramaDisplayPlaybackBar", this.get("displayPlaybackBar", n)) : y : y
        };
        x.prototype.P4 = function () {
            var a = this.get("panorama");
            return !a ? y : f.tb("HDRPanorama", a) ? this.get("hdrPanoramaDisplayPlaybackBarSteps", n) : f.tb("LivePanorama", a) ? this.get("livePanoramaDisplayPlaybackBarSteps", n) : y
        };
        x.prototype.Lla = function () {
            var a = this.get("panorama");
            return !a || f.tb("VideoPanorama", a) ? y : n
        };
        x.Bq = "cardboard";
        x.DP = "standard";
        x.ho = {
            buttonMoveLeft: {
                movement: q.Nw,
                pressedOn: "movingLeft",
                stopOnRelease: n
            },
            buttonMoveRight: {
                movement: q.Ow,
                pressedOn: "movingRight",
                stopOnRelease: n
            },
            buttonMoveUp: {
                movement: q.Pw,
                pressedOn: "movingUp",
                stopOnRelease: n
            },
            buttonMoveDown: {
                movement: q.Mw,
                pressedOn: "movingDown",
                stopOnRelease: n
            },
            buttonPlayLeft: {
                movement: [q.Nw, q.P],
                pressedOn: "movingLeft",
                stopOnRelease: y
            },
            buttonPlayRight: {
                movement: [q.Ow, q.P],
                pressedOn: "movingRight",
                stopOnRelease: y
            },
            buttonPlayUp: {
                movement: [q.Pw, q.P],
                pressedOn: "movingUp",
                stopOnRelease: y
            },
            buttonPlayDown: {
                movement: [q.Mw, q.P],
                pressedOn: "movingDown",
                stopOnRelease: y
            },
            buttonZoomIn: {
                movement: q.eo,
                pressedOn: "zoomingIn",
                stopOnRelease: n
            },
            buttonZoomOut: {
                movement: q.fo,
                pressedOn: "zoomingOut",
                stopOnRelease: n
            }
        };
        return x
    });
    define("cb", "fg,bZ,dW,cu,kZ,dl".split(","), function (a, b, c, e, g, d) {
        a = a.extend(d, function () {
            d.call(this)
        });
        c.A("PanoramaPlayListItem", a).B("PlayListItem").J({
            media: "Panorama",
            camera: "PanoramaCamera",
            player: "PanoramaPlayer"
        });
        a.prototype.start = function () {
            d.prototype.start.call(this);
            var a = this.get("player");
            if (a) {
                a.bind(e.ne, this.cp, this);
                a.set("panorama", this.get("media"));
                a.set("camera", this.get("camera"))
            }
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            if (a) {
                a.unbind(e.ne, this.cp, this);
                a.get("panorama") ==
                this.get("media") && a.set("panorama", r)
            }
            d.prototype.stop.call(this)
        };
        a.prototype.cp = function (a) {
            if (a.data.media == this.get("media")) {
                this.get("player").unbind(e.ne, this.cp, this);
                this.get("player").bind(e.dg, this.Kr, this);
                this.Iv()
            }
        };
        a.prototype.Kr = function (a) {
            if (a.data.media == this.get("media")) {
                this.get("player").unbind(e.dg, this.Kr, this);
                this.end()
            }
        };
        return a
    });
    define("iO", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("PanoramaSnapshot", b).B("Object").J({
            position: "PanoramaCameraPosition",
            image: "ImageResource"
        });
        return b
    });
    define("kf", ["fg", "bS"], function (a, b) {
        var c = a.extend(b, function (a, c, d, f) {
            b.call(this);
            this.Od = a;
            this.X = c;
            this.ia = d;
            this.VR = f
        });
        c.prototype.Kn = function () {
            return [this.Od]
        };
        c.prototype.Dj = Q("Od");
        c.prototype.ad = Q("X");
        c.prototype.Pd = Q("ia");
        return c
    });
    define("ex", "require,do,fg,dW,du,eH,kf".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("dW"),
        g = a("du"),
        d = a("eH"),
        f = a("kf"),
        a = c.extend(g, function () {
            g.call(this);
            this.Y = m
        });
        e.A("Photo", a).B("Media").J({
            audios: "array[PhotoAudio]",
            duration: "number",
            height: "number",
            image: "ImageResource",
            width: "number",
            flipImageHorizontally: "bool"
        });
        a.prototype.bh = function () {
            if (this.Y == m) {
                var a = this.get("image");
                this.Y = a ? new f(d.jm(a).get("url"), this.get("width"), this.get("height"), this.get("flipImageHorizontally",
                            y)) : r
            }
            return this.Y
        };
        a.prototype.In = function () {
            var a = this.rI(this.bh());
            b(this.get("audios", [])).each(function (b) {
                a = a.concat(b.In())
            }, this);
            return a
        };
        a.prototype.rI = function (a) {
            return a ? a.Kn() : []
        };
        return a
    });
    define("hl", ["do", "fg", "ll", "du", "dW"], function (a, b, c, e, g) {
        b = b.extend(e, function () {
            e.call(this);
            this.set("loop", y)
        });
        g.A("PhotoAlbum", b).B("Media").J({
            audios: "array[PhotoAlbumAudio]",
            loop: "bool",
            playList: "PhotoPlayList"
        }).Xb([c.Ba]);
        b.prototype.In = function () {
            var b = [],
            c = this.get("playList");
            c && a(c.get("items"), []).each(function (a) {
                (a = a.get("media")) && (b = b.concat(a.In()))
            });
            a(this.get("audios", [])).each(function (a) {
                b = b.concat(a.In())
            });
            return b
        };
        return b
    });
    define("gp", "require,fg,ge,dW,gN,z".split(","), function (a) {
        var b = a("fg"),
        c = a("ge"),
        e = a("dW"),
        g = a("gN");
        a("z");
        a = b.extend(g, function () {
            g.call(this, c.fga)
        });
        e.A("PhotoAlbumAudio", a).B("MediaAudio");
        return a
    });
    define("cs", ["require", "fu"], function (a) {
        function b(a, b) {
            this.g = a;
            this.hl = b;
            this.gx = [];
            this.Dm = [];
            this.dm = 1
        }
        var c = a("fu");
        b.prototype.clear = function () {
            for (var a = 0; a < this.gx.length; a++)
                this.gx[a].Cc(c.H);
            this.vha();
            this.Dm = this.gx = r
        };
        b.prototype.stop = function () {
            for (var a = 0; a < this.Dm.length; a++)
                this.Dm[a].Cc(c.H)
        };
        b.prototype.play = function () {
            for (var a = 0; a < this.Dm.length; a++) {
                var b = this.Dm[a];
                b.Qe() != c.P && b.Cc(c.P)
            }
        };
        b.prototype.pause = function () {
            for (var a = 0; a < this.Dm.length; a++) {
                var b = this.Dm[a];
                b.Qe() ==
                c.P && b.Cc(c.mc)
            }
        };
        b.prototype.start = function () {
            this.stop();
            for (var a = 0; a < this.hl.length; a++) {
                var b = this.hl[a],
                d = b.Sv();
                d && (this.gx.push(d), b.get("autoplay", y) && this.Dm.push(d))
            }
            for (a = 0; a < this.Dm.length; a++)
                this.Dm[a].Cc(c.P)
        };
        b.prototype.dc = D();
        b.prototype.vha = function () {
            for (var a = 0; a < this.gx.length; a++)
                this.gx[a].hq(1)
        };
        return b
    });
    define("go", ["fg", "cs"], function (a, b) {
        return a.extend(b, function (a, e) {
            b.call(this, a, e.get("audios", []));
            this.lK = e
        })
    });
    define("fH", ["fg", "cs"], function (a, b) {
        return a.extend(b, function (a, e) {
            b.call(this, a, e.get("audios", []));
            this.pd = e
        })
    });
    define("hg", ["go", "fH"], function (a, b) {
        function c(a) {
            this.g = a;
            this.eg = [];
            this.Xf = []
        }
        c.prototype.clear = function () {
            this.Uea();
            this.Xf = this.eg = r
        };
        c.prototype.Uea = function () {
            for (var a = 0; a < this.eg.length; a++)
                this.eg[a].clear();
            for (a = 0; a < this.Xf.length; a++)
                this.Xf[a].clear();
            this.eg = [];
            this.Xf = []
        };
        c.prototype.pause = function () {
            for (var a = 0; a < this.eg.length; a++)
                this.eg[a].pause();
            for (a = 0; a < this.Xf.length; a++)
                this.Xf[a].pause()
        };
        c.prototype.play = function () {
            for (var a = 0; a < this.eg.length; a++)
                this.eg[a].play();
            for (a = 0; a < this.Xf.length; a++)
                this.Xf[a].play()
        };
        c.prototype.stop = function () {
            for (var a = 0; a < this.eg.length; a++)
                this.eg[a].stop();
            for (a = 0; a < this.Xf.length; a++)
                this.Xf[a].clear();
            this.Xf = []
        };
        c.prototype.wza = function (b) {
            b = new a(this.g, b);
            this.Xf.push(b);
            b.start()
        };
        c.prototype.zza = function (a) {
            for (var b = 0; b < this.Xf.length; b++)
                if (this.Xf[b].lK == a) {
                    this.Xf[b].clear();
                    this.Xf.splice(b, 1);
                    break
                }
        };
        c.prototype.i_ = function (a) {
            a = new b(this.g, a);
            this.eg.push(a);
            a.start()
        };
        c.prototype.xza = function (a) {
            for (var b = 0; b <
                this.eg.length; b++)
                if (this.eg[b].pd == a) {
                    this.eg[b].clear();
                    this.eg.splice(b, 1);
                    break
                }
        };
        c.prototype.dc = function (a) {
            for (var b = 0; b < this.eg.length; b++)
                this.eg[b].dc(a);
            for (b = 0; b < this.Xf.length; b++)
                this.Xf[b].dc(a)
        };
        return c
    });
    define("j", ["fg", "jn"], function (a, b) {
        function c() {
            this.Z = n;
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.Ed = b.Te;
            this.Qi = this.Ri = 100
        }
        c.prototype.getX = function () {
            this.zj();
            return this.da
        };
        c.prototype.getY = function () {
            this.zj();
            return this.fa
        };
        c.prototype.lm = function () {
            this.zj();
            return this.ta
        };
        c.prototype.IF = function (a, b, c) {
            this.Ed = c;
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.Z = n
        };
        c.prototype.Ka = function (a, b, c) {
            this.da = a;
            this.fa = b;
            this.ta = c;
            this.Z = n
        };
        c.prototype.setSize = function (a, b) {
            this.Ri = a;
            this.Qi = b;
            this.Z = n
        };
        c.prototype.zj =
        function () {
            if (this.Z) {
                this.Z = y;
                1 > this.ta && (this.ta = 1);
                var a = Math.min(0.5 / this.ta, 0.5),
                b = Math.max(1 - 0.5 / this.ta, 0.5);
                this.da < a ? this.da = a : this.da > b && (this.da = b);
                a = Math.min(0.5 / this.ta, 0.5);
                b = Math.max(1 - 0.5 / this.ta, 0.5);
                this.fa < a ? this.fa = a : this.fa > b && (this.fa = b)
            }
        };
        return c
    });
    define("bn", [], function () {
        function a(a, c) {
            this.g = a;
            this.I = c;
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.DK = y
        }
        a.prototype.start = function () {
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.DK = n
        };
        a.prototype.clear = function () {
            this.I = this.g = r
        };
        a.prototype.Ka = function (a, c, e) {
            this.da = a;
            this.fa = c;
            this.ta = e
        };
        a.prototype.ld = Q("DK");
        a.prototype.fb = function () {
            this.DK = y
        };
        return a
    });
    define("fX", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function (a, c, d) {
            b.call(this);
            a != m && this.set("x", a);
            c != m && this.set("y", c);
            d != m && this.set("zoomFactor", d)
        });
        c.A("PhotoCameraPosition", a).B("Object").J({
            x: "number",
            y: "number",
            zoomFactor: "number"
        });
        return a
    });
    define("h", ["fg", "bn", "fX", "kX", "bq"], function (a, b, c, e, g) {
        a = a.extend(b, function (a, c) {
            b.call(this, a, c);
            this.O = r
        });
        a.prototype.start = function (a) {
            var b = a.get("initialPosition", new c(0.5, 0.5, 1)),
            h = a.get("targetPosition", new c(0.5, 0.5, 1));
            this.O = new e(a.get("easing", "linear"), [new g("x", b.get("x", 0.5), h.get("x", 0.5)), new g("y", b.get("y", 0.5), h.get("y", 0.5)), new g("zoom", b.get("zoomFactor", 1), h.get("zoomFactor", 1))], a.get("duration", 1E3));
            this.fb(0)
        };
        a.prototype.clear = function () {
            this.O = r;
            b.prototype.clear.call(this)
        };
        a.prototype.ld = function () {
            return this.O != r
        };
        a.prototype.fb = function (a) {
            this.O && (this.O.fb(a), this.I.Ka(this.O.Fb("x"), this.O.Fb("y"), this.O.Fb("zoom")), this.da = this.I.getX(), this.fa = this.I.getY(), this.ta = this.I.lm(), this.O.Re() && (this.O = r))
        };
        return a
    });
    define("ci", "fg,bZ,eO,dW,fu,jn,j,bn,h,ll".split(","), function (a, b, c, e, g, d, f, h, j, p) {
        var k = a.extend(c, function (a, b) {
            c.call(this);
            this.g = a;
            this.sc = b;
            this.g.bind(p.yb, this.kb, this);
            this.m = g.H;
            this.nj = this.lK = this.zb = this.Y = r;
            this.I = new f
        });
        k.prototype.clear = function () {
            this.end();
            this.I = r;
            this.g.unbind(p.yb, this.kb, this);
            this.g = r
        };
        k.prototype.end = function (a) {
            if (this.Y == a || typeof a == "undefined") {
                this.T3();
                this.zb = this.lK = this.zb = this.Y = r
            }
        };
        k.prototype.start = function (a) {
            if (this.Y != a) {
                this.end(this.Y);
                var b =
                    a.get("media"),
                c = a.get("camera"),
                e = b.get("width", 100),
                f = b.get("height", 100),
                g = c ? c.get("scaleMode", d.Te) : d.Te;
                this.Y = a;
                this.zb = c;
                this.lK = b;
                b.bh();
                this.W = n;
                this.I.IF(e, f, g);
                this.Mja(c);
                this.ea()
            }
        };
        k.prototype.stop = function () {
            if (this.m != g.H) {
                this.m = g.H;
                if (this.nj) {
                    this.nj.start(this.zb);
                    this.ea()
                }
            }
        };
        k.prototype.play = function () {
            if (this.m == g.H || this.m == g.mc) {
                this.m = g.P;
                this.ea()
            }
        };
        k.prototype.pause = function () {
            if (this.m == g.P)
                this.m = g.mc
        };
        k.prototype.Yp = function (a) {
            if (this.nj && this.nj.ld()) {
                if (this.m == g.P) {
                    this.nj.fb(a);
                    this.ea()
                }
                this.qi(this.nj.da, this.nj.fa, this.nj.ta)
            }
        };
        k.prototype.Mja = function (a) {
            this.T3();
            this.nj = e.tb("MovementPhotoCamera", a) ? new j(this.g, this.I) : new h(this.g, this.I);
            this.nj.start(a)
        };
        k.prototype.T3 = function () {
            if (this.nj) {
                this.nj.clear();
                this.nj = r
            }
        };
        k.prototype.kb = function () {
            this.I.setSize(this.g.Aa(), this.g.eb());
            this.ea()
        };
        k.prototype.ea = function () {
            this.trigger(new b(k.La))
        };
        k.prototype.qi = function (a, b, c) {
            this.sc.Ka(this.Y, a, b, c)
        };
        k.La = "request frame";
        return k
    });
    define("gj", "require,do,fg,bZ,eO,ll,ge,jn".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("bZ"),
        g = a("eO"),
        d = a("ll");
        a("ge");
        var f = a("jn"),
        h = c.extend(g, function (a, b) {
            g.call(this);
            this.RD = [];
            this.C = a;
            this.g = b
        });
        h.prototype.Oz = function (a) {
            this.hr(a).Oz();
            return this
        };
        h.prototype.xd = function (a, b) {
            this.hr(a).xd(b);
            return this
        };
        h.prototype.Ij = function (a, b) {
            this.hr(a).Ij(b);
            return this
        };
        h.prototype.Ka = function (a, b, c, d) {
            this.hr(a).Ka(b, c, d);
            return this
        };
        h.prototype.Fk = function (a) {
            this.hr(a).Fk();
            return this
        };
        h.prototype.stop = function () {
            this.g4(function (a) {
                a.clear()
            });
            this.RD = []
        };
        h.prototype.clear = function () {
            this.stop();
            this.g = this.C = this.RD = r
        };
        h.prototype.dc = function () {
            this.g4(function (a) {
                a.update()
            })
        };
        h.prototype.hr = function (a) {
            var b = this.Gka(a);
            if (!b) {
                b = new j(a, this.g);
                b.bind(j.S0, this.jna, this);
                b.bind(j.Q0, this.ina, this);
                this.RD.push(b)
            }
            return b
        };
        h.prototype.g4 = function (a) {
            b(this.RD).each(a, this)
        };
        h.prototype.Gka = function (a) {
            return b(this.RD).find(function (b) {
                return b.getItem() == a
            })
        };
        h.prototype.jna =
        function () {
            this.ea()
        };
        h.prototype.ina = function (a) {
            this.trigger(new e(h.DO, {
                    item: a.source.getItem()
                }))
        };
        h.prototype.ea = function () {
            this.trigger(new e(h.La))
        };
        h.La = "request frame";
        h.DO = "photo preload end";
        var j = c.extend(g, function (a, b) {
            g.call(this);
            this.Y = a;
            this.g = b;
            var c = a.get("camera");
            this.Ed = c ? c.get("scaleMode", f.Te) : f.Te;
            this.rg = a.get("media").bh();
            this.rg.bind(d.S, this.Ze, this);
            this.rg.bind(d.oe, this.Fr, this);
            this.T = j.EA;
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.Xj = 0;
            this.kx = y;
            this.te = 0;
            this.Z = y
        });
        j.prototype.getItem =
            Q("Y");
        j.prototype.Oz = function () {
            this.T == j.EA ? this.qK() : this.oaa()
        };
        j.prototype.xd = function (a) {
            if (this.Xj != a) {
                this.Xj = a;
                this.ed()
            }
        };
        j.prototype.Ij = function (a) {
            if (this.te != a) {
                this.te = a;
                this.ed()
            }
        };
        j.prototype.Ka = function (a, b, c) {
            if (this.da != a || this.fa != b || this.ta != c) {
                this.da = a;
                this.fa = b;
                this.ta = c;
                this.ed()
            }
        };
        j.prototype.Fk = function () {
            if (!this.kx) {
                this.kx = n;
                this.ed()
            }
        };
        j.prototype.clear = function () {
            this.T == j.SG && this.rD();
            (this.T == j.BA || this.T == j.DA || this.T == j.CA) && this.ss();
            this.rg.unbind(d.S, this.Ze);
            this.rg.unbind(d.oe, this.Fr);
            this.rg = r
        };
        j.prototype.update = function () {
            if (this.Z) {
                this.Z = y;
                if (this.te > -1 && this.te < 1 && this.Xj > 0) {
                    this.T == j.EA && this.ZB();
                    this.T == j.BA && this.Xga();
                    if (this.T == j.SG) {
                        if (this.kx) {
                            this.g.$X(this.rg);
                            this.kx = y
                        }
                        this.g.qm(this.rg, this.Xj);
                        this.g.Fya(this.rg, this.te);
                        this.g.OF(this.rg, this.da, this.fa, this.ta)
                    }
                } else {
                    this.T == j.SG && this.rD();
                    (this.T == j.BA || this.T == j.CA) && this.ss()
                }
            }
        };
        j.prototype.ed = function () {
            if (!this.Z) {
                this.Z = n;
                this.Ia()
            }
        };
        j.prototype.Ia = function () {
            this.trigger(new e(j.S0))
        };
        j.prototype.qK = function () {
            this.T = j.DA;
            this.g.Mn(this.rg);
            this.g.gda(this.rg) && this.Ze()
        };
        j.prototype.ZB = function () {
            this.T = j.CA;
            this.g.Mn(this.rg);
            this.g.gda(this.rg) && this.Ze()
        };
        j.prototype.Xga = function () {
            this.T = j.SG;
            this.g.UX(this.rg);
            this.g.Iya(this.rg, this.Ed)
        };
        j.prototype.rD = function () {
            this.T = j.BA;
            this.g.removeItem(this.rg)
        };
        j.prototype.ss = function () {
            this.T = j.EA;
            this.g.Fi(this.rg)
        };
        j.prototype.Ze = function () {
            if (this.T == j.DA || this.T == j.CA) {
                var a = this.T == j.DA;
                this.T = j.BA;
                this.ed();
                a && this.oaa()
            }
        };
        j.prototype.Fr = function () {
            if (this.T == j.DA || this.T == j.CA)
                this.T = j.EA
        };
        j.prototype.oaa = function () {
            this.trigger(new e(j.Q0))
        };
        j.S0 = "requestUpdate";
        j.Q0 = "preloadEnd";
        j.EA = "unloaded";
        j.DA = "preloading";
        j.CA = "loading";
        j.BA = "loaded";
        j.SG = "added";
        return h
    });
    define("ki", [], function () {
        return {
            vm: "blending",
            bl: "scroll"
        }
    });
    define("bJ", "do,fg,bZ,eO,ll,gj,ki".split(","), function (a, b, c, e, g, d, f) {
        function h(b, c, d) {
            this.Aj = b;
            this.item = c;
            this.cfa = d;
            this.index = b && c ? a(b.get("playList").get("items")).indexOf(this.item) : 0;
            this.loaded = y
        }
        h.prototype.isEqual = function (a) {
            return a && a.Aj == this.Aj && a.item == this.item
        };
        var j = b.extend(e, function (a, b, c) {
            e.call(this);
            this.C = a;
            this.g = b;
            this.sc = c;
            this.sc.bind(d.DO, this.D8, this);
            this.eE = f.vm;
            this.T = j.Xw;
            this.Nd = new h(r, r, 0);
            this.zo = this.zh = this.We = r;
            this.fE = m;
            this.hs = 0
        });
        j.prototype.iza = P("eE");
        j.prototype.c_ = P("hs");
        j.prototype.t_ = function (a, b, c) {
            this.zh = r;
            a = new h(a, b, c);
            if (!a.isEqual(this.T == j.Xw ? this.Nd : this.We)) {
                this.zh = a;
                this.J7()
            }
        };
        j.prototype.clear = function () {
            (this.T == j.VG || this.T == j.TG) && this.trigger(new c(j.oq, {
                    album: this.We.Aj,
                    item: this.We.item
                }));
            this.T = j.Xw;
            this.g = this.C = this.zo = this.Nd = this.We = this.zh = r;
            this.sc.unbind(d.DO, this.D8, this);
            this.sc = r
        };
        j.prototype.dc = function (a) {
            if (this.T != j.Xw) {
                this.fE = this.fE + a;
                a = this.We.cfa;
                a = this.fE >= a ? 1 : this.fE / a;
                this.T == j.TG ? this.bta(a) : this.T ==
                j.UG ? this.cta(a) : this.eE == f.vm ? this.Tsa(a) : this.yta(a);
                a < 1 ? this.ea() : this.br()
            }
        };
        j.prototype.bta = function (a) {
            this.sc.xd(this.We.item, a).Ij(this.We.item, 0)
        };
        j.prototype.cta = function (a) {
            this.sc.xd(this.Nd.item, 1 - a).Ij(this.Nd.item, 0)
        };
        j.prototype.Tsa = function (a) {
            this.sc.xd(this.We.item, Math.min(1, a * 2)).Ij(this.We.item, 0);
            this.sc.xd(this.Nd.item, Math.min(1, (1 - a) * 2)).Ij(this.Nd.item, 0)
        };
        j.prototype.yta = function (a) {
            var b = this.Nd.Aj != this.We.Aj || this.Nd.index < this.We.index;
            this.sc.Ij(this.We.item, (b ? 1 -
                    a : a - 1) * (1 + this.hs)).xd(this.We.item, 1);
            this.sc.Ij(this.Nd.item, (b ? -a : a) * (1 + this.hs)).xd(this.Nd.item, 1)
        };
        j.prototype.J7 = function () {
            this.zh && this.T == j.Xw && (this.zh.item && !this.zh.loaded ? this.sc.Oz(this.zh.item) : this.il())
        };
        j.prototype.D8 = function (a) {
            if (this.zh && this.zh.item == a.data.item) {
                this.zh.loaded = n;
                this.J7()
            }
        };
        j.prototype.il = function () {
            if (this.zo && this.zo != this.zh.Aj) {
                this.trigger(new c(j.Tk, {
                        album: this.zo
                    }));
                this.zo = r
            }
            this.trigger(new c(j.KO));
            if (this.C.get("transitionMode") == "fade_out_fade_in" &&
                this.zh.item != r && this.Nd.item != r) {
                this.T = j.UG;
                this.We = new h(this.Nd.Aj, r, this.Nd.cfa)
            } else {
                this.We = this.zh;
                this.zh = r;
                if (this.Nd.item)
                    if (this.We.item)
                        this.T = j.VG;
                    else {
                        if (this.Nd.item)
                            this.T = j.UG
                    }
                else
                    this.T = j.TG
            }
            if (this.T == j.VG || this.T == j.TG) {
                this.sc.Fk(this.We.item);
                this.trigger(new c(j.pt, {
                        album: this.We.Aj,
                        item: this.We.item
                    }))
            }
            this.fE = 0;
            this.ea()
        };
        j.prototype.br = function () {
            (this.T == j.VG || this.T == j.UG) && this.trigger(new c(j.oq, {
                    album: this.Nd.Aj,
                    item: this.Nd.item
                }));
            this.Nd = this.We;
            if (this.zo != this.Nd.Aj) {
                this.zo =
                    this.Nd.Aj;
                this.trigger(new c(j.Uk, {
                        album: this.zo
                    }))
            }
            this.T = j.Xw;
            if (this.zh == r) {
                this.Nd.item && this.trigger(new c(j.qt, {
                        album: this.Nd.Aj,
                        item: this.Nd.item
                    }));
                this.trigger(new c(j.LO, {
                        album: this.Nd.Aj,
                        item: this.Nd.item
                    }))
            } else
                this.il()
        };
        j.prototype.ea = function () {
            this.trigger(new c(j.La))
        };
        j.Xw = "stopped";
        j.VG = "blending";
        j.UG = "fading_out";
        j.TG = "fading_in";
        j.La = "request frame";
        j.KO = "transition begin";
        j.LO = "transition end";
        j.pt = "photo added";
        j.oq = "photo removed";
        j.qt = "photo displayed";
        j.Uk = "photo album show";
        j.Tk = "photo album hide";
        return j
    });
    define("er", "do,fg,bZ,eO,ll,dW,jn,fX,j,bn,h,kX,bq".split(","), function (a, b, c, e, g, d, f, h, j, p, k, l, q) {
        var o = b.extend(e, function (a, b, c) {
            e.call(this);
            this.C = a;
            this.g = b;
            this.sc = c;
            this.yk = this.kk = this.Y = this.pd = this.ua = r;
            this.pj = m;
            this.fL = 0;
            this.ni = y;
            this.te = 0;
            this.oJ = this.yk ? -1 : 0;
            this.lJ = this.kk ? 1 : 0;
            this.O = r;
            this.Me = 400;
            this.hs = 0;
            this.I = new j
        });
        o.prototype.clear = function () {
            this.sc = this.g = this.C = this.zo = r
        };
        o.prototype.kya = function (b, c) {
            this.pd = b;
            this.Y = c;
            var d = b && b.get("playList") && b.get("playList").get("items") ||
                [],
            e = a(d).indexOf(c);
            this.kk = e > 0 ? d[e - 1] : r;
            this.yk = e < d.length - 1 ? d[e + 1] : r;
            this.te = 0;
            this.oJ = this.yk ? -1 : 0;
            this.lJ = this.kk ? 1 : 0;
            this.qK()
        };
        o.prototype.enable = function () {
            if (this.ua = this.g.getParent()) {
                this.ua.bind(g.Hb, this.pc, this, n);
                this.ua.bind(g.Mc, this.Ng, this, n);
                this.ua.bind(g.fc, this.Og, this, n);
                this.qK()
            }
        };
        o.prototype.disable = function () {
            if (this.ua) {
                this.ua.unbind(g.Hb, this.pc, this);
                this.ua.unbind(g.Mc, this.Ng, this);
                this.ua.unbind(g.fc, this.Og, this);
                this.ua = r
            }
        };
        o.prototype.hza = P("Me");
        o.prototype.c_ =
            P("hs");
        o.prototype.qK = function () {
            if (this.ua) {
                this.kk && this.sc.Oz(this.kk);
                this.yk && this.sc.Oz(this.yk)
            }
        };
        o.prototype.G6 = function () {
            return (new Date).getTime()
        };
        o.prototype.pc = function (a) {
            if (!this.ni) {
                this.pj = a.x;
                this.fL = 0;
                this.YU = this.G6();
                this.ni = n;
                this.O = r;
                this.trigger(new c(o.lO));
                if (this.kk) {
                    a = this.Z4(this.kk);
                    this.sc.Ka(this.kk, a.x, a.y, a.zoom)
                }
                if (this.yk) {
                    a = this.Z4(this.yk);
                    this.sc.Ka(this.yk, a.x, a.y, a.zoom)
                }
            }
        };
        o.prototype.Ng = function (a) {
            if (this.ni) {
                var b = a.x - this.pj,
                c = b / this.ua.Aa(),
                d = this.G6() -
                    this.YU;
                this.fL = b / d;
                this.YU = this.YU + d;
                this.pj = a.x;
                this.te = Math.max(this.oJ, Math.min(this.lJ, this.te + c));
                this.ea()
            }
        };
        o.prototype.Og = function () {
            if (this.ni) {
                this.ni = y;
                var a,
                b;
                if (this.fL > 1) {
                    a = "quad_out";
                    b = this.lJ
                } else if (this.fL < -1) {
                    a = "quad_out";
                    b = this.oJ
                } else {
                    a = "quad_in_out";
                    b = this.te < -0.5 ? this.oJ : this.te > 0.5 ? this.lJ : 0
                }
                this.O = new l(a, [new q("offset", this.te, b, 1E3 / this.Me)], 0);
                this.ea()
            }
        };
        o.prototype.dc = function (a) {
            if (this.ni || this.O) {
                if (this.O) {
                    this.O.fb(a);
                    this.te = this.O.Fb("offset");
                    if (this.O.Re()) {
                        this.O =
                            r;
                        this.ska()
                    } else
                        this.ea()
                }
                this.Y && this.sc.Ij(this.Y, this.te * (1 + this.hs)).xd(this.Y, 1);
                this.kk && this.sc.Ij(this.kk, (this.te - 1) * (1 + this.hs)).xd(this.kk, 1);
                this.yk && this.sc.Ij(this.yk, (this.te + 1) * (1 + this.hs)).xd(this.yk, 1)
            }
        };
        o.prototype.ska = function () {
            this.trigger(new c(o.mO, {
                    album: this.pd,
                    item: this.te < 0 ? this.yk : this.te > 0 ? this.kk : this.Y
                }))
        };
        o.prototype.ea = function () {
            this.trigger(new c(o.La))
        };
        o.prototype.Z4 = function (a) {
            var b = a && a.get("camera"),
            c = a && a.get("media"),
            a = c && c.get("width", 100) || 100,
            c = c &&
                c.get("height", 100) || 100,
            e = b ? b.get("scaleMode", f.Te) : f.Te,
            g = {};
            if (d.tb("MovementPhotoCamera", b)) {
                b = b.get("initialPosition", new h(0.5, 0.5, 1));
                g.x = b.get("x", 0.5);
                g.y = b.get("y", 0.5);
                g.zoom = b.get("zoomFactor", 0.5)
            } else {
                g.x = 0.5;
                g.y = 0.5;
                g.zoom = 1
            }
            this.I.IF(a, c, e);
            this.I.setSize(this.g.Aa(), this.g.eb());
            this.I.Ka(g.x, g.y, g.zoom);
            g.x = this.I.getX();
            g.y = this.I.getY();
            g.zoom = this.I.lm();
            return g
        };
        o.La = "request frame";
        o.lO = "interaction begin";
        o.mO = "interaction end";
        return o
    });
    define("hb", "fg,bZ,eO,ll,gj,ki,bJ,er".split(","), function (a, b, c, e, g, d, f, h) {
        var j = a.extend(c, function (a, b, e) {
            c.call(this);
            this.C = a;
            this.g = b;
            this.sc = e;
            this.eE = d.vm;
            this.Me = 1E3;
            this.Wa = new f(this.C, this.g, this.sc);
            this.Wa.bind(f.La, this.Zc, this, n);
            this.Wa.bind(f.KO, this.R6, this, n);
            this.Wa.bind(f.LO, this.S6, this, n);
            this.Wa.bind(f.pt, this.FC, this, n);
            this.Wa.bind(f.oq, this.IC, this, n);
            this.Wa.bind(f.qt, this.HC, this, n);
            this.Wa.bind(f.Tk, this.Dl, this, n);
            this.Wa.bind(f.Uk, this.nk, this, n);
            this.ai = new h(this.C,
                    this.g, this.sc);
            this.ai.bind(h.La, this.Zc, this, n);
            this.ai.bind(h.lO, this.k6, this, n);
            this.ai.bind(h.mO, this.l6, this, n)
        });
        j.prototype.BN = function (a, b) {
            this.eE = a;
            this.Me = b;
            this.Wa.iza(a);
            this.ai.hza(b);
            this.Wa.c_(0.05);
            this.ai.c_(0.05)
        };
        j.prototype.display = function (a, b) {
            this.Wa.t_(a, b, this.Me)
        };
        j.prototype.hide = function () {
            this.Wa.t_(r, r, this.Me)
        };
        j.prototype.clear = function () {
            this.Wa.unbind(f.La, this.Zc, this);
            this.Wa.unbind(f.KO, this.R6, this);
            this.Wa.unbind(f.LO, this.S6, this);
            this.Wa.unbind(f.pt, this.FC,
                this);
            this.Wa.unbind(f.oq, this.IC, this);
            this.Wa.unbind(f.qt, this.HC, this);
            this.Wa.unbind(f.Tk, this.Dl, this);
            this.Wa.unbind(f.Uk, this.nk, this);
            this.Wa.clear();
            this.Wa = r;
            this.ai.bind(h.La, this.Zc, this, n);
            this.ai.bind(h.lO, this.k6, this, n);
            this.ai.bind(h.mO, this.l6, this, n);
            this.ai.clear();
            this.sc = this.g = this.C = this.ai = r
        };
        j.prototype.dc = function (a) {
            this.Wa.dc(a);
            this.ai.dc(a)
        };
        j.prototype.Zc = function () {
            this.ea()
        };
        j.prototype.FC = function (a) {
            this.trigger(new b(j.pt, a.data))
        };
        j.prototype.IC = function (a) {
            this.trigger(new b(j.oq,
                    a.data))
        };
        j.prototype.HC = function (a) {
            this.trigger(new b(j.qt, a.data));
            this.ai.kya(a.data.album, a.data.item)
        };
        j.prototype.Dl = function (a) {
            this.trigger(new b(j.Tk, a.data))
        };
        j.prototype.nk = function (a) {
            this.trigger(new b(j.Uk, a.data))
        };
        j.prototype.R6 = function () {
            this.ai.disable()
        };
        j.prototype.S6 = function (a) {
            this.eE == d.bl && a.data.item && this.ai.enable();
            a.data.album || this.trigger(new b(j.jO))
        };
        j.prototype.k6 = function () {
            this.trigger(new b(j.T_))
        };
        j.prototype.l6 = function (a) {
            this.Wa.t_(a.data.album, a.data.item,
                0);
            this.trigger(new b(j.U_, a.data))
        };
        j.prototype.ea = function () {
            this.trigger(new b(j.La))
        };
        j.La = "request frame";
        j.pt = "photo added";
        j.oq = "photo removed";
        j.qt = "photo displayed";
        j.Uk = "photo album show";
        j.Tk = "photo album hide";
        j.T_ = "manual interaction begin";
        j.U_ = "manual interaction end";
        j.jO = "all pending photo albums hidden";
        return j
    });
    define("gB", "require,do,fg,u,bZ,eO,fu".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("u"),
        g = a("bZ"),
        d = a("eO"),
        f = a("fu"),
        h = c.extend(d, function () {
            d.call(this);
            this.pd = r;
            this.m = f.H;
            this.IV = r
        });
        h.prototype.clear = function () {
            this.lY()
        };
        h.prototype.i_ = function (a) {
            this.lY();
            this.pd = a;
            this.m = f.P;
            this.IV = e.watch(this.pd, "playList.selectedIndex", this.hv, this);
            this.pd.get("playList").get("selectedIndex") == 0 ? this.hv() : this.pd.get("playList").set("selectedIndex", 0)
        };
        h.prototype.lY = function () {
            if (this.pd) {
                this.m =
                    f.H;
                this.IV.unwatch();
                this.pd = this.IV = r
            }
        };
        h.prototype.stop = function () {
            if (this.m != f.H) {
                this.m = f.H;
                this.pd.get("playList").set("selectedIndex", 0)
            }
        };
        h.prototype.play = function () {
            if (this.m == f.H) {
                this.pd.get("playList").set("selectedIndex", 0);
                this.m = f.P;
                this.hv()
            } else if (this.m == f.mc)
                this.m = f.P
        };
        h.prototype.pause = function () {
            if (this.m == f.P)
                this.m = f.mc
        };
        h.prototype.next = function () {
            var a = this.pd.get("playList"),
            b = a.get("selectedIndex"),
            c = a.get("items").length;
            (b < c - 1 || this.pd.get("loop")) && a.set("selectedIndex",
                (b + 1) % c)
        };
        h.prototype.xZ = function () {
            var a = this.pd.get("playList"),
            b = a.get("selectedIndex"),
            c = a.get("items").length;
            (b > 0 || this.pd.get("loop")) && a.set("selectedIndex", (b - 1 + c) % c)
        };
        h.prototype.$M = function (a) {
            this.ira(a)
        };
        h.prototype.Qwa = function (a) {
            if (this.pd) {
                var c = b(this.pd.get("playList").get("items")).last();
                if (a == c && !this.pd.get("loop")) {
                    this.m = f.H;
                    this.trigger(new g(h.fO, {
                            album: this.pd
                        }))
                } else
                    this.next()
            }
        };
        h.prototype.hv = function () {
            var a = this.Zla();
            a >= 0 && (this.m != f.P && a != 0 ? this.trigger(new g(h.GO)) :
                this.trigger(new g(h.qO, {
                        album: this.pd,
                        item: this.pd.get("playList").get("items")[a]
                    })))
        };
        h.prototype.Zla = function () {
            return this.pd ? this.pd.get("playList").get("selectedIndex") : -1
        };
        h.prototype.ira = function (a) {
            if (this.pd) {
                var c = this.pd.get("playList"),
                a = b(c.get("items")).indexOf(a);
                c.set("selectedIndex", a)
            }
        };
        h.GO = "play request";
        h.qO = "item request";
        h.fO = "album end";
        return h
    });
    define("cm", "require,do,fg,ll,bZ,eO,fu,fx".split(","), function (a) {
        a("do");
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("fu"),
        f = a("fx"),
        h = b.extend(g, function (a) {
            g.call(this);
            this.C = a;
            this.bE = this.Y = r;
            this.dv = m;
            this.UI = y;
            this.m = d.H;
            f.bind(c.aa, this.l8, this, n)
        });
        h.prototype.$M = function (a) {
            this.uR();
            if (this.Y = a) {
                a = this.Y.get("media").get("duration", 0);
                this.dv = a == 0 ? m : Math.max(0, a - this.C.get("transitionDuration"));
                this.UI = y;
                this.m == d.P && this.NR()
            }
        };
        h.prototype.clear = function () {
            f.unbind(c.aa, this.l8,
                this, n);
            this.$M(r)
        };
        h.prototype.stop = function () {
            if (this.m != d.H) {
                this.uR();
                this.Zb(d.H)
            }
        };
        h.prototype.play = function () {
            if (this.m == d.H) {
                this.Zb(d.P);
                if (this.Y) {
                    this.UI = y;
                    var a = this.Y.get("media").get("duration", 0);
                    this.dv = a == 0 ? m : a;
                    this.NR()
                }
            } else if (this.m == d.mc) {
                this.Zb(d.P);
                this.Y && this.NR()
            }
        };
        h.prototype.pause = function () {
            if (this.m == d.P) {
                this.Zb(d.mc);
                this.B8()
            }
        };
        h.prototype.NR = function () {
            if (!this.UI) {
                this.UI = n;
                this.trigger(new e(h.rO, {
                        item: this.Y
                    }))
            }
            this.j4()
        };
        h.prototype.l8 = function () {
            f.visible ?
            this.j4() : f.visible || this.B8()
        };
        h.prototype.j4 = function () {
            if (this.dv !== m) {
                var a = this;
                this.uL = (new Date).getTime() + this.dv;
                this.bE = setTimeout(function () {
                    a.bE = r;
                    a.osa()
                }, this.dv)
            } else
                this.uL = m
        };
        h.prototype.uR = function () {
            if (this.bE) {
                clearTimeout(this.bE);
                this.bE = r
            }
        };
        h.prototype.B8 = function () {
            if (this.uL !== m) {
                this.uR();
                this.dv = Math.max(1, this.uL - (new Date).getTime());
                this.uL = m
            }
        };
        h.prototype.osa = function () {
            var a = this.Y;
            this.Y = r;
            this.dv = m;
            this.trigger(new e(h.pO, {
                    item: a
                }))
        };
        h.prototype.Zb = function (a) {
            if (this.m !=
                a) {
                this.m = a;
                this.trigger(new e(h.vb, {
                        state: this.m
                    }))
            }
        };
        h.vb = "playback state change";
        h.rO = "item start";
        h.pO = "item end";
        return h
    });
    define("kw", ["fg", "bZ", "eO", "V", "r"], function (a, b, c, e, g) {
        var d = a.extend(c, function (a) {
            c.call(this);
            this.W = n;
            this.iu = y;
            this.g = a;
            this.dk = g.browser() == g.at && g.Rd() == g.oP ? 3 : 1;
            this.be = this.uB = 0
        });
        d.prototype.clear = function () {
            this.W = y;
            this.g = r;
            this.be = this.uB = 0
        };
        d.prototype.Ma = function () {
            this.iu || (this.iu = n, e.Ma(this.Pg, this))
        };
        d.prototype.Pg = function (a) {
            this.W && (this.uB++, this.be += a, this.uB == this.dk ? (this.uB = 0, this.iu = y, a = this.be, this.be = 0, this.trigger(new b(d.Wk, {
                            frameTime: a
                        })), this.trigger(new b(d.Xk, {
                            frameTime: a
                        })), this.g.render()) : e.Ma(this.Pg, this))
        };
        d.Wk = "frameStart";
        d.Xk = "positionSet";
        return d
    });
    define("ff", "fg,ll,bZ,eO,hg,ci,hb,gB,cm,gj,kw".split(","), function (a, b, c, e, g, d, f, h, j, p, k) {
        var l = a.extend(e, function (a, b) {
            e.call(this);
            this.C = a;
            this.g = b;
            this.g.set("visible", y);
            this.Af = new h(this.g);
            this.ca = new j(this.C);
            this.sc = new p(this.C, this.g);
            this.ga = new f(this.C, this.g, this.sc);
            this.oa = new d(this.g, this.sc);
            this.ge = new k(this.g);
            this.nc = new g(this.g);
            this.sc.bind(p.La, this.Zc, this, n);
            this.Af.bind(h.qO, this.k7, this, n);
            this.Af.bind(h.GO, this.N7, this, n);
            this.Af.bind(h.fO, this.GC, this, n);
            this.ca.bind(j.rO,
                this.l7, this);
            this.ca.bind(j.pO, this.j7, this);
            this.ca.bind(j.vb, this.gd, this, n);
            this.ga.bind(f.La, this.Zc, this, n);
            this.ga.bind(f.pt, this.FC, this, n);
            this.ga.bind(f.oq, this.IC, this, n);
            this.ga.bind(f.qt, this.HC, this, n);
            this.ga.bind(f.Tk, this.Dl, this, n);
            this.ga.bind(f.Uk, this.nk, this, n);
            this.ga.bind(f.T_, this.eoa, this, n);
            this.ga.bind(f.U_, this.foa, this, n);
            this.ga.bind(f.jO, this.O6, this, n);
            this.oa.bind(d.La, this.Zc, this, n);
            this.ge.bind(k.Wk, this.Lr, this, n);
            this.ge.bind(k.Xk, this.Mr, this, n)
        });
        l.prototype.clear =
        function () {
            this.Af.clear();
            this.ca.clear();
            this.ga.clear();
            this.oa.clear();
            this.ge.clear();
            this.nc.clear();
            this.sc.clear();
            this.sc.unbind(p.La, this.Zc, this);
            this.Af.unbind(h.qO, this.k7, this);
            this.Af.unbind(h.fO, this.GC, this);
            this.Af.unbind(h.GO, this.N7, this);
            this.ca.unbind(j.rO, this.l7, this);
            this.ca.unbind(j.pO, this.j7, this);
            this.ca.unbind(j.vb, this.gd, this);
            this.ga.unbind(f.La, this.Zc, this);
            this.ga.unbind(f.pt, this.FC, this);
            this.ga.unbind(f.oq, this.IC, this);
            this.ga.unbind(f.qt, this.HC, this);
            this.ga.unbind(f.Tk,
                this.Dl, this);
            this.ga.unbind(f.Uk, this.nk, this);
            this.ga.unbind(f.jO, this.O6, this);
            this.oa.unbind(d.La, this.Zc, this);
            this.ge.unbind(k.Wk, this.Lr, this);
            this.ge.unbind(k.Xk, this.Mr, this);
            this.C = this.g = this.sc = this.nc = this.ge = this.oa = this.ga = this.ca = this.Af = r
        };
        l.prototype.BN = function (a, b) {
            this.ga.BN(a, b)
        };
        l.prototype.Yya = function (a) {
            this.g.set("visible", n);
            this.Af.i_(a)
        };
        l.prototype.cq = function () {
            this.Af.lY();
            this.ca.stop();
            this.ga.hide();
            this.oa.end();
            this.nc.Uea()
        };
        l.prototype.next = function () {
            this.Af.next()
        };
        l.prototype.xZ = function () {
            this.Af.xZ()
        };
        l.prototype.stop = function () {
            this.ca.stop();
            this.nc.stop();
            this.Af.stop();
            this.oa.stop()
        };
        l.prototype.play = function () {
            this.ca.play();
            this.nc.play();
            this.Af.play();
            this.oa.play()
        };
        l.prototype.pause = function () {
            this.ca.pause();
            this.nc.pause();
            this.Af.pause();
            this.oa.pause()
        };
        l.prototype.eoa = function () {
            this.ca.pause();
            this.nc.pause();
            this.Af.pause();
            this.oa.pause()
        };
        l.prototype.foa = function () {
            this.ca.play();
            this.nc.play();
            this.Af.play();
            this.oa.play()
        };
        l.prototype.k7 =
        function (a) {
            this.ga.display(a.data.album, a.data.item)
        };
        l.prototype.N7 = function () {
            this.play()
        };
        l.prototype.Zc = function () {
            this.ge.Ma()
        };
        l.prototype.Lr = function (a) {
            this.oa.Yp(a.data.frameTime)
        };
        l.prototype.Mr = function (a) {
            a = a.data.frameTime;
            this.ga.dc(a);
            this.sc.dc(a);
            this.nc.dc(a)
        };
        l.prototype.FC = function (a) {
            this.oa.start(a.data.item)
        };
        l.prototype.IC = function (a) {
            var b = a.data.album,
            a = a.data.item,
            d = a.get("media");
            this.oa.end(a);
            this.nc.zza(d);
            this.trigger(new c(l.CO, {
                    photoAlbum: b,
                    item: a
                }))
        };
        l.prototype.HC =
        function (a) {
            var b = a.data.album,
            a = a.data.item;
            a.get("media");
            this.Af.$M(a);
            this.ca.$M(a);
            this.trigger(new c(l.BO, {
                    photoAlbum: b,
                    item: a
                }))
        };
        l.prototype.l7 = function (a) {
            this.nc.wza(a.data.item.get("media"))
        };
        l.prototype.j7 = function (a) {
            this.Af.Qwa(a.data.item)
        };
        l.prototype.GC = function (a) {
            this.ca.stop();
            this.nc.stop();
            this.trigger(new c(l.AO, {
                    photoAlbum: a.data.album
                }))
        };
        l.prototype.nk = function (a) {
            a = a.data.album;
            this.nc.i_(a);
            this.ca.play();
            this.oa.play();
            this.trigger(new c(l.Uk, {
                    photoAlbum: a
                }))
        };
        l.prototype.Dl =
        function (a) {
            a = a.data.album;
            this.nc.xza(a);
            this.trigger(new c(l.Tk, {
                    photoAlbum: a
                }))
        };
        l.prototype.O6 = function () {
            this.g.set("visible", y)
        };
        l.prototype.gd = function (a) {
            this.trigger(new c(l.vb, {
                    state: a.data.state
                }))
        };
        l.Uk = "photoAlbumShow";
        l.AO = "photoAlbumEnd";
        l.Tk = "photoAlbumHide";
        l.BO = "photoBegin";
        l.CO = "photoEnd";
        l.vb = "playbackStateChange";
        return l
    });
    define("fR", "require,jquery.mod,do,jn,iG,iX,r".split(","), function (a) {
        function b(a, b) {
            this.Y = a;
            this.Q = b;
            this.Oa = a.ad();
            this.Ya = a.Pd();
            this.fI = a.VR;
            this.QX = this.YB = 0;
            this.Xj = 1;
            this.te = 0;
            this.Z = n;
            this.VQ();
            this.hc = this.cc = 100;
            this.fa = this.da = 0.5;
            this.ta = 1;
            this.hD = n;
            this.sd = 1;
            this.h4 = {};
            this.F5 = {};
            this.Waa = f.browser() != f.If
        }
        var c = a("jquery.mod"),
        e = a("do"),
        g = a("jn"),
        d = a("iG");
        a("iX");
        var f = a("r");
        b.prototype.VQ = function () {
            this.PG = c("<div></div>");
            var a = {
                position: "absolute",
                left: "0",
                top: "0",
                width: this.cc +
                "px",
                height: this.hc + "px",
                overflow: "hidden",
                "-webkit-transform": "translateZ(0)"
            };
            a["-moz-transform-origin"] = a["-webkit-transform-origin"] = a["transform-origin"] = "0 0 0";
            a["-ms-transform-origin"] = "0 0";
            this.PG.css(a);
            this.sP = c(d.we(this.Y.Dj()));
            a = {
                display: "block",
                position: "absolute",
                left: "0",
                top: "0",
                width: this.Oa + "px",
                height: this.Ya + "px"
            };
            a["-moz-transform-origin"] = a["-webkit-transform-origin"] = a["transform-origin"] = "0 0 0";
            a["-ms-transform-origin"] = "0 0";
            this.sP.css(a);
            this.PG.append(this.sP)
        };
        b.prototype.Gb =
            Q("PG");
        b.prototype.getItem = Q("Y");
        b.prototype.getX = Q("da");
        b.prototype.getY = Q("fa");
        b.prototype.lm = Q("ta");
        b.prototype.Aa = function () {
            return Math.round(this.Oa * this.ta * this.sd)
        };
        b.prototype.eb = function () {
            return Math.round(this.Ya * this.ta * this.sd)
        };
        b.prototype.xd = function (a) {
            if (this.Xj != a) {
                this.Xj = a;
                this.Z = n
            }
        };
        b.prototype.zM = Q("Xj");
        b.prototype.Xs = function (a) {
            if (this.Ed != a) {
                this.Ed = a;
                this.Z = n
            }
        };
        b.prototype.qw = function (a, b) {
            if (this.cc != a || this.hc != b) {
                this.cc = a;
                this.hc = b;
                this.Z = n
            }
        };
        b.prototype.Ka = function (a,
            b, c) {
            if (this.da != a || this.fa != b || this.ta != c) {
                this.da = a;
                this.fa = b;
                this.ta = c;
                this.Z = n
            }
        };
        b.prototype.Ij = function (a) {
            if (this.te != a) {
                this.te = a;
                this.Z = n
            }
        };
        b.prototype.lya = function (a) {
            if (this.QX != a) {
                this.QX = a;
                this.Z = n
            }
        };
        b.prototype.render = function () {
            if (this.Z) {
                this.Z = y;
                switch (this.Ed) {
                case g.NONE:
                    this.sd = 1;
                    break;
                case g.Zk:
                    this.sd = this.cc / this.Oa;
                    break;
                case g.kh:
                    this.sd = this.hc / this.Ya;
                    break;
                case g.xm:
                    this.sd = this.Oa * this.hc > this.Ya * this.cc ? this.hc / this.Ya : this.cc / this.Oa;
                    break;
                default:
                    this.sd = this.Oa * this.hc >
                        this.Ya * this.cc ? this.cc / this.Oa : this.hc / this.Ya
                }
                var a = this.ta * this.sd,
                b = this.cc * 0.5 - this.da * this.Oa * a,
                c = this.hc * 0.5 - this.fa * this.Ya * a,
                d = this.cc * this.te,
                f = function (a, b) {
                    return Math.round(a * Math.pow(10, b)) * Math.pow(10, -b)
                },
                q = {};
                q.width = f(this.cc, 0) + "px";
                q.height = f(this.hc, 0) + "px";
                q.transform = this.Waa ? "translate3d(" + f(d, 2) + "px, 0px, 0px)" : "translate(" + f(d, 2) + "px, 0px)";
                q["-moz-transform"] = q["-webkit-transform"] = q["-ms-transform"] = q.transform;
                q["z-index"] = this.QX;
                if (this.Xj == 0)
                    q.display = "none";
                else {
                    q.display =
                        "block";
                    if (this.Xj == 1) {
                        q.filter = q["-ms-filter"] = "";
                        q.opacity = ""
                    } else {
                        q.filter = q["-ms-filter"] = "alpha(opacity=" + Math.round(this.Xj * 100) + ")";
                        q.opacity = this.Xj
                    }
                }
                d = [];
                if (this.Waa) {
                    d.push("translate3d(" + f(b, 2) + "px, " + f(c, 2) + "px, 0px)");
                    d.push("scale3d(" + a + ", " + a + ", " + a + ")");
                    if (this.fI) {
                        d.push("translate3d(" + this.Oa + "px, 0, 0)");
                        d.push("scale3d(-1, 1, 1)")
                    }
                } else {
                    d.push("translate(" + f(b, 2) + "px, " + f(c, 2) + "px)");
                    d.push("scale(" + a + ", " + a + ")");
                    if (this.fI) {
                        d.push("translate(" + this.Oa + "px, 0)");
                        d.push("scale(-1, 1)")
                    }
                }
                a = {};
                a["-moz-transform"] = a["-webkit-transform"] = a["-ms-transform"] = a.transform = d.join(" ");
                if (!e.isEqual(this.h4, q)) {
                    this.h4 = q;
                    this.PG.css(q)
                }
                if (!e.isEqual(this.F5, a)) {
                    this.F5 = a;
                    this.sP.css(a)
                }
            }
        };
        return b
    });
    define("gi", "require,jquery.mod,do,fg,ll,ge,iG,fR,R,d".split(","), function (a) {
        var b = a("jquery.mod"),
        c = a("do"),
        e = a("fg"),
        g = a("ll"),
        d = a("ge"),
        f = a("iG"),
        h = a("fR"),
        j = a("R"),
        p = a("d"),
        a = e.extend(p, function () {
            p.call(this);
            this.Tc("Renderer");
            this.set("toolTipDisabled", n);
            this.set("cursor", j.qq);
            this.bind(g.yb, this.kb, this, n);
            this.bind(g.od, this.wh, this, n);
            this.bind(g.zd, this.th, this, n);
            this.fv = y;
            this.qb = [];
            this.ND = this.Gp = y;
            this.KU = b("<div/>");
            this.KU.css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                overflow: "hidden",
                "-webkit-transform": "translateZ(0)"
            });
            this.Ra().append(this.KU)
        });
        a.prototype.Mn = function (a) {
            f.Mn(a, d.Uj)
        };
        a.prototype.Fi = function (a) {
            f.Fi(a, d.Uj)
        };
        a.prototype.gda = function (a) {
            return f.FN(a)
        };
        a.prototype.UX = function (a) {
            a = new h(a, this);
            a.qw(this.Aa(), this.eb());
            a.Ka(0.5, 0.5, 0, 1);
            this.KU.append(a.Gb());
            this.qb.push(a);
            this.Gp = n
        };
        a.prototype.removeItem = function (a) {
            if (a = this.rl(a)) {
                this.qb = c.without(this.qb, a);
                a.Gb().detach();
                this.Gp = n
            }
        };
        a.prototype.$X = function (a) {
            if (a = this.rl(a)) {
                this.qb =
                    c.without(this.qb, a);
                this.qb.push(a);
                this.Gp = n
            }
        };
        a.prototype.Iya = function (a, b) {
            this.rl(a).Xs(b)
        };
        a.prototype.qm = function (a, b) {
            this.rl(a).xd(b)
        };
        a.prototype.Fya = function (a, b) {
            this.rl(a).Ij(b)
        };
        a.prototype.OF = function (a, b, c, d) {
            this.rl(a).Ka(b, c, d)
        };
        a.prototype.iF = function (a) {
            return this.rl(a).getX()
        };
        a.prototype.jF = function (a) {
            return this.rl(a).getY()
        };
        a.prototype.dca = function (a) {
            return this.rl(a).lm()
        };
        a.prototype.hF = function (a) {
            return this.rl(a).Aa()
        };
        a.prototype.gF = function (a) {
            return this.rl(a).eb()
        };
        a.prototype.render = function () {
            if (this.fv) {
                this.uta();
                this.Bra();
                for (var a = 0; a < this.qb.length; a++)
                    this.qb[a].render()
            }
        };
        a.prototype.uta = function () {
            if (this.ND) {
                this.ND = y;
                for (var a = this.Aa(), b = this.eb(), c = 0; c < this.qb.length; c++)
                    this.qb[c].qw(a, b)
            }
        };
        a.prototype.Bra = function () {
            if (this.Gp) {
                this.Gp = y;
                for (var a = [], b = 0; b < this.qb.length; b++) {
                    var c = this.qb[b],
                    d = {};
                    d.aN = c.YB;
                    d.index = b;
                    d.hf = c;
                    a.push(d)
                }
                a.sort(function (a, b) {
                    return a.aN == b.aN ? a.index - b.index : a.aN - b.aN
                });
                for (b = 0; b < a.length; b++)
                    a[b].hf.lya(b + 1)
            }
        };
        a.prototype.rl = function (a) {
            if (this.HAa == a)
                return this.GAa;
            for (var b = r, c = 0; c < this.qb.length && !b; c++)
                this.qb[c].getItem() == a && (b = this.qb[c]);
            return b
        };
        a.prototype.kb = function () {
            this.ND = n;
            this.render()
        };
        a.prototype.wh = function () {
            this.fv = n;
            this.render()
        };
        a.prototype.th = function () {
            this.fv = y
        };
        return a
    });
    define("hP", "require,fg,bZ,dW,jT,cu,dk,ff,ki,gi,dm,ll".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("dW"),
        g = a("jT"),
        d = a("cu"),
        f = a("dk"),
        h = a("ff"),
        j = a("ki"),
        p = a("gi"),
        k = a("dm"),
        l = a("ll"),
        a = b.extend(f, function () {
            f.call(this, "photoAlbum");
            this.zL = this.JU = this.Df = y;
            this.o = this.g = r;
            this.lia = new g(this, "buttonNext", k.Wc);
            this.lia.bind(l.U, this.F7, this);
            this.mia = new g(this, "buttonPrevious", k.Wc);
            this.mia.bind(l.U, this.S7, this);
            this.Ac = b.nm(this.Oe, this)
        });
        e.A("PhotoAlbumPlayer", a).B("Object").J({
            photoAlbum: "PhotoAlbum",
            viewerArea: "ViewerArea",
            state: "enum[stopped, playing, paused]",
            mouseTransition: "enum[blending, scroll]",
            mouseTransitionDuration: "number",
            touchTransition: "enum[blending, scroll]",
            touchTransitionDuration: "number",
            buttonNext: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPrevious: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlay: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonStop: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRestart: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]"
        }).Cg({
            next: function () {
                this.F7()
            },
            pause: function () {
                this.Nu()
            },
            play: function () {
                this.Ou()
            },
            previous: function () {
                this.S7()
            },
            stop: function () {
                this.Or()
            },
            restart: function () {
                this.Nr()
            }
        }).Xb([d.ne, d.dg, l.gc]);
        a.prototype.set = function (a, b) {
            if (this.get(a) != b) {
                switch (a) {
                case "photoAlbum":
                    this.JU =
                        n;
                    this.Ac();
                    break;
                case "viewerArea":
                    this.Df = n;
                    this.Ac();
                    break;
                case "touchTransition":
                case "mouseTransition":
                case "touchTransitionDuration":
                case "mouseTransitionDuration":
                case "transitionDuration":
                    this.zL = n;
                    this.Ac()
                }
                f.prototype.set.call(this, a, b)
            }
        };
        a.prototype.Oe = function () {
            if (this.Df) {
                this.Df = y;
                this.zL = n;
                this.Ao();
                this.get("viewerArea") && this.xo();
                this.HD(this.get("viewerArea"))
            }
            if (this.g && this.JU) {
                this.JU = y;
                if (this.get("photoAlbum")) {
                    this.tD();
                    this.o.Yya(this.get("photoAlbum"))
                } else
                    this.o.cq()
            }
            if (this.zL) {
                this.zL =
                    y;
                this.Qaa()
            }
        };
        a.prototype.Ty = function () {
            this.set("photoAlbum", r)
        };
        a.prototype.xo = function () {
            var a = this.get("viewerArea");
            this.g = new p;
            this.g.M({
                left: 0,
                top: 0,
                bottom: 0,
                right: 0
            });
            a.la(this.g);
            this.o = new h(a, this.g);
            this.Qaa();
            this.o.bind(h.Uk, this.nk, this);
            this.o.bind(h.Tk, this.Dl, this);
            this.o.bind(h.AO, this.GC, this);
            this.o.bind(h.BO, this.L7, this);
            this.o.bind(h.CO, this.M7, this);
            this.o.bind(h.vb, this.gd, this);
            this.ls(n)
        };
        a.prototype.Ao = function () {
            if (this.g) {
                this.o.unbind(h.Uk, this.nk, this);
                this.o.unbind(h.Tk,
                    this.Dl, this);
                this.o.unbind(h.AO, this.GC, this);
                this.o.unbind(h.BO, this.L7, this);
                this.o.unbind(h.CO, this.M7, this);
                this.o.unbind(h.vb, this.gd, this);
                this.o.clear();
                this.g.getParent().removeChild(this.g);
                this.g = r;
                this.ls(y)
            }
        };
        a.prototype.Qaa = function () {
            var a = this.get("viewerArea");
            a && this.o && (a.ik ? this.o.BN(this.get("touchTransition", j.vm), this.get("touchTransitionDuration", a.get("transitionDuration", 1E3))) : this.o.BN(this.get("mouseTransition", j.vm), this.get("mouseTransitionDuration", a.get("transitionDuration",
                            1E3))))
        };
        a.prototype.gd = function (a) {
            this.Zb(a.data.state)
        };
        a.prototype.nk = function (a) {
            this.iC(a.data.photoAlbum)
        };
        a.prototype.Dl = function (a) {
            this.hC(a.data.photoAlbum)
        };
        a.prototype.GC = function (a) {
            a.data.photoAlbum.trigger(new c(l.Ba))
        };
        a.prototype.L7 = function (a) {
            a.data.item.Iv()
        };
        a.prototype.M7 = function (a) {
            a.data.item.end()
        };
        a.prototype.Zo = function (a) {
            this.g.getParent().M({
                progressPercent: a.data.percent,
                progressVisible: n
            })
        };
        a.prototype.ly = function () {
            this.g.getParent().set("progressVisible", y)
        };
        a.prototype.F7 =
        function () {
            this.o && this.get("photoAlbum") && this.o.next()
        };
        a.prototype.S7 = function () {
            this.o && this.get("photoAlbum") && this.o.xZ()
        };
        a.prototype.Rg = function () {
            this.o && this.get("photoAlbum") && this.o.play()
        };
        a.prototype.vj = function () {
            this.o && this.get("photoAlbum") && this.o.stop()
        };
        a.prototype.rk = function () {
            this.o && this.get("photoAlbum") && this.o.pause()
        };
        return a
    });
    define("fd", ["fg", "dW", "cu", "dl"], function (a, b, c, e) {
        a = a.extend(e, function () {
            e.call(this)
        });
        b.A("PhotoAlbumPlayListItem", a).B("PlayListItem").J({
            media: "PhotoAlbum",
            player: "PhotoAlbumPlayer"
        });
        a.prototype.start = function () {
            e.prototype.start.call(this);
            var a = this.get("player");
            a && (a.bind(c.ne, this.nk, this), a.set("photoAlbum", this.get("media")))
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            a && (a.unbind(c.ne, this.nk, this), a.get("photoAlbum") == this.get("media") && a.set("photoAlbum", r));
            e.prototype.stop.call(this)
        };
        a.prototype.aG = function () {
            var a = this.get("media");
            if (a) {
                var b = a.get("playList");
                b && (a = b.get("selectedIndex"), b = b.get("items"), 0 <= a && b && b[a].aG())
            }
            e.prototype.aG.call(this)
        };
        a.prototype.nk = function () {
            this.get("player").unbind(c.ne, this.nk, this);
            this.get("player").bind(c.dg, this.Dl, this);
            this.Iv()
        };
        a.prototype.Dl = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(c.dg, this.Dl, this), this.end())
        };
        return a
    });
    define("iV", "require,fg,ge,dW,gN,z".split(","), function (a) {
        var b = a("fg"),
        c = a("ge"),
        e = a("dW"),
        g = a("gN");
        a("z");
        a = b.extend(g, function () {
            g.call(this, c.gga)
        });
        e.A("PhotoAudio", a).B("MediaAudio");
        return a
    });
    define("kr", ["fg", "jd", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("PhotoCamera", a).B("Object").J({
            scaleMode: "enum[none, fit_inside, fit_outside, fit_to_width, fit_to_height]"
        });
        return a
    });
    define("dM", "require,do,fg,jd,bZ,dW,hi,ll".split(","), function (a) {
        var b = a("do"),
        c = a("fg"),
        e = a("jd"),
        g = a("bZ"),
        d = a("dW"),
        f = a("hi"),
        h = a("ll"),
        a = c.extend(e, function () {
            this.td = -1;
            this.Pc = [];
            this.lD = this.yl = this.qg = m;
            e.call(this)
        });
        d.A("PlayList", a).B("Object").J({
            items: "array[PlayListItem]",
            selectedIndex: "number"
        }).Hf([h.ZN]).Xb([h.aa]);
        a.prototype.set = function (a, b) {
            a == "selectedIndex" ? this.hra(b) : a == "items" ? this.Vqa(b) : e.prototype.set.call(this, a, b)
        };
        a.prototype.get = function (a, b) {
            return a == "selectedIndex" ?
            this.td : a == "items" ? this.Pc : e.prototype.get.call(this, a, b)
        };
        a.prototype.Vqa = function (a) {
            a = a || [];
            if (!b.isEqual(this.Pc, a)) {
                var c = this.td;
                this.Pc = a;
                a = this.y9(this.td);
                this.trigger(new g(h.ZN, {
                        nextSelectedIndex: a
                    }));
                this.td = a;
                this.h$(this.hr(this.td));
                this.Kaa();
                this.trigger(new g(h.aa, {
                        previousSelectedIndex: c
                    }));
                e.prototype.set.call(this, "items", this.Pc);
                e.prototype.set.call(this, "selectedIndex", this.td)
            }
        };
        a.prototype.hra = function (a) {
            a = this.y9(a);
            if (this.td != a) {
                var b = this.td;
                this.trigger(new g(h.ZN, {
                        nextSelectedIndex: a
                    }));
                this.td = a;
                this.h$(this.hr(this.td));
                this.Kaa();
                this.trigger(new g(h.aa, {
                        previousSelectedIndex: b
                    }));
                e.prototype.set.call(this, "selectedIndex", this.td)
            }
        };
        a.prototype.y9 = function (a) {
            return Math.max(-1, Math.min(this.Pc.length - 1, a))
        };
        a.prototype.hr = function (a) {
            return a >= 0 ? this.Pc[a] : r
        };
        a.prototype.h$ = function (a) {
            if ((this.qg != a || this.yl !== m) && this.yl !== a)
                if (this.yl === m) {
                    this.yl = a;
                    if (this.qg)
                        if (this.yl && this.qg.get("player") == this.yl.get("player")) {
                            this.qg.aG();
                            this.Pu()
                        } else
                            this.qg.stop();
                    else
                        this.Pu()
                } else
                    this.yl = a
        };
        a.prototype.Pu = function () {
            if (this.qg) {
                this.qg.unbind(h.Sk, this.pU, this);
                this.qg.unbind(h.pe, this.Pu, this);
                this.qg.unbind(h.Ba, this.Pu, this)
            }
            if (this.yl) {
                this.qg = this.yl;
                this.yl = m;
                this.qg.bind(h.Sk, this.pU, this);
                this.qg.bind(h.pe, this.Pu, this);
                this.qg.start()
            } else {
                this.yl = this.qg = m;
                this.set("selectedIndex", -1)
            }
        };
        a.prototype.pU = function () {
            this.qg.unbind(h.Sk, this.pU, this);
            this.qg.unbind(h.pe, this.Pu, this);
            this.qg.bind(h.Ba, this.Pu, this)
        };
        a.prototype.Kaa = function () {
            this.lD &&
            f.eN(this.lD.get("media"), -1);
            (this.lD = this.Pc && this.td >= 0 ? this.Pc[(this.td + 1) % this.Pc.length] : r) && f.eN(this.lD.get("media"), 1)
        };
        return a
    });
    define("hY", ["fg", "dW", "dM"], function (a, b, c) {
        a = a.extend(c, function () {
            c.call(this)
        });
        b.A("PhotoPlayList", a).B("PlayList").J({
            items: "array[PhotoPlayListItem]"
        });
        return a
    });
    define("im", ["fg", "dW", "dl"], function (a, b, c) {
        a = a.extend(c, function () {
            c.call(this)
        });
        b.A("PhotoPlayListItem", a).B("PlayListItem").J({
            media: "Photo",
            camera: "PhotoCamera"
        });
        return a
    });
    define("eG", ["require", "do", "fg", "eT", "dW"], function (a) {
        a("do");
        var b = a("fg"),
        c = a("eT"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("PlaybackBar", b).B("UIComponent").J({
            barBackgroundColor: "or[array[color], color]",
            barBackgroundColorDirection: "enum[horizontal, vertical]",
            barBackgroundColorRatios: "array[number]",
            barBorderColor: "color",
            barBorderRadius: "number",
            barBorderSize: "number",
            barOpacity: "number",
            playheadBackgroundColor: "or[array[color], color]",
            playheadBackgroundColorDirection: "enum[horizontal, vertical]",
            playheadBackgroundColorRatios: "array[number]",
            playheadBorderColor: "color",
            playheadBorderRadius: "number",
            playheadBorderSize: "number",
            playheadOpacity: "number",
            playheadWidth: "or[number, percent]",
            playheadHeight: "or[number, percent]",
            playheadShadow: "bool",
            playheadShadowBlurRadius: "number",
            playheadShadowColor: "color",
            playheadShadowHorizontalLength: "number",
            playheadShadowOpacity: "number",
            playheadShadowSpread: "number",
            playheadShadowVerticalLength: "number",
            stepBackgroundColor: "or[array[color], color]",
            stepBackgroundColorDirection: "enum[horizontal, vertical]",
            stepBackgroundColorRatios: "array[number]",
            stepBorderColor: "color",
            stepBorderRadius: "number",
            stepBorderSize: "number",
            stepOpacity: "number",
            stepWidth: "or[number, percent]",
            stepHeight: "or[number, percent]",
            stepShadow: "bool",
            stepShadowBlurRadius: "number",
            stepShadowColor: "color",
            stepShadowHorizontalLength: "number",
            stepShadowOpacity: "number",
            stepShadowSpread: "number",
            stepShadowVerticalLength: "number",
            selectedStepBackgroundColor: "or[array[color], color]",
            selectedStepBackgroundColorDirection: "enum[horizontal, vertical]",
            selectedStepBackgroundColorRatios: "array[number]",
            selectedStepBorderColor: "color",
            selectedStepBorderRadius: "number",
            selectedStepBorderSize: "number",
            selectedStepOpacity: "number",
            selectedStepWidth: "or[number, percent]",
            selectedStepHeight: "or[number, percent]",
            selectedStepShadow: "bool",
            selectedStepShadowBlurRadius: "number",
            selectedStepShadowColor: "color",
            selectedStepShadowHorizontalLength: "number",
            selectedStepShadowOpacity: "number",
            selectedStepShadowSpread: "number",
            selectedStepShadowVerticalLength: "number",
            position: "number",
            duration: "number",
            steps: "number",
            selectedStep: "number"
        });
        return b
    });
    define("kd", ["require"], function () {
        function a(a) {
            try {
                for (var g = (c.tF << 12) + c.xF & 65535, d = "", f = 0, h = a.length; f < h; )
                    var j = b.indexOf(a.charAt(f++)) << 12 | b.indexOf(a.charAt(f++)) << 6 | b.indexOf(a.charAt(f++)) << 0, j = j - g + 65536 & 65535, d = d + String.fromCharCode(j);
                return d
            } catch (p) {
                if ("{%" == a.substr(0, 2))
                    return ""
            }
        }
        var b = "";
        [[65, 26], [97, 26], [48, 10]].forEach(function (a) {
            for (var c = 0; c < a[1]; c++)
                b += String.fromCharCode(a[0] + c)
        });
        var b = b + "+/",
        c = {
            Oua: "true"
        };
        c.tF = parseInt("0") ||
            0;
        c.xF = parseInt("1544") || 1;
        c.yza = "true";
        c.name = a("AY7AZMAZeAZxAZ7AZ8AZpAYoAZYAZ0AZpAaBAZtAZ6");
        c.mfa = a("");
        return c
    });
    define("bh", [], function () {
        return {
            qa: "left",
            Na: "right",
            nb: "top",
            mb: "bottom"
        }
    });
    define("cI", ["fg", "dy", "N", "bh"], function (a, b) {
        var c = a.extend(b, function () {
            b.call(this)
        });
        c.prototype.zB = R(0);
        c.prototype.AB = R(0);
        c.prototype.Qy = function () {
            b.prototype.Qy.call(this);
            this.ar(function (a) {
                a.xe(n)
            })
        };
        c.prototype.rp = function () {
            b.prototype.rp.call(this);
            this.ar(function (a) {
                a.TF(this.zB(a, this.Ks()));
                a.UF(this.AB(a, this.Ks()))
            })
        };
        c.prototype.Oy = function () {
            this.ar(function (a) {
                a.TF(this.zB(a, 1));
                a.UF(this.AB(a, 1))
            });
            b.prototype.Oy.call(this)
        };
        c.prototype.Py = function () {
            this.ar(function (a) {
                a.TF(this.zB(a,
                        0));
                a.UF(this.AB(a, 0))
            });
            b.prototype.Py.call(this)
        };
        return c
    });
    define("dE", ["fg", "cI", "bh"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        a.prototype.zB = function (a, b) {
            switch (this.get("from")) {
            case c.nb:
            case c.mb:
                return 0;
            case c.qa:
                var d = a.da,
                f = a.Aa();
                return isNaN(f) || isNaN(d) ? 1E4 : (-d - f) * (1 - b);
            default:
                d = a.getParent();
                if (!d)
                    return 0;
                f = d.Id();
                d = a.da;
                return isNaN(d) || isNaN(f) ? 1E4 : (f - d) * (1 - b)
            }
        };
        a.prototype.AB = function (a, b) {
            switch (this.get("from")) {
            case c.nb:
                var d = a.fa,
                f = a.eb();
                return isNaN(f) || isNaN(d) ? 1E4 : (-d - f) * (1 - b);
            case c.mb:
                d = a.getParent();
                if (!d)
                    return 0;
                f = d.Hd();
                d = a.fa;
                return isNaN(d) || isNaN(f) ? 1E4 : (f - d) * (1 - b);
            default:
                return 0
            }
        };
        a.prototype.Py = function () {
            this.ar(function (a) {
                a.TF(0);
                a.UF(0);
                a.xe(y)
            })
        };
        return a
    });
    define("fP", ["fg", "cI", "N", "bh"], function (a, b, c, e) {
        a = a.extend(b, function () {
            b.call(this)
        });
        a.prototype.zB = function (a, b) {
            switch (this.get("to")) {
            case e.nb:
            case e.mb:
                return 0;
            case e.qa:
                var c = a.da,
                h = a.Aa();
                return isNaN(h) || isNaN(c) ? 1E4 : (-c - h) * b;
            default:
                c = a.getParent();
                if (!c)
                    return 0;
                h = c.Id();
                c = a.da;
                return isNaN(c) || isNaN(h) ? 1E4 : (h - c) * b
            }
        };
        a.prototype.AB = function (a, b) {
            switch (this.get("to")) {
            case e.nb:
                var c = a.fa,
                h = a.eb();
                return isNaN(h) || isNaN(c) ? 1E4 : (-c - h) * b;
            case e.mb:
                c = a.getParent();
                if (!c)
                    return 0;
                h = c.Hd();
                c = a.fa;
                return isNaN(c) || isNaN(h) ? 1E4 : (h - c) * b;
            default:
                return 0
            }
        };
        a.prototype.Oy = function () {
            this.ar(function (a) {
                a.TF(0);
                a.UF(0);
                a.xe(y)
            })
        };
        return a
    });
    define("A", "require,jquery.mod,fg,ll,lk,r,ez,jY,ck,c,kS,dE,fP,hR".split(","), function (a) {
        function b(a) {
            try {
                return window.localStorage.getItem(a)
            } catch (b) {}
        }
        var c = a("jquery.mod"),
        e = a("fg"),
        g = a("ll"),
        d = a("lk"),
        f = a("r"),
        h = a("ez"),
        j = a("jY"),
        p = a("ck"),
        k = a("c"),
        l = a("kS"),
        q = a("dE"),
        o = a("fP"),
        t = a("hR"),
        a = e.extend(l, function (a) {
            l.call(this);
            this.jb = a;
            this.fg = this.Jt = this.Kq = this.ri = r;
            a = new q;
            a.set("duration", 500);
            a.set("from", "bottom");
            a = new o;
            a.set("duration", 500);
            a.set("to", "bottom");
            this.M({
                creationPolicy: p.ut,
                verticalAlign: j.vc,
                horizontalAlign: j.Lc,
                visible: y,
                showEffect: this.MAa,
                hideEffect: this.NAa
            });
            this.yW = "";
            a = this.Rla();
            if (a === n)
                setTimeout(function () {
                    this.trigger(g.Hw)
                }
                    .bind(this), 0);
            else if (a === m) {
                this.jb.bind(g.D("cookiesPolicy"), this.D3, this);
                setTimeout(function () {
                    this.D3()
                }
                    .bind(this), 0)
            }
        });
        a.prototype.Ga = function () {
            l.prototype.Ga.call(this);
            this.M({
                backgroundColor: "#1a1a1a",
                width: "100%",
                left: 0,
                bottom: 0
            });
            if (this.ri == r) {
                this.ri = new t;
                this.ri.M({
                    content: this.yW,
                    fontColor: "#ffffff",
                    fontWeight: "400",
                    fontFamily: "Open Sans, Arial, sans-serif",
                    width: "100%"
                });
                this.la(this.ri)
            }
            if (this.Kq == r) {
                this.Kq = new l;
                this.la(this.Kq);
                this.Kq.M({
                    creationPolicy: p.ut,
                    verticalAlign: j.vc,
                    layout: k.Be
                })
            }
            if (this.Jt == r) {
                this.Jt = new h;
                this.Jt.M({
                    backgroundColor: "#2aabe2",
                    fontColor: "#ffffff",
                    fontFamily: "Open Sans, Arial, sans-serif",
                    label: d("accept").toUpperCase(),
                    verticalAlign: "middle"
                });
                this.Kq.la(this.Jt);
                this.Jt.bind(g.U, this.cia, this, n)
            }
            if (this.lx == r) {
                this.lx = new h;
                this.lx.M({
                    backgroundColor: "#1a1a1a",
                    fontColor: "#808080",
                    fontFamily: "Open Sans, Arial, sans-serif",
                    label: d("reject").toUpperCase(),
                    textDecoration: "underline",
                    verticalAlign: "middle"
                });
                this.Kq.la(this.lx);
                this.lx.bind(g.U, this.oia, this, n)
            }
        };
        a.prototype.cn = function () {
            l.prototype.cn.apply(this, arguments);
            var a = this.Ta();
            if (a) {
                a.bind(g.yb, this.kn, this, n);
                this.kn()
            }
        };
        a.prototype.kn = function () {
            var a = this.Ta();
            if (a) {
                var b = f.Za(),
                c = a.eb() > a.Aa(),
                d = Math.min(a.Aa(), a.eb()) / 100,
                a = function (a) {
                    return Math.round(a * d)
                };
                this.M({
                    gap: b ? a(4.63) : 20,
                    paddingLeft: b ? a(4.63) : 20,
                    paddingRight: b ? a(4.63) : 20,
                    paddingTop: b ? a(4.63) : 14,
                    paddingBottom: b ? a(4.63) : 14,
                    layout: b && c ? k.of : k.Be
                });
                this.ri && this.ri.M({
                    fontSize: b ? a(3.15) : 14,
                    textAlign: b && c ? "center" : "left"
                });
                this.Kq && this.Kq.M({
                    gap: b ? 0 : 13
                });
                this.Jt && this.Jt.M({
                    borderRadius: b ? a(4.63) : 15,
                    fontSize: b ? a(3.15) : 14,
                    height: b ? a(9.26) : 30,
                    paddingLeft: b ? a(6) : 20,
                    paddingRight: b ? a(6) : 20
                });
                this.lx && this.lx.M({
                    borderRadius: b ? a(4.63) : 15,
                    fontSize: b ? a(3.15) : 14,
                    height: b ? a(9.26) : 30,
                    paddingLeft: b ? a(6) : 20,
                    paddingRight: b ? a(6) : 20
                });
                this.Kc()
            }
        };
        a.prototype.D3 =
        function () {
            var a = e.toArray(this.jb.get("cookiesPolicy"));
            if (this.gD != a) {
                this.gD = a;
                this.fqa()
            }
        };
        a.prototype.fqa = function () {
            if (this.gD.length == 0)
                this.WV(r);
            else {
                var a = this.gD[0];
                e.toArray(a.get("geographicArea")).length == 0 ? this.WV(a) : this.qla(function (a) {
                    for (var b = r, c = 0; c < this.gD.length && !b; c++) {
                        var d = this.gD[c],
                        f = e.toArray(d.get("geographicArea"));
                        if (f.length == 0)
                            b = d;
                        else
                            for (var g = 0; g < f.length && !b; g++)
                                a.indexOf(f[g]) >= 0 && (b = d)
                    }
                    this.WV(b)
                }
                    .bind(this))
            }
        };
        a.prototype.WV = function (a) {
            if (this.wy !== a) {
                this.wy &&
                this.wy.unbind(g.D("url"), this.oX, this);
                if (this.wy = a) {
                    this.wy.bind(g.D("url"), this.oX, this);
                    this.oX();
                    this.set("visible", n)
                } else {
                    this.trigger(g.Hw);
                    this.set("visible", y)
                }
            }
        };
        a.prototype.oX = function () {
            var a = c(document.createElement("div")).html(d("cookies-notice"));
            a.find("a").css({
                color: "#2aabe2",
                cursor: "pointer",
                "text-decoration": "underline"
            }).attr({
                href: this.wy.get("url"),
                target: "_blank"
            });
            this.yW = a.html();
            this.ri && this.ri.set("content", this.yW)
        };
        a.prototype.cia = function () {
            this.i$(n);
            this.set("visible",
                y);
            this.trigger(g.Hw)
        };
        a.prototype.oia = function () {
            this.i$(y);
            this.set("visible", y)
        };
        var s = ["AT", "BE", "BG", "CY", "CZ", "DE", "DK", "EE", "EL", "ES", "FI", "FR", "HR", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SI", "SK"];
        a.prototype.qla = function (a) {
            this.hla(function (b) {
                var c = [b];
                s.indexOf(b) && c.push("EU");
                a(c)
            })
        };
        a.prototype.hla = function (a) {
            var d = b("tdvp_country_code");
            if (d)
                a(d);
            else if (!this.p4) {
                this.p4 = n;
                c.get("https://geoloc.3dvista.com", function (b) {
                    this.p4 = y;
                    b = b.country.toUpperCase();
                    try {
                        window.localStorage.setItem("tdvp_country_code",
                            b)
                    } catch (c) {}
                    a(b)
                }
                    .bind(this))
            }
        };
        var v = "tdvp_accept_cookies_" + window.location.origin + window.location.pathname;
        a.prototype.Rla = function () {
            var a = b(v);
            if (a == "yes")
                return n;
            if (a == "no")
                return y
        };
        a.prototype.i$ = function (a) {
            try {
                window.localStorage.setItem(v, a ? "yes" : "no")
            } catch (b) {}
        };
        return a
    });
    define("jl", ["require"], function () {
        function a(a) {
            var b = a instanceof Request || a instanceof Response ? a.url : a;
            b && (b = b.split("#")[0]);
            b && (b = b.split("?")[0]);
            return !b || -1 != b.indexOf("://") ? Promise.resolve(b) : ("undefined" !== typeof window ? Promise.resolve(window.location.href) : self.ZAa.matchAll({
                    type: "window"
                }).then(function (a) {
                    if (a.length)
                        return a[0].url
                })).then(function (a) {
                return (new URL(b, a)).toString()
            })
        }
        function b(a, b) {
            return new Promise(function (c, d) {
                (b === m ? g() : Promise.resolve(b)).then(function (b) {
                    (window.webkitRequestFileSystem ||
                        window.requestFileSystem)(b ? window.PERSISTENT : window.TEMPORARY, a, function (a) {
                        c(a)
                    }, function (a) {
                        console.log("Error getting file system access", a);
                        d("error getting file system")
                    })
                }, function (a) {
                    console.log("error getting file system access", a);
                    d("error getting file system")
                })
            })
        }
        function c(a, b) {
            return a && a.queryUsageAndQuota ? new Promise(function (c, d) {
                a.queryUsageAndQuota(function (e, f) {
                    console.log("UsedBytes:", e, "grantedBytes:", f, "freeBytesRequired:", b);
                    var g = e + b;
                    f >= g ? c(g) : a == navigator.webkitPersistentStorage ||
                    a == navigator.persistentStorage ? (console.log("requestQuota:", g), a.requestQuota(g, function () {
                            console.log("Granted bytes:", g);
                            c(g)
                        }, function (a) {
                            console.log("Not granted bytes:", g, a);
                            d("not enough free space granted")
                        })) : (console.log("Not enough temporary free space."), d("not enough free space granted"))
                }, function (a) {
                    console.log("Query quota error:", a);
                    a && a.message && (a = a.message);
                    d("not enough free space granted: " + a)
                })
            }) : Promise.reject("unknown free space")
        }
        function e() {
            return (navigator.storage && navigator.storage.persist ?
                navigator.storage.persist() : Promise.resolve(y)).then(function (a) {
                console.log("Persistence granted:", a);
                return a ? navigator.webkitPersistentStorage || navigator.persistentStorage : navigator.webkitTemporaryStorage || navigator.temporaryStorage
            })
        }
        function g() {
            return navigator.storage && navigator.storage.persisted ? navigator.storage.persisted() : Promise.resolve(y)
        }
        function d() {
            return !u ? Promise.reject("files uninitialized, no space was requested") : Promise.resolve(u)
        }
        function f(a) {
            a.length && "/" == a[0] && (a = a.substr(1));
            return a.split("/").filter(function (a) {
                return "" != a
            })
        }
        function h(a) {
            return new Promise(function (b, c) {
                a.remove(function () {
                    b()
                }, function (a) {
                    c("can't remove entry" + (a && a.message ? ": " + a.message : "") + ".")
                })
            })
        }
        function j(a) {
            return p(a).then(function (a) {
                return Promise.all(a.map(function (a) {
                        return a.isDirectory ? j(a) : h(a)
                    }))
            }).then(function () {
                return h(a).then(function () {
                    return Promise.resolve()
                }, function () {
                    return Promise.resolve()
                })
            })
        }
        function p(a) {
            return new Promise(function (b, c) {
                a.createReader().readEntries(function (a) {
                    b(a)
                },
                    function () {
                    c("can't list directory")
                })
            })
        }
        function k(a, b, c) {
            return new Promise(function (d, e) {
                a.getDirectory(b, c, function (a) {
                    d(a)
                }, function () {
                    e("can't get directory entry: " + b)
                })
            })
        }
        function l(a, b) {
            return new Promise(function (c, d) {
                k(a, b, {
                    create: y
                }).then(function (a) {
                    c(a)
                })["catch"](function () {
                    k(a, b, {
                        create: n
                    }).then(function (a) {
                        c(a)
                    })["catch"](function (a) {
                        console.log("Can't create directory entry: " + b, a);
                        d("can't create directory entry: " + b)
                    })
                })
            })
        }
        function q(a, b) {
            return 0 == b.length ? a : l(a, b[0]).then(function (a) {
                return q(a,
                    b.slice(1))
            })
        }
        function o(a, b) {
            return 0 == b.length ? a : k(a, b[0]).then(function (a) {
                return o(a, b.slice(1))
            })
        }
        function t(a, b, c) {
            return new Promise(function (d, e) {
                a.getFile(b, c, function (a) {
                    d(a)
                }, function () {
                    e("can't get file entry: " + b)
                })
            })
        }
        function s(a) {
            return new Promise(function (b, c) {
                a.createWriter(function (a) {
                    b(a)
                }, function () {
                    c("can't create File for writing")
                })
            })
        }
        function v(a) {
            var b = a.lastIndexOf(".");
            switch ((0 > b ? "" : a.substr(b)).toLowerCase()) {
            case ".bmp":
                return "image/bmp";
            case ".eot":
                return "application/vnd.ms-fontobject";
            case ".gif":
                return "image/gif";
            case ".htm":
            case ".html":
                return "text/html";
            case ".jpeg":
            case ".jpg":
                return "image/jpeg";
            case ".js":
                return "text/javascript";
            case ".json":
                return "application/json";
            case ".m3u8":
                return "application/vnd.apple.mpegurl";
            case ".m4a":
                return "audio/mp4";
            case ".m4v":
                return "video/mp4";
            case ".mp3":
                return "audio/mpeg";
            case ".mp4":
                return "video/mp4";
            case ".ogg":
                return "audio/ogg";
            case ".ogv":
                return "video/ogg";
            case ".otf":
                return "font/otf";
            case ".png":
                return "image/png";
            case ".svg":
                return "image/svg+xml";
            case ".tif":
                return "image/tiff";
            case ".tiff":
                return "image/tiff";
            case ".ts":
                return "video/vnd.dlna.mpeg-tts";
            case ".ttf":
                return "application/font-sfnt";
            case ".tts":
                return "video/vnd.dlna.mpeg-tts";
            case ".txt":
                return "text/plain";
            case ".webm":
                return "video/webm";
            case ".woff":
                return "font/x-woff";
            case ".woff2":
                return "font/woff2";
            case ".xml":
                return "text/xml";
            default:
                return "application/octet-stream"
            }
        }
        var u = r;
        return {
            iN: function () {
                return g()
            },
            toURL: function (b, c) {
                return a(b).then(function (a) {
                    var a = new URL(a),
                    b =
                        c ? "persistent" : "temporary",
                    d = a.pathname.split("/").map(encodeURIComponent).join("/");
                    return "filesystem:" + a.origin + "/" + b + d
                })
            },
            Qxa: function (a) {
                return e().then(function (b) {
                    return c(b, a)
                }).then(function (a) {
                    return b(a)
                }).then(function (a) {
                    u = a
                })
            },
            Jxa: function (a) {
                var a = f(a),
                b = a[a.length - 1],
                c = a.slice(0, -1);
                return d().then(function (a) {
                    return o(a.root, c)
                }).then(function (a) {
                    return t(a, b, {
                        create: n
                    })
                }, function () {
                    return Promise.resolve(r)
                }).then(function (a) {
                    return a && h(a)
                })
            },
            Zda: function (a, c) {
                var d = f(a);
                return b(1024,
                    c).then(function (a) {
                    return o(a.root, d)
                }).then(function (a) {
                    return j(a)
                }, function () {
                    return Promise.resolve()
                })
            },
            nfa: function (a, b, c) {
                var e = f(a),
                g = e[e.length - 1],
                h = e.slice(0, -1);
                return d().then(function (a) {
                    return q(a.root, h)
                }).then(function (a) {
                    return t(a, g, {
                        create: y
                    }).then(function (a) {
                        return Promise.resolve(a)
                    }, function () {
                        return t(a, g, {
                            create: n
                        })
                    })
                }).then(function (a) {
                    return s(a)
                }).then(function (d) {
                    d.seek(d.length);
                    return new Promise(function (e, f) {
                        d.onwriteend = function () {
                            e()
                        };
                        d.onerror = function (b) {
                            console.log("Error writing file:",
                                a, b);
                            f("error writing file: " + a)
                        };
                        d.write(new Blob([b], {
                                type: c || v(g)
                            }))
                    })
                })
            }
        }
    });
    define("bX", ["require", "jl", "jt", "r"], function (a) {
        function b(a, b) {
            this.ds = a;
            this.rQ = y;
            this.qD = r;
            this.ep = b || D()
        }
        function c(a) {
            return a.Aw >= d
        }
        var e = a("jl"),
        g = a("jt"),
        d = 1048576,
        f = 10485760,
        h = a("r").le() ? 3 : 5,
        a = {
            File: function (a, b) {
                this.url = a;
                this.Aw = b;
                this.GF = this.kz = 0
            }
        },
        j = a.Files = function (a, b, c, d) {
            this.P2 = this.Sha = a;
            this.Wm = b.slice();
            this.o4 = [];
            var e = 0;
            this.Wm.sort(function (a, b) {
                return a.Aw - b.Aw
            });
            this.Wm.forEach(function (a) {
                e += a.Aw
            });
            this.aaa = e;
            this.bu = [];
            this.pH = m;
            this.Km = [];
            this.sQ = y;
            this.Yd = c || D();
            this.qB = d || D()
        };
        j.prototype.xn = function () {
            return this.Mia().then(function () {
                return this.Nia()
            }
                .bind(this))
        };
        j.prototype.Mia = function () {
            return self.caches["delete"](this.P2)
        };
        j.prototype.Nia = function () {
            var a = (new g(this.Sha)).pathname;
            return e.Zda(a, y).then(function () {
                return e.Zda(a, n)
            })
        };
        j.prototype.requestStorage = function () {
            return e.Qxa(Math.round(1.1 * this.aaa + 10485760)).then(function () {
                return e.iN()
            })
        };
        j.prototype.download = function () {
            this.sQ = y;
            this.pH = 0;
            this.xn().then(function () {
                this.oB()
            }
                .bind(this))["catch"](function (a) {
                console.log("error cleaning storage",
                    a);
                e.iN().then(function (a) {
                    this.qB(y, a)
                }
                    .bind(this))
            }
                .bind(this))
        };
        j.prototype.cancelDownload = function () {
            this.sQ = n;
            this.Km.forEach(function (a) {
                a.cancel()
            });
            this.xn()
        };
        j.prototype.oB = function () {
            if (!(this.sQ || this.Km.length >= h))
                if (0 < this.Wm.length) {
                    var a;
                    if (1 == h)
                        a = 0.5 < Math.random() ? this.Wm.shift() : this.Wm.pop();
                    else if (0 == this.bu.filter(c).length)
                        a = this.Wm.pop();
                    else {
                        if (c(this.Wm[0]))
                            return;
                        a = this.Wm.shift()
                    }
                    this.bu.push(a);
                    var d = g.Hv(a.url, "nc=" + (new Date).getTime()),
                    f = new b(d, function (b) {
                        a.kz = b.kz;
                        this.cm()
                    }
                            .bind(this));
                    this.Km.push(f);
                    f.fetch().then(function (b) {
                        return this.Wra(a.url, b)
                    }
                        .bind(this)).then(function () {
                        this.d4(a, f, n)
                    }
                        .bind(this))["catch"](function (b) {
                        console.log("download error", a.url, a.Aw, a.kz, b);
                        this.d4(a, f, y)
                    }
                        .bind(this));
                    this.oB()
                } else if (0 == this.Km.length) {
                    var j = 5 >= this.o4.length;
                    e.iN().then(function (a) {
                        this.qB(j, a)
                    }
                        .bind(this))
                }
        };
        j.prototype.d4 = function (a, b, d) {
            d ? (this.bu.splice(this.bu.indexOf(a), 1), this.Km.splice(this.Km.indexOf(b), 1), this.pH += a.Aw, this.cm(), this.oB()) :
            (a.kz = 0, a.GF += 1, this.cm(), 20 <= a.GF ? (console.log("Error downloading file: " + a.url + " after " + a.GF + " retries."), this.Q5(a.url) ? (this.o4.push(a), this.Km.splice(this.Km.indexOf(b), 1), this.oB()) : (this.cancelDownload(), e.iN().then(function (a) {
                            this.qB(y, a)
                        }
                            .bind(this)))) : (console.log("Error downloading file: " + a.url + " attempt " + a.GF + " of 20. Will retry in 2000ms."), setTimeout(function () {
                        this.bu.splice(this.bu.indexOf(a), 1);
                        this.Km.splice(this.Km.indexOf(b), 1);
                        c(a) ? this.Wm.push(a) : this.Wm.splice(0, 0, a);
                        this.oB()
                    }
                        .bind(this),
                        2E3)))
        };
        j.prototype.Wra = function (a, b) {
            return this.Yra(a, b).then(function () {
                if (!this.Q5(a))
                    return this.Xra(a, b)
            }
                .bind(this))
        };
        j.prototype.Xra = function (a, b) {
            b = b.clone();
            return 200 != b.status ? Promise.reject("response status: " + b.status) : self.caches.open(this.P2).then(function (c) {
                return c.put(a, b)
            })
        };
        j.prototype.Yra = function (a, b) {
            b = b.clone();
            if (200 != b.status)
                return Promise.reject("response status: " + b.status);
            var c = (new g(a)).pathname;
            return c.lastIndexOf("/") == c.length - 1 ? Promise.resolve() : new Promise(function (a,
                    d) {
                function g() {
                    C.read().then(function (b) {
                        var c = b.value,
                        d = [];
                        if (c) {
                            for (; c.length + z >= f; ) {
                                var e = c.slice(0, f - z);
                                p.push(e);
                                d.push(h(p));
                                p = [];
                                z = 0;
                                c = c.slice(e.length, c.length)
                            }
                            0 < c.length && (p.push(c), z += c.length)
                        }
                        var l = b.done;
                        z && l && d.push(h(p));
                        j(d).then(function () {
                            l ? a() : g()
                        })["catch"](k)
                    })["catch"](k)
                }
                function h(a) {
                    if (0 == a.length)
                        return new Uint8Array(0);
                    var b = 0;
                    a.forEach(function (a) {
                        b += a.length
                    });
                    for (var c = new Uint8Array(b), d = 0, e = 0; e < a.length; d += a[e].length, e++)
                        c.set(a[e], d);
                    return c
                }
                function j(a) {
                    if (0 ==
                        a.length)
                        return Promise.resolve();
                    var b = a.shift();
                    return e.nfa(c, b).then(function () {
                        j(a)
                    })
                }
                function k(a) {
                    console.log("Error writing response to file system:", a);
                    e.Jxa(c).then(function () {
                        d("Error reading response body")
                    })
                }
                var p = [],
                z = 0,
                C = b.body.getReader();
                g()
            })
        };
        var p = ".bmp,.gif,.jpeg,.jpg,.m3u8,.m4a,.m4v,.mp3,.mp4,.ogg,.ogv,.otf,.png,.svg,.tif,.tiff,.ts,.tts,.webm,.woff,.woff2".split(",");
        j.prototype.Q5 = function (a) {
            var a = (new g(a)).pathname,
            b = "." + a.split(".").pop().toLowerCase();
            return 0 <= p.indexOf(b) &&
            0 > a.indexOf("loading/")
        };
        j.prototype.cm = function () {
            var a = this.pH;
            this.bu.forEach(function (b) {
                a += b.kz
            });
            this.Yd(100 * a / this.aaa)
        };
        b.prototype.fetch = function () {
            return fetch(this.ds).then(function (a) {
                if (this.rQ)
                    return a.body.getReader().cancel(), Promise.reject("cancel requested before server responded.");
                if (!a.ok)
                    return Promise.resolve(a);
                var b = a.headers.get("content-length"),
                c = m,
                d = 0;
                b !== r && (c = parseInt(b, 10));
                this.qD = a.body.getReader();
                var e = y,
                f = function (a) {
                    this.rQ ? a.close() : e = n
                }
                .bind(this),
                g = function (a) {
                    return this.qD.read().then(function (b) {
                        var e =
                            b.value;
                        e && (d += e.byteLength, a.enqueue(e));
                        b.done && (c = d, h(a));
                        this.ep({
                            Aw: c,
                            kz: d
                        })
                    }
                        .bind(this))["catch"](function (b) {
                        console.log("Error reading response", b);
                        a.error(b)
                    }
                        .bind(this))
                }
                .bind(this),
                h = function (a) {
                    e && (a.close(), e = y, this.qD = r)
                }
                .bind(this);
                return new Response(new ReadableStream({
                        start: function (a) {
                            return f(a)
                        },
                        pull: function (a) {
                            return g(a)
                        },
                        cancel: function () {
                            h()
                        }
                    }))
            }
                .bind(this))
        };
        b.prototype.cancel = function () {
            this.rQ = n;
            this.qD && this.qD.cancel()
        };
        a.xn = function (a) {
            return (new j(a, [])).xn()
        };
        return a
    });
    define("dO", "require,fg,jquery.mod,ll,eO,r,bX,jl,jE,jt,iL,cJ".split(","), function (a) {
        function b(a) {
            o = a
        }
        var c = a("fg"),
        e = a("jquery.mod"),
        g = a("ll"),
        d = a("eO"),
        f = a("r"),
        h = a("bX"),
        j = a("jl"),
        p = a("jE"),
        k = a("jt"),
        l = a("iL"),
        q = a("cJ"),
        o = r;
        window.addEventListener("beforeinstallprompt", b);
        var t = c.extend(d, function (a) {
            d.call(this);
            this.jb = a;
            this.m = "initial";
            this.KV = this.$K = this.Kg = r;
            this.lV = y;
            this.hu = r;
            this.PL = m;
            this.$t = o;
            this.bJ = t.sda();
            this.HT = k.zg("vr");
            if (!this.$t && !this.bJ) {
                window.removeEventListener("beforeinstallprompt",
                    b);
                window.addEventListener("beforeinstallprompt", this.Lna.bind(this))
            }
            this.bJ || window.addEventListener("appinstalled", this.tha.bind(this))
        });
        t.prototype.e_ = function (a) {
            this.$K = a;
            this.Ti = k.Zs(this.$K.get(TDV.PlayerSettings.BASE_DIR_URL) || k.getDirectory(this.$K.get(TDV.PlayerSettings.SELECTED_SCRIPT_URL)));
            if (this.Ti[this.Ti.length - 1] != "/")
                this.Ti = this.Ti + "/";
            this.Kg = new s(this.Ti);
            this.PL = this.c9 = a.get(TDV.PlayerSettings.QUERY_STRING_PARAMETERS);
            this.uma = k.parse(k.getDirectory(window.location.href)).pathname;
            this.Cka = k.Hv(k.Zs("files.json", this.Ti), this.c9);
            a = TDV.Da.IM();
            this.KV = k.Hv(this.$K.get(TDV.PlayerSettings.SERVICE_WORKER_URL), "swv=" + a.MAJOR + "." + a.MINOR);
            this.Kg = new s(this.Ti);
            this.Kg.bind(g.S, this.lsa, this, n);
            this.Kg.load()
        };
        t.prototype.Dz = function () {
            return this.Kg.state == s.kA
        };
        t.prototype.uba = function () {
            return this.m == "can_install" && !this.HT
        };
        t.prototype.wba = function () {
            return this.Dz() && this.PL != this.Kg.version && !this.HT
        };
        t.prototype.tba = function () {
            return this.Kg.state != s.K_ && !this.HT
        };
        t.prototype.Zca =
        function () {
            if (this.m == "can_install")
                if (this.$t) {
                    this.$t.userChoice.then(function (a) {
                        a.outcome != "accepted" && this.Zb("unavailable")
                    }
                        .bind(this));
                    this.$t.prompt().then(function () {
                        this.$t = r
                    }
                        .bind(this))
                } else
                    this.ER()
        };
        t.prototype.cancel = function () {
            if (this.m == "downloading") {
                if (this.hu) {
                    this.hu.cancelDownload();
                    this.hu = r
                }
                this.Kg.xn();
                this.Zb("unavailable")
            }
        };
        t.prototype.xn = function () {
            h.xn(this.Ti);
            this.Kg.xn()
        };
        t.prototype.lsa = function () {
            this.jb.get("downloadEnabled") !== n ? this.Zb("unavailable") : p.yfa !==
            n ? this.Zb("unavailable") : f.browser() != f.Ii || f.Uc() == f.bt || f.Uc() == f.Ew ? this.Zb("unavailable") : this.KV ? "serviceWorker" in navigator ? this.Dz() && !this.wba() ? this.Zb("unavailable") : navigator.onLine ? this.Bpa() : this.Zb("unavailable") : this.Zb("unavailable") : this.Zb("unavailable")
        };
        t.prototype.Zb = function (a) {
            if (this.m != a) {
                this.m = a;
                a = ["can_install", "unavailable"].indexOf(this.m) >= 0;
                if (this.lV != a)
                    (this.lV = a) && this.trigger(g.Lb)
            }
        };
        t.prototype.Bpa = function () {
            this.Zb("registering_sw");
            navigator.serviceWorker.register(this.KV, {
                scope: this.uma
            }).then(function () {
                this.K9(n)
            }
                .bind(this))["catch"](function () {
                this.K9(y)
            }
                .bind(this))
        };
        t.prototype.K9 = function (a) {
            if (a)
                if (f.le())
                    this.Zb("can_install");
                else if (this.bJ && this.Kg.state == s.eO) {
                    this.Zb("can_install");
                    this.ER()
                } else if (this.$t)
                    this.Zb("can_install");
                else {
                    this.Zb("sw_registered");
                    setTimeout(function () {
                        this.m == "sw_registered" && this.Zb("can_install")
                    }
                        .bind(this), 3E3)
                }
            else
                this.Zb("unavailable")
        };
        t.prototype.Lna = function (a) {
            this.$t = a;
            this.m == "sw_registered" && this.Zb("can_install")
        };
        t.prototype.tha = function () {
            this.m == "sw_registered" && this.Zb("can_install");
            this.ER()
        };
        t.prototype.ER = function () {
            this.Zb("downloading");
            this.trigger(g.Sk);
            this.paa(0);
            this.lna()
        };
        t.prototype.lna = function () {
            var a = k.Hv(this.Cka, "nc=" + (new Date).getTime());
            e.getJSON(a, function (a) {
                if (this.m == "downloading") {
                    var b = [],
                    c;
                    for (c in a) {
                        var d = a[c].tags;
                        if (d) {
                            Array.isArray(d) || (d = [d]);
                            for (var e = 0; e < d.length; e++)
                                b.indexOf(d[e]) < 0 && b.push(d[e])
                        }
                    }
                    var g = [];
                    b.indexOf("mobilevr2gen") >= 0 && f.dZ() ? g.push("mobilevr2gen") :
                    b.indexOf("mobilevr") >= 0 && f.le() ? g.push("mobilevr") : b.indexOf("mobile") >= 0 && f.Za() ? g.push("mobile") : b.indexOf("desktop") >= 0 && !f.Za() && g.push("desktop");
                    b = [];
                    for (c in a) {
                        if (d = a[c].tags) {
                            var j = y;
                            if (Array.isArray(d))
                                for (var e = 0, l = d.length; e < l && !j; e++)
                                    j = g.indexOf(d[e]) >= 0;
                            else
                                j = g.indexOf(d) >= 0;
                            if (!j)
                                continue
                        }
                        d = k.Zs(c, this.Ti);
                        b.push(new h.File(d, a[c].size))
                    }
                    var o = (new k(window.location.pathname, window.location.href)).toString();
                    b.filter(function (a) {
                        return a.url == o
                    }).length == 0 && b.push(new h.File(o, 1024));
                    this.hu = new h.Files(this.Ti, b, this.paa.bind(this), this.c4.bind(this));
                    this.hu.requestStorage().then(function (a) {
                        this.Kg.storage = a ? s.rA : s.hP;
                        this.Kg.state = s.eO;
                        this.Kg.version = this.PL;
                        this.Kg.save();
                        this.hu.download()
                    }
                        .bind(this))["catch"](function () {
                        this.c4(y, m)
                    }
                        .bind(this))
                }
            }
                .bind(this))
        };
        t.prototype.paa = function (a) {
            this.trigger(new l(g.wc, a))
        };
        t.prototype.c4 = function (a, b) {
            this.hu = r;
            this.Zb("unavailable");
            if (a) {
                this.Kg.state = s.kA;
                this.Kg.save()
            }
            a ? this.trigger(g.Ba, {
                success: n
            }) : b ? this.trigger(g.Ba, {
                success: y,
                error: t.M_
            }) : f.le() ? this.trigger(g.Ba, {
                success: y,
                error: t.L_
            }) : this.bJ ? this.trigger(g.Ba, {
                success: y,
                error: t.M_
            }) : this.trigger(g.Ba, {
                success: y,
                error: t.N_
            })
        };
        t.sda = function () {
            return k.$g("installed", y)
        };
        t.zxa = function (a, b) {
            var c = new t.OO(a);
            c.bind(g.S, function () {
                var d = y;
                c.state == t.OO.kA && (d = t.sda() ? n : !navigator.onLine);
                d ? j.toURL(a, c.storage == t.OO.rA).then(function (a) {
                    b(a)
                }) : b(a)
            }, this, n);
            c.load()
        };
        t.N_ = "launchFromHomeScreen";
        t.L_ = "addToBookmark";
        t.M_ = "errorDownloading";
        var s = c.extend(d, function (a) {
            d.call(this);
            this.Ti = a;
            this.BT = "installation_state_" + a;
            this.Xoa = k.parse(this.Ti).pathname + "installation_state.json";
            this.state = this.storage = this.version = m;
            this.S9()
        });
        s.prototype.load = function () {
            if (this.mna() && this.state == s.kA)
                this.U$(this.storage == s.rA).then(function () {
                    this.trigger(g.S)
                }
                    .bind(this))["catch"](function () {
                    this.U$(this.storage != s.rA).then(function () {
                        this.storage = this.storage == s.hP ? s.rA : s.hP;
                        this.DV();
                        this.trigger(g.S)
                    }
                        .bind(this))["catch"](function () {
                        this.state = s.eO;
                        this.DV();
                        this.trigger(g.S)
                    }
                        .bind(this))
                }
                    .bind(this));
            else
                this.trigger(g.S)
        };
        s.prototype.save = function () {
            this.DV();
            this.state == s.kA && this.dqa()
        };
        s.prototype.mna = function () {
            var a = q.getItem(this.BT);
            if (!a)
                return y;
            this.Tka(a);
            return n
        };
        s.prototype.DV = function () {
            q.setItem(this.BT, this.$$())
        };
        s.prototype.U$ = function (a) {
            return new Promise(function (b, c) {
                j.toURL(this.Ti + "installation_state.json", a).then(function (a) {
                    e.ajax({
                        type: "GET",
                        url: a,
                        success: function () {
                            b()
                        },
                        error: function () {
                            c()
                        }
                    })
                }
                    .bind(this))
            }
                .bind(this))
        };
        s.prototype.dqa = function () {
            j.nfa(this.Xoa,
                this.$$(), "text/json")
        };
        s.prototype.$$ = function () {
            var a = {};
            a.version = this.version;
            a.storage = this.storage;
            a.state = this.state;
            return JSON.stringify(a)
        };
        s.prototype.Tka = function (a) {
            this.Ska(JSON.parse(a))
        };
        s.prototype.Ska = function (a) {
            this.version = a.version;
            this.storage = a.storage;
            this.state = a.state
        };
        s.prototype.xn = function () {
            q.removeItem(this.BT);
            this.S9()
        };
        s.prototype.S9 = function () {
            this.version = "";
            this.storage = s.qga;
            this.state = s.K_
        };
        s.qga = "unkonwn";
        s.hP = "temporary";
        s.rA = "persistent";
        s.K_ = "not started";
        s.eO = "started";
        s.kA = "completed";
        t.OO = s;
        return t
    });
    define("ij", "require,fg,ll,lk,r,dO,ez,eF,jY,c,kS,d,gP".split(","), function (a) {
        function b(a) {
            var b = new h;
            b.M({
                label: a,
                backgroundColor: "#0071BC",
                borderRadius: 2,
                fontColor: "#ffffff",
                fontWeight: "400",
                fontFamily: "Arial, sans-serif",
                fontSize: 14,
                paddingLeft: 14,
                paddingRight: 14,
                height: 31,
                verticalAlign: p.vc
            });
            return b
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("lk"),
        d = a("r"),
        f = a("dO"),
        h = a("ez"),
        j = a("eF"),
        p = a("jY"),
        k = a("c"),
        l = a("kS"),
        q = a("d"),
        o = a("gP"),
        a = c.extend(l, function (a, b) {
            l.call(this);
            this.jb = a;
            this.de = b;
            this.de.bind(e.Lb,
                this.Nma, this, n);
            this.de.bind(e.Sk, this.Kma, this, n);
            this.de.bind(e.wc, this.Mma, this, n);
            this.de.bind(e.Ba, this.Lma, this, n);
            this.T = "hidden";
            this.EE = m;
            this.QU = y;
            this.Yd = m;
            this.fg = this.ro = this.Kt = this.Nt = this.Lt = this.eL = this.sa = r;
            this.qha();
            this.M({
                backgroundColor: "#000000",
                gap: 18,
                height: 55,
                width: "100%",
                paddingLeft: 28,
                paddingRight: 28,
                verticalAlign: p.vc,
                layout: k.Be
            });
            this.je()
        });
        a.prototype.Nma = function () {
            if (this.de.uba() || this.de.Dz() && this.de.tba()) {
                this.T = "ready";
                this.QU && this.A$()
            } else
                this.T = "hidden";
            this.je()
        };
        a.prototype.Kma = function () {
            this.T = "installing";
            this.je()
        };
        a.prototype.Mma = function (a) {
            this.Yd = a.Kh;
            this.je()
        };
        a.prototype.Lma = function (a) {
            this.T = a.data.success ? "installed" : "failed";
            this.l4 = a.data.error;
            this.je()
        };
        a.prototype.ij = function () {
            this.Vra()
        };
        a.prototype.KJ = function () {
            if (!this.QU) {
                this.QU = n;
                this.T == "ready" && this.A$()
            }
        };
        a.prototype.A$ = function () {
            this.EE = setTimeout(function () {
                this.EE = r;
                this.Loa()
            }
                    .bind(this), 5E3);
            this.je()
        };
        a.prototype.Vra = function () {
            this.n9();
            this.EE && clearTimeout(this.EE);
            this.EE = r
        };
        a.prototype.Loa = function () {
            this.n9();
            if (this.T == "ready") {
                this.T = "hidden";
                this.je()
            }
        };
        a.prototype.qha = function () {
            this.bind(e.Mc, this.ij, this);
            this.jb.bind(e.Mc, this.KJ, this);
            this.jb.bind(e.Hb, this.KJ, this)
        };
        a.prototype.n9 = function () {
            this.unbind(e.Mc, this.ij, this);
            this.jb.unbind(e.Mc, this.KJ, this);
            this.jb.unbind(e.Hb, this.KJ, this)
        };
        a.prototype.Ga = function () {
            l.prototype.Ga.call(this);
            if (this.sa == r) {
                this.sa = new o;
                this.sa.M({
                    fontColor: "#ffffff",
                    fontWeight: "400",
                    fontFamily: "Arial, sans-serif",
                    fontSize: 14,
                    text: g("download-tour")
                });
                this.la(this.sa)
            }
            if (this.Lt == r) {
                this.Lt = b(g("download"));
                this.la(this.Lt);
                this.Lt.bind(e.U, this.hia, this, n)
            }
            if (this.Nt == r) {
                this.Nt = b(g("refresh-downloaded"));
                this.la(this.Nt);
                this.Nt.bind(e.U, this.nia, this, n)
            }
            if (this.Kt == r) {
                this.Kt = b(g("delete-downloaded"));
                this.la(this.Kt);
                this.Kt.bind(e.U, this.gia, this, n)
            }
            if (this.eL == r) {
                this.eL = new q;
                this.eL.M({
                    width: "100%"
                });
                this.la(this.eL)
            }
            if (this.ro == r) {
                this.ro = new j;
                this.ro.M({
                    backgroundColor: "#ffffff",
                    borderRadius: 2,
                    iconColor: "#000000",
                    iconLineWidth: 1,
                    iconWidth: 17,
                    iconHeight: 17,
                    height: 31,
                    width: 31
                });
                this.la(this.ro);
                this.ro.bind(e.U, this.fia, this, n)
            }
            if (this.fg == r) {
                this.fg = b(g("cancel"));
                this.la(this.fg);
                this.fg.bind(e.U, this.iH, this, n)
            }
            d.Za() && this.kn();
            this.je()
        };
        a.prototype.el = function () {
            l.prototype.el.call(this);
            d.Za() && this.getParent().bind(e.yb, this.kn, this, n)
        };
        a.prototype.qj = function () {
            d.Za() && this.getParent().unbind(e.yb, this.kn, this, n);
            l.prototype.qj.call(this)
        };
        a.prototype.kn = function () {
            var a = this.getParent();
            if (a) {
                var b =
                    Math.min(a.Aa(), a.eb()) / 100,
                c = function (a) {
                    return Math.round(a * b)
                };
                this.M({
                    gap: c(3.9),
                    height: c(11.9),
                    paddingLeft: c(6),
                    paddingRight: c(6)
                });
                this.sa && this.sa.M({
                    fontSize: c(3)
                });
                [this.Lt, this.fg, this.Nt, this.Kt].forEach(function (a) {
                    a && a.M({
                        borderRadius: c(0.4),
                        fontSize: c(3),
                        paddingLeft: c(3),
                        paddingRight: c(3),
                        height: c(6.7)
                    })
                });
                this.ro && this.ro.M({
                    borderRadius: c(0.4),
                    iconLineWidth: c(0.22),
                    iconWidth: c(3.7),
                    iconHeight: c(3.7),
                    height: c(6.7),
                    width: c(6.7)
                })
            }
        };
        a.prototype.je = function () {
            var a;
            switch (this.T) {
            case "ready":
                a =
                    this.de.Dz() ? g("downloaded") : g("download-tour");
                break;
            case "installing":
                a = g("downloading");
                this.Yd !== m && (a = a + ("..." + this.Yd.toFixed(1) + "%"));
                break;
            case "installed":
                a = g("downloaded");
                break;
            case "failed":
                a = this.l4 == f.N_ ? d.Za() ? g("storage-not-provided-launch-from-homescreen") : g("storage-not-provided-launch-from-desktop") : this.l4 == f.L_ ? g("storage-not-provided-bookmark") : g("download-failed")
            }
            this.sa && this.sa.set("text", a);
            this.Lt && this.Lt.set("visible", this.T == "ready" && !this.de.Dz() && this.de.uba());
            this.Kt &&
            this.Kt.set("visible", this.T == "ready" && this.de.Dz() && this.de.tba());
            this.Nt && this.Nt.set("visible", this.T == "ready" && this.de.wba());
            this.fg && this.fg.set("visible", this.T == "installing");
            this.ro && this.ro.set("visible", this.T != "installing");
            this.set("visible", this.T != "hidden")
        };
        a.prototype.hia = function () {
            this.de.Zca()
        };
        a.prototype.nia = function () {
            this.de.Zca()
        };
        a.prototype.gia = function () {
            this.de.xn();
            this.T = "hidden";
            this.je()
        };
        a.prototype.iH = function () {
            this.de.cancel();
            this.T = "hidden";
            this.je()
        };
        a.prototype.fia =
        function () {
            this.T == "installing" && this.de.cancel();
            this.T = "hidden";
            this.je()
        };
        return a
    });
    define("dL", "require,fg,do,ll,lk,r,jY,c,kS,ks,kF,ez,gP,gJ".split(","), function (a) {
        function b(a, b) {
            this.text = a;
            this.Hp = b
        }
        var c = a("fg"),
        e = a("do"),
        g = a("ll"),
        d = a("lk"),
        f = a("r"),
        h = a("jY"),
        j = a("c"),
        p = a("kS"),
        k = a("ks"),
        l = a("kF"),
        q = a("ez"),
        o = a("gP"),
        t = a("gJ"),
        a = c.extend(p, function () {
            p.call(this);
            this.xl = [];
            this.fg = this.Mt = this.sa = this.pu = this.Ky = this.em = r;
            var a = new k;
            a.set("duration", 500);
            a.set("easing", "cubic_in");
            var b = new l;
            b.set("duration", 500);
            b.set("easing", "cubic_out");
            this.M({
                backgroundColor: "#000000",
                backgroundOpacity: 0.6,
                horizontalAlign: h.Lc,
                gap: 5,
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                hideEffect: b,
                showEffect: a,
                visible: y
            })
        });
        a.prototype.Ga = function () {
            p.prototype.Ga.call(this);
            if (this.em == r) {
                this.em = new p;
                this.em.M({
                    centerX: 0,
                    centerY: 0,
                    backgroundColor: "#ffffff",
                    horizontalAlign: h.Lc,
                    verticalAlign: h.vc,
                    layout: j.of,
                    shadow: n,
                    shadowColor: "#000000",
                    shadowHorizontalLength: 0,
                    shadowVerticalLength: 0,
                    shadowOpacity: 0.2
                });
                this.la(this.em)
            }
            if (this.sa == r) {
                this.sa = new o;
                this.sa.M({
                    fontColor: "#808080",
                    fontWeight: "300",
                    fontFamily: "Tahoma, Geneva, sans-serif"
                });
                this.em.la(this.sa)
            }
            if (this.pu == r) {
                this.pu = new t;
                this.pu.M({
                    width: "80%"
                });
                this.em.la(this.pu)
            }
            if (this.Ky == r) {
                this.Ky = new p;
                this.Ky.M({
                    backgroundColor: "#b3b3b3"
                });
                this.em.la(this.Ky)
            }
            if (this.gg == r) {
                this.gg = new p;
                this.gg.M({
                    horizontalAlign: h.Lc,
                    verticalAlign: h.vc,
                    layout: j.Be
                });
                this.em.la(this.gg)
            }
            if (this.Mt == r) {
                this.Mt = new q;
                this.Mt.M({
                    backgroundColor: "#606060",
                    fontColor: "#FFFFFF",
                    fontFamily: "Tahoma, Geneva, sans-serif",
                    horizontalAlign: h.Lc,
                    verticalAlign: h.vc,
                    label: d("yes").toUpperCase(),
                    pressedBorderColor: "#808080",
                    rollOverBorderColor: "#808080"
                });
                this.Mt.bind(g.U, this.G2, this, n);
                this.gg.la(this.Mt)
            }
            if (this.fg == r) {
                this.fg = new q;
                this.fg.M({
                    backgroundColor: "#606060",
                    fontColor: "#FFFFFF",
                    fontFamily: "Tahoma, Geneva, sans-serif",
                    horizontalAlign: h.Lc,
                    verticalAlign: h.vc,
                    label: d("no").toUpperCase(),
                    pressedBorderColor: "#808080",
                    rollOverBorderColor: "#808080"
                });
                this.fg.bind(g.U, this.iH, this, n);
                this.gg.la(this.fg)
            }
        };
        a.prototype.el = function () {
            p.prototype.el.call(this);
            this.getParent().bind(g.yb, this.kn, this, n)
        };
        a.prototype.qj = function () {
            this.getParent().unbind(g.yb, this.kn, this, n);
            p.prototype.qj.call(this)
        };
        a.prototype.kn = function () {
            var a = this.getParent();
            if (a) {
                var b = a.Aa(),
                a = a.eb();
                if (f.Za())
                    var c = Math.min(b, a), b = function (a) {
                        return Math.round(a * c / 100)
                    };
                else
                    b = function (a) {
                        return Math.round(a * 4)
                    };
                this.em && this.em.M({
                    borderRadius: b(1),
                    width: b(80),
                    height: b(40),
                    gap: b(4),
                    shadowBlurRadius: b(1),
                    shadowSpread: b(1)
                });
                this.Ky && this.Ky.M({
                    width: b(60),
                    minHeight: 2,
                    height: b(0.25)
                });
                this.gg && this.gg.M({
                    gap: b(5)
                });
                this.fg && this.fg.M({
                    borderRadius: b(1),
                    width: b(20),
                    height: b(10),
                    fontSize: b(4.25)
                });
                this.Mt && this.Mt.M({
                    borderRadius: b(1),
                    width: b(20),
                    height: b(10),
                    fontSize: b(4.5)
                });
                this.sa && this.sa.M({
                    fontSize: b(5)
                });
                this.GL()
            }
        };
        a.prototype.show = function (a, c) {
            this.kn();
            var d = this.d5(c);
            d >= 0 && this.l9(d);
            this.spa(new b(a, c));
            this.kx()
        };
        a.prototype.hide = function (a) {
            a = this.d5(a);
            a >= 0 && this.l9(a)
        };
        a.prototype.kx = function () {
            var a = this.getParent();
            a && a.Hj(this, a.Pa().length - 1)
        };
        a.prototype.G2 =
        function () {
            this.$G(n)
        };
        a.prototype.iH = function () {
            this.$G(y)
        };
        a.prototype.d5 = function (a) {
            for (var b = 0; b < this.xl.length; b++)
                if (this.xl[b].Hp == a)
                    return b;
            return -1
        };
        a.prototype.GL = function () {
            if (this.em) {
                var a = this.q5();
                if (a) {
                    if (a.text.length < 20) {
                        this.pu.set("visible", y);
                        this.sa.set("text", a.text);
                        this.sa.set("visible", n)
                    } else {
                        this.sa.set("visible", y);
                        this.pu.set("html", this.rla(a.text));
                        this.pu.set("visible", n)
                    }
                    this.fg.set("visible", a.Hp ? n : y);
                    this.set("visible", n)
                } else
                    this.set("visible", y)
            }
        };
        a.prototype.rla =
        function (a) {
            return "<div style=\"color:#808080; font-weight:300; font-family:'Tahoma', 'Geneva', sans-serif; font-size: " + this.sa.get("fontSize") + 'px; text-align:center;" >' + a + "</div>"
        };
        a.prototype.$G = function (a) {
            var b = this.q5();
            if (b) {
                b = this.Fla(b.text);
                this.Ppa(b);
                e(b).each(function (b) {
                    b.Hp && b.Hp.call(this, a)
                }, this)
            }
        };
        a.prototype.spa = function (a) {
            this.xl.push(a);
            this.GL()
        };
        a.prototype.Fla = function (a) {
            return e(this.xl).filter(function (b) {
                return b.text == a
            })
        };
        a.prototype.Ppa = function (a) {
            this.xl = e(this.xl).filter(function (b) {
                return !e(a).contains(b)
            });
            this.GL()
        };
        a.prototype.l9 = function (a) {
            this.xl.splice(a, 1);
            a == this.xl.length && this.GL()
        };
        a.prototype.q5 = function () {
            return this.xl.length > 0 ? this.xl[this.xl.length - 1] : r
        };
        return a
    });
    define("iZ", "require,fg,ll,bZ,eO,r,ke".split(","), function (a) {
        function b(a) {
            for (; a && a != document; ) {
                if (a.getAttribute("tdvclass") == "Button")
                    return n;
                a = a.parentNode
            }
            return y
        }
        var c = a("fg"),
        e = a("ll"),
        g = a("bZ"),
        d = a("eO"),
        f = a("r"),
        h = a("ke"),
        j = [],
        a = [99, 111, 110, 116, 101, 120, 116, 109, 101, 110, 117].map(function (a) {
            return String.fromCharCode(a)
        }).join("");
        document.addEventListener(a, function (a) {
            (!f.Za() || !b(a.target)) && j.forEach(function (b) {
                b(a)
            });
            a.preventDefault();
            a.stopImmediatePropagation()
        }, n);
        var p = 1,
        c = c.extend(d,
                function (a, b) {
                d.call(this);
                this.ra = a;
                this.zla = b;
                this.iU = this.iU.bind(this);
                this.pc = this.pc.bind(this);
                this.AT = y;
                this.xT = this.xT.bind(this);
                this.yT = this.yT.bind(this);
                this.wT = this.wT.bind(this);
                this.zT = this.zT.bind(this);
                this.K = document.createElement("div");
                //this.K.style.setProperty("border", "1px solid #bbb", "important");
                this.K.style.setProperty("border-radius", "3px", "important");
                //this.K.style.setProperty("position", "absolute", "important");
                this.K.style.setProperty("z-index", p, "important");
                this.K.style.setProperty("display",
                    "none", "important");
                //this.K.style.setProperty("background-color", "#e5e5e5", "important");
                this.K.style.setProperty("display", "none", "important");
                //this.K.style.setProperty("opacity", 1, "important");
                this.K.style.setProperty("padding", 0, "important");
                this.K.style.setProperty("margin", 0, "important");
                this.K.style.setProperty("pointer-events", "all", "important");
                this.K.style.setProperty("text-align", "left", "important");
                //this.K.style.setProperty("box-shadow", "1px 1px 3px rgba(0, 0, 0, 0.2)", "important");
                j.push(this.iU)
            });
        c.prototype.iU = function (a) {
            var b = this.zla();
            if (b.length != 0) {
                this.K.innerHTML = "";
                this.AT = y;
                var c = 0;
                b.forEach(function (a) {
                    var b = document.createElement("div");
                    if (a) {
                        b.textContent = a;
                        b.style.setProperty("cursor", "pointer", "important");
                        b.style.setProperty("border-radius", "3px", "important");
                        b.style.setProperty("padding", "7px 20px", "important");
                        b.style.setProperty("white-space", "nowrap", "important");
                        var d = c;
                        c++;
                        b.addEventListener("mouseenter", function (a) {
                            this.xT(a, d)
                        }
                            .bind(this));
                        b.addEventListener("mouseleave",
                            function (a) {
                            this.yT(a, d)
                        }
                            .bind(this));
                        b.addEventListener("mousedown", function (a) {
                            this.wT(a, d)
                        }
                            .bind(this));
                        b.addEventListener("mouseup", function (a) {
                            this.zT(a, d)
                        }
                            .bind(this))
                    } else {
                        b.style.setProperty("margin", "7px 5px", "important");
                        b.style.setProperty("border-top", "1px solid #aaa", "important");
                        b.style.setProperty("border-bottom", "1px solid #fff", "important")
                    }
                    b.style.setProperty("font-family", "Arial", "important");
                    b.style.setProperty("font-size", "13px", "important");
                    b.style.setProperty("color", "#000000",
                        "important");
                    b.style.setProperty("opacity", 1, "important");
                    b.style.setProperty("display", "block", "important");
                    b.style.setProperty("pointer-events", "all", "important");
                    this.K.appendChild(b)
                }
                    .bind(this));
                (h.gm() || document.body).appendChild(this.K);
                this.K.style.setProperty("display", "block", "important");
                b = a.pageX;
                a = a.pageY;
                b + this.K.clientWidth > document.body.clientWidth - 5 && (b = document.body.clientWidth - this.K.clientWidth - 5);
                a + this.K.clientHeight > document.body.clientHeight - 5 && (a = document.body.clientHeight -
                        this.K.clientHeight - 5);
                this.K.style.setProperty("left", b + "px", "important");
                this.K.style.setProperty("top", a + "px", "important");
                this.ra.bind(e.Hb, this.pc, this);
                document.addEventListener("mousedown", this.pc);
                this.Uta = setInterval(this.Tta.bind(this), 200)
            }
        };
        c.prototype.x5 = function () {
            clearInterval(this.Uta);
            this.K.parentNode.removeChild(this.K);
            document.removeEventListener("mousedown", this.pc);
            this.ra.unbind(e.Hb, this.pc, this);
            this.K.style.setProperty("display", "none", "important")
        };
        c.prototype.Tta = function () {
            this.K.contains(document.elementFromPoint(this.K.offsetLeft +
                    this.K.clientWidth * 0.5, this.K.offsetTop + this.K.clientHeight * 0.5)) || this.K.style.setProperty("z-index", p = p * 10, "important")
        };
        c.prototype.pc = function () {
            this.x5()
        };
        c.prototype.wT = function (a) {
            this.AT = n;
            a.preventDefault();
            a.stopImmediatePropagation()
        };
        c.prototype.zT = function (a, b) {
            if (this.AT) {
                this.x5();
                a.preventDefault();
                a.stopImmediatePropagation();
                this.trigger(new g(e.Mi, {
                        index: b
                    }))
            }
        };
        c.prototype.xT = function (a) {
            a.currentTarget.style.setProperty("color", "#ffffff", "important");
            a.currentTarget.style.setProperty("background-color",
                "rgba(0, 0, 0, 0.7)", "important")
        };
        c.prototype.yT = function (a) {
            a.currentTarget.style.setProperty("color", "#000000", "important");
            a.currentTarget.style.setProperty("background-color", "", "important")
        };
        return c
    });
    define("jx", ["require", "jt", "R"], function (a) {
        function b(a) {
            this.ra = a;
            this.gn = {};
            this.gn[e.Yfa] = "move";
            this.gn[e.Zfa] = "ew-resize";
            this.gn[e.aga] = "ns-resize";
            this.gn[e.$fa] = "nesw-resize";
            this.gn[e.bga] = "nwse-resize";
            this.gn[e.Ue] = "pointer";
            this.gn[e.qq] = "inherit";
            this.gn[e.dd] = "default";
            this.Ve = {};
            this.Ve[e.yG] = "grab.cur";
            this.Ve[e.zG] = "grabbing.cur";
            this.Ve[e.x0] = "N.cur";
            this.Ve[e.y0] = "NE.cur";
            this.Ve[e.o0] = "E.cur";
            this.Ve[e.B0] = "SE.cur";
            this.Ve[e.A0] = "S.cur";
            this.Ve[e.C0] = "SW.cur";
            this.Ve[e.D0] = "W.cur";
            this.Ve[e.z0] = "NW.cur";
            this.Ve[e.q0] = "FN.cur";
            this.Ve[e.r0] = "FNE.cur";
            this.Ve[e.p0] = "FE.cur";
            this.Ve[e.u0] = "FSE.cur";
            this.Ve[e.t0] = "FS.cur";
            this.Ve[e.v0] = "FSW.cur";
            this.Ve[e.w0] = "FW.cur";
            this.Ve[e.s0] = "FNW.cur";
            this.O2 = {}
        }
        var c = a("jt"),
        e = a("R");
        b.prototype.Tba = function (a) {
            return this.dna(a) ? this.n5(a) : this.Xma(a) ? this.ila(a) : this.n5(e.dd)
        };
        b.prototype.tia = function (a) {
            if (!(a in this.O2)) {
                var b = new Image;
                b.src = this.O4(a);
                this.O2[a] = b
            }
        };
        b.prototype.dna = function (a) {
            return a in this.gn
        };
        b.prototype.n5 =
        function (a) {
            return this.gn[a]
        };
        b.prototype.Xma = function (a) {
            return this.Ve[a]
        };
        b.prototype.ila = function (a) {
            this.tia(a);
            return "url(" + this.O4(a) + "), default"
        };
        b.prototype.O4 = function (a) {
            return c.Zs(this.ra.get("settings").get(TDV.PlayerSettings.CURSORS_DIR_URL)) + "/" + this.Ve[a]
        };
        return b
    });
    define("bT", ["do"], function (a) {
        function b() {
            this.mp = {};
            this.Nl = [];
            this.bB = 0
        }
        b.prototype.push = function (b, e) {
            if (this.mp[e] == m)
                this.mp[e] = [b], this.Nl.push(e), this.Nl.sort(function (a, b) {
                    return a - b
                }), this.bB++;
            else {
                var g = this.mp[e];
                a(g).contains(b) || (g.push(b), this.bB++)
            }
        };
        b.prototype.Vba = Q("bB");
        b.prototype.isEmpty = function () {
            return 0 == this.Nl.length
        };
        b.prototype.Qda = function () {
            if (!this.isEmpty()) {
                var a = this.Nl[0],
                b = this.mp[a].pop();
                0 == this.mp[a].length && (delete this.mp[a], this.Nl = this.Nl.slice(1));
                this.bB--;
                return b
            }
        };
        b.prototype.vZ = function () {
            if (!this.isEmpty()) {
                var a = this.Nl[this.Nl.length - 1],
                b = this.mp[a].pop();
                0 == this.mp[a].length && (delete this.mp[a], this.Nl = this.Nl.slice(0, this.Nl.length - 1));
                this.bB--;
                return b
            }
        };
        return b
    });
    define("gI", "require,do,fg,fe,bT,V,iN".split(","), function (a) {
        function b() {
            this.Wr = y;
            this.C8 = m;
            this.W = n;
            this.QJ = this.QJ.bind(this);
            this.xH = new e;
            this.tK = new e;
            this.bL = new e;
            this.cJ = new e;
            this.AR = new e;
            g.Ma(this.Pg, this)
        }
        a("do");
        a("fg");
        var c = a("fe"),
        e = a("bT"),
        g = a("V"),
        d = a("iN");
        b.prototype.clear = function () {
            this.W = y
        };
        b.prototype.mF = function (a) {
            this.xH.push(a, this.Px(a));
            this.xD()
        };
        b.prototype.Dc = function (a) {
            this.tK.push(a, this.Px(a));
            this.xD()
        };
        b.prototype.Xa = function (a) {
            this.bL.push(a, this.Px(a));
            this.xD()
        };
        b.prototype.Kc = function (a) {
            this.cJ.push(a, this.Px(a));
            this.xD()
        };
        b.prototype.Ih = function (a) {
            this.AR.push(a, this.Px(a));
            this.xD()
        };
        b.prototype.L = function () {
            this.Xsa();
            this.zta();
            this.Zsa()
        };
        b.prototype.Xsa = function () {
            do {
                for (; !this.xH.isEmpty(); )
                    this.xH.vZ().Ga();
                this.tK.isEmpty() || this.tK.vZ().ja()
            } while (!this.tK.isEmpty() || !this.xH.isEmpty())
        };
        b.prototype.zta = function () {
            for (; !this.bL.isEmpty() || !this.cJ.isEmpty(); ) {
                this.KL();
                this.dX()
            }
        };
        b.prototype.KL = function () {
            for (; !this.bL.isEmpty(); ) {
                var a =
                    this.bL.vZ();
                if (a.Sza()) {
                    var b = a.getParent();
                    if (b) {
                        b.Xa();
                        b.Kc()
                    } else
                        a.vea(0, 0, a.Hn(), a.Gn())
                }
            }
        };
        b.prototype.dX = function () {
            for (; !this.cJ.isEmpty(); )
                this.cJ.Qda().Gi()
        };
        b.prototype.Zsa = function () {
            for (; !this.AR.isEmpty(); )
                this.AR.Qda().Se();
            c.yxa()
        };
        b.prototype.xD = function () {
            if (!this.Wr) {
                this.Wr = n;
                this.C8 = (new Date).getTime() + 500;
                d.nw(this.QJ)
            }
        };
        b.prototype.QJ = function () {
            this.Wr = y;
            this.W && this.L()
        };
        b.prototype.Px = function (a) {
            return (a = a.getParent()) ? this.Px(a) + 1 : 0
        };
        b.prototype.Pg = function () {
            this.Wr &&
            (new Date).getTime() >= this.C8 && this.QJ();
            g.Ma(this.Pg, this)
        };
        return b
    });
    define("fh", "jquery.mod,do,fg,ll,kS,iZ,jx,Y,gI,ke,r".split(","), function (a, b, c, e, g, d, f, h, j, p, k) {
        c = c.extend(g, function (b) {
            this.bx = new j;
            g.call(this);
            this.cn(this);
            this.Tc("Application");
            this.Bd = a(b);
            this.Bd.css({
                overflow: "hidden",
                "user-select": "none",
                "-ms-user-select": "none",
                "-moz-user-select": "none",
                "-webkit-user-select": "none",
                "-ms-touch-action": "none",
                "touch-action": "none",
                visibility: "visible",
                "-webkit-tap-highlight-color": "rgba(255, 255, 255, 0)"
            });
            this.vp = a(document.createElement("div"));
            this.vp.css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                width: "auto",
                height: "auto",
                margin: 0
            });
            this.Bd.append(this.vp);
            this.vp.append(this.Gb());
            this.P$ = this.vp.get(0);
            this.hc = this.cc = m;
            this.Qma = 10;
            this.Gia = 500;
            this.uD = r;
            this.nR = new f(this);
            this.ya = new h(this);
            this.K.append(this.ya.Gb());
            this.lja = new d(this, this.L4.bind(this));
            this.lja.bind(e.Mi, this.gf(this.W6), this, n);
            this.v6 = n;
            this.set("contentOpaque", n);
            this.Wt = r;
            this.XA = [];
            this.Fx(["globalmousemove"]);
            this.Tha();
            this.UL = this.VL = 0;
            this.py = 1;
            try {
                this.VL = window.top.innerWidth;
                this.UL = window.top.innerHeight;
                this.LS = n
            } catch (c) {
                this.LS = y
            }
            this.Saa();
            this.mg = new p(b);
            this.mg.bind(e.aa, function () {
                this.cS(this.mg.enabled())
            }, this)
        });
        c.prototype.start = function () {
            if (!this.B$) {
                this.B$ = n;
                this.trigger(e.lh)
            }
        };
        c.prototype.Saa = function () {
            if (this.LS && !p.enabled()) {
                this.VL = window.top.innerWidth;
                this.UL = window.top.innerHeight
            }
        };
        c.prototype.clear = function () {
            this.pw(r);
            this.M$();
            this.uka();
            this.bx.clear();
            if (this.Bd) {
                this.Gb().remove();
                this.vp.remove();
                this.Bd = r
            }
            this.nR = r;
            this.mg.efa();
            this.mg = r
        };
        c.prototype.Pya = P("v6");
        c.prototype.cS = function (a) {
            a ? this.R9() : this.Ria()
        };
        c.prototype.Xo = function () {
            this.gC = this.di = this.vp.width();
            this.fC = this.ci = this.vp.height()
        };
        c.prototype.pw = function (a) {
            if (this.Wt != a) {
                this.Wt != r && this.Wt.Csa();
                this.Wt = a;
                for (var c = []; a != r; ) {
                    c = [a].concat(c);
                    a = a.getParent()
                }
                for (var a = this.XA.length - 1, d = n; a >= 0 && d; a--)
                    b(c).contains(this.XA[a]) ? d = y : this.XA.pop().Esa();
                for (a = 0; a < c.length; a++)
                    b(this.XA).contains(c[a]) || c[a].Fsa();
                this.XA = c;
                this.Wt != r && this.Wt.Bsa();
                this.ya.pw(this.Wt)
            }
        };
        c.prototype.ima = function (a) {
            var b = this.BB(a);
            this.T5(a, b.x, b.y) ? a.preventDefault() : this.pw(r)
        };
        c.prototype.t5 = function (a) {
            var b = this.mu(a);
            this.T5(a, b.x, b.y) ? a.preventDefault() : this.pw(r)
        };
        c.prototype.L4 = function () {
            return []
        };
        c.prototype.W6 = D();
        c.prototype.T5 = function (a, b, c) {
            return this.Yma(a.target) && b >= 0 && c >= 0 && b < this.X && c < this.ia
        };
        c.prototype.Yma = function (a) {
            if (!this.Bd)
                return y;
            for (var b = this.Bd.get(0); a; ) {
                if (a === b)
                    return n;
                a = a.parentElement
            }
            return y
        };
        c.prototype.Tha = function () {
            this.Fx(["globalresize"]);
            this.uQ = setInterval(b.bind(function () {
                        this.Z2()
                    }, this), this.Gia)
        };
        c.prototype.uka = function () {
            this.mB(["globalresize"]);
            if (this.uQ) {
                clearInterval(this.uQ);
                this.uQ = r
            }
        };
        c.prototype.Z2 = function () {
            this.mg.enabled() ? this.R9() : this.Saa();
            var a = this.P$.clientWidth,
            b = this.P$.clientHeight;
            if (this.cc != a || this.hc != b) {
                this.cc = a;
                this.hc = b;
                this.Nra()
            }
        };
        c.prototype.R9 = function () {
            var a;
            if (this.LS && (k.Rd() == k.z_ && k.browser() == k.Ii || k.Rd() == k.Lh)) {
                var b = p.gm();
                a = b.clientWidth;
                var b = b.clientHeight,
                c = (a > b ? a : b) / (this.VL >
                    this.UL ? this.VL : this.UL),
                d = Math.round(a / c),
                e = Math.round(b / c);
                this.py = c;
                a = {
                    left: Math.round((a - d) * 0.5) + "px",
                    top: Math.round((b - e) * 0.5) + "px",
                    right: "auto",
                    bottom: "auto",
                    width: d + "px",
                    height: e + "px",
                    transform: "scale(" + [c, c].join(", ") + ")",
                    position: "absolute"
                }
            } else {
                a = {
                    position: "absolute",
                    left: 0,
                    top: 0,
                    right: "auto",
                    bottom: "auto",
                    width: document.body.clientWidth + "px",
                    height: document.body.clientHeight + "px"
                };
                this.py = 1
            }
            this.vp.css(a)
        };
        c.prototype.Ria = function () {
            this.vp.css({
                position: "abolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                width: "auto",
                height: "auto",
                transform: ""
            });
            this.py = 1
        };
        c.prototype.Nra = function () {
            this.M$();
            var a = this;
            this.uD = setTimeout(function () {
                a.uD = r;
                a.Xa()
            }, this.Qma)
        };
        c.prototype.M$ = function () {
            if (this.uD) {
                this.uD = r;
                clearTimeout(this.uD)
            }
        };
        c.prototype.hma = function () {
            this.Z2()
        };
        c.prototype.lS = function () {
            return b(g.prototype.lS.call(this)).defaults({
                globaltouchmove: [{
                        target: a(document),
                        name: "touchmove",
                        handler: this.gf(this.ima)
                    }
                ],
                globalmousemove: [{
                        target: a(document),
                        name: "mousemove",
                        handler: this.gf(this.t5)
                    }, {
                        target: a(window),
                        name: "mouseout",
                        handler: this.gf(this.t5)
                    }
                ],
                globalresize: [{
                        target: a(window),
                        name: "resize",
                        handler: this.gf(this.hma)
                    }
                ]
            })
        };
        return c
    });
    define("fc", "require,jquery.mod,lC,bK,ke,ll,eO,lk,r".split(","), function (a) {
        function b() {
            o = TDV.Da.Fn();
            var a = q || o;
            if (l != a) {
                l = a;
                k.trigger(f.aa)
            }
            a = !!q && o != q && p.Za();
            if (t != a) {
                if (!s) {
                    s = c("<div/>");
                    s.css({
                        position: "fixed",
                        "z-index": e.Efa,
                        left: 0,
                        top: 0,
                        margin: 0,
                        padding: 0,
                        height: "100%",
                        width: "100%",
                        "background-color": "rgba(255, 255, 255, 0.99)"
                    });
                    s.html(['<div style="box-sizing:border-box; padding:0 10vmin; display:table; height:100%; width:100vw;">\n<div style="vertical-align:middle; text-align:center; display:table-cell;">', '<img style="width:22vmin" src="' +
                            g.pA + '"/>', '<div style="color:#000; font-family:Arial, Helvetica, sans-serif; font-size:3.6vmin; line-height:4.3vmin; margin:5vmin 0; text-align:center;">' + j("rotate-device") + "</div>", "</div>\n</div>"].join("\n"));
                    v = s.find("img")
                }
                t && s.detach();
                (t = a) && (d.enabled() ? c(d.gm()) : c("body")).append(s)
            }
            t && v.css("transform", l == k.kga ? "translate(-11%, 0) rotate(-90deg)" : "none")
        }
        var c = a("jquery.mod"),
        e = a("lC"),
        g = a("bK"),
        d = a("ke"),
        f = a("ll"),
        h = a("eO"),
        j = a("lk"),
        p = a("r"),
        k = new h;
        k.iAa = TDV.Da.UO;
        k.kga = TDV.Da.VO;
        k.RF =
        function (a) {
            if (q != a) {
                q = a;
                b()
            }
        };
        k.eca = function () {
            return q
        };
        k.get = function () {
            return l
        };
        var l = m,
        q = m,
        o = m,
        t = y,
        s = r,
        v = r;
        window.addEventListener("resize", function () {
            b();
            setTimeout(b, 500)
        }, n);
        try {
            window.screen.orientation.addEventListener("change", b)
        } catch (u) {
            window.addEventListener("orientationchange", b, y)
        }
        b();
        return k
    });
    define("gE", "require,fg,do,ll,bZ,ce,dW,kd,lk,jT,A,ij,dL,dc,dQ,kz,iX,r,fT,dO,bW,hi,jt,bi,dm,fh,kS,cv,ke,bp,fc,jg,cJ".split(","), function (a) {
        var b = a("fg"),
        c = a("do"),
        e = a("ll"),
        g = a("bZ"),
        d = a("ce"),
        f = a("dW"),
        h = a("kd"),
        j = a("lk"),
        p = a("jT"),
        k = a("A"),
        l = a("ij"),
        q = a("dL"),
        o = a("dc"),
        t = a("dQ"),
        s = a("kz"),
        v = a("iX"),
        u = a("r"),
        w = a("fT"),
        x = a("dO"),
        z = a("bW"),
        C = a("hi"),
        A = a("jt"),
        K = a("bi"),
        F = a("dm"),
        J = a("fh"),
        B = a("kS"),
        O = a("cv"),
        N = a("ke"),
        I = a("bp"),
        L = a("fc"),
        G = a("jg"),
        E = a("cJ"),
        H = b.extend(J, function (a) {
            J.call(this, a);
            this.de = new x(this);
            this.b4 = new l(this, this.de);
            this.Em = new B;
            this.Em.M({
                visible: n,
                width: "100%",
                height: "100%"
            });
            this.gy = new q;
            this.cz = new o;
            this.JH = new k(this);
            a = new O;
            a.CN(0);
            this.PF(a);
            this.xe(n);
            this.bind(e.D("settings"), this.Aoa, this, n);
            this.PL = TDV.Da.IM();
            L.bind(e.aa, this.loa, this, n);
            I.Kza();
            this.kia = new p(this, "buttonMute", F.Wc);
            this.kia.bind(e.U, this.E7, this, n);
            this.ria = new p(this, "buttonUnmute", F.Wc);
            this.ria.bind(e.U, this.f8, this, n);
            this.nH = new p(this, "buttonToggleMute", F.Qh);
            this.nH.bind(e.Dg,
                this.E7, this, n);
            this.nH.bind(e.Ph, this.f8, this, n);
            this.bind(e.D("mute"), this.ioa, this);
            this.nH.set("pressed", this.get("mute"));
            this.iia = new p(this, "buttonEnterFullscreen", F.Wc);
            this.iia.bind(e.U, this.b7, this, n);
            this.jia = new p(this, "buttonExitFullscreen", F.Wc);
            this.jia.bind(e.U, this.c7, this, n);
            this.kH = new p(this, "buttonToggleFullscreen", F.Qh);
            this.kH.bind(e.Dg, this.b7, this, n);
            this.kH.bind(e.Ph, this.c7, this, n);
            this.kH.set("pressed", this.get("fullscreenEnabled"));
            this.bind(e.D("fullscreenEnabled"), this.Una,
                this, n);
            this.set("fullscreenEnabled", this.mg.enabled());
            this.set("mouseWheelEnabled", n);
            this.set("backgroundPreloadEnabled", n);
            this.set("defaultVRPointer", "laser");
            this.set("downloadEnabled", y);
            this.set("mediaActivationMode", "window");
            this.set("fullscreenFallback", "out_of_frame");
            this.set("defaultMenu", ["fullscreen", "mute", "rotation"]);
            this.bind(e.lh, this.Doa, this, n);
            [e.Hb, e.fc, e.sq, e.xG, e.wG].forEach(function (a) {
                this.bind(a, function (a) {
                    this.trigger(new g(e.sG, {
                            Rea: a
                        }))
                }, this, n)
            }
                .bind(this));
            K.bind(e.aa,
                function () {
                K.isPresenting() ? L.RF(m) : L.RF(J.prototype.get.call(this, "lockedOrientation"))
            }, this);
            this.mg.bind(e.aa, function () {
                var a = L.eca();
                L.RF(m);
                L.RF(a)
            }, this)
        });
        H.V_ = "orientationChange";
        f.A("Player", H).xya().B("Container").J({
            backgroundPreloadEnabled: "bool",
            buttonEnterFullscreen: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonExitFullscreen: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonMute: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleFullscreen: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonToggleMute: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonUnmute: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            cardboardAvailable: "bool",
            cookiesPolicy: "or[array[CookiesPolicy], CookiesPolicy]",
            defaultVRPointer: "enum[gaze, laser]",
            definitions: "array[Object]",
            desktopMipmappingEnabled: "bool",
            downloadEnabled: "bool",
            fullscreenAvailable: "bool",
            fullscreenEnabled: "bool",
            fullscreenFallback: "enum[out_of_frame, none]",
            gyroscopeAvailable: "bool",
            hash: "string",
            isMobile: "bool",
            mediaActivationMode: "enum[window, button]",
            menu: "array[PlayerMenuItem]",
            defaultMenu: "array[enum[fullscreen, mute, rotation]]",
            mobileMipmappingEnabled: "bool",
            mouseWheelEnabled: "bool",
            mute: "bool",
            lockedOrientation: "enum[portrait, landscape]",
            orientation: "enum[portrait, landscape]",
            surfaceSelectionAvailable: "bool",
            touchDevice: "bool",
            touchEnabled: "bool",
            vrAvailable: "bool",
            vrPolyfillScale: "number"
        }).Qya().Cg({
            logCapabilities: function () {
                this.sna()
            },
            activateAudio: function (a) {
                this.Vga(a)
            }
        }).Hf([e.lh, H.V_, e.sG]);
        H.prototype.cS = function (a) {
            J.prototype.cS.apply(this, arguments);
            this.set("fullscreenEnabled", a)
        };
        H.prototype.za = function () {
            J.prototype.za.call(this);
            this.f("mute", y);
            this.f("fullscreenEnabled", y)
        };
        H.prototype.Ga = function () {
            J.prototype.Ga.call(this);
            this.b4.getParent() != this && this.la(this.b4);
            if (this.Em.getParent() != this) {
                this.la(this.Em);
                this.Em.la(this.JH);
                this.Em.la(this.gy);
                this.Em.la(this.cz)
            }
        };
        H.prototype.cqa = function (a) {
            var b = [];
            this.gy && b.push(this.gy);
            this.cz && b.push(this.cz);
            this.JH && b.push(this.JH);
            for (var c = n, d = 0; d <= b.length && c; d++) {
                c = a.indexOf(b[d]);
                c = a.length - (b.length - d) == c
            }
            return c ? a : a.filter(function (a) {
                return b.indexOf(a) < 0
            }).concat(b)
        };
        H.prototype.ja = function () {
            this.b9 || (this.b9 = c.difference(this.Tla(), ["visible", "includeInLayout", "state", "left", "right", "top", "bottom", "centerX", "centerY", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "actualWidth", "actualHeight", "paddingLeft", "paddingTop", "paddingRight",
                            "paddingBottom"]));
            this.ib(this.b9, {}, [this.Em], n, n);
            J.prototype.ja.call(this);
            this.KAa === n && this.JAa()
        };
        H.prototype.set = function (a, b) {
            switch (a) {
            case "children":
                this.Em.set(a, this.cqa(b));
                return;
            case "creationPolicy":
                this.Em.set(a, b);
                return;
            case "fullscreenAvailable":
            case "gyroscopeAvailable":
            case "cardboardAvailable":
            case "isMobile":
            case "orientation":
            case "surfaceSelectionAvailable":
            case "touchEnabled":
            case "touchDevice":
            case "vrAvailable":
                b = this.get(a);
                break;
            case "fullscreenEnabled":
                b = this.mg.available() &&
                    b;
                break;
            case "fullscreenFallback":
                N.UZ(b);
                break;
            case "lockedOrientation":
                u.le() && (b = m);
                L.RF(b);
                break;
            case "installAvailable":
                b = this.de.ready();
                break;
            case "mouseWheelEnabled":
                this.Pya(A.$g("mousewheelenabled", b));
                break;
            case "backgroundPreloadEnabled":
                this.oqa(b);
                break;
            case "vrPolyfillScale":
                K.aza(b);
                break;
            case "desktopMipmappingEnabled":
                s.jya(b);
                break;
            case "mobileMipmappingEnabled":
                s.Nya(b)
            }
            J.prototype.set.call(this, a, b)
        };
        H.prototype.get = function (a, b) {
            switch (a) {
            case "children":
            case "creationPolicy":
                return this.Em.get(a,
                    b);
            case "touchEnabled":
                return this.ik;
            case "touchDevice":
                return u.r_();
            case "isMobile":
                return u.Za();
            case "orientation":
                return L.get();
            case "lockedOrientation":
                return L.eca();
            case "gyroscopeAvailable":
                return w.available;
            case "cardboardAvailable":
            case "vrAvailable":
                return K.available();
            case "fullscreenAvailable":
                return this.mg.available();
            case "vrPolyfillScale":
                return K.Lva();
            case "installAvailable":
                return this.de.ready();
            case "surfaceSelectionAvailable":
                return t.Vea();
            default:
                return J.prototype.get.apply(this,
                    arguments)
            }
        };
        H.prototype.E7 = function () {
            this.set("mute", n)
        };
        H.prototype.f8 = function () {
            this.set("mute", y)
        };
        H.prototype.ioa = function () {
            this.nH.set("pressed", this.get("mute"))
        };
        H.prototype.b7 = function () {
            this.set("fullscreenEnabled", n)
        };
        H.prototype.c7 = function () {
            this.set("fullscreenEnabled", y)
        };
        H.prototype.Una = function () {
            this.get("fullscreenEnabled") ? this.mg.Fh() : this.mg.$d();
            this.kH.set("pressed", this.get("fullscreenEnabled"));
            this.set("fullscreenEnabled", this.mg.enabled())
        };
        H.prototype.Aoa = function () {
            var a =
                this.get("settings");
            if (a) {
                z.mm(a);
                C.e_(a);
                this.de.e_(a)
            }
        };
        H.prototype.oqa = function (a) {
            C.enabled(a)
        };
        H.prototype.L4 = function () {
            var a = [];
            this.tx = [];
            (this.get("menu") || []).forEach(function (b) {
                var c = b.get("label");
                a.push(b.get("label"));
                c && this.tx.push(function () {
                    b.trigger("click")
                })
            }
                .bind(this));
            var b = this.get("defaultMenu", []);
            if (b.indexOf("rotation") >= 0) {
                var c = this.An("PanoramaPlayer");
                if (c.length) {
                    a.push(c[0].get("mouseControlMode") == d.et ? j("change-to-drag-and-release") : j("change-to-click-and-move"));
                    this.tx.push(this.rsa.bind(this))
                }
            }
            if (b.indexOf("fullscreen") >= 0 && this.mg.available()) {
                a.push(this.mg.enabled() ? j("exit-fullscreen") : j("enter-fullscreen"));
                this.tx.push(this.psa.bind(this))
            }
            if (b.indexOf("mute") >= 0) {
                a.push(this.get("mute") ? j("unmute") : j("mute"));
                this.tx.push(this.qsa.bind(this))
            }
            b = [].concat(h.name ? [h.name] : [], h.Oua != "false" ? h.tF ? ["v:" + h.tF + "." + h.xF] : ["v:" + h.xF] : []).join(" ");
            if (b != "") {
                a.length > 0 && a.push("");
                a.push(b);
                this.tx.push(this.Ooa.bind(this))
            }
            return a
        };
        H.prototype.W6 = function (a) {
            this.tx[a.data.index]()
        };
        H.prototype.rsa = function () {
            var a = this.An("PanoramaPlayer"),
            b = a[0].get("mouseControlMode") == d.et ? d.Xn : d.et;
            a.forEach(function (a) {
                E.setItem(M, b);
                a.set("mouseControlMode", b)
            })
        };
        H.prototype.Doa = function () {
            E.getItem(M) == d.Xn && this.An("PanoramaPlayer").forEach(function (a) {
                a.set("mouseControlMode", d.Xn)
            });
            A.zg("mute") && this.set("mute", A.$g("mute", this.get("mute")));
            A.zg("vr") && K.Fh()
        };
        H.prototype.psa = function () {
            this.mg.toggle()
        };
        H.prototype.qsa = function () {
            this.set("mute", !this.get("mute"))
        };
        H.prototype.Ooa =
        function () {
            h.mfa && window.open(h.mfa, "_blank")
        };
        H.prototype.loa = function () {
            this.trigger(H.V_)
        };
        H.prototype.sna = function () {
            b.Tua(n);
            b.log("UA: " + navigator.userAgent);
            b.log("screen: (" + Math.max(window.screen.width, window.screen.height) + ", " + Math.min(window.screen.width, window.screen.height) + ") dpr: " + window.devicePixelRatio + " (" + Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio + ", " + Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio + ")");
            u.log();
            v.log();
            j.log();
            K.log()
        };
        H.prototype.Vga = function (a) {
            if (I.TX())
                G.aA(a);
            else {
                I.w_(a);
                I.Bg(this)
            }
        };
        var M = "tdvp_" + window.location.pathname + "_rotation_mode";
        return H
    });
    define("bQ", ["require", "fg", "jd", "ll", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("PlayerMenuItem", b).B("Object").J({
            label: "string"
        }).Hf([e.U]);
        return b
    });
    define("K", "require,fg,jd,ll,fu,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("fu"),
        d = a("dW"),
        f = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("visible", y);
            this.set("state", g.H);
            this.set("showDuration", 1E3);
            this.set("hideDuration", 1E3);
            this.set("darkenBackground", n);
            this.set("lookAwayToHide", n);
            this.set("lookAwayToHideTime", 2E3);
            this.set("showEasing", "linear");
            this.set("hideEasing", "linear");
            this.bind(e.D("state"), function () {
                this.trigger(e.gc)
            }, this, n);
            this.Sb = m
        });
        a.prototype.show =
        function () {
            this.set("visible", n)
        };
        a.prototype.hide = function () {
            this.set("visible", y)
        };
        a.prototype.play = function () {
            this.set("state", g.P)
        };
        a.prototype.pause = function () {
            this.set("state", g.IG)
        };
        a.prototype.stop = function () {
            this.set("state", g.H)
        };
        d.A("PopupPanoramaOverlay", a).B("PanoramaOverlay").J({
            autoplay: "bool",
            darkenBackground: "bool",
            loop: "bool",
            yaw: "number",
            pitch: "number",
            hfov: "number",
            image: "ImageResource",
            video: "VideoResource",
            lookAwayToHide: "bool",
            lookAwayToHideTime: "number",
            popupDistance: "number",
            popupMaxHeight: "or[number,percent]",
            popupMaxWidth: "or[number,percent]",
            rotationX: "number",
            rotationY: "number",
            rotationZ: "number",
            hideEasing: "enum[linear, quad_in, quad_out, quad_in_out, cubic_in, cubic_out, cubic_in_out, quart_in, quart_out, quart_in_out, quint_in, quint_out, quint_in_out]",
            hideDuration: "number",
            state: "enum[stopped, playing, paused]",
            showEasing: "enum[linear, quad_in, quad_out, quad_in_out, cubic_in, cubic_out, cubic_in_out, quart_in, quart_out, quart_in_out, quint_in, quint_out, quint_in_out]",
            showDuration: "number",
            visible: "bool",
            playbackPositions: "array[PopupPanoramaOverlayPlaybackPosition]"
        }).Cg({
            hide: a.prototype.hide,
            pause: a.prototype.pause,
            play: a.prototype.play,
            show: a.prototype.show,
            stop: a.prototype.stop
        }).Xb([e.Ba, e.Sw, e.Kw, e.gc]).Hf([e.U]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = f.Nva(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "hfov":
            case "vfov":
            case "pitch":
            case "rotationX":
            case "rotationY":
            case "rotationZ":
            case "yaw":
            case "playbackPositions":
                this.Sb =
                    m;
                d = n
            }
            c.prototype.set.call(this, a, b);
            d && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        return a
    });
    define("lm", ["do", "fg", "cr", "dW"], function (a, b, c, e) {
        a = b.extend(c, function () {
            c.call(this)
        });
        e.A("ProgressBar", a).B("UIComponent").J({
            barBackgroundColor: "or[array[color], color]",
            barBackgroundColorDirection: "enum[horizontal, vertical]",
            barBackgroundColorRatios: "array[number]",
            barBorderColor: "color",
            barBorderRadius: "number",
            barBorderSize: "number",
            barOpacity: "number",
            percent: "number"
        });
        return a
    });
    define("cY", "require,fg,jd,ll,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.Sb = m;
            this.set("enabled", n);
            this.set("interactionEnabled", n);
            this.set("contentInteractive", y);
            this.set("transparent", y)
        });
        g.A("QuadFramePanoramaOverlay", a).B("PanoramaOverlay").J({
            displayTooltipInTouchScreens: "bool",
            contentInteractive: "bool",
            enabled: "bool",
            image: "ImageResource",
            interactionEnabled: "bool",
            height: "number",
            playbackPositions: "array[QuadPanoramaOverlayPlaybackPosition]",
            transparent: "bool",
            toolTip: "string",
            url: "string",
            useHandCursor: "bool",
            vertices: "array[PanoramaPoint]",
            width: "number"
        }).Xb([e.zd, e.Mh, e.Kf, e.xc, e.Qb, e.od]).Hf([e.U]).hh(["url"]);
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "vertices":
            case "playbackPositions":
                this.Sb = m;
                d = n
            }
            c.prototype.set.call(this, a, b);
            d && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = d.MY(this);
                return this.Sb
            }
            return c.prototype.get.call(this,
                a, b)
        };
        return a
    });
    define("br", ["require", "fg", "dW", "cj"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("cj"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("QuadHotspotPanoramaOverlay", a).B("HotspotPanoramaOverlay");
        return a
    });
    define("gK", ["dW", "q"], function (a, b) {
        a.A("QuadHotspotPanoramaOverlayArea", b).B("HotspotPanoramaOverlayArea");
        return b
    });
    define("cX", "require,fg,jd,ll,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("dW"),
        d = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.set("opacity", 1);
            this.Sb = m
        });
        g.A("QuadHotspotPanoramaOverlayImageBase", a).B("Object").J({
            distance: "number",
            image: "ImageResource",
            playbackPositions: "array[QuadPanoramaOverlayPlaybackPosition]",
            opacity: "number",
            vertices: "array[PanoramaPoint]"
        }).Xb([e.od, e.zd]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb =
                        d.MY(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.set = function (a, b) {
            var d = y;
            switch (a) {
            case "opacity":
            case "distance":
            case "vertices":
            case "playbackPositions":
                this.Sb = m;
                d = n
            }
            c.prototype.set.call(this, a, b);
            d && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        return a
    });
    define("el", ["require", "fg", "dW", "cX"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("cX"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("QuadHotspotPanoramaOverlayImage", a).B("QuadHotspotPanoramaOverlayImageBase");
        return a
    });
    define("hX", ["require", "fg", "dW", "cX"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("cX"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("QuadHotspotPanoramaOverlayMap", a).B("QuadHotspotPanoramaOverlayImageBase");
        return a
    });
    define("dP", "require,fg,jd,ll,fu,bZ,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("fu"),
        d = a("bZ"),
        f = a("dW"),
        h = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.Sb = m;
            this.set("enabled", n);
            this.set("interactionEnabled", n);
            this.set("state", g.H);
            this.set("enabledInCardboard", n);
            this.set("enabledInStandard", n);
            this.set("blending", 0);
            this.set("opacity", 1);
            this.set("fadeInDuration", 200);
            this.set("fadeOutDuration", 200)
        });
        a.prototype.play = function () {
            this.set("state", g.P)
        };
        a.prototype.pause =
        function () {
            this.set("state", g.mc)
        };
        a.prototype.stop = function () {
            this.set("state", g.H)
        };
        f.A("QuadVideoPanoramaOverlay", a).B("PanoramaOverlay").J({
            autoplay: "bool",
            blending: "number",
            chromaColor: "color",
            chromaThreshold: "number",
            chromaSmoothing: "number",
            cues: "array[VideoCue]",
            distance: "number",
            displayTooltipInTouchScreens: "bool",
            enabled: "bool",
            enabledInCardboard: "bool",
            enabledInVR: "bool",
            enabledInStandard: "bool",
            fadeInDuration: "number",
            fadeOutDuration: "number",
            interactionEnabled: "bool",
            videoVisibleOnStop: "bool",
            vertices: "array[PanoramaPoint]",
            image: "ImageResource",
            loop: "bool",
            opacity: "number",
            playbackPositions: "array[QuadPanoramaOverlayPlaybackPosition]",
            state: "enum[stopped, playing, paused]",
            toolTip: "string",
            useHandCursor: "bool",
            video: "VideoResource"
        }).Xb([e.Ba, e.zd, e.Mh, e.Kf, e.xc, e.Qb, e.od, e.lh, e.Jf, e.gc]).Hf([e.U]).Cg({
            pause: a.prototype.pause,
            play: a.prototype.play,
            stop: a.prototype.stop
        });
        a.prototype.set = function (a, b) {
            var f = y;
            switch (a) {
            case "state":
                var h = this.get("state") || g.H;
                h == g.H && b == g.P && this.trigger(e.lh);
                h != b && this.trigger(new d(e.gc, {
                        oldState: h,
                        state: b
                    }));
                break;
            case "enabledInCardboard":
                this.set("enabledInVR", b);
                break;
            case "distance":
            case "opacity":
            case "playbackPositions":
            case "vertices":
                this.Sb = m;
                f = n
            }
            c.prototype.set.call(this, a, b);
            f && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = h.MY(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        return a
    });
    define("jI", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("initialState", "playing");
            this.set("opacity", 0.25);
            this.set("speed", 0.5);
            this.set("intensity", 0.5);
            this.set("color", "#ffffff");
            this.set("state", "playing");
            this.set("startDuration", 2E4);
            this.set("stopDuration", 2E4)
        });
        a.A("RainPanoramaOverlay", b).B("PanoramaOverlay").J({
            initialState: "enum[playing, stopped]",
            intensity: "number",
            speed: "number",
            opacity: "number",
            color: "color",
            startDuration: "number",
            state: "enum[playing, stopped]",
            stopDuration: "number",
            startState: "enum[playing, stopped]"
        });
        b.prototype.get = function (a, b) {
            "startState" == a && b === m && (b = this.get("initialState"));
            return c.prototype.get.call(this, a, b)
        };
        return b
    });
    define("ec", ["require", "fg", "jd", "dW", "ll"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("dW"),
        a = a("ll"),
        b = b.extend(c, function () {
            c.call(this)
        });
        e.A("RotationalCameraMovement", b).B("Object").J({
            easing: "enum[linear, quad_in, quad_out, quad_in_out, cubic_in, cubic_out, cubic_in_out, quart_in, quart_out, quart_in_out, quint_in, quint_out, quint_in_out]",
            duration: "number",
            hfovSpeed: "number",
            pitchSpeed: "number",
            yawSpeed: "number"
        }).Xb([a.Ba]);
        return b
    });
    define("bO", ["fg", "dE", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("SlideInEffect", a).B("Effect").J({
            from: "enum[left, top, right, bottom]"
        });
        return a
    });
    define("gu", ["fg", "fP", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("SlideOutEffect", a).B("Effect").J({
            to: "enum[left, top, right, bottom]"
        });
        return a
    });
    define("kI", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("initialState", "playing");
            this.set("intensity", 0.5);
            this.set("speed", 0.25);
            this.set("state", "playing");
            this.set("startDuration", 2E4);
            this.set("stopDuration", 2E4)
        });
        a.A("SnowPanoramaOverlay", b).B("PanoramaOverlay").J({
            initialState: "enum[playing, stopped]",
            intensity: "number",
            speed: "number",
            startDuration: "number",
            state: "enum[playing, stopped]",
            stopDuration: "number",
            startState: "enum[playing, stopped]"
        });
        b.prototype.get = function (a, b) {
            "startState" == a && b === m && (b = this.get("initialState"));
            return c.prototype.get.call(this, a, b)
        };
        return b
    });
    define("jz", ["require", "fg", "dW", "iR"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("iR"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("SphericPanoramaFrame", a).B("PanoramaFrame").J({
            sphere: "or[ImageResource, Video360Resource]",
            stereoSphere: "or[ImageResource, Video360Resource]"
        });
        a.prototype.Jh = function () {
            var a = this.get("sphere");
            return a && c.tb("Video360Resource", a) ? n : (a = this.get("stereoSphere")) && c.tb("Video360Resource", a) ? n : y
        };
        return a
    });
    define("cz", "do,fg,u,kS,jY,N,gP".split(","), function (a, b, c, e, g, d, f) {
        var h = b.extend(e, function (a) {
            e.call(this);
            this.Tc("Tab");
            this.BU = a;
            this.ri = "";
            this.xW = y;
            this.Z5 = this.sa = r;
            this.AX = this.zX = y;
            this.set("childrenInteractionEnabled", y);
            this.set("contentOpaque", n)
        });
        h.prototype.za = function () {
            e.prototype.za.call(this);
            this.f("horizontalAlign", g.Lc);
            this.f("verticalAlign", g.vc);
            this.f("fontFamily");
            this.f("fontSize");
            this.f("fontColor");
            this.f("fontWeight");
            this.f("fontStyle");
            this.f("textDecoration");
            this.f("textShadowBlurRadius");
            this.f("textShadowColor");
            this.f("textShadowHorizontalLength");
            this.f("textShadowOpacity");
            this.f("textShadowVerticalLength")
        };
        h.prototype.Oea = function (a) {
            if (this.zX != a) {
                this.zX = a;
                this.AX = n;
                this.Dc()
            }
        };
        h.prototype.Ga = function () {
            e.prototype.Ga.call(this);
            if (this.sa == r) {
                this.sa = new f;
                this.sa.set("horizontalAlign", "center");
                this.la(this.sa)
            }
        };
        h.prototype.el = function () {
            e.prototype.el.call(this);
            this.Z5 = c.watch(this.BU, "label", this.$na, this);
            this.k$(this.BU.get("label"))
        };
        h.prototype.uV = function () {
            e.prototype.uV.call(this);
            this.Z5.unwatch()
        };
        h.prototype.$na = function () {
            var a = this.BU.get("label");
            this.k$(a ? a : "")
        };
        h.prototype.k$ = function (a) {
            if (this.ri != a) {
                this.ri = a;
                this.xW = n;
                this.Dc()
            }
        };
        h.prototype.ja = function () {
            if (this.xW) {
                this.xW = y;
                this.sa.set("text", this.ri)
            }
            if (this.AX) {
                this.AX = y;
                this.sa.set("direction", this.zX ? d.of : d.Be)
            }
            this.ib(h.I1, h.Yw, [this.sa], n, n);
            e.prototype.ja.call(this)
        };
        h.I1 = ["fontFamily", "fontSize", "fontColor", "fontWeight", "fontStyle", "textDecoration",
            "textShadowColor", "textShadowHorizontalLength", "textShadowVerticalLength", "textShadowBlurRadius", "textShadowOpacity"];
        h.Yw = {};
        a(h.I1).each(function (a) {
            h.Yw[a] = a
        });
        return h
    });
    define("dV", [], function () {
        return {
            oA: "normal",
            Lw: "inverse",
            E_: "center"
        }
    });
    define("cq", "do,fg,W,R,ll,kS,jY,c,fV,cz,dV,bh".split(","), function (a, b, c, e, g, d, f, h, j, p, k, l) {
        b = b.extend(d, function () {
            d.call(this);
            this.Tc("TabPanel");
            this.td = -1;
            this.hv = y;
            this.ZD = [];
            this.oL = y;
            this.Um = [];
            this.DU = y;
            this.YD = [];
            this.Ie = this.cf = r;
            this.jv(y)
        });
        b.prototype.za = function () {
            d.prototype.za.call(this);
            this.f("pages", []);
            this.f("selectedIndex", -1);
            this.f("tabsSize", 25);
            this.f("tabsPosition", l.nb);
            this.f("tabsGap", 0);
            this.f("tabsPadding", 10);
            this.f("tabsAlign", k.oA);
            this.f("tabsBackgroundOpacity",
                0.6);
            this.f("tabsBackgroundColor", ["#FFFFFF", "#CCCCCC"]);
            this.f("tabsBackgroundColorRatios", [0, 0.5]);
            this.f("tabsRollOverBackgroundOpacity", 1);
            this.f("tabsRollOverBackgroundColor", ["#FFFFFF", "#CCCCCC"]);
            this.f("tabsRollOverBackgroundColorRatios", [0, 0.5]);
            this.f("backgroundColor", "#FFFFFF");
            this.f("selectedTabBackgroundOpacity", 1);
            this.f("selectedTabBackgroundColor");
            this.f("selectedTabBackgroundColorRatios");
            this.f("borderRadius", 6);
            this.f("pagePaddingLeft", 4);
            this.f("pagePaddingTop", 4);
            this.f("pagePaddingRight",
                4);
            this.f("pagePaddingBottom", 4);
            this.f("borderColor", "#AAAAAA");
            this.f("borderSize", 1);
            this.f("selectedTabFontSize");
            this.f("selectedTabFontColor");
            this.f("selectedTabFontWeight");
            this.f("selectedTabFontStyle");
            this.f("selectedTabTextDecoration");
            this.f("selectedTabTextShadowBlurRadius");
            this.f("selectedTabTextShadowColor");
            this.f("selectedTabTextShadowHorizontalLength");
            this.f("selectedTabTextShadowOpacity");
            this.f("selectedTabTextShadowVerticalLength");
            this.f("tabsFontFamily");
            this.f("tabsFontSize");
            this.f("tabsFontColor");
            this.f("tabsFontWeight");
            this.f("tabsFontStyle");
            this.f("tabsTextDecoration");
            this.f("tabsTextShadowBlurRadius");
            this.f("tabsTextShadowColor");
            this.f("tabsTextShadowHorizontalLength");
            this.f("tabsTextShadowOpacity");
            this.f("tabsTextShadowVerticalLength");
            this.f("tabsRollOverFontSize");
            this.f("tabsRollOverFontColor");
            this.f("tabsRollOverFontWeight");
            this.f("tabsRollOverFontStyle");
            this.f("tabsRollOverTextDecoration");
            this.f("tabsRollOverTextShadowBlurRadius");
            this.f("tabsRollOverTextShadowColor");
            this.f("tabsRollOverTextShadowHorizontalLength");
            this.f("tabsRollOverTextShadowOpacity");
            this.f("tabsRollOverTextShadowVerticalLength")
        };
        b.prototype.Ga = function () {
            d.prototype.Ga.call(this);
            if (this.Ie == r) {
                this.Ie = new d;
                this.Ie.jv(y);
                this.la(this.Ie)
            }
            if (this.cf == r) {
                this.cf = new d;
                this.cf.jv(y);
                this.la(this.cf)
            }
        };
        b.prototype.set = function (a, b) {
            if (a == "pages")
                this.Wya(b || []);
            else if (a == "selectedIndex")
                this.d_(b);
            else if (a == "layout")
                b = h.Zza;
            d.prototype.set.call(this, a, b)
        };
        b.prototype.get = function (a, b) {
            return a ==
            "pages" ? this.Um : a == "selectedIndex" ? this.td : d.prototype.get.call(this, a, b)
        };
        b.prototype.d_ = function (a) {
            if (this.td != a) {
                this.td = a;
                this.td = Math.min(Math.max(this.td, -1), this.Um.length);
                this.hv = n;
                this.Dc();
                this.trigger(g.aa)
            }
        };
        b.prototype.Wya = function (b) {
            if (!a.isEqual(this.Um, b)) {
                this.Um = b;
                this.DU = n;
                this.Dc()
            }
        };
        b.prototype.fsa = function (b) {
            this.ZD = a(this.ZD).union([b.source]);
            this.oL = n;
            this.Dc()
        };
        b.prototype.esa = function (b) {
            this.ZD = a(this.ZD).difference([b.source]);
            this.oL = n;
            this.Dc()
        };
        b.prototype.dsa =
        function (b) {
            this.d_(a(this.YD).indexOf(b.source))
        };
        b.prototype.ja = function () {
            var b = y,
            o = y,
            t = y,
            s = y,
            v = y,
            u = this.k("tabsPosition"),
            w = this.k("tabsAlign");
            if (this.DU) {
                this.YD = [];
                this.cf.Xda();
                this.Ie.Xda();
                a(this.Um).forEach(function (b) {
                    var c = new p(b);
                    c.jv(n);
                    c.bind(g.xc, a.bind(this.fsa, this));
                    c.bind(g.Qb, a.bind(this.esa, this));
                    c.bind(g.Hb, a.bind(this.dsa, this));
                    this.YD.push(c);
                    this.cf.la(c);
                    b.M({
                        top: m,
                        left: m,
                        right: m,
                        bottom: m,
                        width: "100%",
                        height: "100%"
                    });
                    this.Ie.la(b)
                }, this);
                this.td = Math.min(Math.max(this.td,
                            0), this.Um.length - 1);
                this.DU = y;
                o = b = v = n
            }
            if (this.n("tabsPosition")) {
                this.q("tabsPosition");
                s = o = b = n
            }
            if (this.hv) {
                this.hv = y;
                t = o = v = n
            }
            if (this.oL) {
                this.oL = y;
                t = n
            }
            this.n("overflow") && this.cf.M({
                contentOpaque: this.k("overflow") == j.bl,
                overflow: this.k("overflow")
            });
            a(["tabsAlign", "tabsGap", "tabsSize"]).forEach(function (a) {
                if (this.n(a)) {
                    this.q(a);
                    b = n
                }
            }, this);
            a(["borderRadius", "borderTopRadius", "borderBottomRadius", "borderLeftRadius", "borderRightRadius", "borderTopLeftRadius", "borderTopRightRadius", "borderBottomLeftRadius",
                    "borderBottomRightRadius", "borderSize", "borderLeftSize", "borderTopSize", "borderRightSize", "borderBottomSize", "borderColor", "borderLeftColor", "borderTopColor", "borderRightColor", "borderBottomColor", "shadow", "shadowHorizontalLength", "shadowVerticalLength", "shadowBlurRadius", "shadowSpread", "shadowColor", "backgroundOpacity", "backgroundColor", "backgroundColorRatios"]).forEach(function (a) {
                if (this.n(a)) {
                    this.q(a);
                    s = o = n
                }
            }, this);
            a(["tabsBackgroundOpacity", "tabsBackgroundColor", "tabsBackgroundColorRatios",
                    "selectedTabBackgroundOpacity", "selectedTabBackgroundColor", "selectedTabBackgroundColorRatios", "selectedTabFontSize", "selectedTabFontColor", "selectedTabFontWeight", "selectedTabFontStyle", "selectedTabTextDecoration", "selectedTabTextShadowColor", "selectedTabTextShadowHorizontalLength", "selectedTabTextShadowVerticalLength", "selectedTabTextShadowBlurRadius", "selectedTabTextShadowOpacity", "tabsFontFamily", "tabsFontSize", "tabsFontColor", "tabsFontWeight", "tabsFontStyle", "tabsPadding", "tabsTextDecoration",
                    "tabsRollOverFontSize", "tabsRollOverFontColor", "tabsTextShadowColor", "tabsTextShadowHorizontalLength", "tabsTextShadowVerticalLength", "tabsTextShadowBlurRadius", "tabsTextShadowOpacity", "tabsRollOverFontWeight", "tabsRollOverFontStyle", "tabsRollOverTextDecoration", "tabsRollOverTextShadowColor", "tabsRollOverTextShadowHorizontalLength", "tabsRollOverTextShadowVerticalLength", "tabsRollOverTextShadowBlurRadius", "tabsRollOverTextShadowOpacity"]).forEach(function (a) {
                if (this.n(a)) {
                    this.q(a);
                    o = n
                }
            }, this);
            a(["pagePaddingLeft",
                    "pagePaddingTop", "pagePaddingRight", "pagePaddingBottom"]).forEach(function (a) {
                if (this.n(a)) {
                    this.q(a);
                    s = n
                }
            }, this);
            this.n("backgroundColorDirection") && this.q("backgroundColorDirection");
            if (b) {
                switch (u) {
                case l.qa:
                    this.cf.M({
                        left: 0,
                        right: m
                    });
                    break;
                case l.Na:
                    this.cf.M({
                        left: m,
                        right: 0
                    });
                    break;
                case l.nb:
                    this.cf.M({
                        bottom: m,
                        top: 0
                    });
                    break;
                case l.mb:
                    this.cf.M({
                        bottom: 0,
                        top: m
                    })
                }
                switch (u) {
                case l.qa:
                case l.Na:
                    this.cf.M({
                        layout: h.of,
                        top: 0,
                        bottom: 0,
                        height: m,
                        width: this.k("tabsSize")
                    });
                    switch (w) {
                    case k.Lw:
                        this.cf.set("verticalAlign",
                            f.mb);
                        break;
                    case k.E_:
                        this.cf.set("verticalAlign", f.vc);
                        break;
                    default:
                        this.cf.set("verticalAlign", f.nb)
                    }
                    break;
                case l.nb:
                case l.mb:
                    this.cf.M({
                        layout: h.Be,
                        left: 0,
                        right: 0,
                        height: this.k("tabsSize"),
                        width: m
                    });
                    switch (w) {
                    case k.Lw:
                        this.cf.set("horizontalAlign", f.Na);
                        break;
                    case k.E_:
                        this.cf.set("horizontalAlign", f.Lc);
                        break;
                    default:
                        this.cf.set("horizontalAlign", f.qa)
                    }
                }
                this.cf.set("gap", this.k("tabsGap"))
            }
            if (o)
                for (var x = 0; x < this.Um.length; x++) {
                    var z = this.YD[x];
                    if (u == l.mb || u == l.nb) {
                        z.M({
                            layout: h.Be,
                            width: m,
                            paddingLeft: this.k("tabsPadding"),
                            paddingTop: 0,
                            paddingRight: this.k("tabsPadding"),
                            paddingBottom: 0,
                            height: "100%",
                            backgroundColorDirection: c.mP
                        });
                        z.Oea(y)
                    } else {
                        z.M({
                            layout: h.of,
                            width: "100%",
                            paddingLeft: 0,
                            paddingTop: this.k("tabsPadding"),
                            paddingRight: 0,
                            paddingBottom: this.k("tabsPadding"),
                            height: m,
                            backgroundColorDirection: c.PO
                        });
                        z.Oea(n)
                    }
                    u == l.mb || u == l.Na ? z.set("borderTopLeftRadius", 0) : z.set("borderTopLeftRadius", this.k("borderTopLeftRadius", "borderTopRadius", "borderLeftRadius", "borderRadius"));
                    u == l.mb ||
                    u == l.qa ? z.set("borderTopRightRadius", 0) : z.set("borderTopRightRadius", this.k("borderTopRightRadius", "borderTopRadius", "borderRightRadius", "borderRadius"));
                    u == l.nb || u == l.Na ? z.set("borderBottomLeftRadius", 0) : z.set("borderBottomLeftRadius", this.k("borderBottomLeftRadius", "borderBottomRadius", "borderLeftRadius", "borderRadius"));
                    u == l.nb || u == l.qa ? z.set("borderBottomRightRadius", 0) : z.set("borderBottomRightRadius", this.k("borderBottomRightRadius", "borderBottomRadius", "borderRightRadius", "borderRadius"));
                    u ==
                    l.Na && z.set("borderSize", this.k("borderRightSize", "borderSize"));
                    u == l.qa && z.set("borderSize", this.k("borderLeftSize", "borderSize"));
                    u == l.nb && z.set("borderSize", this.k("borderTopSize", "borderSize"));
                    u == l.mb && z.set("borderSize", this.k("borderBottomSize", "borderSize"));
                    var C;
                    switch (u) {
                    case l.qa:
                        C = this.k("borderLeftColor", "borderColor");
                        break;
                    case l.Na:
                        C = this.k("borderRightColor", "borderColor");
                        break;
                    case l.mb:
                        C = this.k("borderBottomColor", "borderColor");
                        break;
                    default:
                    case l.nb:
                        C = this.k("borderTopColor",
                                "borderColor")
                    }
                    z.set("borderColor", C);
                    z.M({
                        fontFamily: this.k("tabsFontFamily"),
                        shadow: this.k("shadow"),
                        shadowHorizontalLength: this.k("shadowHorizontalLength"),
                        shadowVerticalLength: this.k("shadowVerticalLength"),
                        shadowBlurRadius: this.k("shadowBlurRadius"),
                        shadowSpread: this.k("shadowSpread"),
                        shadowColor: this.k("shadowColor")
                    })
                }
            if (o || t)
                for (x = 0; x < this.Um.length; x++) {
                    z = this.YD[x];
                    t = x == this.td;
                    C = a(this.ZD).contains(z);
                    if (t) {
                        C = this.k("selectedTabBackgroundColor", "tabsBackgroundColor");
                        if (a(C).isUndefined()) {
                            C =
                                this.k("backgroundColor");
                            C = a(C).isArray() && C.length > 0 ? u == l.qa || u == l.nb ? C[0] : C[C.length - 1] : C
                        }
                        z.M({
                            backgroundOpacity: this.k("selectedTabBackgroundOpacity", "tabsBackgroundOpacity", "backgroundOpacity"),
                            backgroundColor: C,
                            backgroundColorRatios: this.k("selectedTabBackgroundColorRatios", "tabsBackgroundColorRatios"),
                            cursor: e.dd,
                            fontSize: this.k("selectedTabFontSize", "tabsFontSize"),
                            fontColor: this.k("selectedTabFontColor", "tabsFontColor"),
                            fontWeight: this.k("selectedTabFontWeight", "tabsFontWeight"),
                            fontStyle: this.k("selectedTabFontStyle",
                                "tabsFontStyle"),
                            textDecoration: this.k("selectedTabTextDecoration", "tabsTextDecoration"),
                            textShadowColor: this.k("selectedTabTextShadowColor", "tabsTextShadowColor"),
                            textShadowHorizontalLength: this.k("selectedTabTextShadowHorizontalLength", "tabsTextShadowHorizontalLength"),
                            textShadowVerticalLength: this.k("selectedTabTextShadowVerticalLength", "tabsTextShadowVerticalLength"),
                            textShadowBlurRadius: this.k("selectedTabTextShadowBlurRadius", "tabsTextShadowBlurRadius"),
                            textShadowOpacity: this.k("selectedTabTextShadowOpacity",
                                "tabsTextShadowOpacity")
                        })
                    } else
                        C ? z.M({
                            backgroundOpacity: this.k("tabsRollOverBackgroundOpacity", "tabsBackgroundOpacity", "backgroundOpacity"),
                            backgroundColor: this.k("tabsRollOverBackgroundColor", "tabsBackgroundColor"),
                            backgroundColorRatios: this.k("tabsRollOverBackgroundColorRatios", "tabsBackgroundColorRatios"),
                            cursor: e.Ue,
                            fontSize: this.k("tabsRollOverFontSize", "tabsFontSize"),
                            fontColor: this.k("tabsRollOverFontColor", "tabsFontColor"),
                            fontWeight: this.k("tabsRollOverFontWeight", "tabsFontWeight"),
                            fontStyle: this.k("tabsRollOverFontStyle",
                                "tabsFontStyle"),
                            textDecoration: this.k("tabsRollOverTextDecoration", "tabsTextDecoration"),
                            textShadowColor: this.k("tabsRollOverTextShadowColor", "tabsTextShadowColor"),
                            textShadowHorizontalLength: this.k("tabsRollOverTextShadowHorizontalLength", "tabsTextShadowHorizontalLength"),
                            textShadowVerticalLength: this.k("tabsRollOverTextShadowVerticalLength", "tabsTextShadowVerticalLength"),
                            textShadowBlurRadius: this.k("tabsRollOverTextShadowBlurRadius", "tabsTextShadowBlurRadius"),
                            textShadowOpacity: this.k("tabsRollOverTextShadowOpacity",
                                "tabsTextShadowOpacity")
                        }) : z.M({
                            backgroundOpacity: this.k("tabsBackgroundOpacity", "backgroundOpacity"),
                            backgroundColor: this.k("tabsBackgroundColor"),
                            backgroundColorRatios: this.k("tabsBackgroundColorRatios"),
                            fontSize: this.k("tabsFontSize"),
                            fontColor: this.k("tabsFontColor"),
                            fontWeight: this.k("tabsFontWeight"),
                            fontStyle: this.k("tabsFontStyle"),
                            textDecoration: this.k("tabsTextDecoration"),
                            textShadowColor: this.k("tabsTextShadowColor"),
                            textShadowHorizontalLength: this.k("tabsTextShadowHorizontalLength"),
                            textShadowVerticalLength: this.k("tabsTextShadowVerticalLength"),
                            textShadowBlurRadius: this.k("tabsTextShadowBlurRadius"),
                            textShadowOpacity: this.k("tabsTextShadowOpacity")
                        });
                    z.M({
                        borderLeftSize: u == l.Na && t ? 0 : m,
                        borderRightSize: u == l.qa && t ? 0 : m,
                        borderBottomSize: u == l.nb && t ? 0 : m,
                        borderTopSize: u == l.mb && t ? 0 : m
                    })
                }
            if (s) {
                x = this.k("tabsSize");
                switch (u) {
                case l.qa:
                    this.Ie.M({
                        left: x - (this.k("borderLeftSize", "borderSize") || 0),
                        right: 0,
                        top: 0,
                        bottom: 0
                    });
                    break;
                case l.Na:
                    this.Ie.M({
                        left: 0,
                        right: x - (this.k("borderRightSize", "borderSize") || 0),
                        top: 0,
                        bottom: 0
                    });
                    break;
                case l.nb:
                    this.Ie.M({
                        left: 0,
                        right: 0,
                        top: x - (this.k("borderTopSize", "borderSize") || 0),
                        bottom: 0
                    });
                    break;
                case l.mb:
                    this.Ie.M({
                        left: 0,
                        right: 0,
                        top: 0,
                        bottom: x - (this.k("borderBottomSize", "borderSize") || 0)
                    })
                }
                u == l.nb && w == k.oA || u == l.qa && w == k.oA ? this.Ie.set("borderTopLeftRadius", 0) : this.Ie.set("borderTopLeftRadius", this.k("borderTopLeftRadius", "borderTopRadius", "borderLeftRadius", "borderRadius"));
                u == l.nb && w == k.Lw || u == l.Na && w == k.oA ? this.Ie.set("borderTopRightRadius", 0) : this.Ie.set("borderTopRightRadius", this.k("borderTopRightRadius", "borderTopRadius",
                        "borderRightRadius", "borderRadius"));
                u == l.mb && w == k.oA || u == l.qa && w == k.Lw ? this.Ie.set("borderBottomLeftRadius", 0) : this.Ie.set("borderBottomLeftRadius", this.k("borderBottomLeftRadius", "borderBottomRadius", "borderLeftRadius", "borderRadius"));
                u == l.mb && w == k.Lw || u == l.Na && w == k.Lw ? this.Ie.set("borderBottomRightRadius", 0) : this.Ie.set("borderBottomRightRadius", this.k("borderBottomRightRadius", "borderBottomRadius", "borderRightRadius", "borderRadius"));
                this.Ie.M({
                    paddingLeft: this.k("pagePaddingLeft"),
                    paddingTop: this.k("pagePaddingTop"),
                    paddingRight: this.k("pagePaddingRight"),
                    paddingBottom: this.k("pagePaddingBottom"),
                    borderLeftSize: this.k("borderLeftSize", "borderSize"),
                    borderTopSize: this.k("borderTopSize", "borderSize"),
                    borderRightSize: this.k("borderRightSize", "borderSize"),
                    borderBottomSize: this.k("borderBottomSize", "borderSize"),
                    borderLeftColor: this.k("borderLeftColor", "borderColor"),
                    borderTopColor: this.k("borderTopColor", "borderColor"),
                    borderRightColor: this.k("borderRightColor", "borderColor"),
                    borderBottomColor: this.k("borderBottomColor",
                        "borderColor"),
                    shadow: this.k("shadow"),
                    shadowHorizontalLength: this.k("shadowHorizontalLength"),
                    shadowVerticalLength: this.k("shadowVerticalLength"),
                    shadowBlurRadius: this.k("shadowBlurRadius"),
                    shadowSpread: this.k("shadowSpread"),
                    shadowColor: this.k("shadowColor"),
                    backgroundOpacity: this.k("backgroundOpacity"),
                    backgroundColor: this.k("backgroundColor"),
                    backgroundColorRatios: this.k("backgroundColorRatios")
                });
                u == l.nb || u == l.mb ? this.Ie.set("backgroundColorDirection", c.mP) : this.Ie.set("backgroundColorDirection",
                    c.PO)
            }
            if (v)
                for (x = 0; x < this.Um.length; x++)
                    this.Um[x].set("visible", x == this.td);
            d.prototype.ja.call(this)
        };
        return b
    });
    define("kL", ["do", "fg", "ll", "cq", "dW"], function (a, b, c, e, g) {
        a = b.extend(e, function () {
            e.call(this)
        });
        g.A("TabPanel", a).B("Container").J({
            pagePaddingLeft: "number",
            pagePaddingTop: "number",
            pagePaddingRight: "number",
            pagePaddingBottom: "number",
            pages: "array[TabPanelPage]",
            selectedIndex: "number",
            selectedTabBackgroundColor: "or[color, array[color]]",
            selectedTabBackgroundColorRatios: "array[number]",
            selectedTabBackgroundOpacity: "number",
            selectedTabFontColor: "color",
            selectedTabFontSize: "or[number, size]",
            selectedTabFontStyle: "enum[italic, normal]",
            selectedTabFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            selectedTabTextDecoration: "enum[underline, overline, line-through, none]",
            selectedTabTextShadowBlurRadius: "number",
            selectedTabTextShadowColor: "color",
            selectedTabTextShadowHorizontalLength: "number",
            selectedTabTextShadowOpacity: "number",
            selectedTabTextShadowVerticalLength: "number",
            tabsAlign: "enum[normal, inverse, center]",
            tabsBackgroundColor: "or[color, array[color]]",
            tabsBackgroundColorRatios: "array[number]",
            tabsBackgroundOpacity: "number",
            tabsFontColor: "color",
            tabsFontFamily: "string",
            tabsFontSize: "or[number, size]",
            tabsFontStyle: "enum[italic, normal]",
            tabsFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            tabsGap: "number",
            tabsPadding: "number",
            tabsPosition: "enum[left, top, right, bottom]",
            tabsRollOverBackgroundColor: "or[color, array[color]]",
            tabsRollOverBackgroundColorRatios: "array[number]",
            tabsRollOverBackgroundOpacity: "number",
            tabsRollOverFontColor: "color",
            tabsRollOverFontSize: "or[number, size]",
            tabsRollOverFontStyle: "enum[italic, normal]",
            tabsRollOverFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            tabsRollOverTextDecoration: "enum[underline, overline, line-through, none]",
            tabsRollOverTextShadowBlurRadius: "number",
            tabsRollOverTextShadowColor: "color",
            tabsRollOverTextShadowHorizontalLength: "number",
            tabsRollOverTextShadowOpacity: "number",
            tabsRollOverTextShadowVerticalLength: "number",
            tabsSize: "number",
            tabsTextDecoration: "enum[underline, overline, line-through, none]",
            tabsTextShadowBlurRadius: "number",
            tabsTextShadowColor: "color",
            tabsTextShadowHorizontalLength: "number",
            tabsTextShadowOpacity: "number",
            tabsTextShadowVerticalLength: "number"
        }).gq(["selectedTabFontSize", "tabsFontSize", "tabsRollOverFontSize"]).Xb([c.aa]);
        return a
    });
    define("eA", ["fg", "kS"], function (a, b) {
        var c = a.extend(b, function () {
            b.call(this);
            this.Tc("Page");
            this.set("label", "")
        });
        c.prototype.za = function () {
            b.prototype.za.call(this);
            this.f("visible", m)
        };
        return c
    });
    define("T", ["fg", "eA", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("TabPanelPage", a).B("Container").J({
            label: "string"
        });
        return a
    });
    define("fa", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("TargetPanoramaCameraMovement", b).B("TargetRotationalCameraMovement");
        return b
    });
    define("cF", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("TargetRotationalCameraDisplayMovement", b).B("RotationalCameraMovement").J({
            stereographicFactorSpeed: "number",
            path: "enum[left, right, shortest, longest]",
            targetYaw: "number",
            targetPitch: "number",
            targetHfov: "number",
            targetStereographicFactor: "number"
        });
        return b
    });
    define("gc", ["require", "fg", "jj", "dW"], function (a) {
        var b = a("fg"),
        c = a("jj"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("TiledImageResourceLevel", b).B("ImageResourceLevel").J({
            rowCount: "number",
            colCount: "number"
        });
        return b
    });
    define("hj", ["require", "fg", "dW", "gk"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("gk"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("TripodCapPanoramaOverlay", a).B("CapPanoramaOverlay");
        return a
    });
    define("gn", "require,fg,u,ll,jY,ck,R,c,bh,jn,fm,kS,jF,gP,do".split(","), function (a) {
        var b = a("fg"),
        c = a("u"),
        e = a("ll"),
        g = a("jY"),
        d = a("ck"),
        f = a("R"),
        h = a("c"),
        j = a("bh"),
        p = a("jn"),
        k = a("fm"),
        l = a("kS"),
        q = a("jF"),
        o = a("gP"),
        t = a("do"),
        s = b.extend(l, function () {
            l.call(this);
            this.sa = this.$c = r;
            this.Qt = [];
            this.set("autoRolledOver", n);
            this.set("childrenInteractionEnabled", y);
            this.set("contentOpaque", n);
            this.set("creationPolicy", d.ut);
            this.set("cursor", f.Ue)
        });
        s.prototype.za = function () {
            l.prototype.za.call(this);
            this.f("overflow",
                "hidden");
            this.f("item");
            this.f("thumbnailUrlFunction", this.qR);
            this.f("sourceProperties");
            this.f("labelFunction", this.oR);
            this.f("labelFontFamily");
            this.f("labelFontColor");
            this.f("labelFontSize");
            this.f("labelFontStyle");
            this.f("labelFontWeight");
            this.f("labelGap");
            this.f("labelHorizontalAlign");
            this.f("labelMaxWidth");
            this.f("labelPosition");
            this.f("labelTextDecoration");
            this.f("labelTextShadowColor");
            this.f("labelTextShadowHorizontalLength");
            this.f("labelTextShadowVerticalLength");
            this.f("labelTextShadowBlurRadius");
            this.f("labelTextShadowOpacity");
            this.f("thumbnailBorderRadius");
            this.f("thumbnailOpacity");
            this.f("thumbnailBorderSize");
            this.f("thumbnailBorderColor");
            this.f("thumbnailWidth");
            this.f("thumbnailHeight");
            this.f("thumbnailMaxWidth");
            this.f("thumbnailMaxHeight");
            this.f("thumbnailShadow");
            this.f("thumbnailShadowHorizontalLength");
            this.f("thumbnailShadowVerticalLength");
            this.f("thumbnailShadowBlurRadius");
            this.f("thumbnailShadowSpread");
            this.f("thumbnailShadowColor");
            this.f("thumbnailShadowOpacity");
            this.h("rollOverBackgroundOpacity", k.v, "backgroundOpacity");
            this.h("rollOverBackgroundColor", k.v, "backgroundColor");
            this.h("rollOverBackgroundColorRatios", k.v, "backgroundColorRatios");
            this.h("rollOverBackgroundColorDirection", k.v, "backgroundColorDirection");
            this.h("rollOverBorderRadius", k.v, "borderRadius");
            this.h("rollOverBorderTopRadius", k.v, "borderTopRadius");
            this.h("rollOverBorderBottomRadius", k.v, "borderBottomRadius");
            this.h("rollOverBorderLeftRadius", k.v, "borderLeftRadius");
            this.h("rollOverBorderRightRadius",
                k.v, "borderRightRadius");
            this.h("rollOverBorderTopLeftRadius", k.v, "borderTopLeftRadius");
            this.h("rollOverBorderTopRightRadius", k.v, "borderTopRightRadius");
            this.h("rollOverBorderBottomLeftRadius", k.v, "borderBottomLeftRadius");
            this.h("rollOverBorderBottomRightRadius", k.v, "borderBottomRightRadius");
            this.h("rollOverBorderSize", k.v, "borderSize");
            this.h("rollOverBorderLeftSize", k.v, "borderLeftSize");
            this.h("rollOverBorderTopSize", k.v, "borderTopSize");
            this.h("rollOverBorderRightSize", k.v, "borderRightSize");
            this.h("rollOverBorderBottomSize", k.v, "borderBottomSize");
            this.h("rollOverBorderColor", k.v, "borderColor");
            this.h("rollOverBorderLeftColor", k.v, "borderLeftColor");
            this.h("rollOverBorderTopColor", k.v, "borderTopColor");
            this.h("rollOverBorderRightColor", k.v, "borderRightColor");
            this.h("rollOverBorderBottomColor", k.v, "borderBottomColor");
            this.h("rollOverLabelFontColor", k.v, "labelFontColor");
            this.h("rollOverLabelFontSize", k.v, "labelFontSize");
            this.h("rollOverLabelFontStyle", k.v, "labelFontStyle");
            this.h("rollOverLabelFontWeight",
                k.v, "labelFontWeight");
            this.h("rollOverLabelTextDecoration", k.v, "labelTextDecoration");
            this.h("rollOverLabelTextShadowColor", k.v, "labelTextShadowColor");
            this.h("rollOverLabelTextShadowHorizontalLength", k.v, "labelTextShadowHorizontalLength");
            this.h("rollOverLabelTextShadowVerticalLength", k.v, "labelTextShadowVerticalLength");
            this.h("rollOverLabelTextShadowBlurRadius", k.v, "labelTextShadowBlurRadius");
            this.h("rollOverLabelTextShadowOpacity", k.v, "labelTextShadowOpacity");
            this.h("rollOverOpacity", k.v, "opacity");
            this.h("rollOverPaddingLeft", k.v, "paddingLeft");
            this.h("rollOverPaddingTop", k.v, "paddingTop");
            this.h("rollOverPaddingRight", k.v, "paddingRight");
            this.h("rollOverPaddingBottom", k.v, "paddingBottom");
            this.h("rollOverShadow", k.v, "shadow");
            this.h("rollOverThumbnailOpacity", k.v, "thumbnailOpacity");
            this.h("rollOverThumbnailBorderSize", k.v, "thumbnailBorderSize");
            this.h("rollOverThumbnailBorderColor", k.v, "thumbnailBorderColor");
            this.h("rollOverThumbnailShadow", k.v, "thumbnailShadow");
            this.h("rollOverThumbnailShadowHorizontalLength",
                k.v, "thumbnailShadowHorizontalLength");
            this.h("rollOverThumbnailShadowVerticalLength", k.v, "thumbnailShadowVerticalLength");
            this.h("rollOverThumbnailShadowBlurRadius", k.v, "thumbnailShadowBlurRadius");
            this.h("rollOverThumbnailShadowSpread", k.v, "thumbnailShadowSpread");
            this.h("rollOverThumbnailShadowColor", k.v, "thumbnailShadowColor");
            this.h("rollOverThumbnailShadowOpacity", k.v, "thumbnailShadowOpacity");
            this.h("selectedBackgroundOpacity", k.G, "backgroundOpacity");
            this.h("selectedBackgroundColor", k.G, "backgroundColor");
            this.h("selectedBackgroundColorRatios", k.G, "backgroundColorRatios");
            this.h("selectedBackgroundColorDirection", k.G, "backgroundColorDirection");
            this.h("selectedBorderRadius", k.G, "borderRadius");
            this.h("selectedBorderTopRadius", k.G, "borderTopRadius");
            this.h("selectedBorderBottomRadius", k.G, "borderBottomRadius");
            this.h("selectedBorderLeftRadius", k.G, "borderLeftRadius");
            this.h("selectedBorderRightRadius", k.G, "borderRightRadius");
            this.h("selectedBorderTopLeftRadius", k.G, "borderTopLeftRadius");
            this.h("selectedBorderTopRightRadius",
                k.G, "borderTopRightRadius");
            this.h("selectedBorderBottomLeftRadius", k.G, "borderBottomLeftRadius");
            this.h("selectedBorderBottomRightRadius", k.G, "borderBottomRightRadius");
            this.h("selectedBorderSize", k.G, "borderSize");
            this.h("selectedBorderLeftSize", k.G, "borderLeftSize");
            this.h("selectedBorderTopSize", k.G, "borderTopSize");
            this.h("selectedBorderRightSize", k.G, "borderRightSize");
            this.h("selectedBorderBottomSize", k.G, "borderBottomSize");
            this.h("selectedBorderColor", k.G, "borderColor");
            this.h("selectedBorderLeftColor",
                k.G, "borderLeftColor");
            this.h("selectedBorderTopColor", k.G, "borderTopColor");
            this.h("selectedBorderRightColor", k.G, "borderRightColor");
            this.h("selectedBorderBottomColor", k.G, "borderBottomColor");
            this.h("selectedLabelFontColor", k.G, "labelFontColor");
            this.h("selectedLabelFontSize", k.G, "labelFontSize");
            this.h("selectedLabelFontStyle", k.G, "labelFontStyle");
            this.h("selectedLabelFontWeight", k.G, "labelFontWeight");
            this.h("selectedLabelTextDecoration", k.G, "labelTextDecoration");
            this.h("selectedLabelTextShadowColor",
                k.G, "labelTextShadowColor");
            this.h("selectedLabelTextShadowHorizontalLength", k.G, "labelTextShadowHorizontalLength");
            this.h("selectedLabelTextShadowVerticalLength", k.G, "labelTextShadowVerticalLength");
            this.h("selectedLabelTextShadowBlurRadius", k.G, "labelTextShadowBlurRadius");
            this.h("selectedLabelTextShadowOpacity", k.G, "labelTextShadowOpacity");
            this.h("selectedOpacity", k.G, "opacity");
            this.h("selectedPaddingLeft", k.G, "paddingLeft");
            this.h("selectedPaddingTop", k.G, "paddingTop");
            this.h("selectedPaddingRight",
                k.G, "paddingRight");
            this.h("selectedPaddingBottom", k.G, "paddingBottom");
            this.h("selectedShadow", k.G, "shadow");
            this.h("selectedThumbnailOpacity", k.G, "thumbnailOpacity");
            this.h("selectedThumbnailBorderSize", k.G, "thumbnailBorderSize");
            this.h("selectedThumbnailBorderColor", k.G, "thumbnailBorderColor");
            this.h("selectedThumbnailShadow", k.G, "thumbnailShadow");
            this.h("selectedThumbnailShadowHorizontalLength", k.G, "thumbnailShadowHorizontalLength");
            this.h("selectedThumbnailShadowVerticalLength", k.G, "thumbnailShadowVerticalLength");
            this.h("selectedThumbnailShadowBlurRadius", k.G, "thumbnailShadowBlurRadius");
            this.h("selectedThumbnailShadowSpread", k.G, "thumbnailShadowSpread");
            this.h("selectedThumbnailShadowColor", k.G, "thumbnailShadowColor");
            this.h("selectedThumbnailShadowOpacity", k.G, "thumbnailShadowOpacity")
        };
        s.prototype.VF = function (a) {
            this.ED(a)
        };
        s.prototype.Ga = function () {
            l.prototype.Ga.call(this);
            if (!this.$c) {
                this.$c = new q;
                this.la(this.$c);
                this.$c.set("horizontalAlign", g.Lc);
                this.$c.set("verticalAlign", g.vc);
                this.$c.bind(e.S,
                    this.DW, this)
            }
            if (!this.sa) {
                this.sa = new o;
                this.la(this.sa)
            }
        };
        s.prototype.qR = function (a) {
            if (t(a).isString())
                return a;
            if (a && a.p_)
                return a.p_
        };
        s.prototype.oR = function (a) {
            if (a && a.label)
                return a.label
        };
        s.prototype.ja = function () {
            if (this.n("sourceProperties") || this.n("item")) {
                for (; this.Qt.length; )
                    this.Qt.pop().unwatch();
                var a = this.k("sourceProperties"),
                b = this.k("item");
                a && b && a.forEach(function (a) {
                    this.Qt.push(c.watch(b, a, this.vU, this, n))
                }
                    .bind(this))
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("tooltipFunction")) {
                b =
                    this.k("item");
                a = this.k("tooltipFunction")(b);
                this.set("toolTip", a)
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("thumbnailUrlFunction")) {
                b = this.k("item");
                (a = this.k("thumbnailUrlFunction")(b)) ? this.$c.get("url") != a && this.$c.M({
                    url: a,
                    visible: n,
                    opacity: 0.5
                }) : this.$c.M({
                    url: m,
                    visible: y
                });
                this.q("thumbnailUrlFunction")
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("labelFunction")) {
                b = this.k("item");
                a = this.k("labelFunction")(b);
                this.sa.M({
                    text: a,
                    visible: a ? n : y
                });
                this.q("labelFunction")
            }
            this.q("item");
            this.q("sourceProperties");
            if (this.n("labelPosition") || this.n("listLayout") || this.n("thumbnailWidth") || this.n("thumbnailHeight")) {
                var d = this,
                a = function (a, b) {
                    var c = d.k(a);
                    return c !== m ? c : b
                };
                switch (this.k("labelPosition")) {
                case j.qa:
                case j.Na:
                    this.set("layout", h.Be);
                    this.sa.set("width", "100%");
                    this.$c.M({
                        height: a("thumbnailHeight", "100%"),
                        width: a("thumbnailWidth"),
                        scaleMode: a("thumbnailScaleMode", p.kh)
                    });
                    break;
                default:
                    this.set("layout", h.of);
                    this.sa.set("width", "100%");
                    this.$c.M({
                        height: a("thumbnailHeight",
                            "100%"),
                        width: a("thumbnailWidth", "100%"),
                        scaleMode: a("thumbnailScaleMode", p.kh)
                    })
                }
                switch (this.k("labelPosition")) {
                case j.qa:
                case j.nb:
                    this.Hj(this.sa, 0);
                    break;
                default:
                    this.Hj(this.sa, 1)
                }
                this.q("labelPosition")
            }
            this.ib(s.xP, s.H1, [this], n, n);
            this.ib(s.zP, s.K1, [this.$c], n, n);
            this.ib(s.yP, s.J1, [this.sa], n, n);
            l.prototype.ja.call(this)
        };
        s.prototype.vU = function () {
            this.kv("item")
        };
        s.prototype.iv = function (a) {
            l.prototype.iv.call(this, a)
        };
        s.prototype.DW = function () {
            this.$c.set("opacity", 1)
        };
        s.H1 = {
            labelGap: "gap"
        };
        s.xP = t(s.H1).keys();
        s.J1 = {
            labelFontFamily: "fontFamily",
            labelFontColor: "fontColor",
            labelFontSize: "fontSize",
            labelFontStyle: "fontStyle",
            labelFontWeight: "fontWeight",
            labelHorizontalAlign: "horizontalAlign",
            labelMaxWidth: "maxWidth",
            labelTextDecoration: "textDecoration",
            labelTextShadowColor: "textShadowColor",
            labelTextShadowHorizontalLength: "textShadowHorizontalLength",
            labelTextShadowVerticalLength: "textShadowVerticalLength",
            labelTextShadowBlurRadius: "textShadowBlurRadius",
            labelTextShadowOpacity: "textShadowOpacity"
        };
        s.yP = t(s.J1).keys();
        s.K1 = {
            thumbnailMaxWidth: "maxWidth",
            thumbnailMaxHeight: "maxHeight",
            thumbnailBorderRadius: "borderRadius",
            thumbnailOpacity: "opacity",
            thumbnailBorderSize: "borderSize",
            thumbnailBorderColor: "borderColor",
            thumbnailShadow: "shadow",
            thumbnailShadowHorizontalLength: "shadowHorizontalLength",
            thumbnailShadowVerticalLength: "shadowVerticalLength",
            thumbnailShadowBlurRadius: "shadowBlurRadius",
            thumbnailShadowSpread: "shadowSpread",
            thumbnailShadowColor: "shadowColor",
            thumbnailShadowOpacity: "shadowOpacity"
        };
        s.zP = t(s.K1).keys();
        return s
    });
    define("bB", "fg,bZ,jY,ll,ck,c,fV,bh,kS,gn,do".split(","), function (a, b, c, e, g, d, f, h, j, p, k) {
        var l = a.extend(j, function () {
            j.call(this);
            this.set("contentOpaque", n)
        });
        l.prototype.za = function () {
            j.prototype.za.call(this);
            this.f("layout", d.pq);
            this.f("selectedIndex", -1);
            this.f("items", []);
            this.f("overflow", f.bl);
            this.f("itemHorizontalAlign", c.Lc);
            this.f("itemLabelFontFamily");
            this.f("itemLabelPosition", h.mb);
            this.f("itemLabelFunction");
            this.f("itemLabelMaxWidth");
            this.f("itemLabelGap");
            this.f("itemLabelHorizontalAlign",
                c.Lc);
            this.f("itemSourceProperties");
            this.f("itemThumbnailBorderRadius");
            this.f("itemThumbnailScaleMode");
            this.f("itemThumbnailWidth");
            this.f("itemThumbnailHeight");
            this.f("itemThumbnailMaxWidth");
            this.f("itemThumbnailMaxHeight");
            this.f("itemThumbnailUrlFunction");
            this.f("itemTooltipFunction");
            this.f("itemVerticalAlign", c.vc);
            this.f("itemBackgroundOpacity");
            this.f("itemBackgroundColor");
            this.f("itemBackgroundColorRatios");
            this.f("itemBackgroundColorDirection");
            this.f("itemBorderRadius");
            this.f("itemBorderTopRadius");
            this.f("itemBorderBottomRadius");
            this.f("itemBorderLeftRadius");
            this.f("itemBorderRightRadius");
            this.f("itemBorderTopLeftRadius");
            this.f("itemBorderTopRightRadius");
            this.f("itemBorderBottomLeftRadius");
            this.f("itemBorderBottomRightRadius");
            this.f("itemBorderSize");
            this.f("itemBorderLeftSize");
            this.f("itemBorderTopSize");
            this.f("itemBorderRightSize");
            this.f("itemBorderBottomSize");
            this.f("itemBorderColor");
            this.f("itemBorderLeftColor");
            this.f("itemBorderTopColor");
            this.f("itemBorderRightColor");
            this.f("itemBorderBottomColor");
            this.f("itemLabelFontColor");
            this.f("itemLabelFontSize");
            this.f("itemLabelFontStyle");
            this.f("itemLabelFontWeight");
            this.f("itemLabelMaxWidth");
            this.f("itemLabelTextDecoration");
            this.f("itemLabelTextShadowColor");
            this.f("itemLabelTextShadowHorizontalLength");
            this.f("itemLabelTextShadowVerticalLength");
            this.f("itemLabelTextShadowBlurRadius");
            this.f("itemLabelTextShadowOpacity");
            this.f("itemOpacity");
            this.f("itemPaddingLeft");
            this.f("itemPaddingTop");
            this.f("itemPaddingRight");
            this.f("itemPaddingBottom");
            this.f("itemShadow");
            this.f("itemThumbnailOpacity");
            this.f("itemThumbnailBorderSize");
            this.f("itemThumbnailBorderColor");
            this.f("itemThumbnailShadow");
            this.f("itemThumbnailShadowHorizontalLength");
            this.f("itemThumbnailShadowVerticalLength");
            this.f("itemThumbnailShadowBlurRadius");
            this.f("itemThumbnailShadowSpread");
            this.f("itemThumbnailShadowColor");
            this.f("itemThumbnailShadowOpacity");
            this.f("rollOverItemBackgroundOpacity");
            this.f("rollOverItemBackgroundColor");
            this.f("rollOverItemBackgroundColorRatios");
            this.f("rollOverItemBackgroundColorDirection");
            this.f("rollOverItemBorderRadius");
            this.f("rollOverItemBorderTopRadius");
            this.f("rollOverItemBorderBottomRadius");
            this.f("rollOverItemBorderLeftRadius");
            this.f("rollOverItemBorderRightRadius");
            this.f("rollOverItemBorderTopLeftRadius");
            this.f("rollOverItemBorderTopRightRadius");
            this.f("rollOverItemBorderBottomLeftRadius");
            this.f("rollOverItemBorderBottomRightRadius");
            this.f("rollOverItemBorderSize");
            this.f("rollOverItemBorderLeftSize");
            this.f("rollOverItemBorderTopSize");
            this.f("rollOverItemBorderRightSize");
            this.f("rollOverItemBorderBottomSize");
            this.f("rollOverItemBorderColor");
            this.f("rollOverItemBorderLeftColor");
            this.f("rollOverItemBorderTopColor");
            this.f("rollOverItemBorderRightColor");
            this.f("rollOverItemBorderBottomColor");
            this.f("rollOverItemLabelFontSize");
            this.f("rollOverItemLabelFontStyle");
            this.f("rollOverItemLabelFontWeight");
            this.f("rollOverItemLabelTextDecoration");
            this.f("rollOverItemLabelTextShadowColor");
            this.f("rollOverItemLabelTextShadowHorizontalLength");
            this.f("rollOverItemLabelTextShadowVerticalLength");
            this.f("rollOverItemLabelTextShadowBlurRadius");
            this.f("rollOverItemLabelTextShadowOpacity");
            this.f("rollOverItemOpacity");
            this.f("rollOverItemPaddingLeft");
            this.f("rollOverItemPaddingTop");
            this.f("rollOverItemPaddingRight");
            this.f("rollOverItemPaddingBottom");
            this.f("rollOverItemShadow");
            this.f("rollOverItemThumbnailOpacity");
            this.f("rollOverItemThumbnailBorderSize");
            this.f("rollOverItemThumbnailBorderColor");
            this.f("rollOverItemThumbnailShadow");
            this.f("rollOverItemThumbnailShadowHorizontalLength");
            this.f("rollOverItemThumbnailShadowVerticalLength");
            this.f("rollOverItemThumbnailShadowBlurRadius");
            this.f("rollOverItemThumbnailShadowSpread");
            this.f("rollOverItemThumbnailShadowColor");
            this.f("rollOverItemThumbnailShadowOpacity");
            this.f("selectedItemBackgroundOpacity");
            this.f("selectedItemBackgroundColor");
            this.f("selectedItemBackgroundColorRatios");
            this.f("selectedItemBackgroundColorDirection");
            this.f("selectedItemBorderRadius");
            this.f("selectedItemBorderTopRadius");
            this.f("selectedItemBorderBottomRadius");
            this.f("selectedItemBorderLeftRadius");
            this.f("selectedItemBorderRightRadius");
            this.f("selectedItemBorderTopLeftRadius");
            this.f("selectedItemBorderTopRightRadius");
            this.f("selectedItemBorderBottomLeftRadius");
            this.f("selectedItemBorderBottomRightRadius");
            this.f("selectedItemBorderSize");
            this.f("selectedItemBorderLeftSize");
            this.f("selectedItemBorderTopSize");
            this.f("selectedItemBorderRightSize");
            this.f("selectedItemBorderBottomSize");
            this.f("selectedItemBorderColor");
            this.f("selectedItemBorderLeftColor");
            this.f("selectedItemBorderTopColor");
            this.f("selectedItemBorderRightColor");
            this.f("selectedItemBorderBottomColor");
            this.f("selectedItemLabelFontSize");
            this.f("selectedItemLabelFontStyle");
            this.f("selectedItemLabelFontWeight");
            this.f("selectedItemLabelTextDecoration");
            this.f("selectedItemLabelTextShadowColor");
            this.f("selectedItemLabelTextShadowHorizontalLength");
            this.f("selectedItemLabelTextShadowVerticalLength");
            this.f("selectedItemLabelTextShadowBlurRadius");
            this.f("selectedItemLabelTextShadowOpacity");
            this.f("selectedItemOpacity");
            this.f("selectedItemPaddingLeft");
            this.f("selectedItemPaddingTop");
            this.f("selectedItemPaddingRight");
            this.f("selectedItemPaddingBottom");
            this.f("selectedItemShadow");
            this.f("selectedItemThumbnailOpacity");
            this.f("selectedItemThumbnailBorderSize");
            this.f("selectedItemThumbnailBorderColor");
            this.f("selectedItemThumbnailShadow");
            this.f("selectedItemThumbnailShadowHorizontalLength");
            this.f("selectedItemThumbnailShadowVerticalLength");
            this.f("selectedItemThumbnailShadowBlurRadius");
            this.f("selectedItemThumbnailShadowSpread");
            this.f("selectedItemThumbnailShadowColor");
            this.f("selectedItemThumbnailShadowOpacity")
        };
        l.prototype.SB = function (a) {
            this.Dk = n;
            this.set("selectedIndex", this.sS(a.source))
        };
        l.prototype.sS = function (a) {
            for (var b = this.Pa(), c = 0; c < b.length; c++)
                if (b[c] == a)
                    return c;
            return -1
        };
        l.prototype.ja = function () {
            this.n("layout") && this.k("layout") != d.pq && this.set("layout", d.pq);
            var a = y;
            if (this.n("items")) {
                var a = n,
                c = this.k("items") ||
                    [],
                f = this.Pa();
                if (f.length < c.length) {
                    for (var g = f.length; g < c.length; g++) {
                        f = new p;
                        f.bind(e.U, this.SB, this);
                        this.ib(l.yA, l.Bt, [f], y, y);
                        this.ib(l.zA, l.Ct, [f], y, y);
                        this.la(f)
                    }
                    f = this.Pa()
                }
                if (f.length > c.length) {
                    for (g = c.length; g < f.length; g++) {
                        var h = f[g];
                        h.unbind(e.U, this.SB, this);
                        this.removeChild(h)
                    }
                    f = this.Pa()
                }
                for (g = 0; g < c.length; g++)
                    f[g].set("item", c[g]);
                this.q("items")
            }
            if (this.n("selectedIndex") || a) {
                c = this.Pa();
                a = Math.min(c.length - 1, Math.max(-1, this.k("selectedIndex")));
                this.set("selectedIndex", a);
                for (g =
                        0; g < c.length; g++)
                    c[g].VF(g == a);
                this.q("selectedIndex");
                if (this.Dk) {
                    this.Dk = y;
                    this.trigger(new b(e.aa))
                }
            }
            this.ib(l.yA, l.Bt, this.Pa(), n, y);
            this.ib(l.zA, l.Ct, this.Pa(), n, n);
            j.prototype.ja.call(this)
        };
        l.Bt = {
            layout: "listLayout",
            shadowHorizontalLength: "shadowHorizontalLength",
            shadowVerticalLength: "shadowVerticalLength",
            shadowBlurRadius: "shadowBlurRadius",
            shadowSpread: "shadowSpread",
            shadowOpacity: "shadowOpacity",
            shadowColor: "shadowColor"
        };
        l.Ct = {
            itemHorizontalAlign: "horizontalAlign",
            itemLabelFunction: "labelFunction",
            itemLabelFontFamily: "labelFontFamily",
            itemLabelGap: "labelGap",
            itemLabelHorizontalAlign: "labelHorizontalAlign",
            itemLabelMaxWidth: "labelMaxWidth",
            itemLabelPosition: "labelPosition",
            itemSourceProperties: "sourceProperties",
            itemThumbnailBorderRadius: "thumbnailBorderRadius",
            itemThumbnailScaleMode: "thumbnailScaleMode",
            itemThumbnailHeight: "thumbnailHeight",
            itemThumbnailWidth: "thumbnailWidth",
            itemThumbnailMaxHeight: "thumbnailMaxHeight",
            itemThumbnailMaxWidth: "thumbnailMaxWidth",
            itemThumbnailUrlFunction: "thumbnailUrlFunction",
            itemTooltipFunction: "tooltipFunction",
            itemVerticalAlign: "verticalAlign",
            itemBackgroundOpacity: "backgroundOpacity",
            itemBackgroundColor: "backgroundColor",
            itemBackgroundColorRatios: "backgroundColorRatios",
            itemBackgroundColorDirection: "backgroundColorDirection",
            itemBorderRadius: "borderRadius",
            itemBorderTopRadius: "borderTopRadius",
            itemBorderBottomRadius: "borderBottomRadius",
            itemBorderLeftRadius: "borderLeftRadius",
            itemBorderRightRadius: "borderRightRadius",
            itemBorderTopLeftRadius: "borderTopLeftRadius",
            itemBorderTopRightRadius: "borderTopRightRadius",
            itemBorderBottomLeftRadius: "borderBottomLeftRadius",
            itemBorderBottomRightRadius: "borderBottomRightRadius",
            itemBorderSize: "borderSize",
            itemBorderLeftSize: "borderLeftSize",
            itemBorderTopSize: "borderTopSize",
            itemBorderRightSize: "borderRightSize",
            itemBorderBottomSize: "borderBottomSize",
            itemBorderColor: "borderColor",
            itemBorderLeftColor: "borderLeftColor",
            itemBorderTopColor: "borderTopColor",
            itemBorderRightColor: "borderRightColor",
            itemBorderBottomColor: "borderBottomColor",
            itemLabelFontColor: "labelFontColor",
            itemLabelFontSize: "labelFontSize",
            itemLabelFontStyle: "labelFontStyle",
            itemLabelFontWeight: "labelFontWeight",
            itemLabelTextDecoration: "labelTextDecoration",
            itemLabelTextShadowColor: "labelTextShadowColor",
            itemLabelTextShadowHorizontalLength: "labelTextShadowHorizontalLength",
            itemLabelTextShadowVerticalLength: "labelTextShadowVerticalLength",
            itemLabelTextShadowBlurRadius: "labelTextShadowBlurRadius",
            itemLabelTextShadowOpacity: "labelTextShadowOpacity",
            itemOpacity: "opacity",
            itemPaddingLeft: "paddingLeft",
            itemPaddingTop: "paddingTop",
            itemPaddingRight: "paddingRight",
            itemPaddingBottom: "paddingBottom",
            itemShadow: "shadow",
            itemThumbnailOpacity: "thumbnailOpacity",
            itemThumbnailBorderSize: "thumbnailBorderSize",
            itemThumbnailBorderColor: "thumbnailBorderColor",
            itemThumbnailShadow: "thumbnailShadow",
            itemThumbnailShadowHorizontalLength: "thumbnailShadowHorizontalLength",
            itemThumbnailShadowVerticalLength: "thumbnailShadowVerticalLength",
            itemThumbnailShadowBlurRadius: "thumbnailShadowBlurRadius",
            itemThumbnailShadowSpread: "thumbnailShadowSpread",
            itemThumbnailShadowColor: "thumbnailShadowColor",
            itemThumbnailShadowOpacity: "thumbnailShadowOpacity",
            rollOverItemBackgroundOpacity: "rollOverBackgroundOpacity",
            rollOverItemBackgroundColor: "rollOverBackgroundColor",
            rollOverItemBackgroundColorRatios: "rollOverBackgroundColorRatios",
            rollOverItemBackgroundColorDirection: "rollOverBackgroundColorDirection",
            rollOverItemBorderRadius: "rollOverBorderRadius",
            rollOverItemBorderTopRadius: "rollOverBorderTopRadius",
            rollOverItemBorderBottomRadius: "rollOverBorderBottomRadius",
            rollOverItemBorderLeftRadius: "rollOverBorderLeftRadius",
            rollOverItemBorderRightRadius: "rollOverBorderRightRadius",
            rollOverItemBorderTopLeftRadius: "rollOverBorderTopLeftRadius",
            rollOverItemBorderTopRightRadius: "rollOverBorderTopRightRadius",
            rollOverItemBorderBottomLeftRadius: "rollOverBorderBottomLeftRadius",
            rollOverItemBorderBottomRightRadius: "rollOverBorderBottomRightRadius",
            rollOverItemBorderSize: "rollOverBorderSize",
            rollOverItemBorderLeftSize: "rollOverBorderLeftSize",
            rollOverItemBorderTopSize: "rollOverBorderTopSize",
            rollOverItemBorderRightSize: "rollOverBorderRightSize",
            rollOverItemBorderBottomSize: "rollOverBorderBottomSize",
            rollOverItemBorderColor: "rollOverBorderColor",
            rollOverItemBorderLeftColor: "rollOverBorderLeftColor",
            rollOverItemBorderTopColor: "rollOverBorderTopColor",
            rollOverItemBorderRightColor: "rollOverBorderRightColor",
            rollOverItemBorderBottomColor: "rollOverBorderBottomColor",
            rollOverItemLabelFontColor: "rollOverLabelFontColor",
            rollOverItemLabelFontSize: "rollOverLabelFontSize",
            rollOverItemLabelFontStyle: "rollOverLabelFontStyle",
            rollOverItemLabelFontWeight: "rollOverLabelFontWeight",
            rollOverItemLabelTextDecoration: "rollOverLabelTextDecoration",
            rollOverItemLabelTextShadowColor: "rollOverLabelTextShadowColor",
            rollOverItemLabelTextShadowHorizontalLength: "rollOverLabelTextShadowHorizontalLength",
            rollOverItemLabelTextShadowVerticalLength: "rollOverLabelTextShadowVerticalLength",
            rollOverItemLabelTextShadowBlurRadius: "rollOverLabelTextShadowBlurRadius",
            rollOverItemLabelTextShadowOpacity: "rollOverLabelTextShadowOpacity",
            rollOverItemOpacity: "rollOverOpacity",
            rollOverItemPaddingLeft: "rollOverPaddingLeft",
            rollOverItemPaddingTop: "rollOverPaddingTop",
            rollOverItemPaddingRight: "rollOverPaddingRight",
            rollOverItemPaddingBottom: "rollOverPaddingBottom",
            rollOverItemShadow: "rollOverShadow",
            rollOverItemThumbnailOpacity: "rollOverThumbnailOpacity",
            rollOverItemThumbnailBorderSize: "rollOverThumbnailBorderSize",
            rollOverItemThumbnailBorderColor: "rollOverThumbnailBorderColor",
            rollOverItemThumbnailShadow: "rollOverThumbnailShadow",
            rollOverItemThumbnailShadowHorizontalLength: "rollOverThumbnailShadowHorizontalLength",
            rollOverItemThumbnailShadowVerticalLength: "rollOverThumbnailShadowVerticalLength",
            rollOverItemThumbnailShadowBlurRadius: "rollOverThumbnailShadowBlurRadius",
            rollOverItemThumbnailShadowSpread: "rollOverThumbnailShadowSpread",
            rollOverItemThumbnailShadowColor: "rollOverThumbnailShadowColor",
            rollOverItemThumbnailShadowOpacity: "rollOverThumbnailShadowOpacity",
            selectedItemBackgroundOpacity: "selectedBackgroundOpacity",
            selectedItemBackgroundColor: "selectedBackgroundColor",
            selectedItemBackgroundColorRatios: "selectedBackgroundColorRatios",
            selectedItemBackgroundColorDirection: "selectedBackgroundColorDirection",
            selectedItemBorderRadius: "selectedBorderRadius",
            selectedItemBorderTopRadius: "selectedBorderTopRadius",
            selectedItemBorderBottomRadius: "selectedBorderBottomRadius",
            selectedItemBorderLeftRadius: "selectedBorderLeftRadius",
            selectedItemBorderRightRadius: "selectedBorderRightRadius",
            selectedItemBorderTopLeftRadius: "selectedBorderTopLeftRadius",
            selectedItemBorderTopRightRadius: "selectedBorderTopRightRadius",
            selectedItemBorderBottomLeftRadius: "selectedBorderBottomLeftRadius",
            selectedItemBorderBottomRightRadius: "selectedBorderBottomRightRadius",
            selectedItemBorderSize: "selectedBorderSize",
            selectedItemBorderLeftSize: "selectedBorderLeftSize",
            selectedItemBorderTopSize: "selectedBorderTopSize",
            selectedItemBorderRightSize: "selectedBorderRightSize",
            selectedItemBorderBottomSize: "selectedBorderBottomSize",
            selectedItemBorderColor: "selectedBorderColor",
            selectedItemBorderLeftColor: "selectedBorderLeftColor",
            selectedItemBorderTopColor: "selectedBorderTopColor",
            selectedItemBorderRightColor: "selectedBorderRightColor",
            selectedItemBorderBottomColor: "selectedBorderBottomColor",
            selectedItemLabelFontColor: "selectedLabelFontColor",
            selectedItemLabelFontSize: "selectedLabelFontSize",
            selectedItemLabelFontStyle: "selectedLabelFontStyle",
            selectedItemLabelFontWeight: "selectedLabelFontWeight",
            selectedItemLabelTextDecoration: "selectedLabelTextDecoration",
            selectedItemLabelTextShadowColor: "selectedLabelTextShadowColor",
            selectedItemLabelTextShadowHorizontalLength: "selectedLabelTextShadowHorizontalLength",
            selectedItemLabelTextShadowVerticalLength: "selectedLabelTextShadowVerticalLength",
            selectedItemLabelTextShadowBlurRadius: "selectedLabelTextShadowBlurRadius",
            selectedItemLabelTextShadowOpacity: "selectedLabelTextShadowOpacity",
            selectedItemOpacity: "selectedOpacity",
            selectedItemPaddingLeft: "selectedPaddingLeft",
            selectedItemPaddingTop: "selectedPaddingTop",
            selectedItemPaddingRight: "selectedPaddingRight",
            selectedItemPaddingBottom: "selectedPaddingBottom",
            selectedItemShadow: "selectedShadow",
            selectedItemThumbnailOpacity: "selectedThumbnailOpacity",
            selectedItemThumbnailBorderSize: "selectedThumbnailBorderSize",
            selectedItemThumbnailBorderColor: "selectedThumbnailBorderColor",
            selectedItemThumbnailShadow: "selectedThumbnailShadow",
            selectedItemThumbnailShadowHorizontalLength: "selectedThumbnailShadowHorizontalLength",
            selectedItemThumbnailShadowVerticalLength: "selectedThumbnailShadowVerticalLength",
            selectedItemThumbnailShadowBlurRadius: "selectedThumbnailShadowBlurRadius",
            selectedItemThumbnailShadowSpread: "selectedThumbnailShadowSpread",
            selectedItemThumbnailShadowColor: "selectedThumbnailShadowColor",
            selectedItemThumbnailShadowOpacity: "selectedThumbnailShadowOpacity",
            toolTipBackgroundColor: "toolTipBackgroundColor",
            toolTipBackgroundOpacity: "toolTipBackgroundOpacity",
            toolTipBorderRadius: "toolTipBorderRadius",
            toolTipBorderColor: "toolTipBorderColor",
            toolTipBorderSize: "toolTipBorderSize",
            toolTipDisplayTime: "toolTipDisplayTime",
            toolTipFontFamily: "toolTipFontFamily",
            toolTipFontSize: "toolTipFontSize",
            toolTipFontColor: "toolTipFontColor",
            toolTipFontWeight: "toolTipFontWeight",
            toolTipFontStyle: "toolTipFontStyle",
            toolTipPaddingBottom: "toolTipPaddingBottom",
            toolTipPaddingLeft: "toolTipPaddingLeft",
            toolTipPaddingTop: "toolTipPaddingTop",
            toolTipPaddingRight: "toolTipPaddingRight",
            toolTipShadowBlurRadius: "toolTipShadowBlurRadius",
            toolTipShadowColor: "toolTipShadowColor",
            toolTipShadowHorizontalLength: "toolTipShadowHorizontalLength",
            toolTipShadowOpacity: "toolTipShadowOpacity",
            toolTipShadowSpread: "toolTipShadowSpread",
            toolTipShadowVerticalLength: "toolTipShadowVerticalLength",
            toolTipOpacity: "toolTipOpacity",
            toolTipTextShadowBlurRadius: "toolTipTextShadowBlurRadius",
            toolTipTextShadowColor: "toolTipTextShadowColor",
            toolTipTextShadowHorizontalLength: "toolTipTextShadowHorizontalLength",
            toolTipTextShadowOpacity: "toolTipTextShadowOpacity",
            toolTipTextShadowVerticalLength: "toolTipTextShadowVerticalLength"
        };
        l.yA = k(l.Bt).keys();
        l.zA = k(l.Ct).keys();
        return l
    });
    define("hN", "fg,ll,bB,dW,jT,dm,by,do".split(","), function (a, b, c, e, g, d, f) {
        a = a.extend(c, function () {
            c.call(this);
            this.Yb = r;
            this.set("itemMode", "normal");
            this.sl = y;
            this.RA = new g(this, "buttonScrollDown", d.Wc);
            this.RA.bind(b.U, this.qea, this);
            this.SA = new g(this, "buttonScrollLeft", d.Wc);
            this.SA.bind(b.U, this.scrollLeft, this);
            this.TA = new g(this, "buttonScrollRight", d.Wc);
            this.TA.bind(b.U, this.rea, this);
            this.UA = new g(this, "buttonScrollUp", d.Wc);
            this.UA.bind(b.U, this.sea, this);
            this.bind(b.aa, this.Foa, this)
        });
        e.A("ThumbnailGrid", a).B("UIComponent").J({
            buttonScrollDown: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonScrollUp: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            contentOpaque: "bool",
            gap: "number",
            hideScrollButtons: "bool",
            horizontalAlign: "enum[center, left, right]",
            itemMode: "enum[normal, thumbnail-only, label-only]",
            itemBackgroundColor: "or[array[color], color]",
            itemBackgroundColorDirection: "enum[horizontal, vertical]",
            itemBackgroundColorRatios: "array[number]",
            itemBackgroundOpacity: "number",
            itemBorderBottomColor: "color",
            itemBorderBottomLeftRadius: "number",
            itemBorderBottomRadius: "number",
            itemBorderBottomRightRadius: "number",
            itemBorderBottomSize: "number",
            itemBorderColor: "color",
            itemBorderLeftColor: "color",
            itemBorderLeftRadius: "number",
            itemBorderLeftSize: "number",
            itemBorderRadius: "number",
            itemBorderRightColor: "color",
            itemBorderRightRadius: "number",
            itemBorderRightSize: "number",
            itemBorderSize: "number",
            itemBorderTopColor: "color",
            itemBorderTopLeftRadius: "number",
            itemBorderTopRadius: "number",
            itemBorderTopRightRadius: "number",
            itemBorderTopSize: "number",
            itemHeight: "or[number, percent]",
            itemHorizontalAlign: "enum[center, left, right]",
            itemLabelFontColor: "color",
            itemLabelFontFamily: "string",
            itemLabelFontSize: "or[number, size]",
            itemLabelFontStyle: "enum[italic, normal]",
            itemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            itemLabelGap: "number",
            itemLabelHorizontalAlign: "enum[center, left, right]",
            itemLabelMaxWidth: "number",
            itemLabelPosition: "enum[left, top, right, bottom]",
            itemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            itemLabelTextShadowBlurRadius: "number",
            itemLabelTextShadowColor: "color",
            itemLabelTextShadowHorizontalLength: "number",
            itemLabelTextShadowOpacity: "number",
            itemLabelTextShadowVerticalLength: "number",
            itemMaxHeight: "number",
            itemMaxWidth: "number",
            itemMinHeight: "number",
            itemMinWidth: "number",
            itemOpacity: "number",
            itemPaddingBottom: "number",
            itemPaddingLeft: "number",
            itemPaddingTop: "number",
            itemPaddingRight: "number",
            itemShadow: "bool",
            itemThumbnailBorderColor: "color",
            itemThumbnailBorderRadius: "number",
            itemThumbnailBorderSize: "number",
            itemThumbnailScaleMode: "enum[none, fill, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            itemThumbnailHeight: "number",
            itemThumbnailWidth: "number",
            itemThumbnailMaxHeight: "number",
            itemThumbnailMaxWidth: "number",
            itemThumbnailOpacity: "number",
            itemThumbnailShadow: "bool",
            itemThumbnailShadowBlurRadius: "number",
            itemThumbnailShadowColor: "color",
            itemThumbnailShadowHorizontalLength: "number",
            itemThumbnailShadowOpacity: "number",
            itemThumbnailShadowSpread: "number",
            itemThumbnailShadowVerticalLength: "number",
            itemWidth: "or[number, percent]",
            itemVerticalAlign: "enum[bottom, middle, top]",
            overflow: "enum[scroll, hidden, visible]",
            playList: "PlayList",
            rollOverItemBackgroundColor: "or[array[color], color]",
            rollOverItemBackgroundColorDirection: "enum[horizontal, vertical]",
            rollOverItemBackgroundColorRatios: "array[number]",
            rollOverItemBackgroundOpacity: "number",
            rollOverItemBorderBottomColor: "color",
            rollOverItemBorderBottomLeftRadius: "number",
            rollOverItemBorderBottomRadius: "number",
            rollOverItemBorderBottomRightRadius: "number",
            rollOverItemBorderBottomSize: "number",
            rollOverItemBorderColor: "color",
            rollOverItemBorderLeftColor: "color",
            rollOverItemBorderLeftRadius: "number",
            rollOverItemBorderLeftSize: "number",
            rollOverItemBorderRadius: "number",
            rollOverItemBorderRightColor: "color",
            rollOverItemBorderRightRadius: "number",
            rollOverItemBorderRightSize: "number",
            rollOverItemBorderSize: "number",
            rollOverItemBorderTopColor: "color",
            rollOverItemBorderTopLeftRadius: "number",
            rollOverItemBorderTopRadius: "number",
            rollOverItemBorderTopRightRadius: "number",
            rollOverItemBorderTopSize: "number",
            rollOverItemLabelFontColor: "color",
            rollOverItemLabelFontSize: "or[number, size]",
            rollOverItemLabelFontStyle: "enum[italic, normal]",
            rollOverItemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            rollOverItemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            rollOverItemLabelTextShadowBlurRadius: "number",
            rollOverItemLabelTextShadowColor: "color",
            rollOverItemLabelTextShadowHorizontalLength: "number",
            rollOverItemLabelTextShadowOpacity: "number",
            rollOverItemLabelTextShadowVerticalLength: "number",
            rollOverItemOpacity: "number",
            rollOverItemPaddingBottom: "number",
            rollOverItemPaddingLeft: "number",
            rollOverItemPaddingRight: "number",
            rollOverItemPaddingTop: "number",
            rollOverItemShadow: "bool",
            rollOverItemThumbnailBorderColor: "color",
            rollOverItemThumbnailBorderSize: "number",
            rollOverItemThumbnailOpacity: "number",
            rollOverItemThumbnailShadow: "bool",
            rollOverItemThumbnailShadowBlurRadius: "number",
            rollOverItemThumbnailShadowColor: "color",
            rollOverItemThumbnailShadowHorizontalLength: "number",
            rollOverItemThumbnailShadowOpacity: "number",
            rollOverItemThumbnailShadowSpread: "number",
            rollOverItemThumbnailShadowVerticalLength: "number",
            scrollBarColor: "color",
            scrollBarWidth: "number",
            scrollBarMargin: "number",
            scrollBarHorizontalMargin: "number",
            scrollBarVerticalMargin: "number",
            scrollBarOpacity: "number",
            scrollBarVisible: "enum[rollOver, always]",
            selectedItemBackgroundColor: "or[array[color], color]",
            selectedItemBackgroundColorDirection: "enum[horizontal, vertical]",
            selectedItemBackgroundColorRatios: "array[number]",
            selectedItemBackgroundOpacity: "number",
            selectedItemBorderBottomColor: "color",
            selectedItemBorderBottomLeftRadius: "number",
            selectedItemBorderBottomRadius: "number",
            selectedItemBorderBottomRightRadius: "number",
            selectedItemBorderBottomSize: "number",
            selectedItemBorderColor: "color",
            selectedItemBorderLeftColor: "color",
            selectedItemBorderLeftRadius: "number",
            selectedItemBorderLeftSize: "number",
            selectedItemBorderRadius: "number",
            selectedItemBorderRightRadius: "number",
            selectedItemBorderRightSize: "number",
            selectedItemBorderSize: "number",
            selectedItemBorderTopLeftRadius: "number",
            selectedItemBorderTopRadius: "number",
            selectedItemBorderTopRightRadius: "number",
            selectedItemBorderTopSize: "number",
            selectedItemBorderTopColor: "color",
            selectedItemBorderRightColor: "color",
            selectedItemLabelFontColor: "color",
            selectedItemLabelFontSize: "or[number, size]",
            selectedItemLabelFontStyle: "enum[italic, normal]",
            selectedItemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            selectedItemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            selectedItemLabelTextShadowBlurRadius: "number",
            selectedItemLabelTextShadowColor: "color",
            selectedItemLabelTextShadowHorizontalLength: "number",
            selectedItemLabelTextShadowOpacity: "number",
            selectedItemLabelTextShadowVerticalLength: "number",
            selectedItemOpacity: "number",
            selectedItemPaddingBottom: "number",
            selectedItemPaddingLeft: "number",
            selectedItemPaddingTop: "number",
            selectedItemPaddingRight: "number",
            selectedItemShadow: "bool",
            selectedItemThumbnailBorderSize: "number",
            selectedItemThumbnailBorderColor: "color",
            selectedItemThumbnailOpacity: "number",
            selectedItemThumbnailShadow: "bool",
            selectedItemThumbnailShadowBlurRadius: "number",
            selectedItemThumbnailShadowColor: "color",
            selectedItemThumbnailShadowHorizontalLength: "number",
            selectedItemThumbnailShadowOpacity: "number",
            selectedItemThumbnailShadowSpread: "number",
            selectedItemThumbnailShadowVerticalLength: "number",
            verticalAlign: "enum[bottom, middle, top]"
        }).gq(["itemLabelFontSize",
                "rollOverItemLabelFontSize", "selectedItemLabelFontSize"]).Xb([b.aa]);
        a.prototype.Gi = function () {
            c.prototype.Gi.call(this);
            this.wv()
        };
        a.prototype.Ep = function () {
            c.prototype.Ep.call(this);
            this.wv()
        };
        a.prototype.wv = function () {
            this.RA.set("visible", !this.sl || this.qH());
            this.UA.set("visible", !this.sl || this.tH());
            this.SA.set("visible", !this.sl || this.rH());
            this.TA.set("visible", !this.sl || this.sH())
        };
        a.prototype.set = function (a, b) {
            if (a == "itemMode")
                switch (b) {
                case "thumbnail-only":
                    this.set("itemLabelFunction",
                        this.Po);
                    this.set("itemThumbnailUrlFunction", this.UB);
                    this.set("itemTooltipFunction", this.uu);
                    this.set("itemSourceProperties", ["label", "media.label", "media.thumbnailUrl", "media.flipImageHorizontally"]);
                    break;
                case "label-only":
                    this.set("itemLabelFunction", this.uu);
                    this.set("itemThumbnailUrlFunction", this.Po);
                    this.set("itemTooltipFunction", this.Po);
                    this.set("itemSourceProperties", ["label", "media.label"]);
                    break;
                default:
                    this.set("itemLabelFunction", this.uu);
                    this.set("itemThumbnailUrlFunction", this.UB);
                    this.set("itemTooltipFunction", this.Po);
                    this.set("itemSourceProperties", ["label", "media.label", "media.thumbnailUrl", "media.flipImageHorizontally"])
                }
            else if (a == "playList") {
                this.Yb && this.Yb.unbind("change", this.dp, this);
                if (this.Yb = b) {
                    this.set("items", this.Yb.get("items"));
                    this.set("selectedIndex", this.Yb.get("selectedIndex"));
                    this.Yb.bind("change", this.dp, this, n)
                } else
                    this.set("items", [])
            } else if (a == "hideScrollButtons") {
                this.sl = b;
                this.wv()
            } else
                c.prototype.set.call(this, a, b)
        };
        a.prototype.get = function (a,
            b) {
            switch (a) {
            case "playList":
                return this.Yb;
            default:
                return c.prototype.get.call(this, a, b)
            }
        };
        a.prototype.dp = function () {
            this.set("items", this.Yb.get("items"));
            this.set("selectedIndex", this.Yb.get("selectedIndex"))
        };
        a.prototype.Foa = function () {
            this.Yb && this.Yb.set("selectedIndex", this.get("selectedIndex"))
        };
        a.prototype.Po = D();
        a.prototype.uu = function (a) {
            return a.get("label") || a.get("media").get("label")
        };
        a.prototype.UB = function (a) {
            var a = a.get("media"),
            b = a.get("thumbnailUrl");
            a.get("flipImageHorizontally") &&
            (b = f.mba(b));
            return b
        };
        return a
    });
    define("ie", "require,fg,u,ll,jY,ck,R,c,bh,jn,fm,kS,jF,gP,do".split(","), function (a) {
        var b = a("fg"),
        c = a("u"),
        e = a("ll"),
        g = a("jY"),
        d = a("ck"),
        f = a("R"),
        h = a("c"),
        j = a("bh"),
        p = a("jn"),
        k = a("fm"),
        l = a("kS"),
        q = a("jF"),
        o = a("gP"),
        t = a("do"),
        s = b.extend(l, function () {
            l.call(this);
            this.sa = this.$c = r;
            this.Qt = [];
            this.set("autoRolledOver", n);
            this.set("childrenInteractionEnabled", y);
            this.set("contentOpaque", n);
            this.set("creationPolicy", d.ut);
            this.set("cursor", f.Ue)
        });
        s.prototype.za = function () {
            l.prototype.za.call(this);
            this.f("listLayout");
            this.f("overflow", "hidden");
            this.f("item");
            this.f("thumbnailUrlFunction", this.qR);
            this.f("sourceProperties");
            this.f("labelFunction", this.oR);
            this.f("labelFontFamily");
            this.f("labelFontColor");
            this.f("labelFontSize");
            this.f("labelFontStyle");
            this.f("labelFontWeight");
            this.f("labelGap");
            this.f("labelHorizontalAlign");
            this.f("labelPosition");
            this.f("labelTextDecoration");
            this.f("labelTextShadowColor");
            this.f("labelTextShadowHorizontalLength");
            this.f("labelTextShadowVerticalLength");
            this.f("labelTextShadowBlurRadius");
            this.f("labelTextShadowOpacity");
            this.f("thumbnailBorderRadius");
            this.f("thumbnailOpacity");
            this.f("thumbnailBorderSize");
            this.f("thumbnailBorderColor");
            this.f("thumbnailWidth");
            this.f("thumbnailHeight");
            this.f("thumbnailMaxWidth");
            this.f("thumbnailMaxHeight");
            this.f("thumbnailShadow");
            this.f("thumbnailShadowHorizontalLength");
            this.f("thumbnailShadowVerticalLength");
            this.f("thumbnailShadowBlurRadius");
            this.f("thumbnailShadowSpread");
            this.f("thumbnailShadowColor");
            this.f("thumbnailShadowOpacity");
            this.h("rollOverBackgroundOpacity", k.v, "backgroundOpacity");
            this.h("rollOverBackgroundColor", k.v, "backgroundColor");
            this.h("rollOverBackgroundColorRatios", k.v, "backgroundColorRatios");
            this.h("rollOverBackgroundColorDirection", k.v, "backgroundColorDirection");
            this.h("rollOverBorderRadius", k.v, "borderRadius");
            this.h("rollOverBorderTopRadius", k.v, "borderTopRadius");
            this.h("rollOverBorderBottomRadius", k.v, "borderBottomRadius");
            this.h("rollOverBorderLeftRadius", k.v, "borderLeftRadius");
            this.h("rollOverBorderRightRadius",
                k.v, "borderRightRadius");
            this.h("rollOverBorderTopLeftRadius", k.v, "borderTopLeftRadius");
            this.h("rollOverBorderTopRightRadius", k.v, "borderTopRightRadius");
            this.h("rollOverBorderBottomLeftRadius", k.v, "borderBottomLeftRadius");
            this.h("rollOverBorderBottomRightRadius", k.v, "borderBottomRightRadius");
            this.h("rollOverBorderSize", k.v, "borderSize");
            this.h("rollOverBorderLeftSize", k.v, "borderLeftSize");
            this.h("rollOverBorderTopSize", k.v, "borderTopSize");
            this.h("rollOverBorderRightSize", k.v, "borderRightSize");
            this.h("rollOverBorderBottomSize", k.v, "borderBottomSize");
            this.h("rollOverBorderColor", k.v, "borderColor");
            this.h("rollOverBorderLeftColor", k.v, "borderLeftColor");
            this.h("rollOverBorderTopColor", k.v, "borderTopColor");
            this.h("rollOverBorderRightColor", k.v, "borderRightColor");
            this.h("rollOverBorderBottomColor", k.v, "borderBottomColor");
            this.h("rollOverLabelFontColor", k.v, "labelFontColor");
            this.h("rollOverLabelFontSize", k.v, "labelFontSize");
            this.h("rollOverLabelFontStyle", k.v, "labelFontStyle");
            this.h("rollOverLabelFontWeight",
                k.v, "labelFontWeight");
            this.h("rollOverLabelTextDecoration", k.v, "labelTextDecoration");
            this.h("rollOverLabelTextShadowColor", k.v, "labelTextShadowColor");
            this.h("rollOverLabelTextShadowHorizontalLength", k.v, "labelTextShadowHorizontalLength");
            this.h("rollOverLabelTextShadowVerticalLength", k.v, "labelTextShadowVerticalLength");
            this.h("rollOverLabelTextShadowBlurRadius", k.v, "labelTextShadowBlurRadius");
            this.h("rollOverLabelTextShadowOpacity", k.v, "labelTextShadowOpacity");
            this.h("rollOverOpacity", k.v, "opacity");
            this.h("rollOverPaddingLeft", k.v, "paddingLeft");
            this.h("rollOverPaddingTop", k.v, "paddingTop");
            this.h("rollOverPaddingRight", k.v, "paddingRight");
            this.h("rollOverPaddingBottom", k.v, "paddingBottom");
            this.h("rollOverShadow", k.v, "shadow");
            this.h("rollOverThumbnailOpacity", k.v, "thumbnailOpacity");
            this.h("rollOverThumbnailBorderSize", k.v, "thumbnailBorderSize");
            this.h("rollOverThumbnailBorderColor", k.v, "thumbnailBorderColor");
            this.h("rollOverThumbnailShadow", k.v, "thumbnailShadow");
            this.h("rollOverThumbnailShadowHorizontalLength",
                k.v, "thumbnailShadowHorizontalLength");
            this.h("rollOverThumbnailShadowVerticalLength", k.v, "thumbnailShadowVerticalLength");
            this.h("rollOverThumbnailShadowBlurRadius", k.v, "thumbnailShadowBlurRadius");
            this.h("rollOverThumbnailShadowSpread", k.v, "thumbnailShadowSpread");
            this.h("rollOverThumbnailShadowColor", k.v, "thumbnailShadowColor");
            this.h("rollOverThumbnailShadowOpacity", k.v, "thumbnailShadowOpacity");
            this.h("selectedBackgroundOpacity", k.G, "backgroundOpacity");
            this.h("selectedBackgroundColor", k.G, "backgroundColor");
            this.h("selectedBackgroundColorRatios", k.G, "backgroundColorRatios");
            this.h("selectedBackgroundColorDirection", k.G, "backgroundColorDirection");
            this.h("selectedBorderRadius", k.G, "borderRadius");
            this.h("selectedBorderTopRadius", k.G, "borderTopRadius");
            this.h("selectedBorderBottomRadius", k.G, "borderBottomRadius");
            this.h("selectedBorderLeftRadius", k.G, "borderLeftRadius");
            this.h("selectedBorderRightRadius", k.G, "borderRightRadius");
            this.h("selectedBorderTopLeftRadius", k.G, "borderTopLeftRadius");
            this.h("selectedBorderTopRightRadius",
                k.G, "borderTopRightRadius");
            this.h("selectedBorderBottomLeftRadius", k.G, "borderBottomLeftRadius");
            this.h("selectedBorderBottomRightRadius", k.G, "borderBottomRightRadius");
            this.h("selectedBorderSize", k.G, "borderSize");
            this.h("selectedBorderLeftSize", k.G, "borderLeftSize");
            this.h("selectedBorderTopSize", k.G, "borderTopSize");
            this.h("selectedBorderRightSize", k.G, "borderRightSize");
            this.h("selectedBorderBottomSize", k.G, "borderBottomSize");
            this.h("selectedBorderColor", k.G, "borderColor");
            this.h("selectedBorderLeftColor",
                k.G, "borderLeftColor");
            this.h("selectedBorderTopColor", k.G, "borderTopColor");
            this.h("selectedBorderRightColor", k.G, "borderRightColor");
            this.h("selectedBorderBottomColor", k.G, "borderBottomColor");
            this.h("selectedLabelFontColor", k.G, "labelFontColor");
            this.h("selectedLabelFontSize", k.G, "labelFontSize");
            this.h("selectedLabelFontStyle", k.G, "labelFontStyle");
            this.h("selectedLabelFontWeight", k.G, "labelFontWeight");
            this.h("selectedLabelTextDecoration", k.G, "labelTextDecoration");
            this.h("selectedLabelTextShadowColor",
                k.G, "labelTextShadowColor");
            this.h("selectedLabelTextShadowHorizontalLength", k.G, "labelTextShadowHorizontalLength");
            this.h("selectedLabelTextShadowVerticalLength", k.G, "labelTextShadowVerticalLength");
            this.h("selectedLabelTextShadowBlurRadius", k.G, "labelTextShadowBlurRadius");
            this.h("selectedLabelTextShadowOpacity", k.G, "labelTextShadowOpacity");
            this.h("selectedOpacity", k.G, "opacity");
            this.h("selectedPaddingLeft", k.G, "paddingLeft");
            this.h("selectedPaddingTop", k.G, "paddingTop");
            this.h("selectedPaddingRight",
                k.G, "paddingRight");
            this.h("selectedPaddingBottom", k.G, "paddingBottom");
            this.h("selectedShadow", k.G, "shadow");
            this.h("selectedThumbnailOpacity", k.G, "thumbnailOpacity");
            this.h("selectedThumbnailBorderSize", k.G, "thumbnailBorderSize");
            this.h("selectedThumbnailBorderColor", k.G, "thumbnailBorderColor");
            this.h("selectedThumbnailShadow", k.G, "thumbnailShadow");
            this.h("selectedThumbnailShadowHorizontalLength", k.G, "thumbnailShadowHorizontalLength");
            this.h("selectedThumbnailShadowVerticalLength", k.G, "thumbnailShadowVerticalLength");
            this.h("selectedThumbnailShadowBlurRadius", k.G, "thumbnailShadowBlurRadius");
            this.h("selectedThumbnailShadowSpread", k.G, "thumbnailShadowSpread");
            this.h("selectedThumbnailShadowColor", k.G, "thumbnailShadowColor");
            this.h("selectedThumbnailShadowOpacity", k.G, "thumbnailShadowOpacity")
        };
        s.prototype.VF = function (a) {
            this.ED(a)
        };
        s.prototype.Ga = function () {
            l.prototype.Ga.call(this);
            if (!this.$c) {
                this.$c = new q;
                this.la(this.$c);
                this.$c.set("horizontalAlign", g.Lc);
                this.$c.set("verticalAlign", g.vc);
                this.$c.bind(e.S,
                    this.DW, this)
            }
            if (!this.sa) {
                this.sa = new o;
                this.la(this.sa)
            }
        };
        s.prototype.qR = function (a) {
            if (t(a).isString())
                return a;
            if (a && a.p_)
                return a.p_
        };
        s.prototype.oR = function (a) {
            if (a && a.label)
                return a.label
        };
        s.prototype.ja = function () {
            if (this.n("sourceProperties") || this.n("item")) {
                for (; this.Qt.length; )
                    this.Qt.pop().unwatch();
                var a = this.k("sourceProperties"),
                b = this.k("item");
                a && b && a.forEach(function (a) {
                    this.Qt.push(c.watch(b, a, this.vU, this, n))
                }
                    .bind(this))
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("tooltipFunction")) {
                b =
                    this.k("item");
                a = this.k("tooltipFunction")(b);
                this.set("toolTip", a)
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("thumbnailUrlFunction")) {
                b = this.k("item");
                (a = this.k("thumbnailUrlFunction")(b)) ? this.$c.get("url") != a && this.$c.M({
                    url: a,
                    visible: n,
                    opacity: 0.5
                }) : this.$c.M({
                    url: m,
                    visible: y
                });
                this.q("thumbnailUrlFunction")
            }
            if (this.n("sourceProperties") || this.n("item") || this.n("labelFunction")) {
                b = this.k("item");
                a = this.k("labelFunction")(b);
                this.sa.M({
                    text: a,
                    visible: a ? n : y
                });
                this.q("labelFunction")
            }
            this.q("sourceProperties");
            this.q("item");
            if (this.n("listLayout"))
                switch (this.k("listLayout")) {
                case h.of:
                    this.M({
                        width: "100%",
                        height: m
                    });
                    break;
                default:
                    this.M({
                        height: "100%",
                        width: m
                    })
                }
            if (this.n("labelPosition") || this.n("listLayout") || this.n("thumbnailWidth") || this.n("thumbnailHeight")) {
                var d = this,
                a = function (a, b) {
                    var c = d.k(a);
                    c === m && (c = b);
                    return c
                };
                switch (this.k("labelPosition")) {
                case j.qa:
                case j.Na:
                    this.set("layout", h.Be);
                    this.sa.set("width", "100%");
                    switch (this.k("listLayout")) {
                    case h.of:
                        this.$c.M({
                            height: a("thumbnailHeight"),
                            width: a("thumbnailWidth"),
                            scaleMode: a("thumbnailScaleMode", p.kh)
                        });
                        break;
                    default:
                        this.$c.M({
                            height: a("thumbnailHeight", "100%"),
                            width: a("thumbnailWidth"),
                            scaleMode: a("thumbnailScaleMode", p.kh)
                        })
                    }
                    break;
                default:
                    this.set("layout", h.of);
                    this.sa.set("width", m);
                    switch (this.k("listLayout")) {
                    case h.of:
                        this.$c.M({
                            height: a("thumbnailHeight"),
                            width: a("thumbnailWidth", "100%"),
                            scaleMode: a("thumbnailScaleMode", p.Zk)
                        });
                        break;
                    default:
                        this.$c.M({
                            height: a("thumbnailHeight", "100%"),
                            width: a("thumbnailWidth"),
                            scaleMode: a("thumbnailScaleMode",
                                p.kh)
                        })
                    }
                }
                switch (this.k("labelPosition")) {
                case j.qa:
                case j.nb:
                    this.Hj(this.sa, 0);
                    break;
                default:
                    this.Hj(this.sa, 1)
                }
                this.q("labelPosition")
            }
            this.q("listLayout");
            this.ib(s.xP, s.Yw, [this], n, n);
            this.ib(s.zP, s.Yw, [this.$c], n, n);
            this.ib(s.yP, s.Yw, [this.sa], n, n);
            l.prototype.ja.call(this)
        };
        s.prototype.vU = function () {
            this.kv("item")
        };
        s.prototype.iv = function (a) {
            l.prototype.iv.call(this, a)
        };
        s.prototype.DW = function () {
            this.$c.set("opacity", 1)
        };
        s.xP = ["labelGap"];
        s.zP = ["thumbnailBorderColor", "thumbnailBorderRadius",
            "thumbnailBorderSize", "thumbnailMaxWidth", "thumbnailMaxHeight", "thumbnailOpacity", "thumbnailShadow", "thumbnailShadowHorizontalLength", "thumbnailShadowVerticalLength", "thumbnailShadowBlurRadius", "thumbnailShadowSpread", "thumbnailShadowColor", "thumbnailShadowOpacity"];
        s.yP = ["labelFontFamily", "labelFontColor", "labelFontSize", "labelFontStyle", "labelFontWeight", "labelHorizontalAlign", "labelTextDecoration", "labelTextShadowColor", "labelTextShadowHorizontalLength", "labelTextShadowVerticalLength", "labelTextShadowBlurRadius",
            "labelTextShadowOpacity"];
        s.Yw = {
            labelFontFamily: "fontFamily",
            labelFontColor: "fontColor",
            labelFontSize: "fontSize",
            labelFontStyle: "fontStyle",
            labelFontWeight: "fontWeight",
            labelGap: "gap",
            labelHorizontalAlign: "horizontalAlign",
            labelTextDecoration: "textDecoration",
            labelTextShadowColor: "textShadowColor",
            labelTextShadowHorizontalLength: "textShadowHorizontalLength",
            labelTextShadowVerticalLength: "textShadowVerticalLength",
            labelTextShadowBlurRadius: "textShadowBlurRadius",
            labelTextShadowOpacity: "textShadowOpacity",
            thumbnailMaxWidth: "maxWidth",
            thumbnailMaxHeight: "maxHeight",
            thumbnailBorderRadius: "borderRadius",
            thumbnailOpacity: "opacity",
            thumbnailBorderSize: "borderSize",
            thumbnailBorderColor: "borderColor",
            thumbnailShadow: "shadow",
            thumbnailShadowHorizontalLength: "shadowHorizontalLength",
            thumbnailShadowVerticalLength: "shadowVerticalLength",
            thumbnailShadowBlurRadius: "shadowBlurRadius",
            thumbnailShadowSpread: "shadowSpread",
            thumbnailShadowColor: "shadowColor",
            thumbnailShadowOpacity: "shadowOpacity"
        };
        return s
    });
    define("D", "require,fg,bZ,jY,ll,c,fV,bh,kS,ie,do".split(","), function (a) {
        var b = a("fg"),
        c = a("bZ"),
        e = a("jY"),
        g = a("ll"),
        d = a("c"),
        f = a("fV"),
        h = a("bh"),
        j = a("kS"),
        p = a("ie"),
        a = a("do"),
        k = b.extend(j, function () {
            j.call(this);
            this.set("contentOpaque", n);
            this.bind(g.D("selectedIndex"), this.hqa, this);
            this.bind(g.yb, this.nsa, this)
        });
        k.prototype.za = function () {
            j.prototype.za.call(this);
            this.f("layout", d.Be);
            this.f("selectedIndex", -1);
            this.f("items", []);
            this.f("overflow", f.bl);
            this.f("itemHorizontalAlign", e.Lc);
            this.f("itemLabelFontFamily");
            this.f("itemLabelPosition", h.mb);
            this.f("itemLabelFunction");
            this.f("itemLabelGap");
            this.f("itemLabelHorizontalAlign", e.Lc);
            this.f("itemThumbnailBorderRadius");
            this.f("itemThumbnailScaleMode");
            this.f("itemThumbnailWidth");
            this.f("itemThumbnailHeight");
            this.f("itemThumbnailMaxWidth");
            this.f("itemThumbnailMaxHeight");
            this.f("itemThumbnailUrlFunction");
            this.f("itemTooltipFunction");
            this.f("itemSourceProperties");
            this.f("itemVerticalAlign", e.vc);
            this.f("itemBackgroundOpacity");
            this.f("itemBackgroundColor");
            this.f("itemBackgroundColorRatios");
            this.f("itemBackgroundColorDirection");
            this.f("itemBorderRadius");
            this.f("itemBorderTopRadius");
            this.f("itemBorderBottomRadius");
            this.f("itemBorderLeftRadius");
            this.f("itemBorderRightRadius");
            this.f("itemBorderTopLeftRadius");
            this.f("itemBorderTopRightRadius");
            this.f("itemBorderBottomLeftRadius");
            this.f("itemBorderBottomRightRadius");
            this.f("itemBorderSize");
            this.f("itemBorderLeftSize");
            this.f("itemBorderTopSize");
            this.f("itemBorderRightSize");
            this.f("itemBorderBottomSize");
            this.f("itemBorderColor");
            this.f("itemBorderLeftColor");
            this.f("itemBorderTopColor");
            this.f("itemBorderRightColor");
            this.f("itemBorderBottomColor");
            this.f("itemLabelFontColor");
            this.f("itemLabelFontSize");
            this.f("itemLabelFontStyle");
            this.f("itemLabelFontWeight");
            this.f("itemLabelTextDecoration");
            this.f("itemLabelTextShadowColor");
            this.f("itemLabelTextShadowHorizontalLength");
            this.f("itemLabelTextShadowVerticalLength");
            this.f("itemLabelTextShadowBlurRadius");
            this.f("itemLabelTextShadowOpacity");
            this.f("itemOpacity");
            this.f("itemPaddingLeft");
            this.f("itemPaddingTop");
            this.f("itemPaddingRight");
            this.f("itemPaddingBottom");
            this.f("itemShadow");
            this.f("itemThumbnailOpacity");
            this.f("itemThumbnailBorderSize");
            this.f("itemThumbnailBorderColor");
            this.f("itemThumbnailShadow");
            this.f("itemThumbnailShadowHorizontalLength");
            this.f("itemThumbnailShadowVerticalLength");
            this.f("itemThumbnailShadowBlurRadius");
            this.f("itemThumbnailShadowSpread");
            this.f("itemThumbnailShadowColor");
            this.f("itemThumbnailShadowOpacity");
            this.f("rollOverItemBackgroundOpacity");
            this.f("rollOverItemBackgroundColor");
            this.f("rollOverItemBackgroundColorRatios");
            this.f("rollOverItemBackgroundColorDirection");
            this.f("rollOverItemBorderRadius");
            this.f("rollOverItemBorderTopRadius");
            this.f("rollOverItemBorderBottomRadius");
            this.f("rollOverItemBorderLeftRadius");
            this.f("rollOverItemBorderRightRadius");
            this.f("rollOverItemBorderTopLeftRadius");
            this.f("rollOverItemBorderTopRightRadius");
            this.f("rollOverItemBorderBottomLeftRadius");
            this.f("rollOverItemBorderBottomRightRadius");
            this.f("rollOverItemBorderSize");
            this.f("rollOverItemBorderLeftSize");
            this.f("rollOverItemBorderTopSize");
            this.f("rollOverItemBorderRightSize");
            this.f("rollOverItemBorderBottomSize");
            this.f("rollOverItemBorderColor");
            this.f("rollOverItemBorderLeftColor");
            this.f("rollOverItemBorderTopColor");
            this.f("rollOverItemBorderRightColor");
            this.f("rollOverItemBorderBottomColor");
            this.f("rollOverItemLabelFontSize");
            this.f("rollOverItemLabelFontStyle");
            this.f("rollOverItemLabelFontWeight");
            this.f("rollOverItemLabelTextDecoration");
            this.f("rollOverItemLabelTextShadowColor");
            this.f("rollOverItemLabelTextShadowHorizontalLength");
            this.f("rollOverItemLabelTextShadowVerticalLength");
            this.f("rollOverItemLabelTextShadowBlurRadius");
            this.f("rollOverItemLabelTextShadowOpacity");
            this.f("rollOverItemOpacity");
            this.f("rollOverItemPaddingLeft");
            this.f("rollOverItemPaddingTop");
            this.f("rollOverItemPaddingRight");
            this.f("rollOverItemPaddingBottom");
            this.f("rollOverItemShadow");
            this.f("rollOverItemThumbnailOpacity");
            this.f("rollOverItemThumbnailBorderSize");
            this.f("rollOverItemThumbnailBorderColor");
            this.f("rollOverItemThumbnailShadow");
            this.f("rollOverItemThumbnailShadowHorizontalLength");
            this.f("rollOverItemThumbnailShadowVerticalLength");
            this.f("rollOverItemThumbnailShadowBlurRadius");
            this.f("rollOverItemThumbnailShadowSpread");
            this.f("rollOverItemThumbnailShadowColor");
            this.f("rollOverItemThumbnailShadowOpacity");
            this.f("selectedItemBackgroundOpacity");
            this.f("selectedItemBackgroundColor");
            this.f("selectedItemBackgroundColorRatios");
            this.f("selectedItemBackgroundColorDirection");
            this.f("selectedItemBorderRadius");
            this.f("selectedItemBorderTopRadius");
            this.f("selectedItemBorderBottomRadius");
            this.f("selectedItemBorderLeftRadius");
            this.f("selectedItemBorderRightRadius");
            this.f("selectedItemBorderTopLeftRadius");
            this.f("selectedItemBorderTopRightRadius");
            this.f("selectedItemBorderBottomLeftRadius");
            this.f("selectedItemBorderBottomRightRadius");
            this.f("selectedItemBorderSize");
            this.f("selectedItemBorderLeftSize");
            this.f("selectedItemBorderTopSize");
            this.f("selectedItemBorderRightSize");
            this.f("selectedItemBorderBottomSize");
            this.f("selectedItemBorderColor");
            this.f("selectedItemBorderLeftColor");
            this.f("selectedItemBorderTopColor");
            this.f("selectedItemBorderRightColor");
            this.f("selectedItemBorderBottomColor");
            this.f("selectedItemLabelFontSize");
            this.f("selectedItemLabelFontStyle");
            this.f("selectedItemLabelFontWeight");
            this.f("selectedItemLabelTextDecoration");
            this.f("selectedItemLabelTextShadowColor");
            this.f("selectedItemLabelTextShadowHorizontalLength");
            this.f("selectedItemLabelTextShadowVerticalLength");
            this.f("selectedItemLabelTextShadowBlurRadius");
            this.f("selectedItemLabelTextShadowOpacity");
            this.f("selectedItemOpacity");
            this.f("selectedItemPaddingLeft");
            this.f("selectedItemPaddingTop");
            this.f("selectedItemPaddingRight");
            this.f("selectedItemPaddingBottom");
            this.f("selectedItemShadow");
            this.f("selectedItemThumbnailOpacity");
            this.f("selectedItemThumbnailBorderSize");
            this.f("selectedItemThumbnailBorderColor");
            this.f("selectedItemThumbnailShadow");
            this.f("selectedItemThumbnailShadowHorizontalLength");
            this.f("selectedItemThumbnailShadowVerticalLength");
            this.f("selectedItemThumbnailShadowBlurRadius");
            this.f("selectedItemThumbnailShadowSpread");
            this.f("selectedItemThumbnailShadowColor");
            this.f("selectedItemThumbnailShadowOpacity")
        };
        k.prototype.SB = function (a) {
            this.Dk = n;
            this.set("selectedIndex", this.sS(a.source))
        };
        k.prototype.hqa = function () {
            this.D9()
        };
        k.prototype.nsa = function () {
            this.D9()
        };
        k.prototype.D9 = function () {
            var a = this.get("selectedIndex"),
            b = this.Pa();
            a >= 0 && a < b.length && this.scrollIntoView(b[a])
        };
        k.prototype.sS = function (a) {
            for (var b = this.Pa(),
                c = 0; c < b.length; c++)
                if (b[c] == a)
                    return c;
            return -1
        };
        k.prototype.ja = function () {
            if (this.n("layout")) {
                var a = this.k("layout");
                a != d.of && a != d.Be && this.set("layout", d.Be)
            }
            var b = y;
            if (this.n("items")) {
                var b = n,
                a = this.k("items") || [],
                e = this.Pa();
                if (e.length < a.length) {
                    for (var f = e.length; f < a.length; f++) {
                        e = new p;
                        e.bind(g.U, this.SB, this);
                        this.ib(k.yA, k.Bt, [e], y, y);
                        this.ib(k.zA, k.Ct, [e], y, y);
                        this.la(e)
                    }
                    e = this.Pa()
                }
                if (e.length > a.length) {
                    for (f = a.length; f < e.length; f++) {
                        var h = e[f];
                        h.unbind(g.U, this.SB, this);
                        this.removeChild(h)
                    }
                    e =
                        this.Pa()
                }
                for (f = 0; f < a.length; f++)
                    e[f].set("item", a[f]);
                this.q("items")
            }
            if (this.n("selectedIndex") || b) {
                a = this.Pa();
                b = Math.min(a.length - 1, Math.max(-1, this.k("selectedIndex")));
                this.set("selectedIndex", b);
                for (f = 0; f < a.length; f++)
                    a[f].VF(f == b);
                this.q("selectedIndex");
                if (this.Dk) {
                    this.Dk = y;
                    this.trigger(new c(g.aa))
                }
            }
            this.ib(k.yA, k.Bt, this.Pa(), n, y);
            this.ib(k.zA, k.Ct, this.Pa(), n, n);
            j.prototype.ja.call(this)
        };
        k.Bt = {
            layout: "listLayout",
            shadowHorizontalLength: "shadowHorizontalLength",
            shadowVerticalLength: "shadowVerticalLength",
            shadowBlurRadius: "shadowBlurRadius",
            shadowSpread: "shadowSpread",
            shadowOpacity: "shadowOpacity",
            shadowColor: "shadowColor"
        };
        k.Ct = {
            itemHorizontalAlign: "horizontalAlign",
            itemLabelFunction: "labelFunction",
            itemLabelFontFamily: "labelFontFamily",
            itemLabelGap: "labelGap",
            itemLabelHorizontalAlign: "labelHorizontalAlign",
            itemLabelPosition: "labelPosition",
            itemSourceProperties: "sourceProperties",
            itemThumbnailBorderRadius: "thumbnailBorderRadius",
            itemThumbnailScaleMode: "thumbnailScaleMode",
            itemThumbnailHeight: "thumbnailHeight",
            itemThumbnailWidth: "thumbnailWidth",
            itemThumbnailMaxHeight: "thumbnailMaxHeight",
            itemThumbnailMaxWidth: "thumbnailMaxWidth",
            itemThumbnailUrlFunction: "thumbnailUrlFunction",
            itemTooltipFunction: "tooltipFunction",
            itemVerticalAlign: "verticalAlign",
            itemBackgroundOpacity: "backgroundOpacity",
            itemBackgroundColor: "backgroundColor",
            itemBackgroundColorRatios: "backgroundColorRatios",
            itemBackgroundColorDirection: "backgroundColorDirection",
            itemBorderRadius: "borderRadius",
            itemBorderTopRadius: "borderTopRadius",
            itemBorderBottomRadius: "borderBottomRadius",
            itemBorderLeftRadius: "borderLeftRadius",
            itemBorderRightRadius: "borderRightRadius",
            itemBorderTopLeftRadius: "borderTopLeftRadius",
            itemBorderTopRightRadius: "borderTopRightRadius",
            itemBorderBottomLeftRadius: "borderBottomLeftRadius",
            itemBorderBottomRightRadius: "borderBottomRightRadius",
            itemBorderSize: "borderSize",
            itemBorderLeftSize: "borderLeftSize",
            itemBorderTopSize: "borderTopSize",
            itemBorderRightSize: "borderRightSize",
            itemBorderBottomSize: "borderBottomSize",
            itemBorderColor: "borderColor",
            itemBorderLeftColor: "borderLeftColor",
            itemBorderTopColor: "borderTopColor",
            itemBorderRightColor: "borderRightColor",
            itemBorderBottomColor: "borderBottomColor",
            itemLabelFontColor: "labelFontColor",
            itemLabelFontSize: "labelFontSize",
            itemLabelFontStyle: "labelFontStyle",
            itemLabelFontWeight: "labelFontWeight",
            itemLabelTextDecoration: "labelTextDecoration",
            itemLabelTextShadowColor: "labelTextShadowColor",
            itemLabelTextShadowHorizontalLength: "labelTextShadowHorizontalLength",
            itemLabelTextShadowVerticalLength: "labelTextShadowVerticalLength",
            itemLabelTextShadowBlurRadius: "labelTextShadowBlurRadius",
            itemLabelTextShadowOpacity: "labelTextShadowOpacity",
            itemOpacity: "opacity",
            itemPaddingLeft: "paddingLeft",
            itemPaddingTop: "paddingTop",
            itemPaddingRight: "paddingRight",
            itemPaddingBottom: "paddingBottom",
            itemShadow: "shadow",
            itemThumbnailOpacity: "thumbnailOpacity",
            itemThumbnailBorderSize: "thumbnailBorderSize",
            itemThumbnailBorderColor: "thumbnailBorderColor",
            itemThumbnailShadow: "thumbnailShadow",
            itemThumbnailShadowHorizontalLength: "thumbnailShadowHorizontalLength",
            itemThumbnailShadowVerticalLength: "thumbnailShadowVerticalLength",
            itemThumbnailShadowBlurRadius: "thumbnailShadowBlurRadius",
            itemThumbnailShadowSpread: "thumbnailShadowSpread",
            itemThumbnailShadowColor: "thumbnailShadowColor",
            itemThumbnailShadowOpacity: "thumbnailShadowOpacity",
            rollOverItemBackgroundOpacity: "rollOverBackgroundOpacity",
            rollOverItemBackgroundColor: "rollOverBackgroundColor",
            rollOverItemBackgroundColorRatios: "rollOverBackgroundColorRatios",
            rollOverItemBackgroundColorDirection: "rollOverBackgroundColorDirection",
            rollOverItemBorderRadius: "rollOverBorderRadius",
            rollOverItemBorderTopRadius: "rollOverBorderTopRadius",
            rollOverItemBorderBottomRadius: "rollOverBorderBottomRadius",
            rollOverItemBorderLeftRadius: "rollOverBorderLeftRadius",
            rollOverItemBorderRightRadius: "rollOverBorderRightRadius",
            rollOverItemBorderTopLeftRadius: "rollOverBorderTopLeftRadius",
            rollOverItemBorderTopRightRadius: "rollOverBorderTopRightRadius",
            rollOverItemBorderBottomLeftRadius: "rollOverBorderBottomLeftRadius",
            rollOverItemBorderBottomRightRadius: "rollOverBorderBottomRightRadius",
            rollOverItemBorderSize: "rollOverBorderSize",
            rollOverItemBorderLeftSize: "rollOverBorderLeftSize",
            rollOverItemBorderTopSize: "rollOverBorderTopSize",
            rollOverItemBorderRightSize: "rollOverBorderRightSize",
            rollOverItemBorderBottomSize: "rollOverBorderBottomSize",
            rollOverItemBorderColor: "rollOverBorderColor",
            rollOverItemBorderLeftColor: "rollOverBorderLeftColor",
            rollOverItemBorderTopColor: "rollOverBorderTopColor",
            rollOverItemBorderRightColor: "rollOverBorderRightColor",
            rollOverItemBorderBottomColor: "rollOverBorderBottomColor",
            rollOverItemLabelFontColor: "rollOverLabelFontColor",
            rollOverItemLabelFontSize: "rollOverLabelFontSize",
            rollOverItemLabelFontStyle: "rollOverLabelFontStyle",
            rollOverItemLabelFontWeight: "rollOverLabelFontWeight",
            rollOverItemLabelTextDecoration: "rollOverLabelTextDecoration",
            rollOverItemLabelTextShadowColor: "rollOverLabelTextShadowColor",
            rollOverItemLabelTextShadowHorizontalLength: "rollOverLabelTextShadowHorizontalLength",
            rollOverItemLabelTextShadowVerticalLength: "rollOverLabelTextShadowVerticalLength",
            rollOverItemLabelTextShadowBlurRadius: "rollOverLabelTextShadowBlurRadius",
            rollOverItemLabelTextShadowOpacity: "rollOverLabelTextShadowOpacity",
            rollOverItemOpacity: "rollOverOpacity",
            rollOverItemPaddingLeft: "rollOverPaddingLeft",
            rollOverItemPaddingTop: "rollOverPaddingTop",
            rollOverItemPaddingRight: "rollOverPaddingRight",
            rollOverItemPaddingBottom: "rollOverPaddingBottom",
            rollOverItemShadow: "rollOverShadow",
            rollOverItemThumbnailOpacity: "rollOverThumbnailOpacity",
            rollOverItemThumbnailBorderSize: "rollOverThumbnailBorderSize",
            rollOverItemThumbnailBorderColor: "rollOverThumbnailBorderColor",
            rollOverItemThumbnailShadow: "rollOverThumbnailShadow",
            rollOverItemThumbnailShadowHorizontalLength: "rollOverThumbnailShadowHorizontalLength",
            rollOverItemThumbnailShadowVerticalLength: "rollOverThumbnailShadowVerticalLength",
            rollOverItemThumbnailShadowBlurRadius: "rollOverThumbnailShadowBlurRadius",
            rollOverItemThumbnailShadowSpread: "rollOverThumbnailShadowSpread",
            rollOverItemThumbnailShadowColor: "rollOverThumbnailShadowColor",
            rollOverItemThumbnailShadowOpacity: "rollOverThumbnailShadowOpacity",
            selectedItemBackgroundOpacity: "selectedBackgroundOpacity",
            selectedItemBackgroundColor: "selectedBackgroundColor",
            selectedItemBackgroundColorRatios: "selectedBackgroundColorRatios",
            selectedItemBackgroundColorDirection: "selectedBackgroundColorDirection",
            selectedItemBorderRadius: "selectedBorderRadius",
            selectedItemBorderTopRadius: "selectedBorderTopRadius",
            selectedItemBorderBottomRadius: "selectedBorderBottomRadius",
            selectedItemBorderLeftRadius: "selectedBorderLeftRadius",
            selectedItemBorderRightRadius: "selectedBorderRightRadius",
            selectedItemBorderTopLeftRadius: "selectedBorderTopLeftRadius",
            selectedItemBorderTopRightRadius: "selectedBorderTopRightRadius",
            selectedItemBorderBottomLeftRadius: "selectedBorderBottomLeftRadius",
            selectedItemBorderBottomRightRadius: "selectedBorderBottomRightRadius",
            selectedItemBorderSize: "selectedBorderSize",
            selectedItemBorderLeftSize: "selectedBorderLeftSize",
            selectedItemBorderTopSize: "selectedBorderTopSize",
            selectedItemBorderRightSize: "selectedBorderRightSize",
            selectedItemBorderBottomSize: "selectedBorderBottomSize",
            selectedItemBorderColor: "selectedBorderColor",
            selectedItemBorderLeftColor: "selectedBorderLeftColor",
            selectedItemBorderTopColor: "selectedBorderTopColor",
            selectedItemBorderRightColor: "selectedBorderRightColor",
            selectedItemBorderBottomColor: "selectedBorderBottomColor",
            selectedItemLabelFontColor: "selectedLabelFontColor",
            selectedItemLabelFontSize: "selectedLabelFontSize",
            selectedItemLabelFontStyle: "selectedLabelFontStyle",
            selectedItemLabelFontWeight: "selectedLabelFontWeight",
            selectedItemLabelTextDecoration: "selectedLabelTextDecoration",
            selectedItemLabelTextShadowColor: "selectedLabelTextShadowColor",
            selectedItemLabelTextShadowHorizontalLength: "selectedLabelTextShadowHorizontalLength",
            selectedItemLabelTextShadowVerticalLength: "selectedLabelTextShadowVerticalLength",
            selectedItemLabelTextShadowBlurRadius: "selectedLabelTextShadowBlurRadius",
            selectedItemLabelTextShadowOpacity: "selectedLabelTextShadowOpacity",
            selectedItemOpacity: "selectedOpacity",
            selectedItemPaddingLeft: "selectedPaddingLeft",
            selectedItemPaddingTop: "selectedPaddingTop",
            selectedItemPaddingRight: "selectedPaddingRight",
            selectedItemPaddingBottom: "selectedPaddingBottom",
            selectedItemShadow: "selectedShadow",
            selectedItemThumbnailOpacity: "selectedThumbnailOpacity",
            selectedItemThumbnailBorderSize: "selectedThumbnailBorderSize",
            selectedItemThumbnailBorderColor: "selectedThumbnailBorderColor",
            selectedItemThumbnailShadow: "selectedThumbnailShadow",
            selectedItemThumbnailShadowHorizontalLength: "selectedThumbnailShadowHorizontalLength",
            selectedItemThumbnailShadowVerticalLength: "selectedThumbnailShadowVerticalLength",
            selectedItemThumbnailShadowBlurRadius: "selectedThumbnailShadowBlurRadius",
            selectedItemThumbnailShadowSpread: "selectedThumbnailShadowSpread",
            selectedItemThumbnailShadowColor: "selectedThumbnailShadowColor",
            selectedItemThumbnailShadowOpacity: "selectedThumbnailShadowOpacity",
            toolTipBackgroundColor: "toolTipBackgroundColor",
            toolTipBackgroundOpacity: "toolTipBackgroundOpacity",
            toolTipBorderRadius: "toolTipBorderRadius",
            toolTipBorderColor: "toolTipBorderColor",
            toolTipBorderSize: "toolTipBorderSize",
            toolTipDisplayTime: "toolTipDisplayTime",
            toolTipFontFamily: "toolTipFontFamily",
            toolTipFontSize: "toolTipFontSize",
            toolTipFontColor: "toolTipFontColor",
            toolTipFontWeight: "toolTipFontWeight",
            toolTipFontStyle: "toolTipFontStyle",
            toolTipPaddingBottom: "toolTipPaddingBottom",
            toolTipPaddingLeft: "toolTipPaddingLeft",
            toolTipPaddingTop: "toolTipPaddingTop",
            toolTipPaddingRight: "toolTipPaddingRight",
            toolTipShadowBlurRadius: "toolTipShadowBlurRadius",
            toolTipShadowColor: "toolTipShadowColor",
            toolTipShadowHorizontalLength: "toolTipShadowHorizontalLength",
            toolTipShadowOpacity: "toolTipShadowOpacity",
            toolTipShadowSpread: "toolTipShadowSpread",
            toolTipShadowVerticalLength: "toolTipShadowVerticalLength",
            toolTipOpacity: "toolTipOpacity",
            toolTipTextShadowBlurRadius: "toolTipTextShadowBlurRadius",
            toolTipTextShadowColor: "toolTipTextShadowColor",
            toolTipTextShadowHorizontalLength: "toolTipTextShadowHorizontalLength",
            toolTipTextShadowOpacity: "toolTipTextShadowOpacity",
            toolTipTextShadowVerticalLength: "toolTipTextShadowVerticalLength"
        };
        k.yA = a(k.Bt).keys();
        k.zA = a(k.Ct).keys();
        return k
    });
    define("fI", "fg,ll,D,dW,jT,dm,by,do".split(","), function (a, b, c, e, g, d, f) {
        a = a.extend(c, function () {
            c.call(this);
            this.Yb = r;
            this.set("itemMode", "normal");
            this.sl = y;
            this.RA = new g(this, "buttonScrollDown", d.Wc);
            this.RA.bind(b.U, this.qea, this);
            this.SA = new g(this, "buttonScrollLeft", d.Wc);
            this.SA.bind(b.U, this.scrollLeft, this);
            this.TA = new g(this, "buttonScrollRight", d.Wc);
            this.TA.bind(b.U, this.rea, this);
            this.UA = new g(this, "buttonScrollUp", d.Wc);
            this.UA.bind(b.U, this.sea, this);
            this.bind(b.aa, this.Goa, this)
        });
        e.A("ThumbnailList", a).B("UIComponent").J({
            buttonScrollDown: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonScrollLeft: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonScrollRight: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonScrollUp: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            contentOpaque: "bool",
            gap: "number",
            hideScrollButtons: "bool",
            horizontalAlign: "enum[center, left, right]",
            itemMode: "enum[normal, thumbnail-only, label-only]",
            itemBackgroundColor: "or[array[color], color]",
            itemBackgroundColorDirection: "enum[horizontal, vertical]",
            itemBackgroundColorRatios: "array[number]",
            itemBackgroundOpacity: "number",
            itemBorderBottomColor: "color",
            itemBorderBottomLeftRadius: "number",
            itemBorderBottomRadius: "number",
            itemBorderBottomRightRadius: "number",
            itemBorderBottomSize: "number",
            itemBorderColor: "color",
            itemBorderLeftColor: "color",
            itemBorderLeftRadius: "number",
            itemBorderLeftSize: "number",
            itemBorderRadius: "number",
            itemBorderRightColor: "color",
            itemBorderRightRadius: "number",
            itemBorderRightSize: "number",
            itemBorderSize: "number",
            itemBorderTopColor: "color",
            itemBorderTopLeftRadius: "number",
            itemBorderTopRadius: "number",
            itemBorderTopRightRadius: "number",
            itemBorderTopSize: "number",
            itemHorizontalAlign: "enum[center, left, right]",
            itemLabelFontColor: "color",
            itemLabelFontFamily: "string",
            itemLabelFontSize: "or[number, size]",
            itemLabelFontStyle: "enum[italic, normal]",
            itemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            itemLabelGap: "number",
            itemLabelHorizontalAlign: "enum[center, left, right]",
            itemLabelPosition: "enum[left, top, right, bottom]",
            itemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            itemLabelTextShadowBlurRadius: "number",
            itemLabelTextShadowColor: "color",
            itemLabelTextShadowHorizontalLength: "number",
            itemLabelTextShadowOpacity: "number",
            itemLabelTextShadowVerticalLength: "number",
            itemOpacity: "number",
            itemPaddingBottom: "number",
            itemPaddingLeft: "number",
            itemPaddingTop: "number",
            itemPaddingRight: "number",
            itemShadow: "bool",
            itemThumbnailBorderColor: "color",
            itemThumbnailBorderRadius: "number",
            itemThumbnailBorderSize: "number",
            itemThumbnailScaleMode: "enum[none, fill, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            itemThumbnailHeight: "number",
            itemThumbnailWidth: "number",
            itemThumbnailMaxHeight: "number",
            itemThumbnailMaxWidth: "number",
            itemThumbnailOpacity: "number",
            itemThumbnailShadow: "bool",
            itemThumbnailShadowBlurRadius: "number",
            itemThumbnailShadowColor: "color",
            itemThumbnailShadowHorizontalLength: "number",
            itemThumbnailShadowOpacity: "number",
            itemThumbnailShadowSpread: "number",
            itemThumbnailShadowVerticalLength: "number",
            itemVerticalAlign: "enum[bottom, middle, top]",
            layout: "enum[vertical, horizontal]",
            playList: "PlayList",
            rollOverItemBackgroundColor: "or[array[color], color]",
            rollOverItemBackgroundColorDirection: "enum[horizontal, vertical]",
            rollOverItemBackgroundColorRatios: "array[number]",
            rollOverItemBackgroundOpacity: "number",
            rollOverItemBorderBottomColor: "color",
            rollOverItemBorderBottomLeftRadius: "number",
            rollOverItemBorderBottomRadius: "number",
            rollOverItemBorderBottomRightRadius: "number",
            rollOverItemBorderBottomSize: "number",
            rollOverItemBorderColor: "color",
            rollOverItemBorderLeftColor: "color",
            rollOverItemBorderLeftRadius: "number",
            rollOverItemBorderLeftSize: "number",
            rollOverItemBorderRadius: "number",
            rollOverItemBorderRightColor: "color",
            rollOverItemBorderRightRadius: "number",
            rollOverItemBorderRightSize: "number",
            rollOverItemBorderSize: "number",
            rollOverItemBorderTopColor: "color",
            rollOverItemBorderTopLeftRadius: "number",
            rollOverItemBorderTopRadius: "number",
            rollOverItemBorderTopRightRadius: "number",
            rollOverItemBorderTopSize: "number",
            rollOverItemLabelFontColor: "color",
            rollOverItemLabelFontSize: "or[number, size]",
            rollOverItemLabelFontStyle: "enum[italic, normal]",
            rollOverItemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            rollOverItemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            rollOverItemLabelTextShadowBlurRadius: "number",
            rollOverItemLabelTextShadowColor: "color",
            rollOverItemLabelTextShadowHorizontalLength: "number",
            rollOverItemLabelTextShadowOpacity: "number",
            rollOverItemLabelTextShadowVerticalLength: "number",
            rollOverItemOpacity: "number",
            rollOverItemPaddingBottom: "number",
            rollOverItemPaddingLeft: "number",
            rollOverItemPaddingRight: "number",
            rollOverItemPaddingTop: "number",
            rollOverItemShadow: "bool",
            rollOverItemThumbnailBorderColor: "color",
            rollOverItemThumbnailBorderSize: "number",
            rollOverItemThumbnailOpacity: "number",
            rollOverItemThumbnailShadow: "bool",
            rollOverItemThumbnailShadowBlurRadius: "number",
            rollOverItemThumbnailShadowColor: "color",
            rollOverItemThumbnailShadowHorizontalLength: "number",
            rollOverItemThumbnailShadowOpacity: "number",
            rollOverItemThumbnailShadowSpread: "number",
            rollOverItemThumbnailShadowVerticalLength: "number",
            scrollBarColor: "color",
            scrollBarWidth: "number",
            scrollBarMargin: "number",
            scrollBarHorizontalMargin: "number",
            scrollBarVerticalMargin: "number",
            scrollBarOpacity: "number",
            scrollBarVisible: "enum[rollOver, always]",
            selectedItemBackgroundColor: "or[array[color], color]",
            selectedItemBackgroundColorDirection: "enum[horizontal, vertical]",
            selectedItemBackgroundColorRatios: "array[number]",
            selectedItemBackgroundOpacity: "number",
            selectedItemBorderBottomColor: "color",
            selectedItemBorderBottomLeftRadius: "number",
            selectedItemBorderBottomRadius: "number",
            selectedItemBorderBottomRightRadius: "number",
            selectedItemBorderBottomSize: "number",
            selectedItemBorderColor: "color",
            selectedItemBorderLeftColor: "color",
            selectedItemBorderLeftRadius: "number",
            selectedItemBorderLeftSize: "number",
            selectedItemBorderRadius: "number",
            selectedItemBorderRightRadius: "number",
            selectedItemBorderRightSize: "number",
            selectedItemBorderSize: "number",
            selectedItemBorderTopLeftRadius: "number",
            selectedItemBorderTopRadius: "number",
            selectedItemBorderTopRightRadius: "number",
            selectedItemBorderTopSize: "number",
            selectedItemBorderTopColor: "color",
            selectedItemBorderRightColor: "color",
            selectedItemLabelFontColor: "color",
            selectedItemLabelFontSize: "or[number, size]",
            selectedItemLabelFontStyle: "enum[italic, normal]",
            selectedItemLabelFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            selectedItemLabelTextDecoration: "enum[underline, overline, line-through, none]",
            selectedItemLabelTextShadowBlurRadius: "number",
            selectedItemLabelTextShadowColor: "color",
            selectedItemLabelTextShadowHorizontalLength: "number",
            selectedItemLabelTextShadowOpacity: "number",
            selectedItemLabelTextShadowVerticalLength: "number",
            selectedItemOpacity: "number",
            selectedItemPaddingBottom: "number",
            selectedItemPaddingLeft: "number",
            selectedItemPaddingTop: "number",
            selectedItemPaddingRight: "number",
            selectedItemShadow: "bool",
            selectedItemThumbnailBorderSize: "number",
            selectedItemThumbnailBorderColor: "color",
            selectedItemThumbnailOpacity: "number",
            selectedItemThumbnailShadow: "bool",
            selectedItemThumbnailShadowBlurRadius: "number",
            selectedItemThumbnailShadowColor: "color",
            selectedItemThumbnailShadowHorizontalLength: "number",
            selectedItemThumbnailShadowOpacity: "number",
            selectedItemThumbnailShadowSpread: "number",
            selectedItemThumbnailShadowVerticalLength: "number",
            verticalAlign: "enum[bottom, middle, top]",
            itemLabelFunction: "*"
        }).gq(["itemLabelFontSize",
                "rollOverItemLabelFontSize", "selectedItemLabelFontSize"]).Xb([b.aa]);
        a.prototype.Gi = function () {
            c.prototype.Gi.call(this);
            this.wv()
        };
        a.prototype.Ep = function () {
            c.prototype.Ep.call(this);
            this.wv()
        };
        a.prototype.wv = function () {
            this.RA.set("visible", !this.sl || this.qH());
            this.UA.set("visible", !this.sl || this.tH());
            this.SA.set("visible", !this.sl || this.rH());
            this.TA.set("visible", !this.sl || this.sH())
        };
        a.prototype.set = function (a, b) {
            if (a == "itemMode")
                switch (b) {
                case "thumbnail-only":
                    this.set("itemLabelFunction",
                        this.Po);
                    this.set("itemThumbnailUrlFunction", this.UB);
                    this.set("itemTooltipFunction", this.uu);
                    this.set("itemSourceProperties", ["label", "media.label", "media.thumbnailUrl", "media.flipImageHorizontally"]);
                    break;
                case "label-only":
                    this.set("itemLabelFunction", this.uu);
                    this.set("itemThumbnailUrlFunction", this.Po);
                    this.set("itemTooltipFunction", this.Po);
                    this.set("itemSourceProperties", ["label", "media.label"]);
                    break;
                default:
                    this.set("itemLabelFunction", this.uu);
                    this.set("itemThumbnailUrlFunction", this.UB);
                    this.set("itemTooltipFunction", this.Po);
                    this.set("itemSourceProperties", ["label", "media.label", "media.thumbnailUrl", "media.flipImageHorizontally"])
                }
            else if (a == "playList") {
                this.Yb && this.Yb.unbind("change", this.dp, this);
                if (this.Yb = b) {
                    this.set("items", this.Yb.get("items"));
                    this.Yb.bind("change", this.dp, this)
                } else
                    this.set("items", [])
            } else if (a == "hideScrollButtons") {
                this.sl = b;
                this.wv()
            } else
                c.prototype.set.call(this, a, b)
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playList":
                return this.Yb;
            default:
                return c.prototype.get.call(this,
                    a, b)
            }
        };
        a.prototype.dp = function () {
            this.set("items", this.Yb.get("items"));
            this.set("selectedIndex", this.Yb.get("selectedIndex"))
        };
        a.prototype.Goa = function () {
            this.Yb && this.Yb.set("selectedIndex", this.get("selectedIndex"))
        };
        a.prototype.Po = D();
        a.prototype.uu = function (a) {
            return a.get("label") || a.get("media").get("label")
        };
        a.prototype.UB = function (a) {
            var a = a.get("media"),
            b = a.get("thumbnailUrl");
            a.get("flipImageHorizontally") && (b = f.mba(b));
            return b
        };
        return a
    });
    define("bG", ["fg", "ll", "d", "dW"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this)
        });
        e.A("UIComponent", a).B("Object").J({
            actualHeight: "number",
            actualWidth: "number",
            backgroundColor: "or[array[color], color]",
            backgroundColorDirection: "enum[horizontal, vertical]",
            backgroundColorRatios: "array[number]",
            backgroundImageUrl: "string",
            backgroundOpacity: "number",
            borderBottomColor: "color",
            borderBottomLeftRadius: "number",
            borderBottomRadius: "number",
            borderBottomRightRadius: "number",
            borderBottomSize: "number",
            borderColor: "color",
            borderLeftColor: "color",
            borderLeftRadius: "number",
            borderLeftSize: "number",
            borderRadius: "number",
            borderRightColor: "color",
            borderRightRadius: "number",
            borderRightSize: "number",
            borderSize: "number",
            borderTopColor: "color",
            borderTopLeftRadius: "number",
            borderTopRadius: "number",
            borderTopRightRadius: "number",
            borderTopSize: "number",
            bottom: "or[number, percent]",
            centerX: "number",
            centerY: "number",
            cursor: "enum[default, hand]",
            height: "or[number, percent]",
            hideEffect: "Effect",
            includeInLayout: "bool",
            interactionEnabled: "bool",
            inView: "bool",
            left: "or[number, percent]",
            maxHeight: "number",
            maxWidth: "number",
            minHeight: "number",
            minWidth: "number",
            opacity: "number",
            paddingBottom: "number",
            paddingLeft: "number",
            paddingTop: "number",
            paddingRight: "number",
            propagateClick: "bool",
            right: "or[number, percent]",
            rollOverOpacity: "number",
            showEffect: "Effect",
            shadow: "bool",
            shadowBlurRadius: "number",
            shadowColor: "color",
            shadowHorizontalLength: "number",
            shadowOpacity: "number",
            shadowSpread: "number",
            shadowVerticalLength: "number",
            toolTip: "string",
            toolTipBackgroundColor: "or[color, enum[transparent]]",
            toolTipBackgroundOpacity: "number",
            toolTipBorderRadius: "number",
            toolTipBorderColor: "color",
            toolTipBorderSize: "number",
            toolTipDisplayTime: "number",
            toolTipFollowMouse: "bool",
            toolTipFontFamily: "string",
            toolTipFontSize: "or[number, size]",
            toolTipFontColor: "color",
            toolTipFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            toolTipFontStyle: "enum[italic, normal]",
            toolTipHorizontalAlign: "enum[left, center, right]",
            toolTipPaddingBottom: "number",
            toolTipPaddingLeft: "number",
            toolTipPaddingTop: "number",
            toolTipPaddingRight: "number",
            toolTipShadowBlurRadius: "number",
            toolTipShadowColor: "color",
            toolTipShadowHorizontalLength: "number",
            toolTipShadowOpacity: "number",
            toolTipShadowSpread: "number",
            toolTipShadowVerticalLength: "number",
            toolTipOpacity: "number",
            toolTipTextShadowBlurRadius: "number",
            toolTipTextShadowColor: "color",
            toolTipTextShadowHorizontalLength: "number",
            toolTipTextShadowOpacity: "number",
            toolTipTextShadowVerticalLength: "number",
            top: "or[number, percent]",
            visible: "bool",
            width: "or[number, percent]"
        }).gq(["toolTipFontSize"]).hh(["backgroundImageUrl"]).Hf([b.zd, b.od]).Xb([b.INIT, b.U, b.Mh, b.Kf, b.yb, b.xc, b.Qb, b.c1, b.lP]);
        return a
    });
    define("ew", ["require", "fg", "jd", "ll", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("VideoCue", b).B("Object").J({
            startTime: "number",
            endTime: "number"
        }).Xb([e.Sk, e.Ba]);
        return b
    });
    define("v", "require,fg,ll,dW,jY,jn,du,ew".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("dW"),
        g = a("jY"),
        d = a("jn"),
        f = a("du");
        a("ew");
        a = b.extend(f, function () {
            f.call(this);
            this.Y = m;
            this.set("autoplay", n);
            this.set("blending", 0);
            this.set("mute", y);
            this.set("scaleMode", d.Te);
            this.set("horizontalAlign", g.Lc);
            this.set("verticalAlign", g.vc)
        });
        e.A("Video", a).B("Media").J({
            autoplay: "bool",
            blending: "number",
            chromaColor: "color",
            chromaThreshold: "number",
            chromaSmoothing: "number",
            cues: "array[VideoCue]",
            currentTime: "number",
            duration: "number",
            state: "enum[playing, paused, stopped]",
            height: "number",
            horizontalAlign: "enum[center, left, right]",
            mute: "bool",
            loop: "bool",
            scaleMode: "enum[none, fit_inside, fit_outside, fit_to_width, fit_to_height]",
            verticalAlign: "enum[bottom, middle, top]",
            video: "VideoResource",
            width: "number"
        }).Xb([c.Ba, c.Jf]);
        a.prototype.In = function () {
            this.get("video");
            return []
        };
        return a
    });
    define("ft", ["require", "fg", "ll", "dW", "gC"], function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("dW"),
        g = a("gC"),
        a = b.extend(g, function () {
            g.call(this);
            this.set("autoplay", n)
        });
        e.A("VideoPanorama", a).B("Panorama").J({
            cues: "array[VideoCue]",
            loop: "bool",
            autoplay: "bool"
        }).Xb([c.Ba, c.Jf]);
        return a
    });
    define("hm", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this);
            this.set("hasAudio", n)
        });
        a.A("Video360Resource", b).B("Video360ResourceLevel").J({
            gain: "number",
            hasAudio: "bool",
            levels: "array[Video360ResourceLevel]",
            subtitlesURL: "string"
        }).hh(["subtitlesURL"]);
        b.prototype.get = function (a, b) {
            if (b === m)
                switch (a) {
                case "gain":
                    b = 1
                }
            switch (a) {
            case "levels":
                b = [this];
                break;
            case "subtitlesURL":
            case "gain":
                for (var d = c.prototype.get.call(this, a), f = this.get("levels"),
                    h = 0; f && h < f.length && d === m; h++) {
                    var j = f[h];
                    j != this && (d = j.get(a))
                }
                return d !== m ? d : b
            }
            return c.prototype.get.call(this, a, b)
        };
        return b
    });
    define("cP", "require,fg,do,dW,jz,ft,hm".split(","), function (a) {
        var b = a("fg"),
        c = a("do"),
        e = a("dW"),
        g = a("jz"),
        d = a("ft"),
        f = a("hm"),
        a = b.extend(d, function () {
            d.call(this);
            this.qk = this.fz = this.Ea = m
        });
        e.A("Video360", a).B("VideoPanorama").J({
            video: "or[Video360Resource, array[Video360Resource]]",
            videoStereo: "or[Video360Resource, array[Video360Resource]]"
        });
        a.prototype.set = function (a, b) {
            a == "video" ? this.Qha(b) : a == "videoStereo" ? this.Rha(b) : d.prototype.set.call(this, a, b)
        };
        a.prototype.get = function (a, b) {
            return a ==
            "video" ? this.Ea !== m ? this.Ea : b : a == "videoStereo" ? this.fz !== m ? this.fz : b : d.prototype.get.call(this, a, b)
        };
        a.prototype.Qha = function (a) {
            if (this.Ea != a) {
                this.Ea = a;
                a = d.prototype.get.call(this, "frames") || [];
                if (this.Ea) {
                    a.length == 0 && a.push(new g);
                    a[0].set("sphere", this.F6(this.Ea))
                }
                d.prototype.set.call(this, "frames", a.slice())
            }
        };
        a.prototype.Rha = function (a) {
            if (this.fz != a) {
                this.fz = a;
                a = d.prototype.get.call(this, "frames") || [];
                if (this.fz) {
                    a.length == 0 && a.push(new g);
                    a[0].set("stereoSphere", this.F6(this.fz))
                }
                d.prototype.set.call(this,
                    "frames", a.slice())
            }
        };
        a.prototype.F6 = function (a) {
            if (c.isArray(a)) {
                var b = [];
                c(a).each(function (a) {
                    b = b.concat(a.get("levels") || [a])
                });
                a = new f;
                a.set("levels", b)
            }
            return a
        };
        return a
    });
    define("bx", ["require", "fg", "dW", "kZ"], function (a) {
        var b = a("fg"),
        c = a("dW"),
        e = a("kZ"),
        a = b.extend(e, function () {
            e.call(this)
        });
        c.A("Video360Player", a).B("PanoramaPlayer");
        return a
    });
    define("hH", ["fg", "dW", "cu", "dl"], function (a, b, c, e) {
        a = a.extend(e, function () {
            e.call(this)
        });
        b.A("Video360PlayListItem", a).B("PlayListItem").J({
            media: "Video360",
            camera: "RotationalCamera",
            player: "PanoramaPlayer",
            startTime: "number"
        });
        a.prototype.start = function () {
            e.prototype.start.call(this);
            var a = this.get("player");
            a && (a.bind(c.ne, this.jj, this), a.set("video", this.get("media")), a.set("camera", this.get("camera")), a.set("startTime", this.get("startTime")))
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            a && (a.unbind(c.ne, this.jj, this), a.get("video") == this.get("media") && a.set("video", r));
            e.prototype.stop.call(this)
        };
        a.prototype.jj = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(c.ne, this.jj, this), this.get("player").bind(c.dg, this.Il, this), this.Iv())
        };
        a.prototype.Il = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(c.dg, this.Il, this), this.end())
        };
        return a
    });
    define("le", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("Video360ResourceLevel", b).B("VideoResourceLevel");
        return b
    });
    define("bM", "require,fg,jd,ll,fu,bZ,dW,hW".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("ll"),
        g = a("fu"),
        d = a("bZ"),
        f = a("dW"),
        h = a("hW"),
        a = b.extend(c, function () {
            c.call(this);
            this.Sb = m;
            this.set("enabled", n);
            this.set("interactionEnabled", n);
            this.set("state", g.H);
            this.set("enabledInCardboard", n);
            this.set("enabledInStandard", n);
            this.set("blending", 0);
            this.set("opacity", 1);
            this.set("fadeInDuration", 200);
            this.set("fadeOutDuration", 200)
        });
        a.prototype.play = function () {
            this.set("state", g.P)
        };
        a.prototype.pause =
        function () {
            this.set("state", g.mc)
        };
        a.prototype.stop = function () {
            this.set("state", g.H)
        };
        f.A("VideoPanoramaOverlay", a).B("PanoramaOverlay").J({
            autoplay: "bool",
            blending: "number",
            chromaColor: "color",
            chromaThreshold: "number",
            chromaSmoothing: "number",
            cues: "array[VideoCue]",
            distance: "number",
            displayTooltipInTouchScreens: "bool",
            enabled: "bool",
            enabledInCardboard: "bool",
            enabledInVR: "bool",
            enabledInStandard: "bool",
            fadeInDuration: "number",
            fadeOutDuration: "number",
            interactionEnabled: "bool",
            videoVisibleOnStop: "bool",
            hfov: "number",
            vfov: "number",
            scaleMode: "enum[fill, fit_inside, fit_outside, fit_to_width, fit_to_height, none]",
            image: "ImageResource",
            loop: "bool",
            opacity: "number",
            pitch: "number",
            rotationX: "number",
            rotationY: "number",
            roll: "number",
            state: "enum[stopped, playing, paused]",
            toolTip: "string",
            useHandCursor: "bool",
            video: "VideoResource",
            yaw: "number",
            playbackPositions: "array[PanoramaOverlayPlaybackPosition]"
        }).Xb([e.Ba, e.zd, e.Mh, e.Kf, e.xc, e.Qb, e.od, e.lh, e.Jf, e.gc]).Hf([e.U]).Cg({
            pause: a.prototype.pause,
            play: a.prototype.play,
            stop: a.prototype.stop
        });
        a.prototype.set = function (a, b) {
            var f = y;
            switch (a) {
            case "state":
                var h = this.get("state") || g.H;
                h == g.H && b == g.P && this.trigger(e.lh);
                h != b && this.trigger(new d(e.gc, {
                        oldState: h,
                        state: b
                    }));
                break;
            case "enabledInCardboard":
                this.set("enabledInVR", b);
                break;
            case "distance":
            case "hfov":
            case "opacity":
            case "pitch":
            case "rotationX":
            case "rotationY":
            case "roll":
            case "vfov":
            case "yaw":
            case "playbackPositions":
                this.Sb = m;
                f = n
            }
            c.prototype.set.call(this, a, b);
            f && a != "playbackPositions" && this.trigger(e.D("playbackPositions"))
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "playbackPositions":
                if (this.Sb === m)
                    this.Sb = h.KY(this);
                return this.Sb
            }
            return c.prototype.get.call(this, a, b)
        };
        return a
    });
    define("cG", "require,do,fg,ll,bZ,eO,fu".split(","), function (a) {
        function b(a, b, c) {
            this.time = a;
            this.cue = b;
            this.action = c
        }
        var c = a("do"),
        e = a("fg"),
        g = a("ll"),
        d = a("bZ"),
        f = a("eO"),
        h = a("fu"),
        a = e.extend(f, function (a) {
            f.call(this);
            this.g = a;
            this.Ib = r;
            this.pg = y;
            this.hg = [];
            this.Wi = m;
            this.Nc = []
        });
        a.prototype.clear = function () {
            this.g = r;
            this.St();
            this.hg = [];
            this.Nc = []
        };
        a.prototype.start = function (a) {
            this.end();
            this.QV(a);
            this.UQ();
            this.pW();
            this.Bv()
        };
        a.prototype.QV = function (a) {
            this.St();
            this.Ib = a;
            this.Ib.bind(g.D("currentTime"),
                this.Bv, this, n);
            this.Ib.bind(g.D("state"), this.pW, this, n);
            this.Ib.bind(g.Ba, this.CE, this, n)
        };
        a.prototype.St = function () {
            if (this.Ib) {
                this.Ib.unbind(g.D("currentTime"), this.Bv, this);
                this.Ib.unbind(g.D("state"), this.pW, this);
                this.Ib.unbind(g.Ba, this.CE, this);
                this.Ib = r
            }
        };
        a.prototype.end = function () {
            this.WA();
            this.St();
            this.pg = y
        };
        a.prototype.pW = function (a) {
            a = a != h.H;
            if (this.pg != a)
                (this.pg = a) ? this.jL() : this.WA()
        };
        a.prototype.CE = function () {
            this.Bv()
        };
        a.prototype.jL = function () {
            this.Wi = this.xx = 0
        };
        a.prototype.Bv =
        function () {
            if (this.Ib && this.pg) {
                var a = this.Nc.slice(),
                b = this.Ib.get("currentTime", 0),
                e = b - this.xx;
                if (e < 0) {
                    this.Nc = [];
                    this.Wi = 0
                }
                e = e >= 0 && e < 2;
                this.xx = b;
                var f;
                for (f = this.Wi; f < this.hg.length; f++)
                    if (this.hg[f].time > b)
                        break;
                for (; this.Wi < f; this.Wi++) {
                    b = this.hg[this.Wi];
                    if (b.action == "start") {
                        this.Nc = c(this.Nc).union([b.cue]);
                        e && b.cue.trigger(new d(g.Sk))
                    } else {
                        this.Nc = c(this.Nc).difference([b.cue]);
                        e && b.cue.trigger(new d(g.Ba))
                    }
                }
                (a.length != this.Nc.length || c(a).intersection(this.Nc).length != this.Nc.length) &&
                this.gE()
            }
        };
        a.prototype.WA = function () {
            if (this.Nc.length > 0) {
                this.Nc = [];
                this.gE()
            }
        };
        a.prototype.gE = function () {
            this.Ib.trigger(new d(g.Jf, {
                    activeCues: this.Nc.slice()
                }))
        };
        a.prototype.UQ = function () {
            this.hg = [];
            var a = this.Ib.get("cues", []);
            c(a).each(function (a) {
                this.hg.push(new b(a.get("startTime", 0), a, "start"));
                this.hg.push(new b(a.get("endTime", Number.POSITIVE_INFINITY), a, "end"))
            }, this);
            this.hg.sort(function (a, b) {
                return a.time == b.time ? a.action == b.start ? 0 : a.action == "start" ? -1 : 1 : a.time - b.time
            })
        };
        return a
    });
    define("kB", "require,fg,V,bZ,eO,ll,jn".split(","), function (a) {
        var b = a("fg"),
        c = a("V"),
        e = a("bZ"),
        g = a("eO");
        a("ll");
        a("jn");
        var d = b.extend(g, function (a, b) {
            g.call(this);
            this.C = a;
            this.g = b;
            this.Uu = [];
            this.T = d.pf;
            this.Nf = r;
            this.vR = m;
            this.kg = r;
            this.ve = this.Me = m
        });
        d.prototype.display = function (a, b) {
            this.DQ();
            if (this.kg != a || this.T != d.pf) {
                this.Uu.push({
                    video: a,
                    startTime: b
                });
                this.K7()
            }
        };
        d.prototype.hide = function () {
            this.DQ();
            this.Uu.push({
                video: r,
                startTime: m
            });
            this.K7()
        };
        d.prototype.clear = function () {
            this.T = d.pf;
            this.DQ();
            this.Gpa();
            this.h9();
            this.g = r
        };
        d.prototype.Bi = function (a) {
            if (this.T != d.pf && (this.T == d.Wj || this.T == d.Aq || this.T == d.Dt)) {
                this.ve = this.ve + a;
                a = Math.min(1, this.ve / this.Me);
                if (this.T == d.Wj)
                    this.Nf.set("opacity", a);
                else if (this.T == d.Dt) {
                    this.Nf.set("opacity", Math.min(1, a * 2));
                    this.kg.set("opacity", Math.min(1, (1 - a) * 2))
                } else
                    this.kg.set("opacity", 1 - a);
                this.ve < this.Me ? this.ea() : this.br()
            }
        };
        d.prototype.K7 = function () {
            this.Uu.length > 0 && this.T == d.pf && this.il()
        };
        d.prototype.il = function () {
            this.kg && this.trigger(new e(d.rt, {
                    video: this.kg
                }));
            if (this.C.get("transitionMode", "blending") == "fade_out_fade_in" && this.kg)
                this.Fq();
            else {
                var a = this.Uu.shift();
                this.Nf = a.video;
                this.vR = a.startTime;
                this.Nf ? this.Nf.get("chromaColor") && this.kg ? this.eQ() : this.LA() : this.kg && this.Fq()
            }
        };
        d.prototype.LA = function () {
            this.d2();
            this.ve = 0;
            this.Me = this.C.get("transitionDuration");
            this.T = d.Wj;
            this.ea()
        };
        d.prototype.eQ = function () {
            this.d2();
            this.ve = 0;
            this.Me = this.C.get("transitionDuration") * 2;
            this.T = d.Dt;
            this.ea()
        };
        d.prototype.Fq = function () {
            this.Nf =
                r;
            this.ve = 0;
            this.Me = this.C.get("transitionDuration");
            this.T = d.Aq;
            this.ea()
        };
        d.prototype.br = function () {
            this.h9();
            this.kg = this.Nf;
            this.Nf = r;
            this.T = d.pf;
            this.kg ? this.trigger(new e(d.st, {
                    video: this.kg
                })) : this.Uu.length == 0 && this.trigger(new e(d.P_));
            this.Uu.length != 0 && this.il()
        };
        d.prototype.ea = function () {
            c.Ma(this.Bi, this)
        };
        d.prototype.DQ = function () {
            this.Uu = []
        };
        d.prototype.d2 = function () {
            if (this.Nf) {
                this.Nf.set("opacity", 0);
                this.Nf.set("zIndex", 1);
                this.kg && this.kg.set("zIndex", 0);
                this.Nf.set("currentTime",
                    this.vR || 0);
                this.g.hua(this.Nf);
                this.trigger(new e(d.MO, {
                        video: this.Nf,
                        startTime: this.vR
                    }))
            }
        };
        d.prototype.h9 = function () {
            if (this.kg) {
                this.g.bea(this.kg);
                this.trigger(new e(d.tG, {
                        video: this.kg
                    }));
                this.kg = r
            }
        };
        d.prototype.Gpa = function () {
            if (this.Nf) {
                this.g.bea(this.Nf);
                this.trigger(new e(d.tG, {
                        video: this.Nf
                    }));
                this.Nf = r
            }
        };
        d.pf = "stopped";
        d.Wj = "blending";
        d.Dt = "double blending";
        d.Aq = "disolving";
        d.La = "request frame";
        d.MO = "video added";
        d.tG = "video removed";
        d.st = "video show";
        d.rt = "video hide";
        d.P_ = "all pending videos hidden";
        return d
    });
    define("ha", "require,fg,ll,bZ,eO,fu".split(","), function (a) {
        var b = a("fg"),
        c = a("ll"),
        e = a("bZ"),
        g = a("eO"),
        d = a("fu"),
        f = b.extend(g, function () {
            g.call(this);
            this.Ib = r;
            this.rd = y;
            this.Zt = d.H
        });
        f.prototype.start = function (a) {
            this.end();
            this.QV(a)
        };
        f.prototype.end = function () {
            this.stop();
            this.St()
        };
        f.prototype.clear = function () {
            this.St()
        };
        f.prototype.play = function () {
            this.Ib && this.Ib.set("state", d.P)
        };
        f.prototype.pause = function () {
            this.Ib && this.Ib.set("state", d.mc)
        };
        f.prototype.stop = function () {
            this.Ib && this.Ib.set("state",
                d.H)
        };
        f.prototype.Kd = function (a) {
            this.rd = a;
            this.Ib && this.Ib.set("muted", this.rd)
        };
        f.prototype.setTime = function (a) {
            this.Ib && this.Ib.set("currentTime", a)
        };
        f.prototype.getTime = function () {
            if (this.Ib)
                return this.Ib.get("currentTime")
        };
        f.prototype.QV = function (a) {
            this.St();
            this.Ib = a;
            this.Ib.set("mute", this.rd);
            this.Ib.bind(c.D("state"), this.up, this, n);
            this.Ib.bind(c.D("currentTime"), this.Cv, this, n);
            this.Ib.bind(c.Ba, this.CE, this, n)
        };
        f.prototype.St = function () {
            if (this.Ib) {
                this.Ib.unbind(c.D("state"), this.up,
                    this);
                this.Ib.unbind(c.D("currentTime"), this.Cv, this);
                this.Ib.unbind(c.Ba, this.CE, this);
                this.Ib = r
            }
        };
        f.prototype.Cv = function () {
            this.trigger(new e(f.tt, {
                    video: this.Ib,
                    time: this.Ib.get("currentTime"),
                    duration: this.Ib.get("duration")
                }))
        };
        f.prototype.CE = function () {
            this.trigger(new e(f.nA, {
                    video: this.Ib
                }))
        };
        f.prototype.up = function () {
            var a = this.Ib.get("state");
            if (this.Zt != a) {
                this.Zt = a;
                this.trigger(new e(f.vb, {
                        state: this.Zt
                    }))
            }
        };
        f.vb = "playback state change";
        f.nA = "video end";
        f.tt = "video time change";
        return f
    });
    define("kM", "fg,fu,bZ,eO,cG,kB,ha".split(","), function (a, b, c, e, g, d, f) {
        var h = a.extend(e, function (a, b) {
            e.call(this);
            this.C = a;
            this.g = b;
            this.g.set("visible", y);
            this.ga = new d(this.C, this.g);
            this.ca = new f(this.g);
            this.ol = new g(this.g);
            this.ga.bind(d.rt, this.Il, this, n);
            this.ga.bind(d.st, this.jj, this, n);
            this.ga.bind(d.MO, this.g8, this, n);
            this.ga.bind(d.tG, this.h8, this, n);
            this.ga.bind(d.P_, this.Gna, this, n);
            this.ca.bind(f.vb, this.gd, this, n);
            this.ca.bind(f.nA, this.Qr, this, n);
            this.ca.bind(f.tt, this.SC, this, n)
        });
        h.prototype.clear = function () {
            this.ga.clear();
            this.ca.clear();
            this.ol.clear();
            this.ga.unbind(d.rt, this.Il, this);
            this.ga.unbind(d.st, this.jj, this);
            this.ga.unbind(d.MO, this.g8, this);
            this.ga.unbind(d.tG, this.h8, this);
            this.ca.unbind(f.vb, this.gd, this);
            this.ca.unbind(f.nA, this.Qr, this);
            this.ca.unbind(f.tt, this.SC, this);
            this.C = this.g = this.ol = this.ca = this.ga = r
        };
        h.prototype.pza = function (a, b) {
            this.g.set("visible", n);
            this.ga.display(a, b)
        };
        h.prototype.cq = function () {
            this.ga.hide();
            this.ca.end();
            this.ol.end()
        };
        h.prototype.play = function () {
            this.ca.play()
        };
        h.prototype.stop = function () {
            this.ca.stop()
        };
        h.prototype.pause = function () {
            this.ca.pause()
        };
        h.prototype.Kd = function (a) {
            this.ca.Kd(a)
        };
        h.prototype.setTime = function (a) {
            this.ca.setTime(a)
        };
        h.prototype.getTime = function () {
            return this.ca.getTime()
        };
        h.prototype.g8 = function (a) {
            var b = a.data.video;
            this.ca.start(b, a.data.startTime);
            this.ol.start(b)
        };
        h.prototype.h8 = D();
        h.prototype.jj = function (a) {
            a = a.data.video;
            a.get("autoplay") && a.get("state") != b.P && a.get("state") != b.mc &&
            a.set("state", b.P);
            this.trigger(new c(h.st, {
                    video: a
                }))
        };
        h.prototype.Il = function (a) {
            this.trigger(new c(h.rt, {
                    video: a.data.video
                }))
        };
        h.prototype.Gna = function () {
            this.g.set("visible", y)
        };
        h.prototype.Qr = function (a) {
            this.trigger(new c(h.nA, {
                    video: a.data.video
                }))
        };
        h.prototype.SC = function (a) {
            this.trigger(new c(h.tt, {
                    video: a.data.video,
                    time: a.data.time,
                    duration: a.data.duration
                }))
        };
        h.prototype.gd = function (a) {
            this.trigger(new c(h.vb, {
                    state: a.data.state
                }))
        };
        h.st = "videoShow";
        h.rt = "videoHide";
        h.nA = "videoEnd";
        h.tt =
            "videoTimeChange";
        h.vb = "playbackStateChange";
        return h
    });
    define("iE", "require,fg,ll,bZ,dW,cu,dk,fu,kM,jr".split(","), function (a) {
        var b = a("fg"),
        c = a("ll");
        a("bZ");
        var e = a("dW"),
        g = a("cu"),
        d = a("dk"),
        f = a("fu"),
        h = a("kM"),
        j = a("jr"),
        a = b.extend(d, function () {
            d.call(this, "video");
            this.set("clickAction", "none");
            this.set("displayPlayOverlay", y);
            this.pl = this.ov = this.Cv = this.Df = y;
            this.o = this.g = r;
            this.gb = this.tc = 0;
            this.Ac = b.nm(this.Oe, this)
        });
        e.A("VideoPlayer", a).B("Object").J({
            buttonPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlay: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonPlayPause: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonStop: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            buttonRestart: "or[array[or[BaseButton, IconButton]], or[BaseButton, IconButton]]",
            clickAction: "enum[play_pause, none]",
            displayPlayOverlay: "bool",
            displayPlaybackBar: "bool",
            currentTime: "number",
            state: "enum[stopped, playing, paused]",
            video: "Video",
            viewerArea: "ViewerArea"
        }).Cg({
            seek: function (a) {
                this.js(a)
            },
            play: function () {
                this.Ou()
            },
            pause: function () {
                this.Nu()
            },
            stop: function () {
                this.Or()
            },
            restart: function () {
                this.Nr()
            }
        }).Xb([g.ne, g.dg, c.gc]);
        a.prototype.set = function (a, b) {
            if (this.get(a) != b) {
                switch (a) {
                case "startTime":
                    this.ov = n;
                    this.Ac();
                    break;
                case "video":
                    this.Cv = n;
                    this.Ac();
                    break;
                case "viewerArea":
                    this.Df = n;
                    this.Ac();
                    break;
                case "displayPlaybackBar":
                    this.pl = n;
                    this.Ac()
                }
                d.prototype.set.call(this, a, b)
            }
        };
        a.prototype.get = function (a, b) {
            switch (a) {
            case "currentTime":
                return this.o && this.o.getTime() || 0
            }
            return d.prototype.get.call(this, a, b)
        };
        a.prototype.Oe = function () {
            if (this.Df) {
                this.Df =
                    y;
                this.Ao();
                this.get("viewerArea") && this.xo();
                this.HD(this.get("viewerArea"));
                this.Cv = n
            }
            var a = y;
            if (this.g && (this.Cv || this.ov)) {
                var b = this.get("video"),
                c = this.get("startTime") || 0;
                if (b && !this.g.Ta()) {
                    this.Ac();
                    return
                }
                this.ov = this.Cv = y;
                this.gb = this.tc = 0;
                a = n;
                if (b) {
                    this.tD();
                    this.o.pza(b, c)
                } else
                    this.o.cq()
            }
            if (this.pl) {
                this.pl = y;
                a = n
            }
            a && this.us()
        };
        a.prototype.Ty = function () {
            this.set("video", r)
        };
        a.prototype.xo = function () {
            var a = this.get("application"),
            b = this.get("viewerArea");
            this.g = new j(a, b, this);
            this.g.M({
                left: 0,
                top: 0,
                bottom: 0,
                right: 0
            });
            b.la(this.g);
            b.bind(c.U, this.TC, this, n);
            this.o = new h(b, this.g);
            this.o.bind(h.st, this.jj, this);
            this.o.bind(h.rt, this.Il, this);
            this.o.bind(h.tt, this.SC, this, n);
            this.o.bind(h.vb, this.gd, this);
            a.bind(c.D("mute"), this.CC, this);
            this.o.Kd(a.get("mute", y));
            this.ls(n)
        };
        a.prototype.Ao = function () {
            if (this.g) {
                this.o.unbind(h.st, this.jj, this);
                this.o.unbind(h.rt, this.Il, this);
                this.o.unbind(h.tt, this.SC, this);
                this.o.unbind(h.vb, this.gd, this);
                this.o.clear();
                this.get("application").unbind(c.D("mute"),
                    this.CC, this);
                var a = this.g.getParent();
                a.removeChild(this.g);
                a.unbind(c.U, this.TC, this, n);
                this.g = r;
                this.ls(y)
            }
        };
        a.prototype.CC = function () {
            this.g && this.o.Kd(this.get("application").get("mute", y))
        };
        a.prototype.gd = function (a) {
            a = a.data.state;
            this.g && this.g.tw(this.get("displayPlayOverlay") && a != f.P, this.tc < 0.5);
            this.Zb(a)
        };
        a.prototype.jj = function (a) {
            var b = this.get("viewerArea");
            (this.Rb = b && b.Rb) && this.Rb.bind(c.U, this.UC, this, n);
            this.Vu = y;
            this.iC(a.data.video)
        };
        a.prototype.Il = function (a) {
            this.Rb && this.Rb.unbind(c.U,
                this.UC, this, n);
            this.Rb = r;
            this.hC(a.data.video)
        };
        a.prototype.SC = function (a) {
            this.tc = a.data.time;
            this.gb = a.data.duration;
            this.us()
        };
        a.prototype.TC = function () {
            if (this.Vu)
                this.Vu = y;
            else
                switch (this.get("clickAction")) {
                case "play_pause":
                    this.get("state") != f.P ? this.o.play() : this.o.pause()
                }
        };
        a.prototype.UC = function () {
            this.Vu = n
        };
        a.prototype.eD = function (a) {
            this.js(a.data.position)
        };
        a.prototype.Rg = function () {
            this.o.play()
        };
        a.prototype.vj = function () {
            this.o.stop()
        };
        a.prototype.rk = function () {
            this.o.pause()
        };
        a.prototype.js = function (a) {
            this.o && this.o.setTime(a)
        };
        a.prototype.us = function () {
            if (this.g) {
                var a = this.g.getParent();
                this.gb > 0 && this.get("displayPlaybackBar") ? a.M({
                    playbackBarPosition: this.tc,
                    playbackBarDuration: this.gb,
                    playbackBarVisible: n
                }) : a.set("playbackBarVisible", y)
            }
        };
        return a
    });
    define("e", ["fg", "dW", "cu", "dl"], function (a, b, c, e) {
        a = a.extend(e, function () {
            e.call(this)
        });
        b.A("VideoPlayListItem", a).B("PlayListItem").J({
            media: "Video",
            player: "VideoPlayer",
            startTime: "number"
        });
        a.prototype.start = function () {
            e.prototype.start.call(this);
            var a = this.get("player");
            a && (a.bind(c.ne, this.jj, this), a.set("video", this.get("media")), a.set("startTime", this.get("startTime")))
        };
        a.prototype.stop = function () {
            var a = this.get("player");
            a && (a.unbind(c.ne, this.jj, this), a.get("video") == this.get("media") &&
                a.set("video", r));
            e.prototype.stop.call(this)
        };
        a.prototype.jj = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(c.ne, this.jj, this), this.get("player").bind(c.dg, this.Il, this), this.Iv())
        };
        a.prototype.Il = function (a) {
            a.data.media == this.get("media") && (this.get("player").unbind(c.dg, this.Il, this), this.end())
        };
        return a
    });
    define("fM", ["require", "fg", "jd", "dW"], function (a) {
        var b = a("fg"),
        c = a("jd"),
        a = a("dW"),
        b = b.extend(c, function () {
            c.call(this)
        });
        a.A("VideoResourceLevel", b).B("Object").J({
            bitrate: "number",
            framerate: "number",
            height: "number",
            posterURL: "string",
            type: "string",
            url: "string",
            width: "number"
        }).hh(["posterURL", "url"]);
        return b
    });
    define("dz", "require,fg,jd,dW,iX,fM".split(","), function (a) {
        var b = a("fg"),
        c = a("jd"),
        e = a("dW"),
        g = a("iX"),
        d = a("fM"),
        a = b.extend(c, function () {
            c.call(this);
            this.aU = new d;
            this.aU.set("type", "video/mp4");
            this.dU = new d;
            this.dU.set("type", "video/ogg");
            this.JX = new d;
            this.JX.set("type", "video/webm");
            this.set("gain", 1);
            this.set("hasAudio", n)
        });
        e.A("VideoResource", a).B("Object").J({
            gain: "number",
            hasAudio: "bool",
            height: "number",
            levels: "array[VideoResourceLevel]",
            mp4Url: "string",
            oggUrl: "string",
            subtitlesURL: "string",
            webmUrl: "string",
            width: "number"
        }).hh(["mp4Url", "oggUrl", "subtitlesURL", "webmUrl"]);
        a.prototype.get = function (a, b) {
            switch (a) {
            case "levels":
                var b = [],
                d = this.get("mp4Url");
                if (d) {
                    this.aU.set("url", d);
                    b.push(this.aU)
                }
                if (d = this.get("oggUrl")) {
                    this.dU.set("url", d);
                    b.push(this.dU)
                }
                if (d = this.get("webmUrl")) {
                    this.JX.set("url", d);
                    b.push(this.JX)
                }
                b.forEach(function (a) {
                    a.set("width", this.get("width"));
                    a.set("height", this.get("height"))
                }
                    .bind(this))
            }
            return c.prototype.get.call(this, a, b)
        };
        a.prototype.Dj = function () {
            var a =
                this.get("webmUrl"),
            b = this.get("oggUrl"),
            c = this.get("mp4Url");
            return c && g.TM ? c : a && g.SY ? a : b && g.RY ? b : c || a || b
        };
        return a
    });
    define("cZ", "require,jquery.mod,fg,ll,r,jt,d,fe".split(","), function (a) {
        var b = a("jquery.mod"),
        c = a("fg"),
        e = a("ll"),
        g = a("r"),
        d = a("jt"),
        f = a("d"),
        h = a("fe"),
        a = c.extend(f, function () {
            f.call(this);
            this.Tc("WebFrame");
            this.aC = this.du = this.pb = this.uc = r;
            this.nU = this.nU.bind(this);
            this.GJ = this.GJ.bind(this);
            this.bind(e.od, this.Noa, this, n);
            this.bind(e.zd, this.Moa, this, n)
        });
        a.prototype.za = function () {
            f.prototype.za.call(this);
            this.f("url");
            this.f("backgroundColor", "#ffffff");
            this.f("insetBorder", y);
            this.f("scrollEnabled",
                n)
        };
        a.prototype.Noa = function () {
            this.kv("url")
        };
        a.prototype.Moa = function () {
            this.kv("url")
        };
        a.prototype.Ga = function () {
            f.prototype.Ga.call(this);
            if (!this.uc) {
                this.uc = b("<div></div>");
                this.uc.css({
                    position: "absolute",
                    left: 0,
                    top: 0,
                    width: "100%",
                    height: "100%"
                });
                this.Ra().append(this.uc)
            }
            if (!this.pb) {
                this.pb = b("<iframe></iframe>");
                this.pb.css({
                    position: "absolute",
                    left: 0,
                    top: 0
                });
                this.pb.attr("allowfullscreen", "true");
                this.pb.attr("allow", "fullscreen; accelerometer; gyroscope; magnetometer; vr; autoplay; camera; microphone; display-capture; xr-spatial-tracking");
                this.uc.append(this.pb)
            }
            if (!this.du) {
                this.du = b("<div></div>");
                this.du.css({
                    "text-shadow": "0 0 5px rgba(255,255,255,0.5)",
                    display: "none",
                    color: "#000000",
                    "font-weight": "300",
                    "font-family": "Tahoma, Geneva, sans-serif",
                    "font-size": g.Za() ? "5vmin" : "20px",
                    position: "absolute",
                    top: "50%",
                    left: "50%",
                    "text-align": "center",
                    transform: "translate(-50%, -50%)",
                    width: "90%"
                });
                this.uc.append(this.du)
            }
        };
        a.prototype.ja = function () {
            if (this.n("url")) {
                var a = this.k("url");
                a && this.vr ? this.U9(a) : this.U9("");
                this.q("url")
            }
            if (this.n("insetBorder")) {
                this.k("insetBorder") ?
                this.pb.attr("frameborder", "1") : this.pb.attr("frameborder", "0");
                this.q("insetBorder")
            }
            if (this.n("scrollEnabled")) {
                if (this.k("scrollEnabled")) {
                    this.pb.attr("scrolling", "auto");
                    this.uc.css({
                        overflow: "auto",
                        "-webkit-overflow-scrolling": "touch"
                    })
                } else {
                    this.pb.attr("scrolling", "no");
                    this.uc.css({
                        overflow: "hidden",
                        "-webkit-overflow-scrolling": "auto"
                    })
                }
                this.q("scrollEnabled")
            }
            f.prototype.ja.call(this)
        };
        a.prototype.Se = function () {
            this.pb && h.css(this.pb.get(0), {
                width: this.X + "px",
                height: this.ia + "px"
            });
            f.prototype.Se.call(this)
        };
        a.prototype.refresh = function () {
            if (this.k("url") && this.vr) {
                this.SS();
                this.Nq();
                this.RW();
                this.pb.attr("src", "");
                setTimeout(function () {
                    this.z$();
                    this.A2();
                    this.pb.attr("src", this.k("url"))
                }
                    .bind(this), 30)
            }
        };
        a.prototype.U9 = function (a) {
            if (this.pb.attr("src") != a) {
                this.SS();
                if (a) {
                    this.z$();
                    this.A2()
                } else {
                    this.Nq();
                    this.RW()
                }
                this.pb.attr("src", a)
            }
        };
        a.prototype.nU = function () {
            this.aC = r;
            this.$ma() && this.yra()
        };
        a.prototype.GJ = function () {
            this.SS();
            this.Nq();
            this.RW()
        };
        a.prototype.A2 = function () {
            this.pb.on("load",
                this.GJ)
        };
        a.prototype.RW = function () {
            this.pb.off("load", this.GJ)
        };
        a.prototype.Nq = function () {
            if (this.aC) {
                clearTimeout(this.aC);
                this.aC = r
            }
        };
        a.prototype.z$ = function () {
            this.Nq();
            this.aC = setTimeout(this.nU.bind(this), 3E3)
        };
        a.prototype.$ma = function () {
            if (window.location.protocol == "https:") {
                var a = this.pb.attr("src");
                if (d.parse(a).protocol != "https:")
                    return n
            }
            return y
        };
        a.prototype.yra = function () {
            this.du.text("A secure web page served over HTTPS can not display insecure content served over HTTP.");
            this.du.show()
        };
        a.prototype.SS = function () {
            this.du.hide()
        };
        return a
    });
    define("bP", ["fg", "cZ", "dW"], function (a, b, c) {
        a = a.extend(b, function () {
            b.call(this)
        });
        c.A("WebFrame", a).B("UIComponent").J({
            url: "string",
            insetBorder: "bool",
            scrollEnabled: "bool"
        }).hh(["url"]).Cg({
            refresh: function () {
                b.prototype.refresh.call(this)
            }
        });
        return a
    });
    define("eZ", ["do", "fg", "kS", "c"], function (a, b, c, e) {
        var g = b.extend(c, function () {
            c.call(this)
        });
        g.ob = {
            layout: e.Be
        };
        a.defaults(g.ob, c.ob);
        g.prototype.za = function () {
            this.bk(g.ob)
        };
        return g
    });
    define("jD", "do,fg,ll,bZ,jY,c,kS,eZ,fG,eF,d,ks,kF,gP".split(","), function (a, b, c, e, g, d, f, h, j, p, k, l, q, o) {
        var t = b.extend(j, function () {
            j.call(this);
            this.Tc("Window");
            this.Hq = this.rx = this.cE = this.Yh = r;
            this.jQ = new f;
            this.Mx = r;
            this.OS = this.NS = 0;
            this.o$ = this.p$ = y;
            this.KX = this.LX = m;
            for (var a in t.EAa)
                this.kv(a);
            this.bind(c.yb, this.Rta, this);
            this.bind(c.Kw, this.Pta, this);
            this.bind(c.Sw, this.Sta, this);
            this.bind(c.U, this.Ota, this);
            this.OL = 0;
            this.Fd = new f;
            this.Fd.M({
                visible: y,
                includeInLayout: y,
                layout: "absolute",
                height: "100%",
                width: "100%",
                backgroundOpacity: 0,
                contentOpaque: y
            });
            this.Fd.bind(c.yb, this.Yaa, this);
            this.Fd.bind(c.Sw, this.Jta, this);
            this.Fd.bind(c.Kw, this.Ita, this);
            this.Fd.bind(c.U, this.Hta, this);
            this.Fd.la(this)
        });
        t.prototype.set = function (a, b) {
            switch (a) {
            case "maxWidth":
                this.LX = b;
                this.FL();
                break;
            case "maxHeight":
                this.KX = b;
                this.FL();
                break;
            case "children":
                this.jQ.set(a, b);
                break;
            case "shadow":
                this.p$ = b;
                this.Vaa();
                break;
            default:
                j.prototype.set.call(this, a, b)
            }
        };
        t.prototype.show = function (b, c) {
            this.FL(b);
            this.set("visible", y);
            this.Fd.set("visible", y);
            this.Pha();
            c && this.tua();
            var d = b.get("children");
            b.set("children", d.concat([this.Fd]));
            var e = this;
            a.defer(function () {
                e.Fd.set("visible", n)
            })
        };
        t.prototype.Pha = function () {
            var a = this.k("modal"),
            b = this.k("veilShowEffect"),
            c = this.k("veilHideEffect");
            a && b ? this.Fd.set("showEffect", b) : this.Fd.set("showEffect", r);
            a && c ? this.Fd.set("hideEffect", c) : this.Fd.set("hideEffect", r)
        };
        t.prototype.hide = function () {
            this.get("visible") && this.trigger(c.B_);
            this.OL = 0;
            this.ZK(y);
            this.set("visible", y)
        };
        t.prototype.tua = function () {
            this.set("centerX", 0);
            this.set("centerY", 0)
        };
        t.prototype.get = function (a, b) {
            return a == "children" ? this.jQ.get(a, b) : j.prototype.get.call(this, a, b)
        };
        t.C1 = {
            headerBackgroundOpacity: "backgroundOpacity",
            headerBackgroundColor: "backgroundColor",
            headerBackgroundColorRatios: "backgroundColorRatios",
            headerBackgroundColorDirection: "backgroundColorDirection",
            headerBorderSize: "borderSize",
            headerBorderLeftSize: "borderLeftSize",
            headerBorderTopSize: "borderTopSize",
            headerBorderRightSize: "borderRightSize",
            headerBorderBottomSize: "borderBottomSize",
            headerBorderColor: "borderColor",
            headerBorderLeftColor: "borderLeftColor",
            headerBorderTopColor: "borderTopColor",
            headerBorderRightColor: "borderRightColor",
            headerBorderBottomColor: "borderBottomColor",
            headerHeight: "height",
            headerPaddingLeft: "paddingLeft",
            headerPaddingTop: "paddingTop",
            headerPaddingRight: "paddingRight",
            headerPaddingBottom: "paddingBottom",
            headerVerticalAlign: "verticalAlign"
        };
        t.B1 = a(t.C1).keys();
        t.vP = {
            borderRadius: "borderTopRadius",
            borderTopRadius: "borderTopRadius",
            borderLeftRadius: "borderTopLeftRadius",
            borderRightRadius: "borderTopRightRadius",
            borderTopLeftRadius: "borderTopLeftRadius",
            borderTopRightRadius: "borderTopRightRadius"
        };
        t.uP = ["borderLeftRadius", "borderRightRadius", "borderTopLeftRadius", "borderTopRightRadius", "borderTopRadius", "borderRadius"];
        t.U1 = {
            title: "text",
            titleFontFamily: "fontFamily",
            titleFontSize: "fontSize",
            titleFontColor: "fontColor",
            titleFontWeight: "fontWeight",
            titleFontStyle: "fontStyle",
            titleHorizontalAlign: "horizontalAlign",
            titlePaddingLeft: "paddingLeft",
            titlePaddingTop: "paddingTop",
            titlePaddingRight: "paddingRight",
            titlePaddingBottom: "paddingBottom",
            titleTextDecoration: "textDecoration",
            titleTextShadowColor: "textShadowColor",
            titleTextShadowHorizontalLength: "textShadowHorizontalLength",
            titleTextShadowVerticalLength: "textShadowVerticalLength",
            titleTextShadowBlurRadius: "textShadowBlurRadius",
            titleTextShadowOpacity: "textShadowOpacity"
        };
        t.T1 = a(t.U1).keys();
        t.w1 = {
            closeButtonBackgroundColor: "backgroundColor",
            closeButtonBackgroundColorDirection: "backgroundColorDirection",
            closeButtonBackgroundColorRatios: "backgroundColorRatios",
            closeButtonBackgroundOpacity: "backgroundOpacity",
            closeButtonBorderColor: "borderColor",
            closeButtonBorderRadius: "borderRadius",
            closeButtonBorderSize: "borderSize",
            closeButtonHeight: "height",
            closeButtonIconColor: "iconColor",
            closeButtonIconHeight: "iconHeight",
            closeButtonIconLineWidth: "iconLineWidth",
            closeButtonIconWidth: "iconWidth",
            closeButtonOpacity: "opacity",
            closeButtonWidth: "width",
            closeButtonPaddingBottom: "paddingBottom",
            closeButtonPaddingLeft: "paddingLeft",
            closeButtonPaddingRight: "paddingRight",
            closeButtonPaddingTop: "paddingTop",
            closeButtonRollOverBackgroundColor: "rollOverBackgroundColor",
            closeButtonRollOverBackgroundColorDirection: "rollOverBackgroundColorDirection",
            closeButtonRollOverBackgroundColorRatios: "rollOverBackgroundColorRatios",
            closeButtonRollOverBackgroundOpacity: "rollOverBackgroundOpacity",
            closeButtonRollOverBorderColor: "rollOverBorderColor",
            closeButtonRollOverBorderSize: "rollOverBorderSize",
            closeButtonRollOverIconColor: "rollOverIconColor",
            closeButtonRollOverIconLineWidth: "rollOverIconLineWidth",
            closeButtonRollOverOpacity: "rollOverOpacity",
            closeButtonPressedBackgroundColor: "pressedBackgroundColor",
            closeButtonPressedBackgroundColorDirection: "pressedBackgroundColorDirection",
            closeButtonPressedBackgroundColorRatios: "pressedBackgroundColorRatios",
            closeButtonPressedBackgroundOpacity: "pressedBackgroundOpacity",
            closeButtonPressedBorderColor: "pressedBorderColor",
            closeButtonPressedBorderSize: "pressedBorderSize",
            closeButtonPressedIconColor: "pressedIconColor",
            closeButtonPressedIconLineWidth: "pressedIconLineWidth",
            closeButtonPressedOpacity: "pressedOpacity"
        };
        t.v1 = a(t.w1).keys();
        t.y1 = {
            footerBackgroundOpacity: "backgroundOpacity",
            footerBackgroundColor: "backgroundColor",
            footerBackgroundColorRatios: "backgroundColorRatios",
            footerBackgroundColorDirection: "backgroundColorDirection",
            footerBorderSize: "borderSize",
            footerBorderLeftSize: "borderLeftSize",
            footerBorderTopSize: "borderTopSize",
            footerBorderRightSize: "borderRightSize",
            footerBorderBottomSize: "borderBottomSize",
            footerBorderColor: "borderColor",
            footerBorderLeftColor: "borderLeftColor",
            footerBorderTopColor: "borderTopColor",
            footerBorderRightColor: "borderRightColor",
            footerBorderBottomColor: "borderBottomColor",
            footerHeight: "height"
        };
        t.x1 = a(t.y1).keys();
        t.A1 = {
            borderRadius: "borderBottomRadius",
            borderBottomRadius: "borderBottomRadius",
            borderLeftRadius: "borderBottomLeftRadius",
            borderRightRadius: "borderBottomRightRadius",
            borderBottomLeftRadius: "borderBottomLeftRadius",
            borderBottomRightRadius: "borderBottomRightRadius"
        };
        t.z1 = ["borderLeftRadius", "borderRightRadius", "borderBottomLeftRadius", "borderBottomRightRadius", "borderBottomRadius", "borderRadius"];
        t.s1 = {
            bodyBackgroundOpacity: "backgroundOpacity",
            bodyBackgroundColor: "backgroundColor",
            bodyBackgroundColorRatios: "backgroundColorRatios",
            bodyBackgroundColorDirection: "backgroundColorDirection",
            bodyBorderSize: "borderSize",
            bodyBorderLeftSize: "borderLeftSize",
            bodyBorderTopSize: "borderTopSize",
            bodyBorderRightSize: "borderRightSize",
            bodyBorderBottomSize: "borderBottomSize",
            bodyBorderColor: "borderColor",
            bodyBorderLeftColor: "borderLeftColor",
            bodyBorderTopColor: "borderTopColor",
            bodyBorderRightColor: "borderRightColor",
            bodyBorderBottomColor: "borderBottomColor",
            bodyPaddingLeft: "paddingLeft",
            bodyPaddingTop: "paddingTop",
            bodyPaddingRight: "paddingRight",
            bodyPaddingBottom: "paddingBottom",
            overflow: "overflow",
            scrollBarColor: "scrollBarColor",
            scrollBarWidth: "scrollBarWidth",
            scrollBarMargin: "scrollBarMargin",
            scrollBarHorizontalMargin: "scrollBarHorizontalMargin",
            scrollBarVerticalMargin: "scrollBarVerticalMargin",
            scrollBarOpacity: "scrollBarOpacity",
            gap: "gap"
        };
        t.r1 = a(t.s1).keys();
        t.t1 = {
            layout: "layout",
            horizontalAlign: "horizontalAlign",
            verticalAlign: "verticalAlign"
        };
        t.Fga = a(t.t1).keys();
        t.W1 = {
            veilOpacity: "backgroundOpacity",
            veilColor: "backgroundColor",
            veilColorRatios: "backgroundColorRatios",
            veilColorDirection: "backgroundColorDirection"
        };
        t.V1 = a(t.W1).keys();
        t.ob = function () {
            var b = {
                modal: y,
                visible: y,
                centerX: 0,
                centerY: 0,
                veilShowEffect: m,
                veilHideEffect: m
            };
            a.defaults(b, f.ob);
            for (var c = [].concat(t.B1, t.T1, t.v1, t.r1,
                    t.x1, t.V1), d = 0; d < c.length; d++)
                b[c[d]] = m;
            return b
        }
        ();
        t.prototype.za = function () {
            this.bk(t.ob)
        };
        t.prototype.Ga = function () {
            j.prototype.Ga.call(this);
            if (this.Yh == r) {
                this.Yh = new h;
                this.Yh.set("width", "100%");
                this.Yh.bind(c.Hb, this.rma, this);
                this.la(this.Yh)
            }
            if (this.cE == r) {
                this.cE = new o;
                this.cE.set("width", "100%");
                this.Yh.la(this.cE)
            }
            if (this.rx == r) {
                this.rx = new p;
                this.rx.M({
                    horizontalAlign: g.Lc,
                    verticalAlign: g.vc
                });
                this.rx.bind(c.U, this.aja, this);
                this.Yh.la(this.rx)
            }
            if (this.Hq == r) {
                this.Hq = this.jQ;
                this.Hq.M({
                    width: "100%",
                    height: "100%"
                });
                this.la(this.Hq)
            }
            if (this.Mx == r) {
                this.Mx = new f;
                this.Mx.set("width", "100%");
                this.la(this.Mx)
            }
        };
        t.prototype.Hta = function () {
            this.OL++;
            setTimeout(function () {
                this.OL > 0 && this.hide()
            }
                .bind(this), 100)
        };
        t.prototype.Ota = function () {
            this.OL--
        };
        t.prototype.aja = function () {
            this.hide()
        };
        t.prototype.rma = function (a) {
            this.NS = a.pageX;
            this.OS = a.pageY;
            this.Ta().bind(c.Mc, this.iba, this, n);
            this.Ta().bind(c.fc, this.jba, this, n)
        };
        t.prototype.iba = function (a) {
            this.set("centerX", this.get("centerX") + (a.pageX - this.NS));
            this.set("centerY", this.get("centerY") + (a.pageY - this.OS));
            this.NS = a.pageX;
            this.OS = a.pageY;
            this.Uaa()
        };
        t.prototype.jba = function () {
            this.Ta().unbind(c.Mc, this.iba, this);
            this.Ta().unbind(c.fc, this.jba, this)
        };
        t.prototype.Yaa = function () {
            this.FL()
        };
        t.prototype.Jta = function () {
            this.set("visible", n)
        };
        t.prototype.Ita = function () {
            this.Fd.unbind(c.yb, this.Yaa, this);
            var a = this.Fd.getParent();
            a && a.removeChild(this.Fd);
            this.trigger(new e(c.ct))
        };
        t.prototype.Rta = function () {
            this.Uaa()
        };
        t.prototype.Sta = function () {
            this.ZK(n)
        };
        t.prototype.Pta = function () {
            this.Fd.set("visible", y)
        };
        t.prototype.ZK = function (a) {
            this.o$ = a;
            this.Vaa()
        };
        t.prototype.Vaa = function () {
            j.prototype.set.call(this, "shadow", this.o$ && this.p$)
        };
        t.prototype.FL = function (a) {
            a || (a = this.Q);
            this.LX !== m ? j.prototype.set.call(this, "maxWidth", this.LX) : a ? j.prototype.set.call(this, "maxWidth", a.Aa()) : j.prototype.set.call(this, "maxWidth", m);
            this.KX !== m ? j.prototype.set.call(this, "maxHeight", this.KX) : a ? j.prototype.set.call(this, "maxHeight", a.eb()) : j.prototype.set.call(this,
                "maxHeight", m)
        };
        t.prototype.Uaa = function () {
            var a = this.Fd.Aa(),
            b = this.Aa(),
            c = this.get("centerX"),
            b = a * 0.5 + c - b * 0.5,
            d = this.Yh.xi(),
            e = this.Yh.Aa(),
            f = Math.min(e, 30),
            a = a - d - f,
            d =  - (d + e - f);
            b < d ? this.set("centerX", c + (d - b)) : b > a && this.set("centerX", c - (b - a));
            a = this.Fd.eb();
            b = this.eb();
            c = this.get("centerY");
            b = a * 0.5 + c - b * 0.5;
            d = this.Yh.Cn();
            e = this.Yh.eb();
            f = Math.min(e, 5);
            a = a - d - f;
            d =  - (d + e - f);
            b < d ? this.set("centerY", c + (d - b)) : b > a && this.set("centerY", c - (b - a))
        };
        t.prototype.ja = function () {
            this.ib(t.B1, t.C1, [this.Yh], n, n);
            this.ib(t.uP,
                t.vP, [this.Yh], n, y);
            this.get("headerHeight") === 0 ? this.ib(t.uP, t.vP, [this.Hq], n, y) : this.ib(t.uP, t.vP, [this.Yh], n, y);
            this.ib(t.T1, t.U1, [this.cE], n, n);
            this.ib(t.v1, t.w1, [this.rx], n, n);
            this.ib(t.r1, t.s1, [this.Hq], n, n);
            this.ib(t.Fga, t.t1, [this.Hq], n, y);
            this.ib(t.x1, t.y1, [this.Mx], n, n);
            this.get("footerHeight") === 0 ? this.ib(t.z1, t.A1, [this.Hq], n, y) : this.ib(t.z1, t.A1, [this.Mx], n, y);
            if (this.k("modal")) {
                this.ib(t.V1, t.W1, [this.Fd], n, n);
                this.Fd.set("contentOpaque", n)
            } else {
                this.Fd.set("backgroundOpacity", 0);
                this.Fd.set("contentOpaque",
                    y)
            }
            this.M({
                layout: d.of,
                horizontalAlign: g.Lc,
                verticalAlign: g.vc
            });
            j.prototype.ja.call(this);
            this.jk.CN(0)
        };
        return t
    });
    define("dp", ["do", "fg", "jD", "dW", "ll"], function (a, b, c, e, g) {
        a = b.extend(c, function () {
            c.call(this)
        });
        e.A("Window", a).B("Container").J({
            modal: "bool",
            headerBackgroundOpacity: "number",
            headerBackgroundColor: "or[array[color], color]",
            headerBackgroundColorRatios: "array[number]",
            headerBackgroundColorDirection: "enum[horizontal, vertical]",
            headerBorderSize: "number",
            headerBorderLeftSize: "number",
            headerBorderTopSize: "number",
            headerBorderRightSize: "number",
            headerBorderBottomSize: "number",
            headerBorderColor: "color",
            headerBorderLeftColor: "color",
            headerBorderTopColor: "color",
            headerBorderRightColor: "color",
            headerBorderBottomColor: "color",
            headerHeight: "number",
            headerPaddingLeft: "number",
            headerPaddingTop: "number",
            headerPaddingRight: "number",
            headerPaddingBottom: "number",
            headerVerticalAlign: "enum[bottom, middle, top]",
            title: "string",
            titleFontFamily: "string",
            titleFontSize: "or[number, size]",
            titleFontColor: "color",
            titleFontWeight: "enum[bold, bolder, lighter, 100, 200, 300, 400, 500, 600, 700, 800, 900, normal]",
            titleFontStyle: "enum[italic, normal]",
            titleHorizontalAlign: "enum[left, center, right]",
            titlePaddingLeft: "number",
            titlePaddingTop: "number",
            titlePaddingRight: "number",
            titlePaddingBottom: "number",
            titleTextDecoration: "enum[underline, overline, line-through, none]",
            titleTextShadowBlurRadius: "number",
            titleTextShadowColor: "color",
            titleTextShadowHorizontalLength: "number",
            titleTextShadowOpacity: "number",
            titleTextShadowVerticalLength: "number",
            closeButtonBackgroundColor: "or[array[color], color]",
            closeButtonBackgroundColorDirection: "enum[horizontal, vertical]",
            closeButtonBackgroundColorRatios: "array[number]",
            closeButtonBackgroundOpacity: "number",
            closeButtonBorderColor: "color",
            closeButtonBorderRadius: "number",
            closeButtonBorderSize: "number",
            closeButtonHeight: "number",
            closeButtonIconColor: "color",
            closeButtonIconHeight: "number",
            closeButtonIconLineWidth: "number",
            closeButtonIconWidth: "number",
            closeButtonOpacity: "number",
            closeButtonWidth: "number",
            closeButtonPaddingBottom: "number",
            closeButtonPaddingLeft: "number",
            closeButtonPaddingRight: "number",
            closeButtonPaddingTop: "number",
            closeButtonRollOverBackgroundColor: "or[array[color], color]",
            closeButtonRollOverBackgroundColorDirection: "enum[horizontal, vertical]",
            closeButtonRollOverBackgroundColorRatios: "array[number]",
            closeButtonRollOverBackgroundOpacity: "number",
            closeButtonRollOverBorderColor: "color",
            closeButtonRollOverBorderSize: "number",
            closeButtonRollOverIconColor: "color",
            closeButtonRollOverIconLineWidth: "number",
            closeButtonRollOverOpacity: "number",
            closeButtonPressedBackgroundColor: "or[array[color], color]",
            closeButtonPressedBackgroundColorDirection: "enum[horizontal, vertical]",
            closeButtonPressedBackgroundColorRatios: "array[number]",
            closeButtonPressedBackgroundOpacity: "number",
            closeButtonPressedBorderColor: "color",
            closeButtonPressedBorderSize: "number",
            closeButtonPressedIconColor: "color",
            closeButtonPressedIconLineWidth: "number",
            closeButtonPressedOpacity: "number",
            footerBackgroundOpacity: "number",
            footerBackgroundColor: "or[array[color], color]",
            footerBackgroundColorRatios: "array[number]",
            footerBackgroundColorDirection: "enum[horizontal, vertical]",
            footerBorderSize: "number",
            footerBorderLeftSize: "number",
            footerBorderTopSize: "number",
            footerBorderRightSize: "number",
            footerBorderBottomSize: "number",
            footerBorderColor: "color",
            footerBorderLeftColor: "color",
            footerBorderTopColor: "color",
            footerBorderRightColor: "color",
            footerBorderBottomColor: "color",
            footerHeight: "number",
            bodyBackgroundOpacity: "number",
            bodyBackgroundColor: "or[array[color], color]",
            bodyBackgroundColorRatios: "array[number]",
            bodyBackgroundColorDirection: "enum[horizontal, vertical]",
            bodyBorderSize: "number",
            bodyBorderLeftSize: "number",
            bodyBorderTopSize: "number",
            bodyBorderRightSize: "number",
            bodyBorderBottomSize: "number",
            bodyBorderColor: "color",
            bodyBorderLeftColor: "color",
            bodyBorderTopColor: "color",
            bodyBorderRightColor: "color",
            bodyBorderBottomColor: "color",
            bodyPaddingLeft: "number",
            bodyPaddingTop: "number",
            bodyPaddingRight: "number",
            bodyPaddingBottom: "number",
            veilOpacity: "number",
            veilColor: "or[array[color], color]",
            veilColorRatios: "array[number]",
            veilColorDirection: "enum[horizontal, vertical]",
            veilHideEffect: "Effect",
            veilShowEffect: "Effect"
        }).gq(["titleFontSize"]).Cg({
            show: a.prototype.show,
            hide: a.prototype.hide
        }).Xb([g.B_, g.ct]);
        return a
    });
    define("kb", "require,jquery.mod,do,ih,ll,ge,bZ,eO,V,kX,bq,id,jn,r,fg".split(","), function (a) {
        function b(a) {
            this.source = a;
            this.width = this.source.get("width");
            this.height = this.source.get("height");
            this.url = this.source.get("url");
            this.Az = this.source.get("grayscale");
            this.Up = new q(f.Uj)
        }
        var c = a("jquery.mod"),
        e = a("do"),
        g = a("ih"),
        d = a("ll"),
        f = a("ge"),
        h = a("bZ"),
        j = a("eO"),
        p = a("V"),
        k = a("kX"),
        l = a("bq"),
        q = a("id"),
        o = a("jn"),
        t = a("r"),
        s = a("fg"),
        v = s.extend(j, function () {
            j.call(this);
            this.FJ = this.FJ.bind(this);
            this.De =
                r;
            this.rr = [];
            this.dj = [];
            this.Ya = this.Oa = this.hc = this.cc = 100;
            this.sd = 1;
            this.Mq = this.Lq = 0.5;
            this.rb = 1;
            this.Gg = this.ng = r;
            this.gK = y;
            this.ZQ = {};
            this.wx = {};
            this.wx.low = {};
            this.wx.hight = {};
            if (t.iz() == t.iA) {
                this.wx.low.transform = "translateZ(0)";
                this.wx.hight.transform = ""
            }
            this.W = y;
            this.tf = "inherit";
            this.K = c("<div/>").css({
                position: "absolute",
                left: 0,
                top: 0,
                right: 0,
                bottom: 0,
                overflow: "hidden"
            });
            this.HB = r;
            this.ed = s.nm(this.L, this)
        });
        v.prototype.Gb = Q("K");
        v.prototype.Xs = function (a) {
            if (this.Ed != a) {
                this.Ed = a;
                this.YP(1);
                this.ed()
            }
        };
        v.prototype.hya = function (a) {
            if (this.tf != a) {
                this.tf = a;
                this.Gg && this.Gg.css("cursor", this.tf);
                this.ng && this.ng.css("cursor", this.tf)
            }
        };
        v.prototype.tya = function (a) {
            if (this.rr != a) {
                this.rr && g.Pb(this.rr, ["levels.url"], this.FJ, n);
                (this.rr = a) && g.Eb(this.rr, ["levels.url"], this.FJ, n)
            }
        };
        v.prototype.FJ = function () {
            this.AQ();
            this.De = r;
            if (this.ng) {
                this.ng.detach();
                this.ng = r
            }
            if (this.Gg) {
                this.Gg.detach();
                this.Gg = r
            }
            if (this.Ee)
                this.Ee = r;
            this.AQ();
            this.gK = y;
            e(this.dj).each(function (a) {
                a.Up.cancel();
                a.Up.unbind(d.S,
                    this.c6, this)
            }, this);
            var a = (this.rr && this.rr.get("levels") || []).filter(function (a) {
                return a.get("url")
            });
            this.dj = e(a).map(function (a) {
                a = new b(a);
                a.Up.bind(d.S, this.c6, this);
                return a
            }, this);
            if (a = this.Dla()) {
                this.Oa = a.width;
                this.Ya = a.height
            } else
                this.Ya = this.Oa = 100;
            this.Mq = this.Lq = 0.5;
            this.YP(1);
            this.ed()
        };
        v.prototype.qw = function (a, b) {
            if (this.cc != a || this.hc != b) {
                this.cc = a;
                this.hc = b;
                this.ed()
            }
        };
        v.prototype.iya = function (a, b) {
            if (this.P3 != a || this.O3 != b) {
                this.P3 = a;
                this.O3 = b;
                this.ed()
            }
        };
        v.prototype.nd = function (a) {
            if (this.W !=
                a) {
                this.W = a;
                this.ed()
            }
        };
        v.prototype.move = function (a, b) {
            var c = this.sd * this.rb;
            this.Lq = this.Lq + a / (this.Oa * c);
            this.Mq = this.Mq + b / (this.Ya * c);
            this.BK()
        };
        v.prototype.Xv = Q("rb");
        v.prototype.setScale = function (a) {
            this.YP(Math.max(1, Math.min(1 / this.sd, a)));
            this.De && this.De.width < this.rb * this.sd * this.Oa && this.De.width < this.Oa ? this.L() : this.BK()
        };
        v.prototype.lda = function (a) {
            if (!this.ng)
                return y;
            var b = this.ng.offset(),
            c = a.pageX - b.left,
            a = a.pageY - b.top;
            return c >= 0 && a >= 0 && c < this.ng.width() && a < this.ng.height()
        };
        v.prototype.L =
        function () {
            if (this.W) {
                this.xta();
                var a = this.Hla();
                if (a && a.Up.Sp()) {
                    if (a != this.De) {
                        if (!this.De) {
                            this.ed();
                            this.gK = n
                        }
                        this.bka(a);
                        this.De = a
                    }
                    this.a$(r)
                } else
                    this.a$(a);
                this.BK()
            }
        };
        v.prototype.xta = function () {
            var a;
            switch (this.Ed) {
            case o.Zk:
                a = this.cc / this.Oa;
                break;
            case o.kh:
                a = this.hc / this.Ya;
                break;
            case o.xm:
                a = this.Oa * this.hc > this.Ya * this.cc ? this.hc / this.Ya : this.cc / this.Oa;
                break;
            case o.ufa:
                a = Math.min(this.P3 / this.Oa, this.O3 / this.Ya);
                break;
            default:
                a = this.Oa * this.hc > this.Ya * this.cc ? this.cc / this.Oa : this.hc /
                    this.Ya
            }
            this.Mha(a)
        };
        v.prototype.c6 = function () {
            this.ed()
        };
        v.prototype.bka = function (a) {
            if (this.Gg) {
                this.RV(this.Gg, 1);
                this.ng && this.ng.detach();
                this.ng = this.Gg
            }
            this.Gg = this.Cja(a);
            this.RV(this.Gg, 0);
            this.K.append(this.Gg);
            this.Ee = this.wja();
            this.ZQ = {}
        };
        v.prototype.Hla = function () {
            return this.De ? this.ala(this.rb * this.sd * this.Oa) : this.$la()
        };
        v.prototype.a$ = function (a) {
            e(this.dj).each(function (b) {
                b == a ? b.Up.Dj() != b.url && b.Up.load(b.url) : b.Up.Sp() || b.Up.cancel()
            })
        };
        v.prototype.Dla = function () {
            return e(this.dj).reduce(function (a,
                    b) {
                a || (a = b);
                if (b.width > a.width || b.width == a.width && !b.Az && a.Az)
                    a = b;
                return a
            }, r)
        };
        v.prototype.$la = function () {
            return e(this.dj).reduce(function (a, b) {
                a || (a = b);
                if (b.width < a.width || b.width == a.width && b.Az && !a.Az)
                    a = b;
                return a
            }, r)
        };
        v.prototype.ala = function (a) {
            return e(this.dj).reduce(function (b, c) {
                b || (b = c);
                if (c.width >= a && b.width < a || c.width >= a && c.width < b.width || c.width < a && c.width > b.width || !c.Az && b.Az)
                    b = c;
                return b
            }, r)
        };
        v.prototype.Cja = function (a) {
            a = c(a.Up.we(n));
            a.css({
                position: "absolute",
                cursor: this.tf,
                "pointer-events": "none"
            });
            return a
        };
        v.prototype.wja = function () {
            return new k("linear", [new l("alpha", 0, 1)], 200)
        };
        v.prototype.BK = function () {
            p.Ma(function (a) {
                this.xK(a, "low")
            }, this)
        };
        v.prototype.BY = function () {
            return this.Oa * this.rb * this.sd
        };
        v.prototype.AY = function () {
            return this.Ya * this.rb * this.sd
        };
        v.prototype.Zba = function () {
            var a = this.BY();
            return a > this.cc ? Math.max(this.cc - a, Math.min(0, this.cc * 0.5 - a * this.Lq)) : (this.cc - a) * 0.5
        };
        v.prototype.$ba = function () {
            var a = this.AY();
            return a > this.hc ? Math.max(this.hc - a, Math.min(0, this.hc * 0.5 -
                    a * this.Mq)) : (this.hc - a) * 0.5
        };
        v.prototype.xK = function (a, b) {
            var b = b || "low",
            c = this.BY(),
            e = this.Zba(),
            f = this.AY(),
            g = this.$ba();
            this.Lq = (this.cc * 0.5 - e) / c;
            this.Mq = (this.hc * 0.5 - g) / f;
            var c = {
                left: Math.round(e) + "px",
                top: Math.round(g) + "px",
                width: Math.round(c) + "px",
                height: Math.round(f) + "px",
                display: "block"
            },
            j;
            for (j in this.wx[b])
                c[j] = this.wx[b][j];
            if (this.ZQ != c) {
                this.ng && this.ng.css(c);
                this.Gg && this.Gg.css(c);
                this.ZQ = c
            }
            this.AQ();
            if (this.Ee) {
                this.Ee.fb(a);
                this.RV(this.Gg, this.Ee.Fb("alpha"));
                if (this.Ee.Re()) {
                    this.Ee =
                        r;
                    this.ng && this.ng.detach();
                    this.ng = this.Gg;
                    this.Gg = r
                }
                this.BK()
            } else
                b == "low" && this.Ira();
            if (!this.Ee && this.gK) {
                this.gK = y;
                this.trigger(new h(d.S))
            }
        };
        v.prototype.RV = function (a, b) {
            a.css({
                opacity: b,
                filter: "alpha(opacity=" + Math.round(b * 100) + ")",
                "-ms-filter": "alpha(opacity=" + Math.round(b * 100) + ")"
            })
        };
        v.prototype.AQ = function () {
            if (this.HB != r) {
                clearTimeout(this.HB);
                this.HB = r
            }
        };
        v.prototype.Ira = function () {
            var a = this;
            this.HB = setTimeout(function () {
                a.HB = r;
                a.xK(50, "hight")
            }, 50)
        };
        v.prototype.YP = function (a) {
            if (this.rb !=
                a) {
                this.rb = a;
                this.Gsa()
            }
        };
        v.prototype.Mha = function (a) {
            if (this.sd != a)
                this.sd = a
        };
        v.prototype.Gsa = function () {
            this.trigger(new h(v.mA, {
                    scale: this.rb
                }))
        };
        v.mA = "scaleChange";
        return v
    });
    define("hV", "require,jquery.mod,ll,bZ,kb,fg,d,J".split(","), function (a) {
        a("jquery.mod");
        var b = a("ll"),
        c = a("bZ"),
        e = a("kb"),
        g = a("fg"),
        d = a("d"),
        f = a("J"),
        h = g.extend(d, function () {
            d.call(this);
            this.Tc("ZoomImage");
            this.kp = this.pj = m;
            this.ni = y;
            this.K8 = m;
            this.I5 = this.rb;
            this.AE = r;
            this.g = new e;
            this.g.bind(b.S, this.toa, this);
            this.g.bind(e.mA, this.uoa, this);
            this.Ra().append(this.g.Gb());
            this.bind(b.yb, this.kb, this, n);
            this.bind(b.od, this.wh, this, n);
            this.bind(b.zd, this.th, this, n);
            this.bind(b.Hb, this.pc, this, n);
            this.bind(b.Mc, this.Ng, this, n);
            this.bind(b.fc, this.Og, this, n);
            this.bind(b.sq, this.Eu, this, n);
            this.bind(b.Jw, this.ku, this, n)
        });
        h.prototype.set = function (a, b) {
            switch (a) {
            case "scale":
                this.g.setScale(b);
                b = this.g.Xv();
                break;
            case "imageLeft":
            case "imageTop":
            case "imageWidth":
            case "imageHeight":
                return
            }
            d.prototype.set.call(this, a, b)
        };
        h.prototype.get = function (a, b) {
            switch (a) {
            case "scale":
                return this.g.Xv();
            case "imageLeft":
                return this.g.Zba();
            case "imageTop":
                return this.g.$ba();
            case "imageWidth":
                return this.g.BY();
            case "imageHeight":
                return this.g.AY()
            }
            return d.prototype.get.call(this, a, b)
        };
        h.prototype.za = function () {
            d.prototype.za.call(this);
            this.f("image");
            this.f("scaleMode");
            this.f("customHeight");
            this.f("customWidth");
            this.f("imageCursor");
            this.f("imageLeft");
            this.f("imageTop");
            this.f("imageWidth");
            this.f("imageHeight")
        };
        h.prototype.ja = function () {
            if (this.n("scaleMode")) {
                this.g.Xs(this.k("scaleMode"));
                this.q("scaleMode")
            }
            if (this.n("image")) {
                this.g.tya(this.k("image"));
                this.q("image");
                this.I5 = this.rb
            }
            if (this.n("customHeight") ||
                this.n("customWidth")) {
                this.q("customHeight");
                this.q("customWidth");
                this.kb()
            }
            if (this.n("imageCursor")) {
                this.q("imageCursor");
                this.g.hya(this.ra.nR.Tba(this.get("imageCursor")))
            }
            d.prototype.ja.call(this)
        };
        h.prototype.kb = function () {
            var a = this.Aa(),
            b = this.eb(),
            c = this.get("customWidth", "100%"),
            d = f.Ok(c),
            c = d !== m ? a * d / 100 : c,
            d = this.get("customHeight", "100%"),
            e = f.Ok(d);
            this.g.iya(c, e !== m ? b * e / 100 : d);
            this.g.qw(a, b)
        };
        h.prototype.wh = function () {
            this.g.nd(n)
        };
        h.prototype.th = function () {
            this.g.nd(y)
        };
        h.prototype.pc =
        function (a) {
            this.pj = a.x;
            this.kp = a.y;
            this.ni = n;
            this.K8 = this.g.lda(a)
        };
        h.prototype.Ng = function (a) {
            if (this.ni) {
                this.wX();
                this.g.move( - (a.x - this.pj),  - (a.y - this.kp));
                this.pj = a.x;
                this.kp = a.y
            }
        };
        h.prototype.Og = function (a) {
            this.ni = y;
            !this.K8 && !this.g.lda(a) && this.trigger(new c(h.Q_))
        };
        h.prototype.Eu = function (a) {
            this.wX();
            this.g.setScale((1 + a.Jp / 20) * this.g.Xv())
        };
        h.prototype.ku = function (a) {
            this.wX();
            this.g.setScale(a.scale / this.I5)
        };
        h.prototype.toa = function () {
            this.trigger(new c(b.S))
        };
        h.prototype.uoa = function () {
            d.prototype.set.call(this,
                "scale", this.g.Xv());
            this.trigger(new c(h.mA))
        };
        h.prototype.wX = function () {
            if (this.AE) {
                clearTimeout(this.AE);
                this.AE = r
            } else
                this.trigger(new c(h.Ae));
            this.AE = setTimeout(function () {
                this.AE = r;
                this.trigger(new c(h.ze))
            }
                    .bind(this), 300)
        };
        h.Q_ = "backgroundClick";
        h.mA = "scaleChange";
        h.Ae = "userInteractionStart";
        h.ze = "userInteractionEnd";
        return h
    });
    define("kH", ["fg", "ll", "hV", "dW"], function (a, b, c, e) {
        a = a.extend(c, function () {
            c.call(this)
        });
        e.A("ZoomImage", a).B("UIComponent").J({
            scaleMode: "enum[fit_inside, fit_outside, fit_to_width, fit_to_height, custom]",
            customHeight: "or[number,percent]",
            customWidth: "or[number,percent]",
            image: "ImageResource",
            imageCursor: "enum[default, hand]",
            imageHeight: "number",
            imageLeft: "number",
            imageTop: "number",
            imageWidth: "number",
            scale: "number"
        }).Xb([c.Q_, c.mA, c.Ae, c.ze, b.S]);
        return Image
    });
    define("gV", "gH,dw,dN,kU,hq,ey,gb,hc,hM,jc,la,fB,gh,fo,es,cH,bm,kC,ht,jG,en,n,gZ,df,gy,jU,hx,kl,gs,jh,fy,F,cj,q,iW,eM,P,hR,bk,Z,kk,kR,dY,jj,gX,bu,kV,kh,ix,I,lG,du,gN,bE,he,lA,hA,gA,m,if,gd,jC,gC,lE,fE,ir,bf,cf,bw,iR,gz,ly,eN,kZ,cb,cc,iO,ex,hl,gp,hP,fd,iV,kr,fX,hY,im,eG,gE,bQ,dM,dl,K,lm,cY,br,gK,el,cX,hX,dP,jI,jo,ec,fj,iz,bO,gu,kI,jz,kL,T,fa,cF,jV,gc,hj,hN,fI,bG,v,cP,bx,hH,hm,le,ew,ft,bM,iE,e,dz,fM,bl,bP,dp,kH".split(","), R(n));
    define("eU", "require,do,jquery.mod,fg,dW,bF,gV,jt".split(","), function (a) {
        function b(a, b) {
            this.type = a;
            this.stack = b
        }
        function c() {}
        var e = a("do"),
        g = a("jquery.mod"),
        d = a("fg"),
        f = a("dW"),
        h = a("bF");
        a("gV");
        a("jt");
        c.prototype.mxa = function (a, b, c, d) {
            this.SR = [];
            this.es = this.Cy(a);
            this.ur = m;
            if (this.es.Ip.cca()) {
                h.Vza(a);
                this.ur = this.D4(this.es, j.Vj);
                this.Fja(this.ur, this.es, b, c, d);
                this.Hha(this.es);
                this.Fha(this.es, this.ur);
                this.Iha(this.ur, this.es);
                this.Xha(this.ur, this.es)
            } else
                this.cl("Invalid root class",
                    []);
            return this.SR.length == 0
        };
        c.prototype.Ta = function () {
            return this.es.Jd
        };
        c.prototype.Cy = function (a, b) {
            b = b || [];
            return e(a).isArray() ? this.vpa(a, b) : g.isPlainObject(a) && a["class"] ? this.ypa(a, b) : g.isPlainObject(a) ? this.wpa(a, b) : e(a).isFunction() ? this.xpa(a, b) : this.zpa(a, b)
        };
        c.prototype.vpa = function (a, b) {
            for (var c = [], d = 0; d < a.length; d++) {
                b.push("Item[" + d + "]");
                c.push(this.Cy(a[d], b));
                b.pop()
            }
            return new p(b.slice(), c)
        };
        c.prototype.ypa = function (a, b) {
            var c = a["class"],
            d = f.An(a["class"]);
            if (d) {
                var e,
                c = {},
                g = {},
                h;
                for (h in a) {
                    b.push(h);
                    var k = a[h];
                    switch (h) {
                    case "class":
                        break;
                    case "scripts":
                        e = this.Cy(k, b);
                        break;
                    default:
                        d.hasAttribute(h) ? c[h] = this.Cy(k, b) : d.Cca(h) || d.Dca(h) ? g[h] = this.Cy(k, b) : this.cl(d.tz() + " object doesn't have any attribute named " + h, b)
                    }
                    b.pop()
                }
                return new j(b.slice(), d, a.id, c, g, e)
            }
            this.cl("Undefined class name: " + c, b.slice());
            return new q(b.slice(), r)
        };
        c.prototype.wpa = function (a, b) {
            var c = {},
            d;
            for (d in a) {
                b.push(d);
                c[d] = this.Cy(a[d], b);
                b.pop()
            }
            return new k(b.slice(), c)
        };
        c.prototype.xpa =
        function (a, b) {
            return new l(b.slice(), a)
        };
        c.prototype.zpa = function (a, b) {
            return new q(b.slice(), a)
        };
        c.prototype.D4 = function (a, b) {
            for (var c = !b || a.type == b ? [a] : [], d = 0, e = a.Pa(); d < e.length; d++)
                c = c.concat(this.D4(e[d], b));
            return c
        };
        c.prototype.Fja = function (a, b, c, d, e) {
            b.Jd = b.Ip.Cs(r, d, e, [c]);
            b.Jd.set("application", b.Jd);
            for (c = 0; c < a.length; c++) {
                var f = a[c];
                if (f != b)
                    f.Jd = f.Ip.Cs(b.Jd, d, e)
            }
        };
        c.prototype.Hha = function (a) {
            if (a.scripts)
                if (a.scripts.type == k.Vj)
                    for (var b in a.scripts.value)
                        this.Gha(a, b);
                else
                    this.cl("Invalid content.",
                        a.scripts.stack)
        };
        c.prototype.Gha = function (a, b) {
            var c = a.Jd,
            d = a.scripts.value[b];
            e(c[b]).isUndefined() ? d && d.type == l.Vj ? c[b] = function () {
                return d.Ln().apply(c, arguments)
            }
             : this.cl("Invalid content.", d.stack) : this.cl("Identifier: " + b + " is already in use", d.stack)
        };
        c.prototype.Fha = function (a, b) {
            for (var c = a.Jd, d = 0; d < b.length; d++) {
                var f = b[d],
                g = f.id;
                if (g)
                    e(c[g]).isUndefined() ? c[g] = f.Jd : this.cl("Identifier: " + g + " is arleady in use", f.stack)
            }
        };
        c.prototype.Iha = function (a, b) {
            for (var c = 0; c < a.length; c++) {
                var d =
                    a[c],
                e = d.attributes,
                f;
                for (f in e)
                    this.Eha(d, f, b)
            }
        };
        c.prototype.Eha = function (a, b, c) {
            var d = a.Ip;
            if (d.hasAttribute(b)) {
                var e = a.attributes[b].Ln();
                try {
                    e = d.sY(b)(e, c.Jd);
                    a.Jd.set(b, e)
                } catch (f) {
                    this.cl("Invalid value for property " + b + " of " + d.tz() + " instance", a.stack)
                }
            } else
                this.cl(d.tz() + " object doesn't have any property named " + b, a.stack)
        };
        c.prototype.Xha = function (a, b) {
            for (var c = 0; c < a.length; c++) {
                var d = a[c],
                e;
                for (e in d.Nv)
                    this.Wha(d, e, b)
            }
        };
        c.prototype.Wha = function (a, b, c) {
            var d = a.Ip,
            f = a.Jd,
            g = d.Cca(b),
            h = d.Dca(b);
            if (g || h) {
                var a = a.Nv[b],
                j = a.Ln();
                e(j).isFunction() ? f.bind(b, j, c.Jd, h, j) : typeof j == "string" ? f.bind(b, function () {
                    try {
                        eval("var event = arguments[0];" + j)
                    } catch (a) {
                        i(a)
                    }
                }, c.Jd, h, j) : this.cl("Invalid value.", a.stack)
            } else
                this.cl(d.tz() + " object doesn't have any event named " + b, a.stack)
        };
        c.prototype.cl = function (a, b) {
            this.SR.push("In " + b.join(" >> ") + ": " + a)
        };
        b.prototype.Pa = function () {
            return []
        };
        b.prototype.Ln = D();
        var j = d.extend(b, function (a, c, d, e, f, g) {
            b.call(this, j.Vj, a);
            this.Ip = c;
            this.id = d;
            this.attributes =
                e;
            this.Nv = f;
            this.scripts = g;
            this.Jd = r
        });
        j.prototype.Pa = function () {
            var a = this.Ip.kca(),
            b = [],
            c = e(this.attributes).clone();
            if (a)
                for (var d = 0; d < a.length; d++) {
                    var f = a[d];
                    if (c[f] != m) {
                        b.push(c[f]);
                        delete c[f]
                    }
                }
            return b = b.concat(e(c).values())
        };
        j.prototype.Ln = Q("Jd");
        j.Vj = "instance";
        var p = d.extend(b, function (a, c) {
            b.call(this, p.Vj, a);
            this.Lk = c
        });
        p.prototype.Pa = function () {
            return this.Lk.slice()
        };
        p.prototype.Ln = function () {
            for (var a = [], b = 0; b < this.Lk.length; b++)
                a.push(this.Lk[b].Ln());
            return a
        };
        p.Vj = "array";
        var k =
            d.extend(b, function (a, c) {
                b.call(this, k.Vj, a);
                this.value = c
            });
        k.prototype.Pa = function () {
            return e(this.value).values()
        };
        k.prototype.Ln = function () {
            var a = {},
            b;
            for (b in this.value)
                a[b] = this.value[b].Ln();
            return a
        };
        k.Vj = "dict";
        var l = d.extend(b, function (a, c) {
            b.call(this, l.Vj, a);
            this.value = c
        });
        l.prototype.Ln = Q("value");
        l.Vj = "function";
        var q = d.extend(b, function (a, c) {
            b.call(this, q.Vj, a);
            this.value = c
        });
        q.prototype.Ln = Q("value");
        q.Vj = "simple";
        return c
    });
    define("jW", "require,do,ll,bZ,dW,eU,r,dO,jt,bi,fK,kd,lk,ke,fg".split(","), function (a) {
        function b(a, b) {
            f.Za() && !f.le() && o.$d();
            var c = l.name,
            e = [];
            c && e.push(c);
            l.tF > 0 ? e.push("v:" + l.tF + "." + l.xF) : e.push("v:" + l.xF);
            t.log(e.join(" "));
            this.Qk = b;
            if (j.Cwa() || [f.Dw, f.nq].indexOf(f.browser()) >= 0) {
                this.yh = new d;
                if (c = this.Qk.get(TDV.PlayerSettings.BASE_DIR_URL)) {
                    c = j.Zs(c);
                    c[c.length - 1] != "/" && (c = c + "/")
                } else
                    c = j.getDirectory(this.Qk.get(TDV.PlayerSettings.SELECTED_SCRIPT_URL));
                this.Vda = this.Qk.get(TDV.PlayerSettings.QUERY_STRING_PARAMETERS);
                h.zxa(c, function (b) {
                    this.pba = b;
                    this.Woa(a)
                }
                    .bind(this))
            } else
                window.alert(q("web-server-required"))
        }
        var c = a("do"),
        e = a("ll");
        a("bZ");
        var g = a("dW"),
        d = a("eU"),
        f = a("r"),
        h = a("dO"),
        j = a("jt"),
        p = a("bi"),
        k = a("fK"),
        l = a("kd"),
        q = a("lk"),
        o = a("ke"),
        t = a("fg");
        b.prototype.Woa = function (a) {
            a.trigger(new TDV.KG(e.lga, {}, [], m));
            c.defer(function () {
                if (!this.yh.mxa(this.Qk.get(TDV.PlayerSettings.SCRIPT_DATA), this.Qk.get(TDV.PlayerSettings.CONTAINER), this.pba, this.Vda)) {
                    if (l.yza != "false") {
                        window.alert(this.i5());
                        return
                    }
                    t.log(this.i5())
                }
                this.Vha(a);
                this.Aha(this.Qk);
                this.Kha();
                p.mm(function () {
                    this.Isa()
                }
                    .bind(this))
            }
                .bind(this))
        };
        b.prototype.clear = function () {
            if (this.yh) {
                this.yh.ur.forEach(function (a) {
                    a.Jd.efa();
                    a.Ip.eF().forEach(function (b) {
                        switch (b) {
                        case "VideoPlayer":
                            a.Jd.stop();
                        case "MapPlayer":
                        case "PanoramaPlayer":
                        case "PhotoAlbumPlayer":
                        case "VideoPlayer":
                            a.Jd.set("viewerArea", r);
                            break;
                        case "ZoomImage":
                            a.Jd.set("image", r);
                            break;
                        case "Audio":
                            a.Jd.stop();
                            break;
                        case "Effect":
                            a.Jd.end();
                            break;
                        case "Media":
                            a.Jd.Mxa()
                        }
                    })
                });
                k.sxa();
                this.yh.Ta().clear();
                s = {};
                this.Qk = this.yh = r
            }
        };
        b.prototype.Sva = function (a) {
            return this.yh.Ta()[a]
        };
        b.prototype.oca = function (a) {
            if (a in s)
                return s[a].slice();
            var b = [];
            this.yh && this.yh.ur.forEach(function (d) {
                var e = d.Ip.eF();
                c(e).contains(a) && b.push(d.Jd)
            });
            s[a] = b;
            return b.slice()
        };
        var s = {};
        b.prototype.Cs = function (a) {
            var b = g.An(a);
            b || i("Invalid className: " + a);
            s = {};
            return b.Cs(this.yh.Ta(), this.pba, this.Vda)
        };
        b.prototype.i5 = function () {
            for (var a = this.yh.SR, b = ["Errors parsing script file:"], c = 0; c < a.length; c++)
                b.push(a[c]);
            return b.join("\n")
        };
        b.prototype.Vha = function (a) {
            this.yh.ur.forEach(function (b) {
                var d = b.Ip,
                e = b.Jd,
                f = b.id,
                g = d.eF();
                c.union(d.xY(), d.CY()).forEach(function (b) {
                    e.bind(b, function (c) {
                        a.trigger(new TDV.KG(b, c, g, f))
                    }, this, n)
                })
            });
            var b = this.yh.Ta().JH;
            b.bind(e.Hw, function () {
                b.Pza(e.Hw);
                a.cookiesEnabled = a.Cua = n;
                a.trigger(new TDV.KG(e.Hw, {}, [], m))
            }, this, n)
        };
        b.prototype.Aha = function (a) {
            this.yh.Ta().set("settings", a)
        };
        b.prototype.Kha = function () {
            var a = this.yh.Ta(),
            b = this;
            a.getByClassName = a.An = function () {
                return b.oca.apply(b,
                    arguments)
            };
            a.createInstance = a.Cs = function () {
                return b.Cs.apply(b, arguments)
            };
            a.isInstanceOfClass = a.tb = function () {
                return g.tb.apply(g, arguments)
            }
        };
        b.prototype.Isa = function () {
            this.yh.Ta().start()
        };
        b.Oza = function (a) {
            a.trigger(new TDV.KG(e.Sfa, {}, [], m))
        };
        return b
    });
    define("main", ["require", "jquery.mod", "jW"], function (a) {
        var b = a("jquery.mod"),
        c = a("jW");
        b(document).ready(function () {
            TDV.Da.Zya(c)
        })
    });
    (function (t, e) {
        e(t.THREE = t.THREE || {})
    })(this, function (t) {
        "use strict";
        const e = "135",
        n = 100,
        i = 300,
        r = 301,
        s = 302,
        a = 303,
        o = 304,
        l = 306,
        c = 307,
        h = 1e3,
        u = 1001,
        d = 1002,
        p = 1003,
        m = 1004,
        f = 1005,
        g = 1006,
        v = 1007,
        y = 1008,
        x = 1009,
        _ = 1012,
        M = 1014,
        b = 1015,
        w = 1016,
        S = 1020,
        T = 1022,
        E = 1023,
        A = 1026,
        L = 1027,
        R = 33776,
        C = 33777,
        P = 33778,
        D = 33779,
        I = 35840,
        N = 35841,
        z = 35842,
        B = 35843,
        F = 37492,
        O = 37496,
        U = 2300,
        H = 2301,
        G = 2302,
        k = 2400,
        V = 2401,
        W = 2402,
        j = 2500,
        q = 2501,
        X = 3e3,
        J = 3001,
        Y = 3007,
        Z = 3002,
        Q = 3004,
        K = 3005,
        $ = 3006,
        tt = 7680,
        et = 35044,
        nt = 35048,
        it = "300 es";
        class rt {
            addEventListener(t, e) {
                void 0 === this._listeners && (this._listeners = {});
                const n = this._listeners;
                void 0 === n[t] && (n[t] = []),
                -1 === n[t].indexOf(e) && n[t].push(e)
            }
            hasEventListener(t, e) {
                if (void 0 === this._listeners)
                    return !1;
                const n = this._listeners;
                return void 0 !== n[t] && -1 !== n[t].indexOf(e)
            }
            removeEventListener(t, e) {
                if (void 0 === this._listeners)
                    return;
                const n = this._listeners[t];
                if (void 0 !== n) {
                    const t = n.indexOf(e);
                    -1 !== t && n.splice(t, 1)
                }
            }
            dispatchEvent(t) {
                if (void 0 === this._listeners)
                    return;
                const e = this._listeners[t.type];
                if (void 0 !== e) {
                    t.target = this;
                    const n = e.slice(0);
                    for (let e = 0, i = n.length; e < i; e++)
                        n[e].call(this, t);
                    t.target = null
                }
            }
        }
        const st = [];
        for (let t = 0; t < 256; t++)
            st[t] = (t < 16 ? "0" : "") + t.toString(16);
        let at = 1234567;
        const ot = Math.PI / 180,
        lt = 180 / Math.PI;
        function ct() {
            const t = 4294967295 * Math.random() | 0,
            e = 4294967295 * Math.random() | 0,
            n = 4294967295 * Math.random() | 0,
            i = 4294967295 * Math.random() | 0;
            return (st[255 & t] + st[t >> 8 & 255] + st[t >> 16 & 255] + st[t >> 24 & 255] + "-" + st[255 & e] + st[e >> 8 & 255] + "-" + st[e >> 16 & 15 | 64] + st[e >> 24 & 255] + "-" + st[63 & n | 128] + st[n >> 8 & 255] + "-" + st[n >> 16 & 255] + st[n >> 24 & 255] + st[255 & i] + st[i >> 8 & 255] + st[i >> 16 & 255] + st[i >> 24 & 255]).toUpperCase()
        }
        function ht(t, e, n) {
            return Math.max(e, Math.min(n, t))
        }
        function ut(t, e) {
            return (t % e + e) % e
        }
        function dt(t, e, n) {
            return (1 - n) * t + n * e
        }
        function pt(t) {
            return 0 == (t & t - 1) && 0 !== t
        }
        function mt(t) {
            return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2))
        }
        function ft(t) {
            return Math.pow(2, Math.floor(Math.log(t) / Math.LN2))
        }
        var gt = Object.freeze({
            __proto__: null,
            DEG2RAD: ot,
            RAD2DEG: lt,
            generateUUID: ct,
            clamp: ht,
            euclideanModulo: ut,
            mapLinear: function (t, e, n, i, r) {
                return i + (t - e) * (r - i) / (n - e)
            },
            inverseLerp: function (t, e, n) {
                return t !== e ? (n - t) / (e - t) : 0
            },
            lerp: dt,
            damp: function (t, e, n, i) {
                return dt(t, e, 1 - Math.exp(-n * i))
            },
            pingpong: function (t, e = 1) {
                return e - Math.abs(ut(t, 2 * e) - e)
            },
            smoothstep: function (t, e, n) {
                return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t)
            },
            smootherstep: function (t, e, n) {
                return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10)
            },
            randInt: function (t, e) {
                return t + Math.floor(Math.random() * (e - t + 1))
            },
            randFloat: function (t, e) {
                return t + Math.random() * (e - t)
            },
            randFloatSpread: function (t) {
                return t * (.5 - Math.random())
            },
            seededRandom: function (t) {
                return void 0 !== t && (at = t % 2147483647),
                at = 16807 * at % 2147483647,
                (at - 1) / 2147483646
            },
            degToRad: function (t) {
                return t * ot
            },
            radToDeg: function (t) {
                return t * lt
            },
            isPowerOfTwo: pt,
            ceilPowerOfTwo: mt,
            floorPowerOfTwo: ft,
            setQuaternionFromProperEuler: function (t, e, n, i, r) {
                const s = Math.cos,
                a = Math.sin,
                o = s(n / 2),
                l = a(n / 2),
                c = s((e + i) / 2),
                h = a((e + i) / 2),
                u = s((e - i) / 2),
                d = a((e - i) / 2),
                p = s((i - e) / 2),
                m = a((i - e) / 2);
                switch (r) {
                case "XYX":
                    t.set(o * h, l * u, l * d, o * c);
                    break;
                case "YZY":
                    t.set(l * d, o * h, l * u, o * c);
                    break;
                case "ZXZ":
                    t.set(l * u, l * d, o * h, o * c);
                    break;
                case "XZX":
                    t.set(o * h, l * m, l * p, o * c);
                    break;
                case "YXY":
                    t.set(l * p, o * h, l * m, o * c);
                    break;
                case "ZYZ":
                    t.set(l * m, l * p, o * h, o * c);
                    break;
                default:
                    console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r);
                }
            }
        });
        class vt {
            constructor(t = 0, e = 0) {
                this.x = t,
                this.y = e
            }
            get width() {
                return this.x
            }
            set width(t) {
                this.x = t
            }
            get height() {
                return this.y
            }
            set height(t) {
                this.y = t
            }
            set(t, e) {
                return this.x = t,
                this.y = e,
                this
            }
            setScalar(t) {
                return this.x = t,
                this.y = t,
                this
            }
            setX(t) {
                return this.x = t,
                this
            }
            setY(t) {
                return this.y = t,
                this
            }
            setComponent(t, e) {
                switch (t) {
                case 0:
                    this.x = e;
                    break;
                case 1:
                    this.y = e;
                    break;
                default:
                    throw new Error("index is out of range: " + t);
                }
                return this
            }
            getComponent(t) {
                switch (t) {
                case 0:
                    return this.x;
                case 1:
                    return this.y;
                default:
                    throw new Error("index is out of range: " + t);
                }
            }
            clone() {
                return new this.constructor(this.x, this.y)
            }
            copy(t) {
                return this.x = t.x,
                this.y = t.y,
                this
            }
            add(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this)
            }
            addScalar(t) {
                return this.x += t,
                this.y += t,
                this
            }
            addVectors(t, e) {
                return this.x = t.x + e.x,
                this.y = t.y + e.y,
                this
            }
            addScaledVector(t, e) {
                return this.x += t.x * e,
                this.y += t.y * e,
                this
            }
            sub(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this)
            }
            subScalar(t) {
                return this.x -= t,
                this.y -= t,
                this
            }
            subVectors(t, e) {
                return this.x = t.x - e.x,
                this.y = t.y - e.y,
                this
            }
            multiply(t) {
                return this.x *= t.x,
                this.y *= t.y,
                this
            }
            multiplyScalar(t) {
                return this.x *= t,
                this.y *= t,
                this
            }
            divide(t) {
                return this.x /= t.x,
                this.y /= t.y,
                this
            }
            divideScalar(t) {
                return this.multiplyScalar(1 / t)
            }
            applyMatrix3(t) {
                const e = this.x,
                n = this.y,
                i = t.elements;
                return this.x = i[0] * e + i[3] * n + i[6],
                this.y = i[1] * e + i[4] * n + i[7],
                this
            }
            min(t) {
                return this.x = Math.min(this.x, t.x),
                this.y = Math.min(this.y, t.y),
                this
            }
            max(t) {
                return this.x = Math.max(this.x, t.x),
                this.y = Math.max(this.y, t.y),
                this
            }
            clamp(t, e) {
                return this.x = Math.max(t.x, Math.min(e.x, this.x)),
                this.y = Math.max(t.y, Math.min(e.y, this.y)),
                this
            }
            clampScalar(t, e) {
                return this.x = Math.max(t, Math.min(e, this.x)),
                this.y = Math.max(t, Math.min(e, this.y)),
                this
            }
            clampLength(t, e) {
                const n = this.length();
                return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
            }
            floor() {
                return this.x = Math.floor(this.x),
                this.y = Math.floor(this.y),
                this
            }
            ceil() {
                return this.x = Math.ceil(this.x),
                this.y = Math.ceil(this.y),
                this
            }
            round() {
                return this.x = Math.round(this.x),
                this.y = Math.round(this.y),
                this
            }
            roundToZero() {
                return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x),
                this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y),
                this
            }
            negate() {
                return this.x = -this.x,
                this.y = -this.y,
                this
            }
            dot(t) {
                return this.x * t.x + this.y * t.y
            }
            cross(t) {
                return this.x * t.y - this.y * t.x
            }
            lengthSq() {
                return this.x * this.x + this.y * this.y
            }
            length() {
                return Math.sqrt(this.x * this.x + this.y * this.y)
            }
            manhattanLength() {
                return Math.abs(this.x) + Math.abs(this.y)
            }
            normalize() {
                return this.divideScalar(this.length() || 1)
            }
            angle() {
                return Math.atan2(-this.y, -this.x) + Math.PI
            }
            distanceTo(t) {
                return Math.sqrt(this.distanceToSquared(t))
            }
            distanceToSquared(t) {
                const e = this.x - t.x,
                n = this.y - t.y;
                return e * e + n * n
            }
            manhattanDistanceTo(t) {
                return Math.abs(this.x - t.x) + Math.abs(this.y - t.y)
            }
            setLength(t) {
                return this.normalize().multiplyScalar(t)
            }
            lerp(t, e) {
                return this.x += (t.x - this.x) * e,
                this.y += (t.y - this.y) * e,
                this
            }
            lerpVectors(t, e, n) {
                return this.x = t.x + (e.x - t.x) * n,
                this.y = t.y + (e.y - t.y) * n,
                this
            }
            equals(t) {
                return t.x === this.x && t.y === this.y
            }
            fromArray(t, e = 0) {
                return this.x = t[e],
                this.y = t[e + 1],
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this.x,
                t[e + 1] = this.y,
                t
            }
            fromBufferAttribute(t, e, n) {
                return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),
                this.x = t.getX(e),
                this.y = t.getY(e),
                this
            }
            rotateAround(t, e) {
                const n = Math.cos(e),
                i = Math.sin(e),
                r = this.x - t.x,
                s = this.y - t.y;
                return this.x = r * n - s * i + t.x,
                this.y = r * i + s * n + t.y,
                this
            }
            random() {
                return this.x = Math.random(),
                this.y = Math.random(),
                this
            }
             * [Symbol.iterator]() {
                yield this.x,
                yield this.y
            }
        }
        vt.prototype.isVector2 = !0;
        class yt {
            constructor() {
                this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1],
                arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")
            }
            set(t, e, n, i, r, s, a, o, l) {
                const c = this.elements;
                return c[0] = t,
                c[1] = i,
                c[2] = a,
                c[3] = e,
                c[4] = r,
                c[5] = o,
                c[6] = n,
                c[7] = s,
                c[8] = l,
                this
            }
            identity() {
                return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1),
                this
            }
            copy(t) {
                const e = this.elements,
                n = t.elements;
                return e[0] = n[0],
                e[1] = n[1],
                e[2] = n[2],
                e[3] = n[3],
                e[4] = n[4],
                e[5] = n[5],
                e[6] = n[6],
                e[7] = n[7],
                e[8] = n[8],
                this
            }
            extractBasis(t, e, n) {
                return t.setFromMatrix3Column(this, 0),
                e.setFromMatrix3Column(this, 1),
                n.setFromMatrix3Column(this, 2),
                this
            }
            setFromMatrix4(t) {
                const e = t.elements;
                return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]),
                this
            }
            multiply(t) {
                return this.multiplyMatrices(this, t)
            }
            premultiply(t) {
                return this.multiplyMatrices(t, this)
            }
            multiplyMatrices(t, e) {
                const n = t.elements,
                i = e.elements,
                r = this.elements,
                s = n[0],
                a = n[3],
                o = n[6],
                l = n[1],
                c = n[4],
                h = n[7],
                u = n[2],
                d = n[5],
                p = n[8],
                m = i[0],
                f = i[3],
                g = i[6],
                v = i[1],
                y = i[4],
                x = i[7],
                _ = i[2],
                M = i[5],
                b = i[8];
                return r[0] = s * m + a * v + o * _,
                r[3] = s * f + a * y + o * M,
                r[6] = s * g + a * x + o * b,
                r[1] = l * m + c * v + h * _,
                r[4] = l * f + c * y + h * M,
                r[7] = l * g + c * x + h * b,
                r[2] = u * m + d * v + p * _,
                r[5] = u * f + d * y + p * M,
                r[8] = u * g + d * x + p * b,
                this
            }
            multiplyScalar(t) {
                const e = this.elements;
                return e[0] *= t,
                e[3] *= t,
                e[6] *= t,
                e[1] *= t,
                e[4] *= t,
                e[7] *= t,
                e[2] *= t,
                e[5] *= t,
                e[8] *= t,
                this
            }
            determinant() {
                const t = this.elements,
                e = t[0],
                n = t[1],
                i = t[2],
                r = t[3],
                s = t[4],
                a = t[5],
                o = t[6],
                l = t[7],
                c = t[8];
                return e * s * c - e * a * l - n * r * c + n * a * o + i * r * l - i * s * o
            }
            invert() {
                const t = this.elements,
                e = t[0],
                n = t[1],
                i = t[2],
                r = t[3],
                s = t[4],
                a = t[5],
                o = t[6],
                l = t[7],
                c = t[8],
                h = c * s - a * l,
                u = a * o - c * r,
                d = l * r - s * o,
                p = e * h + n * u + i * d;
                if (0 === p)
                    return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);
                const m = 1 / p;
                return t[0] = h * m,
                t[1] = (i * l - c * n) * m,
                t[2] = (a * n - i * s) * m,
                t[3] = u * m,
                t[4] = (c * e - i * o) * m,
                t[5] = (i * r - a * e) * m,
                t[6] = d * m,
                t[7] = (n * o - l * e) * m,
                t[8] = (s * e - n * r) * m,
                this
            }
            transpose() {
                let t;
                const e = this.elements;
                return t = e[1],
                e[1] = e[3],
                e[3] = t,
                t = e[2],
                e[2] = e[6],
                e[6] = t,
                t = e[5],
                e[5] = e[7],
                e[7] = t,
                this
            }
            getNormalMatrix(t) {
                return this.setFromMatrix4(t).invert().transpose()
            }
            transposeIntoArray(t) {
                const e = this.elements;
                return t[0] = e[0],
                t[1] = e[3],
                t[2] = e[6],
                t[3] = e[1],
                t[4] = e[4],
                t[5] = e[7],
                t[6] = e[2],
                t[7] = e[5],
                t[8] = e[8],
                this
            }
            setUvTransform(t, e, n, i, r, s, a) {
                const o = Math.cos(r),
                l = Math.sin(r);
                return this.set(n * o, n * l, -n * (o * s + l * a) + s + t, -i * l, i * o, -i * (-l * s + o * a) + a + e, 0, 0, 1),
                this
            }
            scale(t, e) {
                const n = this.elements;
                return n[0] *= t,
                n[3] *= t,
                n[6] *= t,
                n[1] *= e,
                n[4] *= e,
                n[7] *= e,
                this
            }
            rotate(t) {
                const e = Math.cos(t),
                n = Math.sin(t),
                i = this.elements,
                r = i[0],
                s = i[3],
                a = i[6],
                o = i[1],
                l = i[4],
                c = i[7];
                return i[0] = e * r + n * o,
                i[3] = e * s + n * l,
                i[6] = e * a + n * c,
                i[1] = -n * r + e * o,
                i[4] = -n * s + e * l,
                i[7] = -n * a + e * c,
                this
            }
            translate(t, e) {
                const n = this.elements;
                return n[0] += t * n[2],
                n[3] += t * n[5],
                n[6] += t * n[8],
                n[1] += e * n[2],
                n[4] += e * n[5],
                n[7] += e * n[8],
                this
            }
            equals(t) {
                const e = this.elements,
                n = t.elements;
                for (let t = 0; t < 9; t++)
                    if (e[t] !== n[t])
                        return !1;
                return !0
            }
            fromArray(t, e = 0) {
                for (let n = 0; n < 9; n++)
                    this.elements[n] = t[n + e];
                return this
            }
            toArray(t = [], e = 0) {
                const n = this.elements;
                return t[e] = n[0],
                t[e + 1] = n[1],
                t[e + 2] = n[2],
                t[e + 3] = n[3],
                t[e + 4] = n[4],
                t[e + 5] = n[5],
                t[e + 6] = n[6],
                t[e + 7] = n[7],
                t[e + 8] = n[8],
                t
            }
            clone() {
                return new this.constructor().fromArray(this.elements)
            }
        }
        function xt(t) {
            if (0 === t.length)
                return -1 / 0;
            let e = t[0];
            for (let n = 1, i = t.length; n < i; ++n)
                t[n] > e && (e = t[n]);
            return e
        }
        yt.prototype.isMatrix3 = !0;
        const _t = {
            Int8Array: Int8Array,
            Uint8Array: Uint8Array,
            Uint8ClampedArray: Uint8ClampedArray,
            Int16Array: Int16Array,
            Uint16Array: Uint16Array,
            Int32Array: Int32Array,
            Uint32Array: Uint32Array,
            Float32Array: Float32Array,
            Float64Array: Float64Array
        };
        function Mt(t, e) {
            return new _t[t](e)
        }
        function bt(t) {
            return document.createElementNS("http://www.w3.org/1999/xhtml", t)
        }
        function wt(t, e = 0) {
            let n = 3735928559 ^ e,
            i = 1103547991 ^ e;
            for (let e, r = 0; r < t.length; r++)
                e = t.charCodeAt(r), n = Math.imul(n ^ e, 2654435761), i = Math.imul(i ^ e, 1597334677);
            return n = Math.imul(n ^ n >>> 16, 2246822507) ^ Math.imul(i ^ i >>> 13, 3266489909),
            i = Math.imul(i ^ i >>> 16, 2246822507) ^ Math.imul(n ^ n >>> 13, 3266489909),
            4294967296 * (2097151 & i) + (n >>> 0)
        }
        let St;
        class Tt {
            static getDataURL(t) {
                if (/^data:/i.test(t.src))
                    return t.src;
                if ("undefined" == typeof HTMLCanvasElement)
                    return t.src;
                let e;
                if (t instanceof HTMLCanvasElement)
                    e = t;
                else {
                    void 0 === St && (St = bt("canvas")),
                    St.width = t.width,
                    St.height = t.height;
                    const n = St.getContext("2d");
                    t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height),
                    e = St
                }
                return e.width > 2048 || e.height > 2048 ? (console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons", t), e.toDataURL("image/jpeg", .6)) : e.toDataURL("image/png")
            }
        }
        let Et = 0;
        class At extends rt {
            constructor(t = At.DEFAULT_IMAGE, e = At.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, s = 1008, a = 1023, o = 1009, l = 1, c = 3e3) {
                super(),
                Object.defineProperty(this, "id", {
                    value: Et++
                }),
                this.uuid = ct(),
                this.name = "",
                this.image = t,
                this.mipmaps = [],
                this.mapping = e,
                this.wrapS = n,
                this.wrapT = i,
                this.magFilter = r,
                this.minFilter = s,
                this.anisotropy = l,
                this.format = a,
                this.internalFormat = null,
                this.type = o,
                this.offset = new vt(0, 0),
                this.repeat = new vt(1, 1),
                this.center = new vt(0, 0),
                this.rotation = 0,
                this.matrixAutoUpdate = !0,
                this.matrix = new yt,
                this.generateMipmaps = !0,
                this.premultiplyAlpha = !1,
                this.flipY = !0,
                this.unpackAlignment = 4,
                this.encoding = c,
                this.userData = {},
                this.version = 0,
                this.onUpdate = null,
                this.isRenderTargetTexture = !1
            }
            updateMatrix() {
                this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y)
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.name = t.name,
                this.image = t.image,
                this.mipmaps = t.mipmaps.slice(0),
                this.mapping = t.mapping,
                this.wrapS = t.wrapS,
                this.wrapT = t.wrapT,
                this.magFilter = t.magFilter,
                this.minFilter = t.minFilter,
                this.anisotropy = t.anisotropy,
                this.format = t.format,
                this.internalFormat = t.internalFormat,
                this.type = t.type,
                this.offset.copy(t.offset),
                this.repeat.copy(t.repeat),
                this.center.copy(t.center),
                this.rotation = t.rotation,
                this.matrixAutoUpdate = t.matrixAutoUpdate,
                this.matrix.copy(t.matrix),
                this.generateMipmaps = t.generateMipmaps,
                this.premultiplyAlpha = t.premultiplyAlpha,
                this.flipY = t.flipY,
                this.unpackAlignment = t.unpackAlignment,
                this.encoding = t.encoding,
                this.userData = JSON.parse(JSON.stringify(t.userData)),
                this
            }
            toJSON(t) {
                const e = void 0 === t || "string" == typeof t;
                if (!e && void 0 !== t.textures[this.uuid])
                    return t.textures[this.uuid];
                const n = {
                    metadata: {
                        version: 4.5,
                        type: "Texture",
                        generator: "Texture.toJSON"
                    },
                    uuid: this.uuid,
                    name: this.name,
                    mapping: this.mapping,
                    repeat: [this.repeat.x, this.repeat.y],
                    offset: [this.offset.x, this.offset.y],
                    center: [this.center.x, this.center.y],
                    rotation: this.rotation,
                    wrap: [this.wrapS, this.wrapT],
                    format: this.format,
                    type: this.type,
                    encoding: this.encoding,
                    minFilter: this.minFilter,
                    magFilter: this.magFilter,
                    anisotropy: this.anisotropy,
                    flipY: this.flipY,
                    premultiplyAlpha: this.premultiplyAlpha,
                    unpackAlignment: this.unpackAlignment
                };
                if (void 0 !== this.image) {
                    const i = this.image;
                    if (void 0 === i.uuid && (i.uuid = ct()), !e && void 0 === t.images[i.uuid]) {
                        let e;
                        if (Array.isArray(i)) {
                            e = [];
                            for (let t = 0, n = i.length; t < n; t++)
                                i[t].isDataTexture ? e.push(Lt(i[t].image)) : e.push(Lt(i[t]))
                        } else
                            e = Lt(i);
                        t.images[i.uuid] = {
                            uuid: i.uuid,
                            url: e
                        }
                    }
                    n.image = i.uuid
                }
                return "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData),
                e || (t.textures[this.uuid] = n),
                n
            }
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
            transformUv(t) {
                if (this.mapping !== i)
                    return t;
                if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1)
                    switch (this.wrapS) {
                    case h:
                        t.x = t.x - Math.floor(t.x);
                        break;
                    case u:
                        t.x = t.x < 0 ? 0 : 1;
                        break;
                    case d:
                        1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x);
                    }
                if (t.y < 0 || t.y > 1)
                    switch (this.wrapT) {
                    case h:
                        t.y = t.y - Math.floor(t.y);
                        break;
                    case u:
                        t.y = t.y < 0 ? 0 : 1;
                        break;
                    case d:
                        1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y);
                    }
                return this.flipY && (t.y = 1 - t.y),
                t
            }
            set needsUpdate(t) {
                !0 === t && this.version++
            }
        }
        function Lt(t) {
            return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? Tt.getDataURL(t) : t.data ? {
                data: Array.prototype.slice.call(t.data),
                width: t.width,
                height: t.height,
                type: t.data.constructor.name
            }
             : (console.warn("THREE.Texture: Unable to serialize Texture."), {})
        }
        At.DEFAULT_IMAGE = void 0,
        At.DEFAULT_MAPPING = i,
        At.prototype.isTexture = !0;
        class Rt {
            constructor(t = 0, e = 0, n = 0, i = 1) {
                this.x = t,
                this.y = e,
                this.z = n,
                this.w = i
            }
            get width() {
                return this.z
            }
            set width(t) {
                this.z = t
            }
            get height() {
                return this.w
            }
            set height(t) {
                this.w = t
            }
            set(t, e, n, i) {
                return this.x = t,
                this.y = e,
                this.z = n,
                this.w = i,
                this
            }
            setScalar(t) {
                return this.x = t,
                this.y = t,
                this.z = t,
                this.w = t,
                this
            }
            setX(t) {
                return this.x = t,
                this
            }
            setY(t) {
                return this.y = t,
                this
            }
            setZ(t) {
                return this.z = t,
                this
            }
            setW(t) {
                return this.w = t,
                this
            }
            setComponent(t, e) {
                switch (t) {
                case 0:
                    this.x = e;
                    break;
                case 1:
                    this.y = e;
                    break;
                case 2:
                    this.z = e;
                    break;
                case 3:
                    this.w = e;
                    break;
                default:
                    throw new Error("index is out of range: " + t);
                }
                return this
            }
            getComponent(t) {
                switch (t) {
                case 0:
                    return this.x;
                case 1:
                    return this.y;
                case 2:
                    return this.z;
                case 3:
                    return this.w;
                default:
                    throw new Error("index is out of range: " + t);
                }
            }
            clone() {
                return new this.constructor(this.x, this.y, this.z, this.w)
            }
            copy(t) {
                return this.x = t.x,
                this.y = t.y,
                this.z = t.z,
                this.w = void 0 !== t.w ? t.w : 1,
                this
            }
            add(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this)
            }
            addScalar(t) {
                return this.x += t,
                this.y += t,
                this.z += t,
                this.w += t,
                this
            }
            addVectors(t, e) {
                return this.x = t.x + e.x,
                this.y = t.y + e.y,
                this.z = t.z + e.z,
                this.w = t.w + e.w,
                this
            }
            addScaledVector(t, e) {
                return this.x += t.x * e,
                this.y += t.y * e,
                this.z += t.z * e,
                this.w += t.w * e,
                this
            }
            sub(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this)
            }
            subScalar(t) {
                return this.x -= t,
                this.y -= t,
                this.z -= t,
                this.w -= t,
                this
            }
            subVectors(t, e) {
                return this.x = t.x - e.x,
                this.y = t.y - e.y,
                this.z = t.z - e.z,
                this.w = t.w - e.w,
                this
            }
            multiply(t) {
                return this.x *= t.x,
                this.y *= t.y,
                this.z *= t.z,
                this.w *= t.w,
                this
            }
            multiplyScalar(t) {
                return this.x *= t,
                this.y *= t,
                this.z *= t,
                this.w *= t,
                this
            }
            applyMatrix4(t) {
                const e = this.x,
                n = this.y,
                i = this.z,
                r = this.w,
                s = t.elements;
                return this.x = s[0] * e + s[4] * n + s[8] * i + s[12] * r,
                this.y = s[1] * e + s[5] * n + s[9] * i + s[13] * r,
                this.z = s[2] * e + s[6] * n + s[10] * i + s[14] * r,
                this.w = s[3] * e + s[7] * n + s[11] * i + s[15] * r,
                this
            }
            divideScalar(t) {
                return this.multiplyScalar(1 / t)
            }
            setAxisAngleFromQuaternion(t) {
                this.w = 2 * Math.acos(t.w);
                const e = Math.sqrt(1 - t.w * t.w);
                return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e),
                this
            }
            setAxisAngleFromRotationMatrix(t) {
                let e,
                n,
                i,
                r;
                const s = .01,
                a = .1,
                o = t.elements,
                l = o[0],
                c = o[4],
                h = o[8],
                u = o[1],
                d = o[5],
                p = o[9],
                m = o[2],
                f = o[6],
                g = o[10];
                if (Math.abs(c - u) < s && Math.abs(h - m) < s && Math.abs(p - f) < s) {
                    if (Math.abs(c + u) < a && Math.abs(h + m) < a && Math.abs(p + f) < a && Math.abs(l + d + g - 3) < a)
                        return this.set(1, 0, 0, 0), this;
                    e = Math.PI;
                    const t = (l + 1) / 2,
                    o = (d + 1) / 2,
                    v = (g + 1) / 2,
                    y = (c + u) / 4,
                    x = (h + m) / 4,
                    _ = (p + f) / 4;
                    return t > o && t > v ? t < s ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = y / n, r = x / n) : o > v ? o < s ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = y / i, r = _ / i) : v < s ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(v), n = x / r, i = _ / r),
                    this.set(n, i, r, e),
                    this
                }
                let v = Math.sqrt((f - p) * (f - p) + (h - m) * (h - m) + (u - c) * (u - c));
                return Math.abs(v) < .001 && (v = 1),
                this.x = (f - p) / v,
                this.y = (h - m) / v,
                this.z = (u - c) / v,
                this.w = Math.acos((l + d + g - 1) / 2),
                this
            }
            min(t) {
                return this.x = Math.min(this.x, t.x),
                this.y = Math.min(this.y, t.y),
                this.z = Math.min(this.z, t.z),
                this.w = Math.min(this.w, t.w),
                this
            }
            max(t) {
                return this.x = Math.max(this.x, t.x),
                this.y = Math.max(this.y, t.y),
                this.z = Math.max(this.z, t.z),
                this.w = Math.max(this.w, t.w),
                this
            }
            clamp(t, e) {
                return this.x = Math.max(t.x, Math.min(e.x, this.x)),
                this.y = Math.max(t.y, Math.min(e.y, this.y)),
                this.z = Math.max(t.z, Math.min(e.z, this.z)),
                this.w = Math.max(t.w, Math.min(e.w, this.w)),
                this
            }
            clampScalar(t, e) {
                return this.x = Math.max(t, Math.min(e, this.x)),
                this.y = Math.max(t, Math.min(e, this.y)),
                this.z = Math.max(t, Math.min(e, this.z)),
                this.w = Math.max(t, Math.min(e, this.w)),
                this
            }
            clampLength(t, e) {
                const n = this.length();
                return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
            }
            floor() {
                return this.x = Math.floor(this.x),
                this.y = Math.floor(this.y),
                this.z = Math.floor(this.z),
                this.w = Math.floor(this.w),
                this
            }
            ceil() {
                return this.x = Math.ceil(this.x),
                this.y = Math.ceil(this.y),
                this.z = Math.ceil(this.z),
                this.w = Math.ceil(this.w),
                this
            }
            round() {
                return this.x = Math.round(this.x),
                this.y = Math.round(this.y),
                this.z = Math.round(this.z),
                this.w = Math.round(this.w),
                this
            }
            roundToZero() {
                return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x),
                this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y),
                this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z),
                this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w),
                this
            }
            negate() {
                return this.x = -this.x,
                this.y = -this.y,
                this.z = -this.z,
                this.w = -this.w,
                this
            }
            dot(t) {
                return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w
            }
            lengthSq() {
                return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
            }
            length() {
                return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)
            }
            manhattanLength() {
                return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w)
            }
            normalize() {
                return this.divideScalar(this.length() || 1)
            }
            setLength(t) {
                return this.normalize().multiplyScalar(t)
            }
            lerp(t, e) {
                return this.x += (t.x - this.x) * e,
                this.y += (t.y - this.y) * e,
                this.z += (t.z - this.z) * e,
                this.w += (t.w - this.w) * e,
                this
            }
            lerpVectors(t, e, n) {
                return this.x = t.x + (e.x - t.x) * n,
                this.y = t.y + (e.y - t.y) * n,
                this.z = t.z + (e.z - t.z) * n,
                this.w = t.w + (e.w - t.w) * n,
                this
            }
            equals(t) {
                return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w
            }
            fromArray(t, e = 0) {
                return this.x = t[e],
                this.y = t[e + 1],
                this.z = t[e + 2],
                this.w = t[e + 3],
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this.x,
                t[e + 1] = this.y,
                t[e + 2] = this.z,
                t[e + 3] = this.w,
                t
            }
            fromBufferAttribute(t, e, n) {
                return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),
                this.x = t.getX(e),
                this.y = t.getY(e),
                this.z = t.getZ(e),
                this.w = t.getW(e),
                this
            }
            random() {
                return this.x = Math.random(),
                this.y = Math.random(),
                this.z = Math.random(),
                this.w = Math.random(),
                this
            }
             * [Symbol.iterator]() {
                yield this.x,
                yield this.y,
                yield this.z,
                yield this.w
            }
        }
        Rt.prototype.isVector4 = !0;
        class Ct extends rt {
            constructor(t, e, n = {}) {
                super(),
                this.width = t,
                this.height = e,
                this.depth = 1,
                this.scissor = new Rt(0, 0, t, e),
                this.scissorTest = !1,
                this.viewport = new Rt(0, 0, t, e),
                this.texture = new At(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding),
                this.texture.isRenderTargetTexture = !0,
                this.texture.image = {
                    width: t,
                    height: e,
                    depth: 1
                },
                this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps,
                this.texture.internalFormat = void 0 !== n.internalFormat ? n.internalFormat : null,
                this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : g,
                this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer,
                this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer,
                this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null
            }
            setTexture(t) {
                t.image = {
                    width: this.width,
                    height: this.height,
                    depth: this.depth
                },
                this.texture = t
            }
            setSize(t, e, n = 1) {
                this.width === t && this.height === e && this.depth === n || (this.width = t, this.height = e, this.depth = n, this.texture.image.width = t, this.texture.image.height = e, this.texture.image.depth = n, this.dispose()),
                this.viewport.set(0, 0, t, e),
                this.scissor.set(0, 0, t, e)
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.width = t.width,
                this.height = t.height,
                this.depth = t.depth,
                this.viewport.copy(t.viewport),
                this.texture = t.texture.clone(),
                this.texture.image = {
                    ...this.texture.image
                },
                this.depthBuffer = t.depthBuffer,
                this.stencilBuffer = t.stencilBuffer,
                this.depthTexture = t.depthTexture,
                this
            }
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
        }
        Ct.prototype.isWebGLRenderTarget = !0;
        class Pt extends Ct {
            constructor(t, e, n) {
                super(t, e);
                const i = this.texture;
                this.texture = [];
                for (let t = 0; t < n; t++)
                    this.texture[t] = i.clone()
            }
            setSize(t, e, n = 1) {
                if (this.width !== t || this.height !== e || this.depth !== n) {
                    this.width = t,
                    this.height = e,
                    this.depth = n;
                    for (let i = 0, r = this.texture.length; i < r; i++)
                        this.texture[i].image.width = t, this.texture[i].image.height = e, this.texture[i].image.depth = n;
                    this.dispose()
                }
                return this.viewport.set(0, 0, t, e),
                this.scissor.set(0, 0, t, e),
                this
            }
            copy(t) {
                this.dispose(),
                this.width = t.width,
                this.height = t.height,
                this.depth = t.depth,
                this.viewport.set(0, 0, this.width, this.height),
                this.scissor.set(0, 0, this.width, this.height),
                this.depthBuffer = t.depthBuffer,
                this.stencilBuffer = t.stencilBuffer,
                this.depthTexture = t.depthTexture,
                this.texture.length = 0;
                for (let e = 0, n = t.texture.length; e < n; e++)
                    this.texture[e] = t.texture[e].clone();
                return this
            }
        }
        Pt.prototype.isWebGLMultipleRenderTargets = !0;
        class Dt extends Ct {
            constructor(t, e, n = {}) {
                super(t, e, n),
                this.samples = 4,
                this.ignoreDepthForMultisampleCopy = void 0 === n.ignoreDepth || n.ignoreDepth,
                this.useRenderToTexture = void 0 !== n.useRenderToTexture && n.useRenderToTexture,
                this.useRenderbuffer = !1 === this.useRenderToTexture
            }
            copy(t) {
                return super.copy.call(this, t),
                this.samples = t.samples,
                this.useRenderToTexture = t.useRenderToTexture,
                this.useRenderbuffer = t.useRenderbuffer,
                this
            }
        }
        Dt.prototype.isWebGLMultisampleRenderTarget = !0;
        class It {
            constructor(t = 0, e = 0, n = 0, i = 1) {
                this._x = t,
                this._y = e,
                this._z = n,
                this._w = i
            }
            static slerp(t, e, n, i) {
                return console.warn("THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead."),
                n.slerpQuaternions(t, e, i)
            }
            static slerpFlat(t, e, n, i, r, s, a) {
                let o = n[i + 0],
                l = n[i + 1],
                c = n[i + 2],
                h = n[i + 3];
                const u = r[s + 0],
                d = r[s + 1],
                p = r[s + 2],
                m = r[s + 3];
                if (0 === a)
                    return t[e + 0] = o, t[e + 1] = l, t[e + 2] = c, void(t[e + 3] = h);
                if (1 === a)
                    return t[e + 0] = u, t[e + 1] = d, t[e + 2] = p, void(t[e + 3] = m);
                if (h !== m || o !== u || l !== d || c !== p) {
                    let t = 1 - a;
                    const e = o * u + l * d + c * p + h * m,
                    n = e >= 0 ? 1 : -1,
                    i = 1 - e * e;
                    if (i > Number.EPSILON) {
                        const r = Math.sqrt(i),
                        s = Math.atan2(r, e * n);
                        t = Math.sin(t * s) / r,
                        a = Math.sin(a * s) / r
                    }
                    const r = a * n;
                    if (o = o * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + m * r, t === 1 - a) {
                        const t = 1 / Math.sqrt(o * o + l * l + c * c + h * h);
                        o *= t,
                        l *= t,
                        c *= t,
                        h *= t
                    }
                }
                t[e] = o,
                t[e + 1] = l,
                t[e + 2] = c,
                t[e + 3] = h
            }
            static multiplyQuaternionsFlat(t, e, n, i, r, s) {
                const a = n[i],
                o = n[i + 1],
                l = n[i + 2],
                c = n[i + 3],
                h = r[s],
                u = r[s + 1],
                d = r[s + 2],
                p = r[s + 3];
                return t[e] = a * p + c * h + o * d - l * u,
                t[e + 1] = o * p + c * u + l * h - a * d,
                t[e + 2] = l * p + c * d + a * u - o * h,
                t[e + 3] = c * p - a * h - o * u - l * d,
                t
            }
            get x() {
                return this._x
            }
            set x(t) {
                this._x = t,
                this._onChangeCallback()
            }
            get y() {
                return this._y
            }
            set y(t) {
                this._y = t,
                this._onChangeCallback()
            }
            get z() {
                return this._z
            }
            set z(t) {
                this._z = t,
                this._onChangeCallback()
            }
            get w() {
                return this._w
            }
            set w(t) {
                this._w = t,
                this._onChangeCallback()
            }
            set(t, e, n, i) {
                return this._x = t,
                this._y = e,
                this._z = n,
                this._w = i,
                this._onChangeCallback(),
                this
            }
            clone() {
                return new this.constructor(this._x, this._y, this._z, this._w)
            }
            copy(t) {
                return this._x = t.x,
                this._y = t.y,
                this._z = t.z,
                this._w = t.w,
                this._onChangeCallback(),
                this
            }
            setFromEuler(t, e) {
                if (!t || !t.isEuler)
                    throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");
                const n = t._x,
                i = t._y,
                r = t._z,
                s = t._order,
                a = Math.cos,
                o = Math.sin,
                l = a(n / 2),
                c = a(i / 2),
                h = a(r / 2),
                u = o(n / 2),
                d = o(i / 2),
                p = o(r / 2);
                switch (s) {
                case "XYZ":
                    this._x = u * c * h + l * d * p,
                    this._y = l * d * h - u * c * p,
                    this._z = l * c * p + u * d * h,
                    this._w = l * c * h - u * d * p;
                    break;
                case "YXZ":
                    this._x = u * c * h + l * d * p,
                    this._y = l * d * h - u * c * p,
                    this._z = l * c * p - u * d * h,
                    this._w = l * c * h + u * d * p;
                    break;
                case "ZXY":
                    this._x = u * c * h - l * d * p,
                    this._y = l * d * h + u * c * p,
                    this._z = l * c * p + u * d * h,
                    this._w = l * c * h - u * d * p;
                    break;
                case "ZYX":
                    this._x = u * c * h - l * d * p,
                    this._y = l * d * h + u * c * p,
                    this._z = l * c * p - u * d * h,
                    this._w = l * c * h + u * d * p;
                    break;
                case "YZX":
                    this._x = u * c * h + l * d * p,
                    this._y = l * d * h + u * c * p,
                    this._z = l * c * p - u * d * h,
                    this._w = l * c * h - u * d * p;
                    break;
                case "XZY":
                    this._x = u * c * h - l * d * p,
                    this._y = l * d * h - u * c * p,
                    this._z = l * c * p + u * d * h,
                    this._w = l * c * h + u * d * p;
                    break;
                default:
                    console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + s);
                }
                return !1 !== e && this._onChangeCallback(),
                this
            }
            setFromAxisAngle(t, e) {
                const n = e / 2,
                i = Math.sin(n);
                return this._x = t.x * i,
                this._y = t.y * i,
                this._z = t.z * i,
                this._w = Math.cos(n),
                this._onChangeCallback(),
                this
            }
            setFromRotationMatrix(t) {
                const e = t.elements,
                n = e[0],
                i = e[4],
                r = e[8],
                s = e[1],
                a = e[5],
                o = e[9],
                l = e[2],
                c = e[6],
                h = e[10],
                u = n + a + h;
                if (u > 0) {
                    const t = .5 / Math.sqrt(u + 1);
                    this._w = .25 / t,
                    this._x = (c - o) * t,
                    this._y = (r - l) * t,
                    this._z = (s - i) * t
                } else if (n > a && n > h) {
                    const t = 2 * Math.sqrt(1 + n - a - h);
                    this._w = (c - o) / t,
                    this._x = .25 * t,
                    this._y = (i + s) / t,
                    this._z = (r + l) / t
                } else if (a > h) {
                    const t = 2 * Math.sqrt(1 + a - n - h);
                    this._w = (r - l) / t,
                    this._x = (i + s) / t,
                    this._y = .25 * t,
                    this._z = (o + c) / t
                } else {
                    const t = 2 * Math.sqrt(1 + h - n - a);
                    this._w = (s - i) / t,
                    this._x = (r + l) / t,
                    this._y = (o + c) / t,
                    this._z = .25 * t
                }
                return this._onChangeCallback(),
                this
            }
            setFromUnitVectors(t, e) {
                let n = t.dot(e) + 1;
                return n < Number.EPSILON ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n),
                this.normalize()
            }
            angleTo(t) {
                return 2 * Math.acos(Math.abs(ht(this.dot(t), -1, 1)))
            }
            rotateTowards(t, e) {
                const n = this.angleTo(t);
                if (0 === n)
                    return this;
                const i = Math.min(1, e / n);
                return this.slerp(t, i),
                this
            }
            identity() {
                return this.set(0, 0, 0, 1)
            }
            invert() {
                return this.conjugate()
            }
            conjugate() {
                return this._x *= -1,
                this._y *= -1,
                this._z *= -1,
                this._onChangeCallback(),
                this
            }
            dot(t) {
                return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w
            }
            lengthSq() {
                return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w
            }
            length() {
                return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w)
            }
            normalize() {
                let t = this.length();
                return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t),
                this._onChangeCallback(),
                this
            }
            multiply(t, e) {
                return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t)
            }
            premultiply(t) {
                return this.multiplyQuaternions(t, this)
            }
            multiplyQuaternions(t, e) {
                const n = t._x,
                i = t._y,
                r = t._z,
                s = t._w,
                a = e._x,
                o = e._y,
                l = e._z,
                c = e._w;
                return this._x = n * c + s * a + i * l - r * o,
                this._y = i * c + s * o + r * a - n * l,
                this._z = r * c + s * l + n * o - i * a,
                this._w = s * c - n * a - i * o - r * l,
                this._onChangeCallback(),
                this
            }
            slerp(t, e) {
                if (0 === e)
                    return this;
                if (1 === e)
                    return this.copy(t);
                const n = this._x,
                i = this._y,
                r = this._z,
                s = this._w;
                let a = s * t._w + n * t._x + i * t._y + r * t._z;
                if (a < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, a = -a) : this.copy(t), a >= 1)
                    return this._w = s, this._x = n, this._y = i, this._z = r, this;
                const o = 1 - a * a;
                if (o <= Number.EPSILON) {
                    const t = 1 - e;
                    return this._w = t * s + e * this._w,
                    this._x = t * n + e * this._x,
                    this._y = t * i + e * this._y,
                    this._z = t * r + e * this._z,
                    this.normalize(),
                    this._onChangeCallback(),
                    this
                }
                const l = Math.sqrt(o),
                c = Math.atan2(l, a),
                h = Math.sin((1 - e) * c) / l,
                u = Math.sin(e * c) / l;
                return this._w = s * h + this._w * u,
                this._x = n * h + this._x * u,
                this._y = i * h + this._y * u,
                this._z = r * h + this._z * u,
                this._onChangeCallback(),
                this
            }
            slerpQuaternions(t, e, n) {
                this.copy(t).slerp(e, n)
            }
            random() {
                const t = Math.random(),
                e = Math.sqrt(1 - t),
                n = Math.sqrt(t),
                i = 2 * Math.PI * Math.random(),
                r = 2 * Math.PI * Math.random();
                return this.set(e * Math.cos(i), n * Math.sin(r), n * Math.cos(r), e * Math.sin(i))
            }
            equals(t) {
                return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w
            }
            fromArray(t, e = 0) {
                return this._x = t[e],
                this._y = t[e + 1],
                this._z = t[e + 2],
                this._w = t[e + 3],
                this._onChangeCallback(),
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this._x,
                t[e + 1] = this._y,
                t[e + 2] = this._z,
                t[e + 3] = this._w,
                t
            }
            fromBufferAttribute(t, e) {
                return this._x = t.getX(e),
                this._y = t.getY(e),
                this._z = t.getZ(e),
                this._w = t.getW(e),
                this
            }
            _onChange(t) {
                return this._onChangeCallback = t,
                this
            }
            _onChangeCallback() {}
        }
        It.prototype.isQuaternion = !0;
        class Nt {
            constructor(t = 0, e = 0, n = 0) {
                this.x = t,
                this.y = e,
                this.z = n
            }
            set(t, e, n) {
                return void 0 === n && (n = this.z),
                this.x = t,
                this.y = e,
                this.z = n,
                this
            }
            setScalar(t) {
                return this.x = t,
                this.y = t,
                this.z = t,
                this
            }
            setX(t) {
                return this.x = t,
                this
            }
            setY(t) {
                return this.y = t,
                this
            }
            setZ(t) {
                return this.z = t,
                this
            }
            setComponent(t, e) {
                switch (t) {
                case 0:
                    this.x = e;
                    break;
                case 1:
                    this.y = e;
                    break;
                case 2:
                    this.z = e;
                    break;
                default:
                    throw new Error("index is out of range: " + t);
                }
                return this
            }
            getComponent(t) {
                switch (t) {
                case 0:
                    return this.x;
                case 1:
                    return this.y;
                case 2:
                    return this.z;
                default:
                    throw new Error("index is out of range: " + t);
                }
            }
            clone() {
                return new this.constructor(this.x, this.y, this.z)
            }
            copy(t) {
                return this.x = t.x,
                this.y = t.y,
                this.z = t.z,
                this
            }
            add(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this)
            }
            addScalar(t) {
                return this.x += t,
                this.y += t,
                this.z += t,
                this
            }
            addVectors(t, e) {
                return this.x = t.x + e.x,
                this.y = t.y + e.y,
                this.z = t.z + e.z,
                this
            }
            addScaledVector(t, e) {
                return this.x += t.x * e,
                this.y += t.y * e,
                this.z += t.z * e,
                this
            }
            sub(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this)
            }
            subScalar(t) {
                return this.x -= t,
                this.y -= t,
                this.z -= t,
                this
            }
            subVectors(t, e) {
                return this.x = t.x - e.x,
                this.y = t.y - e.y,
                this.z = t.z - e.z,
                this
            }
            multiply(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this)
            }
            multiplyScalar(t) {
                return this.x *= t,
                this.y *= t,
                this.z *= t,
                this
            }
            multiplyVectors(t, e) {
                return this.x = t.x * e.x,
                this.y = t.y * e.y,
                this.z = t.z * e.z,
                this
            }
            applyEuler(t) {
                return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),
                this.applyQuaternion(Bt.setFromEuler(t))
            }
            applyAxisAngle(t, e) {
                return this.applyQuaternion(Bt.setFromAxisAngle(t, e))
            }
            applyMatrix3(t) {
                const e = this.x,
                n = this.y,
                i = this.z,
                r = t.elements;
                return this.x = r[0] * e + r[3] * n + r[6] * i,
                this.y = r[1] * e + r[4] * n + r[7] * i,
                this.z = r[2] * e + r[5] * n + r[8] * i,
                this
            }
            applyNormalMatrix(t) {
                return this.applyMatrix3(t).normalize()
            }
            applyMatrix4(t) {
                const e = this.x,
                n = this.y,
                i = this.z,
                r = t.elements,
                s = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]);
                return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * s,
                this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * s,
                this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * s,
                this
            }
            applyQuaternion(t) {
                const e = this.x,
                n = this.y,
                i = this.z,
                r = t.x,
                s = t.y,
                a = t.z,
                o = t.w,
                l = o * e + s * i - a * n,
                c = o * n + a * e - r * i,
                h = o * i + r * n - s * e,
                u = -r * e - s * n - a * i;
                return this.x = l * o + u * -r + c * -a - h * -s,
                this.y = c * o + u * -s + h * -r - l * -a,
                this.z = h * o + u * -a + l * -s - c * -r,
                this
            }
            project(t) {
                return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)
            }
            unproject(t) {
                return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)
            }
            transformDirection(t) {
                const e = this.x,
                n = this.y,
                i = this.z,
                r = t.elements;
                return this.x = r[0] * e + r[4] * n + r[8] * i,
                this.y = r[1] * e + r[5] * n + r[9] * i,
                this.z = r[2] * e + r[6] * n + r[10] * i,
                this.normalize()
            }
            divide(t) {
                return this.x /= t.x,
                this.y /= t.y,
                this.z /= t.z,
                this
            }
            divideScalar(t) {
                return this.multiplyScalar(1 / t)
            }
            min(t) {
                return this.x = Math.min(this.x, t.x),
                this.y = Math.min(this.y, t.y),
                this.z = Math.min(this.z, t.z),
                this
            }
            max(t) {
                return this.x = Math.max(this.x, t.x),
                this.y = Math.max(this.y, t.y),
                this.z = Math.max(this.z, t.z),
                this
            }
            clamp(t, e) {
                return this.x = Math.max(t.x, Math.min(e.x, this.x)),
                this.y = Math.max(t.y, Math.min(e.y, this.y)),
                this.z = Math.max(t.z, Math.min(e.z, this.z)),
                this
            }
            clampScalar(t, e) {
                return this.x = Math.max(t, Math.min(e, this.x)),
                this.y = Math.max(t, Math.min(e, this.y)),
                this.z = Math.max(t, Math.min(e, this.z)),
                this
            }
            clampLength(t, e) {
                const n = this.length();
                return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
            }
            floor() {
                return this.x = Math.floor(this.x),
                this.y = Math.floor(this.y),
                this.z = Math.floor(this.z),
                this
            }
            ceil() {
                return this.x = Math.ceil(this.x),
                this.y = Math.ceil(this.y),
                this.z = Math.ceil(this.z),
                this
            }
            round() {
                return this.x = Math.round(this.x),
                this.y = Math.round(this.y),
                this.z = Math.round(this.z),
                this
            }
            roundToZero() {
                return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x),
                this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y),
                this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z),
                this
            }
            negate() {
                return this.x = -this.x,
                this.y = -this.y,
                this.z = -this.z,
                this
            }
            dot(t) {
                return this.x * t.x + this.y * t.y + this.z * t.z
            }
            lengthSq() {
                return this.x * this.x + this.y * this.y + this.z * this.z
            }
            length() {
                return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
            }
            manhattanLength() {
                return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z)
            }
            normalize() {
                return this.divideScalar(this.length() || 1)
            }
            setLength(t) {
                return this.normalize().multiplyScalar(t)
            }
            lerp(t, e) {
                return this.x += (t.x - this.x) * e,
                this.y += (t.y - this.y) * e,
                this.z += (t.z - this.z) * e,
                this
            }
            lerpVectors(t, e, n) {
                return this.x = t.x + (e.x - t.x) * n,
                this.y = t.y + (e.y - t.y) * n,
                this.z = t.z + (e.z - t.z) * n,
                this
            }
            cross(t, e) {
                return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t)
            }
            crossVectors(t, e) {
                const n = t.x,
                i = t.y,
                r = t.z,
                s = e.x,
                a = e.y,
                o = e.z;
                return this.x = i * o - r * a,
                this.y = r * s - n * o,
                this.z = n * a - i * s,
                this
            }
            projectOnVector(t) {
                const e = t.lengthSq();
                if (0 === e)
                    return this.set(0, 0, 0);
                const n = t.dot(this) / e;
                return this.copy(t).multiplyScalar(n)
            }
            projectOnPlane(t) {
                return zt.copy(this).projectOnVector(t),
                this.sub(zt)
            }
            reflect(t) {
                return this.sub(zt.copy(t).multiplyScalar(2 * this.dot(t)))
            }
            angleTo(t) {
                const e = Math.sqrt(this.lengthSq() * t.lengthSq());
                if (0 === e)
                    return Math.PI / 2;
                const n = this.dot(t) / e;
                return Math.acos(ht(n, -1, 1))
            }
            distanceTo(t) {
                return Math.sqrt(this.distanceToSquared(t))
            }
            distanceToSquared(t) {
                const e = this.x - t.x,
                n = this.y - t.y,
                i = this.z - t.z;
                return e * e + n * n + i * i
            }
            manhattanDistanceTo(t) {
                return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z)
            }
            setFromSpherical(t) {
                return this.setFromSphericalCoords(t.radius, t.phi, t.theta)
            }
            setFromSphericalCoords(t, e, n) {
                const i = Math.sin(e) * t;
                return this.x = i * Math.sin(n),
                this.y = Math.cos(e) * t,
                this.z = i * Math.cos(n),
                this
            }
            setFromCylindrical(t) {
                return this.setFromCylindricalCoords(t.radius, t.theta, t.y)
            }
            setFromCylindricalCoords(t, e, n) {
                return this.x = t * Math.sin(e),
                this.y = n,
                this.z = t * Math.cos(e),
                this
            }
            setFromMatrixPosition(t) {
                const e = t.elements;
                return this.x = e[12],
                this.y = e[13],
                this.z = e[14],
                this
            }
            setFromMatrixScale(t) {
                const e = this.setFromMatrixColumn(t, 0).length(),
                n = this.setFromMatrixColumn(t, 1).length(),
                i = this.setFromMatrixColumn(t, 2).length();
                return this.x = e,
                this.y = n,
                this.z = i,
                this
            }
            setFromMatrixColumn(t, e) {
                return this.fromArray(t.elements, 4 * e)
            }
            setFromMatrix3Column(t, e) {
                return this.fromArray(t.elements, 3 * e)
            }
            equals(t) {
                return t.x === this.x && t.y === this.y && t.z === this.z
            }
            fromArray(t, e = 0) {
                return this.x = t[e],
                this.y = t[e + 1],
                this.z = t[e + 2],
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this.x,
                t[e + 1] = this.y,
                t[e + 2] = this.z,
                t
            }
            fromBufferAttribute(t, e, n) {
                return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),
                this.x = t.getX(e),
                this.y = t.getY(e),
                this.z = t.getZ(e),
                this
            }
            random() {
                return this.x = Math.random(),
                this.y = Math.random(),
                this.z = Math.random(),
                this
            }
            randomDirection() {
                const t = 2 * (Math.random() - .5),
                e = Math.random() * Math.PI * 2,
                n = Math.sqrt(1 - t ** 2);
                return this.x = n * Math.cos(e),
                this.y = n * Math.sin(e),
                this.z = t,
                this
            }
             * [Symbol.iterator]() {
                yield this.x,
                yield this.y,
                yield this.z
            }
        }
        Nt.prototype.isVector3 = !0;
        const zt = new Nt,
        Bt = new It;
        class Ft {
            constructor(t = new Nt(1 / 0, 1 / 0, 1 / 0), e = new Nt(-1 / 0, -1 / 0, -1 / 0)) {
                this.min = t,
                this.max = e
            }
            set(t, e) {
                return this.min.copy(t),
                this.max.copy(e),
                this
            }
            setFromArray(t) {
                let e = 1 / 0,
                n = 1 / 0,
                i = 1 / 0,
                r = -1 / 0,
                s = -1 / 0,
                a = -1 / 0;
                for (let o = 0, l = t.length; o < l; o += 3) {
                    const l = t[o],
                    c = t[o + 1],
                    h = t[o + 2];
                    l < e && (e = l),
                    c < n && (n = c),
                    h < i && (i = h),
                    l > r && (r = l),
                    c > s && (s = c),
                    h > a && (a = h)
                }
                return this.min.set(e, n, i),
                this.max.set(r, s, a),
                this
            }
            setFromBufferAttribute(t) {
                let e = 1 / 0,
                n = 1 / 0,
                i = 1 / 0,
                r = -1 / 0,
                s = -1 / 0,
                a = -1 / 0;
                for (let o = 0, l = t.count; o < l; o++) {
                    const l = t.getX(o),
                    c = t.getY(o),
                    h = t.getZ(o);
                    l < e && (e = l),
                    c < n && (n = c),
                    h < i && (i = h),
                    l > r && (r = l),
                    c > s && (s = c),
                    h > a && (a = h)
                }
                return this.min.set(e, n, i),
                this.max.set(r, s, a),
                this
            }
            setFromPoints(t) {
                this.makeEmpty();
                for (let e = 0, n = t.length; e < n; e++)
                    this.expandByPoint(t[e]);
                return this
            }
            setFromCenterAndSize(t, e) {
                const n = Ut.copy(e).multiplyScalar(.5);
                return this.min.copy(t).sub(n),
                this.max.copy(t).add(n),
                this
            }
            setFromObject(t) {
                return this.makeEmpty(),
                this.expandByObject(t)
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.min.copy(t.min),
                this.max.copy(t.max),
                this
            }
            makeEmpty() {
                return this.min.x = this.min.y = this.min.z = 1 / 0,
                this.max.x = this.max.y = this.max.z = -1 / 0,
                this
            }
            isEmpty() {
                return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z
            }
            getCenter(t) {
                return this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5)
            }
            getSize(t) {
                return this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min)
            }
            expandByPoint(t) {
                return this.min.min(t),
                this.max.max(t),
                this
            }
            expandByVector(t) {
                return this.min.sub(t),
                this.max.add(t),
                this
            }
            expandByScalar(t) {
                return this.min.addScalar(-t),
                this.max.addScalar(t),
                this
            }
            expandByObject(t) {
                t.updateWorldMatrix(!1, !1);
                const e = t.geometry;
                void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), Ht.copy(e.boundingBox), Ht.applyMatrix4(t.matrixWorld), this.union(Ht));
                const n = t.children;
                for (let t = 0, e = n.length; t < e; t++)
                    this.expandByObject(n[t]);
                return this
            }
            containsPoint(t) {
                return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z)
            }
            containsBox(t) {
                return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z
            }
            getParameter(t, e) {
                return e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z))
            }
            intersectsBox(t) {
                return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z)
            }
            intersectsSphere(t) {
                return this.clampPoint(t.center, Ut),
                Ut.distanceToSquared(t.center) <= t.radius * t.radius
            }
            intersectsPlane(t) {
                let e,
                n;
                return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x),
                t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y),
                t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z),
                e <= -t.constant && n >= -t.constant
            }
            intersectsTriangle(t) {
                if (this.isEmpty())
                    return !1;
                this.getCenter(Xt),
                Jt.subVectors(this.max, Xt),
                Gt.subVectors(t.a, Xt),
                kt.subVectors(t.b, Xt),
                Vt.subVectors(t.c, Xt),
                Wt.subVectors(kt, Gt),
                jt.subVectors(Vt, kt),
                qt.subVectors(Gt, Vt);
                let e = [0, -Wt.z, Wt.y, 0, -jt.z, jt.y, 0, -qt.z, qt.y, Wt.z, 0, -Wt.x, jt.z, 0, -jt.x, qt.z, 0, -qt.x, -Wt.y, Wt.x, 0, -jt.y, jt.x, 0, -qt.y, qt.x, 0];
                return !!Qt(e, Gt, kt, Vt, Jt) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!Qt(e, Gt, kt, Vt, Jt) && (Yt.crossVectors(Wt, jt), e = [Yt.x, Yt.y, Yt.z], Qt(e, Gt, kt, Vt, Jt)))
            }
            clampPoint(t, e) {
                return e.copy(t).clamp(this.min, this.max)
            }
            distanceToPoint(t) {
                return Ut.copy(t).clamp(this.min, this.max).sub(t).length()
            }
            getBoundingSphere(t) {
                return this.getCenter(t.center),
                t.radius = .5 * this.getSize(Ut).length(),
                t
            }
            intersect(t) {
                return this.min.max(t.min),
                this.max.min(t.max),
                this.isEmpty() && this.makeEmpty(),
                this
            }
            union(t) {
                return this.min.min(t.min),
                this.max.max(t.max),
                this
            }
            applyMatrix4(t) {
                return this.isEmpty() || (Ot[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), Ot[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), Ot[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), Ot[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), Ot[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), Ot[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), Ot[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), Ot[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(Ot)),
                this
            }
            translate(t) {
                return this.min.add(t),
                this.max.add(t),
                this
            }
            equals(t) {
                return t.min.equals(this.min) && t.max.equals(this.max)
            }
        }
        Ft.prototype.isBox3 = !0;
        const Ot = [new Nt, new Nt, new Nt, new Nt, new Nt, new Nt, new Nt, new Nt],
        Ut = new Nt,
        Ht = new Ft,
        Gt = new Nt,
        kt = new Nt,
        Vt = new Nt,
        Wt = new Nt,
        jt = new Nt,
        qt = new Nt,
        Xt = new Nt,
        Jt = new Nt,
        Yt = new Nt,
        Zt = new Nt;
        function Qt(t, e, n, i, r) {
            for (let s = 0, a = t.length - 3; s <= a; s += 3) {
                Zt.fromArray(t, s);
                const a = r.x * Math.abs(Zt.x) + r.y * Math.abs(Zt.y) + r.z * Math.abs(Zt.z),
                o = e.dot(Zt),
                l = n.dot(Zt),
                c = i.dot(Zt);
                if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > a)
                    return !1
            }
            return !0
        }
        const Kt = new Ft,
        $t = new Nt,
        te = new Nt,
        ee = new Nt;
        class ne {
            constructor(t = new Nt, e = -1) {
                this.center = t,
                this.radius = e
            }
            set(t, e) {
                return this.center.copy(t),
                this.radius = e,
                this
            }
            setFromPoints(t, e) {
                const n = this.center;
                void 0 !== e ? n.copy(e) : Kt.setFromPoints(t).getCenter(n);
                let i = 0;
                for (let e = 0, r = t.length; e < r; e++)
                    i = Math.max(i, n.distanceToSquared(t[e]));
                return this.radius = Math.sqrt(i),
                this
            }
            copy(t) {
                return this.center.copy(t.center),
                this.radius = t.radius,
                this
            }
            isEmpty() {
                return this.radius < 0
            }
            makeEmpty() {
                return this.center.set(0, 0, 0),
                this.radius = -1,
                this
            }
            containsPoint(t) {
                return t.distanceToSquared(this.center) <= this.radius * this.radius
            }
            distanceToPoint(t) {
                return t.distanceTo(this.center) - this.radius
            }
            intersectsSphere(t) {
                const e = this.radius + t.radius;
                return t.center.distanceToSquared(this.center) <= e * e
            }
            intersectsBox(t) {
                return t.intersectsSphere(this)
            }
            intersectsPlane(t) {
                return Math.abs(t.distanceToPoint(this.center)) <= this.radius
            }
            clampPoint(t, e) {
                const n = this.center.distanceToSquared(t);
                return e.copy(t),
                n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)),
                e
            }
            getBoundingBox(t) {
                return this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t)
            }
            applyMatrix4(t) {
                return this.center.applyMatrix4(t),
                this.radius = this.radius * t.getMaxScaleOnAxis(),
                this
            }
            translate(t) {
                return this.center.add(t),
                this
            }
            expandByPoint(t) {
                ee.subVectors(t, this.center);
                const e = ee.lengthSq();
                if (e > this.radius * this.radius) {
                    const t = Math.sqrt(e),
                    n = .5 * (t - this.radius);
                    this.center.add(ee.multiplyScalar(n / t)),
                    this.radius += n
                }
                return this
            }
            union(t) {
                return te.subVectors(t.center, this.center).normalize().multiplyScalar(t.radius),
                this.expandByPoint($t.copy(t.center).add(te)),
                this.expandByPoint($t.copy(t.center).sub(te)),
                this
            }
            equals(t) {
                return t.center.equals(this.center) && t.radius === this.radius
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        const ie = new Nt,
        re = new Nt,
        se = new Nt,
        ae = new Nt,
        oe = new Nt,
        le = new Nt,
        ce = new Nt;
        class he {
            constructor(t = new Nt, e = new Nt(0, 0, -1)) {
                this.origin = t,
                this.direction = e
            }
            set(t, e) {
                return this.origin.copy(t),
                this.direction.copy(e),
                this
            }
            copy(t) {
                return this.origin.copy(t.origin),
                this.direction.copy(t.direction),
                this
            }
            at(t, e) {
                return e.copy(this.direction).multiplyScalar(t).add(this.origin)
            }
            lookAt(t) {
                return this.direction.copy(t).sub(this.origin).normalize(),
                this
            }
            recast(t) {
                return this.origin.copy(this.at(t, ie)),
                this
            }
            closestPointToPoint(t, e) {
                e.subVectors(t, this.origin);
                const n = e.dot(this.direction);
                return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin)
            }
            distanceToPoint(t) {
                return Math.sqrt(this.distanceSqToPoint(t))
            }
            distanceSqToPoint(t) {
                const e = ie.subVectors(t, this.origin).dot(this.direction);
                return e < 0 ? this.origin.distanceToSquared(t) : (ie.copy(this.direction).multiplyScalar(e).add(this.origin), ie.distanceToSquared(t))
            }
            distanceSqToSegment(t, e, n, i) {
                re.copy(t).add(e).multiplyScalar(.5),
                se.copy(e).sub(t).normalize(),
                ae.copy(this.origin).sub(re);
                const r = .5 * t.distanceTo(e),
                s = -this.direction.dot(se),
                a = ae.dot(this.direction),
                o = -ae.dot(se),
                l = ae.lengthSq(),
                c = Math.abs(1 - s * s);
                let h,
                u,
                d,
                p;
                if (c > 0) {
                    if (h = s * o - a, u = s * a - o, p = r * c, h >= 0) {
                        if (u >= -p) {
                            if (u <= p) {
                                const t = 1 / c;
                                h *= t,
                                u *= t,
                                d = h * (h + s * u + 2 * a) + u * (s * h + u + 2 * o) + l
                            } else
                                u = r, h = Math.max(0,  - (s * u + a)), d = -h * h + u * (u + 2 * o) + l;
                        } else
                            u = -r, h = Math.max(0,  - (s * u + a)), d = -h * h + u * (u + 2 * o) + l;
                    } else
                        u <= -p ? (h = Math.max(0,  - (-s * r + a)), u = h > 0 ? -r : Math.min(Math.max(-r, -o), r), d = -h * h + u * (u + 2 * o) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -o), r), d = u * (u + 2 * o) + l) : (h = Math.max(0,  - (s * r + a)), u = h > 0 ? r : Math.min(Math.max(-r, -o), r), d = -h * h + u * (u + 2 * o) + l);
                } else
                    u = s > 0 ? -r : r, h = Math.max(0,  - (s * u + a)), d = -h * h + u * (u + 2 * o) + l;
                return n && n.copy(this.direction).multiplyScalar(h).add(this.origin),
                i && i.copy(se).multiplyScalar(u).add(re),
                d
            }
            intersectSphere(t, e) {
                ie.subVectors(t.center, this.origin);
                const n = ie.dot(this.direction),
                i = ie.dot(ie) - n * n,
                r = t.radius * t.radius;
                if (i > r)
                    return null;
                const s = Math.sqrt(r - i),
                a = n - s,
                o = n + s;
                return a < 0 && o < 0 ? null : a < 0 ? this.at(o, e) : this.at(a, e)
            }
            intersectsSphere(t) {
                return this.distanceSqToPoint(t.center) <= t.radius * t.radius
            }
            distanceToPlane(t) {
                const e = t.normal.dot(this.direction);
                if (0 === e)
                    return 0 === t.distanceToPoint(this.origin) ? 0 : null;
                const n =  - (this.origin.dot(t.normal) + t.constant) / e;
                return n >= 0 ? n : null
            }
            intersectPlane(t, e) {
                const n = this.distanceToPlane(t);
                return null === n ? null : this.at(n, e)
            }
            intersectsPlane(t) {
                const e = t.distanceToPoint(this.origin);
                if (0 === e)
                    return !0;
                return t.normal.dot(this.direction) * e < 0
            }
            intersectBox(t, e) {
                let n,
                i,
                r,
                s,
                a,
                o;
                const l = 1 / this.direction.x,
                c = 1 / this.direction.y,
                h = 1 / this.direction.z,
                u = this.origin;
                return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l),
                c >= 0 ? (r = (t.min.y - u.y) * c, s = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, s = (t.min.y - u.y) * c),
                n > s || r > i ? null : ((r > n || n != n) && (n = r), (s < i || i != i) && (i = s), h >= 0 ? (a = (t.min.z - u.z) * h, o = (t.max.z - u.z) * h) : (a = (t.max.z - u.z) * h, o = (t.min.z - u.z) * h), n > o || a > i ? null : ((a > n || n != n) && (n = a), (o < i || i != i) && (i = o), i < 0 ? null : this.at(n >= 0 ? n : i, e)))
            }
            intersectsBox(t) {
                return null !== this.intersectBox(t, ie)
            }
            intersectTriangle(t, e, n, i, r) {
                oe.subVectors(e, t),
                le.subVectors(n, t),
                ce.crossVectors(oe, le);
                let s,
                a = this.direction.dot(ce);
                if (a > 0) {
                    if (i)
                        return null;
                    s = 1
                } else {
                    if (!(a < 0))
                        return null;
                    s = -1,
                    a = -a
                }
                ae.subVectors(this.origin, t);
                const o = s * this.direction.dot(le.crossVectors(ae, le));
                if (o < 0)
                    return null;
                const l = s * this.direction.dot(oe.cross(ae));
                if (l < 0)
                    return null;
                if (o + l > a)
                    return null;
                const c = -s * ae.dot(ce);
                return c < 0 ? null : this.at(c / a, r)
            }
            applyMatrix4(t) {
                return this.origin.applyMatrix4(t),
                this.direction.transformDirection(t),
                this
            }
            equals(t) {
                return t.origin.equals(this.origin) && t.direction.equals(this.direction)
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        class ue {
            constructor() {
                this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
                arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")
            }
            set(t, e, n, i, r, s, a, o, l, c, h, u, d, p, m, f) {
                const g = this.elements;
                return g[0] = t,
                g[4] = e,
                g[8] = n,
                g[12] = i,
                g[1] = r,
                g[5] = s,
                g[9] = a,
                g[13] = o,
                g[2] = l,
                g[6] = c,
                g[10] = h,
                g[14] = u,
                g[3] = d,
                g[7] = p,
                g[11] = m,
                g[15] = f,
                this
            }
            identity() {
                return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
                this
            }
            clone() {
                return new ue().fromArray(this.elements)
            }
            copy(t) {
                const e = this.elements,
                n = t.elements;
                return e[0] = n[0],
                e[1] = n[1],
                e[2] = n[2],
                e[3] = n[3],
                e[4] = n[4],
                e[5] = n[5],
                e[6] = n[6],
                e[7] = n[7],
                e[8] = n[8],
                e[9] = n[9],
                e[10] = n[10],
                e[11] = n[11],
                e[12] = n[12],
                e[13] = n[13],
                e[14] = n[14],
                e[15] = n[15],
                this
            }
            copyPosition(t) {
                const e = this.elements,
                n = t.elements;
                return e[12] = n[12],
                e[13] = n[13],
                e[14] = n[14],
                this
            }
            setFromMatrix3(t) {
                const e = t.elements;
                return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1),
                this
            }
            extractBasis(t, e, n) {
                return t.setFromMatrixColumn(this, 0),
                e.setFromMatrixColumn(this, 1),
                n.setFromMatrixColumn(this, 2),
                this
            }
            makeBasis(t, e, n) {
                return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1),
                this
            }
            extractRotation(t) {
                const e = this.elements,
                n = t.elements,
                i = 1 / de.setFromMatrixColumn(t, 0).length(),
                r = 1 / de.setFromMatrixColumn(t, 1).length(),
                s = 1 / de.setFromMatrixColumn(t, 2).length();
                return e[0] = n[0] * i,
                e[1] = n[1] * i,
                e[2] = n[2] * i,
                e[3] = 0,
                e[4] = n[4] * r,
                e[5] = n[5] * r,
                e[6] = n[6] * r,
                e[7] = 0,
                e[8] = n[8] * s,
                e[9] = n[9] * s,
                e[10] = n[10] * s,
                e[11] = 0,
                e[12] = 0,
                e[13] = 0,
                e[14] = 0,
                e[15] = 1,
                this
            }
            makeRotationFromEuler(t) {
                t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");
                const e = this.elements,
                n = t.x,
                i = t.y,
                r = t.z,
                s = Math.cos(n),
                a = Math.sin(n),
                o = Math.cos(i),
                l = Math.sin(i),
                c = Math.cos(r),
                h = Math.sin(r);
                if ("XYZ" === t.order) {
                    const t = s * c,
                    n = s * h,
                    i = a * c,
                    r = a * h;
                    e[0] = o * c,
                    e[4] = -o * h,
                    e[8] = l,
                    e[1] = n + i * l,
                    e[5] = t - r * l,
                    e[9] = -a * o,
                    e[2] = r - t * l,
                    e[6] = i + n * l,
                    e[10] = s * o
                } else if ("YXZ" === t.order) {
                    const t = o * c,
                    n = o * h,
                    i = l * c,
                    r = l * h;
                    e[0] = t + r * a,
                    e[4] = i * a - n,
                    e[8] = s * l,
                    e[1] = s * h,
                    e[5] = s * c,
                    e[9] = -a,
                    e[2] = n * a - i,
                    e[6] = r + t * a,
                    e[10] = s * o
                } else if ("ZXY" === t.order) {
                    const t = o * c,
                    n = o * h,
                    i = l * c,
                    r = l * h;
                    e[0] = t - r * a,
                    e[4] = -s * h,
                    e[8] = i + n * a,
                    e[1] = n + i * a,
                    e[5] = s * c,
                    e[9] = r - t * a,
                    e[2] = -s * l,
                    e[6] = a,
                    e[10] = s * o
                } else if ("ZYX" === t.order) {
                    const t = s * c,
                    n = s * h,
                    i = a * c,
                    r = a * h;
                    e[0] = o * c,
                    e[4] = i * l - n,
                    e[8] = t * l + r,
                    e[1] = o * h,
                    e[5] = r * l + t,
                    e[9] = n * l - i,
                    e[2] = -l,
                    e[6] = a * o,
                    e[10] = s * o
                } else if ("YZX" === t.order) {
                    const t = s * o,
                    n = s * l,
                    i = a * o,
                    r = a * l;
                    e[0] = o * c,
                    e[4] = r - t * h,
                    e[8] = i * h + n,
                    e[1] = h,
                    e[5] = s * c,
                    e[9] = -a * c,
                    e[2] = -l * c,
                    e[6] = n * h + i,
                    e[10] = t - r * h
                } else if ("XZY" === t.order) {
                    const t = s * o,
                    n = s * l,
                    i = a * o,
                    r = a * l;
                    e[0] = o * c,
                    e[4] = -h,
                    e[8] = l * c,
                    e[1] = t * h + r,
                    e[5] = s * c,
                    e[9] = n * h - i,
                    e[2] = i * h - n,
                    e[6] = a * c,
                    e[10] = r * h + t
                }
                return e[3] = 0,
                e[7] = 0,
                e[11] = 0,
                e[12] = 0,
                e[13] = 0,
                e[14] = 0,
                e[15] = 1,
                this
            }
            makeRotationFromQuaternion(t) {
                return this.compose(me, t, fe)
            }
            lookAt(t, e, n) {
                const i = this.elements;
                return ye.subVectors(t, e),
                0 === ye.lengthSq() && (ye.z = 1),
                ye.normalize(),
                ge.crossVectors(n, ye),
                0 === ge.lengthSq() && (1 === Math.abs(n.z) ? ye.x += 1e-4 : ye.z += 1e-4, ye.normalize(), ge.crossVectors(n, ye)),
                ge.normalize(),
                ve.crossVectors(ye, ge),
                i[0] = ge.x,
                i[4] = ve.x,
                i[8] = ye.x,
                i[1] = ge.y,
                i[5] = ve.y,
                i[9] = ye.y,
                i[2] = ge.z,
                i[6] = ve.z,
                i[10] = ye.z,
                this
            }
            multiply(t, e) {
                return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t)
            }
            premultiply(t) {
                return this.multiplyMatrices(t, this)
            }
            multiplyMatrices(t, e) {
                const n = t.elements,
                i = e.elements,
                r = this.elements,
                s = n[0],
                a = n[4],
                o = n[8],
                l = n[12],
                c = n[1],
                h = n[5],
                u = n[9],
                d = n[13],
                p = n[2],
                m = n[6],
                f = n[10],
                g = n[14],
                v = n[3],
                y = n[7],
                x = n[11],
                _ = n[15],
                M = i[0],
                b = i[4],
                w = i[8],
                S = i[12],
                T = i[1],
                E = i[5],
                A = i[9],
                L = i[13],
                R = i[2],
                C = i[6],
                P = i[10],
                D = i[14],
                I = i[3],
                N = i[7],
                z = i[11],
                B = i[15];
                return r[0] = s * M + a * T + o * R + l * I,
                r[4] = s * b + a * E + o * C + l * N,
                r[8] = s * w + a * A + o * P + l * z,
                r[12] = s * S + a * L + o * D + l * B,
                r[1] = c * M + h * T + u * R + d * I,
                r[5] = c * b + h * E + u * C + d * N,
                r[9] = c * w + h * A + u * P + d * z,
                r[13] = c * S + h * L + u * D + d * B,
                r[2] = p * M + m * T + f * R + g * I,
                r[6] = p * b + m * E + f * C + g * N,
                r[10] = p * w + m * A + f * P + g * z,
                r[14] = p * S + m * L + f * D + g * B,
                r[3] = v * M + y * T + x * R + _ * I,
                r[7] = v * b + y * E + x * C + _ * N,
                r[11] = v * w + y * A + x * P + _ * z,
                r[15] = v * S + y * L + x * D + _ * B,
                this
            }
            multiplyScalar(t) {
                const e = this.elements;
                return e[0] *= t,
                e[4] *= t,
                e[8] *= t,
                e[12] *= t,
                e[1] *= t,
                e[5] *= t,
                e[9] *= t,
                e[13] *= t,
                e[2] *= t,
                e[6] *= t,
                e[10] *= t,
                e[14] *= t,
                e[3] *= t,
                e[7] *= t,
                e[11] *= t,
                e[15] *= t,
                this
            }
            determinant() {
                const t = this.elements,
                e = t[0],
                n = t[4],
                i = t[8],
                r = t[12],
                s = t[1],
                a = t[5],
                o = t[9],
                l = t[13],
                c = t[2],
                h = t[6],
                u = t[10],
                d = t[14];
                return t[3] * (+r * o * h - i * l * h - r * a * u + n * l * u + i * a * d - n * o * d) + t[7] * (+e * o * d - e * l * u + r * s * u - i * s * d + i * l * c - r * o * c) + t[11] * (+e * l * h - e * a * d - r * s * h + n * s * d + r * a * c - n * l * c) + t[15] * (-i * a * c - e * o * h + e * a * u + i * s * h - n * s * u + n * o * c)
            }
            transpose() {
                const t = this.elements;
                let e;
                return e = t[1],
                t[1] = t[4],
                t[4] = e,
                e = t[2],
                t[2] = t[8],
                t[8] = e,
                e = t[6],
                t[6] = t[9],
                t[9] = e,
                e = t[3],
                t[3] = t[12],
                t[12] = e,
                e = t[7],
                t[7] = t[13],
                t[13] = e,
                e = t[11],
                t[11] = t[14],
                t[14] = e,
                this
            }
            setPosition(t, e, n) {
                const i = this.elements;
                return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n),
                this
            }
            invert() {
                const t = this.elements,
                e = t[0],
                n = t[1],
                i = t[2],
                r = t[3],
                s = t[4],
                a = t[5],
                o = t[6],
                l = t[7],
                c = t[8],
                h = t[9],
                u = t[10],
                d = t[11],
                p = t[12],
                m = t[13],
                f = t[14],
                g = t[15],
                v = h * f * l - m * u * l + m * o * d - a * f * d - h * o * g + a * u * g,
                y = p * u * l - c * f * l - p * o * d + s * f * d + c * o * g - s * u * g,
                x = c * m * l - p * h * l + p * a * d - s * m * d - c * a * g + s * h * g,
                _ = p * h * o - c * m * o - p * a * u + s * m * u + c * a * f - s * h * f,
                M = e * v + n * y + i * x + r * _;
                if (0 === M)
                    return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                const b = 1 / M;
                return t[0] = v * b,
                t[1] = (m * u * r - h * f * r - m * i * d + n * f * d + h * i * g - n * u * g) * b,
                t[2] = (a * f * r - m * o * r + m * i * l - n * f * l - a * i * g + n * o * g) * b,
                t[3] = (h * o * r - a * u * r - h * i * l + n * u * l + a * i * d - n * o * d) * b,
                t[4] = y * b,
                t[5] = (c * f * r - p * u * r + p * i * d - e * f * d - c * i * g + e * u * g) * b,
                t[6] = (p * o * r - s * f * r - p * i * l + e * f * l + s * i * g - e * o * g) * b,
                t[7] = (s * u * r - c * o * r + c * i * l - e * u * l - s * i * d + e * o * d) * b,
                t[8] = x * b,
                t[9] = (p * h * r - c * m * r - p * n * d + e * m * d + c * n * g - e * h * g) * b,
                t[10] = (s * m * r - p * a * r + p * n * l - e * m * l - s * n * g + e * a * g) * b,
                t[11] = (c * a * r - s * h * r - c * n * l + e * h * l + s * n * d - e * a * d) * b,
                t[12] = _ * b,
                t[13] = (c * m * i - p * h * i + p * n * u - e * m * u - c * n * f + e * h * f) * b,
                t[14] = (p * a * i - s * m * i - p * n * o + e * m * o + s * n * f - e * a * f) * b,
                t[15] = (s * h * i - c * a * i + c * n * o - e * h * o - s * n * u + e * a * u) * b,
                this
            }
            scale(t) {
                const e = this.elements,
                n = t.x,
                i = t.y,
                r = t.z;
                return e[0] *= n,
                e[4] *= i,
                e[8] *= r,
                e[1] *= n,
                e[5] *= i,
                e[9] *= r,
                e[2] *= n,
                e[6] *= i,
                e[10] *= r,
                e[3] *= n,
                e[7] *= i,
                e[11] *= r,
                this
            }
            getMaxScaleOnAxis() {
                const t = this.elements,
                e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2],
                n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6],
                i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10];
                return Math.sqrt(Math.max(e, n, i))
            }
            makeTranslation(t, e, n) {
                return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1),
                this
            }
            makeRotationX(t) {
                const e = Math.cos(t),
                n = Math.sin(t);
                return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1),
                this
            }
            makeRotationY(t) {
                const e = Math.cos(t),
                n = Math.sin(t);
                return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1),
                this
            }
            makeRotationZ(t) {
                const e = Math.cos(t),
                n = Math.sin(t);
                return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
                this
            }
            makeRotationAxis(t, e) {
                const n = Math.cos(e),
                i = Math.sin(e),
                r = 1 - n,
                s = t.x,
                a = t.y,
                o = t.z,
                l = r * s,
                c = r * a;
                return this.set(l * s + n, l * a - i * o, l * o + i * a, 0, l * a + i * o, c * a + n, c * o - i * s, 0, l * o - i * a, c * o + i * s, r * o * o + n, 0, 0, 0, 0, 1),
                this
            }
            makeScale(t, e, n) {
                return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1),
                this
            }
            makeShear(t, e, n, i, r, s) {
                return this.set(1, n, r, 0, t, 1, s, 0, e, i, 1, 0, 0, 0, 0, 1),
                this
            }
            compose(t, e, n) {
                const i = this.elements,
                r = e._x,
                s = e._y,
                a = e._z,
                o = e._w,
                l = r + r,
                c = s + s,
                h = a + a,
                u = r * l,
                d = r * c,
                p = r * h,
                m = s * c,
                f = s * h,
                g = a * h,
                v = o * l,
                y = o * c,
                x = o * h,
                _ = n.x,
                M = n.y,
                b = n.z;
                return i[0] = (1 - (m + g)) * _,
                i[1] = (d + x) * _,
                i[2] = (p - y) * _,
                i[3] = 0,
                i[4] = (d - x) * M,
                i[5] = (1 - (u + g)) * M,
                i[6] = (f + v) * M,
                i[7] = 0,
                i[8] = (p + y) * b,
                i[9] = (f - v) * b,
                i[10] = (1 - (u + m)) * b,
                i[11] = 0,
                i[12] = t.x,
                i[13] = t.y,
                i[14] = t.z,
                i[15] = 1,
                this
            }
            decompose(t, e, n) {
                const i = this.elements;
                let r = de.set(i[0], i[1], i[2]).length();
                const s = de.set(i[4], i[5], i[6]).length(),
                a = de.set(i[8], i[9], i[10]).length();
                this.determinant() < 0 && (r = -r),
                t.x = i[12],
                t.y = i[13],
                t.z = i[14],
                pe.copy(this);
                const o = 1 / r,
                l = 1 / s,
                c = 1 / a;
                return pe.elements[0] *= o,
                pe.elements[1] *= o,
                pe.elements[2] *= o,
                pe.elements[4] *= l,
                pe.elements[5] *= l,
                pe.elements[6] *= l,
                pe.elements[8] *= c,
                pe.elements[9] *= c,
                pe.elements[10] *= c,
                e.setFromRotationMatrix(pe),
                n.x = r,
                n.y = s,
                n.z = a,
                this
            }
            makePerspective(t, e, n, i, r, s) {
                void 0 === s && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");
                const a = this.elements,
                o = 2 * r / (e - t),
                l = 2 * r / (n - i),
                c = (e + t) / (e - t),
                h = (n + i) / (n - i),
                u =  - (s + r) / (s - r),
                d = -2 * s * r / (s - r);
                return a[0] = o,
                a[4] = 0,
                a[8] = c,
                a[12] = 0,
                a[1] = 0,
                a[5] = l,
                a[9] = h,
                a[13] = 0,
                a[2] = 0,
                a[6] = 0,
                a[10] = u,
                a[14] = d,
                a[3] = 0,
                a[7] = 0,
                a[11] = -1,
                a[15] = 0,
                this
            }
            makeOrthographic(t, e, n, i, r, s) {
                const a = this.elements,
                o = 1 / (e - t),
                l = 1 / (n - i),
                c = 1 / (s - r),
                h = (e + t) * o,
                u = (n + i) * l,
                d = (s + r) * c;
                return a[0] = 2 * o,
                a[4] = 0,
                a[8] = 0,
                a[12] = -h,
                a[1] = 0,
                a[5] = 2 * l,
                a[9] = 0,
                a[13] = -u,
                a[2] = 0,
                a[6] = 0,
                a[10] = -2 * c,
                a[14] = -d,
                a[3] = 0,
                a[7] = 0,
                a[11] = 0,
                a[15] = 1,
                this
            }
            equals(t) {
                const e = this.elements,
                n = t.elements;
                for (let t = 0; t < 16; t++)
                    if (e[t] !== n[t])
                        return !1;
                return !0
            }
            fromArray(t, e = 0) {
                for (let n = 0; n < 16; n++)
                    this.elements[n] = t[n + e];
                return this
            }
            toArray(t = [], e = 0) {
                const n = this.elements;
                return t[e] = n[0],
                t[e + 1] = n[1],
                t[e + 2] = n[2],
                t[e + 3] = n[3],
                t[e + 4] = n[4],
                t[e + 5] = n[5],
                t[e + 6] = n[6],
                t[e + 7] = n[7],
                t[e + 8] = n[8],
                t[e + 9] = n[9],
                t[e + 10] = n[10],
                t[e + 11] = n[11],
                t[e + 12] = n[12],
                t[e + 13] = n[13],
                t[e + 14] = n[14],
                t[e + 15] = n[15],
                t
            }
        }
        ue.prototype.isMatrix4 = !0;
        const de = new Nt,
        pe = new ue,
        me = new Nt(0, 0, 0),
        fe = new Nt(1, 1, 1),
        ge = new Nt,
        ve = new Nt,
        ye = new Nt,
        xe = new ue,
        _e = new It;
        class Me {
            constructor(t = 0, e = 0, n = 0, i = Me.DefaultOrder) {
                this._x = t,
                this._y = e,
                this._z = n,
                this._order = i
            }
            get x() {
                return this._x
            }
            set x(t) {
                this._x = t,
                this._onChangeCallback()
            }
            get y() {
                return this._y
            }
            set y(t) {
                this._y = t,
                this._onChangeCallback()
            }
            get z() {
                return this._z
            }
            set z(t) {
                this._z = t,
                this._onChangeCallback()
            }
            get order() {
                return this._order
            }
            set order(t) {
                this._order = t,
                this._onChangeCallback()
            }
            set(t, e, n, i = this._order) {
                return this._x = t,
                this._y = e,
                this._z = n,
                this._order = i,
                this._onChangeCallback(),
                this
            }
            clone() {
                return new this.constructor(this._x, this._y, this._z, this._order)
            }
            copy(t) {
                return this._x = t._x,
                this._y = t._y,
                this._z = t._z,
                this._order = t._order,
                this._onChangeCallback(),
                this
            }
            setFromRotationMatrix(t, e = this._order, n = !0) {
                const i = t.elements,
                r = i[0],
                s = i[4],
                a = i[8],
                o = i[1],
                l = i[5],
                c = i[9],
                h = i[2],
                u = i[6],
                d = i[10];
                switch (e) {
                case "XYZ":
                    this._y = Math.asin(ht(a, -1, 1)),
                    Math.abs(a) < .9999999 ? (this._x = Math.atan2(-c, d), this._z = Math.atan2(-s, r)) : (this._x = Math.atan2(u, l), this._z = 0);
                    break;
                case "YXZ":
                    this._x = Math.asin(-ht(c, -1, 1)),
                    Math.abs(c) < .9999999 ? (this._y = Math.atan2(a, d), this._z = Math.atan2(o, l)) : (this._y = Math.atan2(-h, r), this._z = 0);
                    break;
                case "ZXY":
                    this._x = Math.asin(ht(u, -1, 1)),
                    Math.abs(u) < .9999999 ? (this._y = Math.atan2(-h, d), this._z = Math.atan2(-s, l)) : (this._y = 0, this._z = Math.atan2(o, r));
                    break;
                case "ZYX":
                    this._y = Math.asin(-ht(h, -1, 1)),
                    Math.abs(h) < .9999999 ? (this._x = Math.atan2(u, d), this._z = Math.atan2(o, r)) : (this._x = 0, this._z = Math.atan2(-s, l));
                    break;
                case "YZX":
                    this._z = Math.asin(ht(o, -1, 1)),
                    Math.abs(o) < .9999999 ? (this._x = Math.atan2(-c, l), this._y = Math.atan2(-h, r)) : (this._x = 0, this._y = Math.atan2(a, d));
                    break;
                case "XZY":
                    this._z = Math.asin(-ht(s, -1, 1)),
                    Math.abs(s) < .9999999 ? (this._x = Math.atan2(u, l), this._y = Math.atan2(a, r)) : (this._x = Math.atan2(-c, d), this._y = 0);
                    break;
                default:
                    console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e);
                }
                return this._order = e,
                !0 === n && this._onChangeCallback(),
                this
            }
            setFromQuaternion(t, e, n) {
                return xe.makeRotationFromQuaternion(t),
                this.setFromRotationMatrix(xe, e, n)
            }
            setFromVector3(t, e = this._order) {
                return this.set(t.x, t.y, t.z, e)
            }
            reorder(t) {
                return _e.setFromEuler(this),
                this.setFromQuaternion(_e, t)
            }
            equals(t) {
                return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order
            }
            fromArray(t) {
                return this._x = t[0],
                this._y = t[1],
                this._z = t[2],
                void 0 !== t[3] && (this._order = t[3]),
                this._onChangeCallback(),
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this._x,
                t[e + 1] = this._y,
                t[e + 2] = this._z,
                t[e + 3] = this._order,
                t
            }
            toVector3(t) {
                return t ? t.set(this._x, this._y, this._z) : new Nt(this._x, this._y, this._z)
            }
            _onChange(t) {
                return this._onChangeCallback = t,
                this
            }
            _onChangeCallback() {}
        }
        Me.prototype.isEuler = !0,
        Me.DefaultOrder = "XYZ",
        Me.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"];
        class be {
            constructor() {
                this.mask = 1
            }
            set(t) {
                this.mask = (1 << t | 0) >>> 0
            }
            enable(t) {
                this.mask |= 1 << t | 0
            }
            enableAll() {
                this.mask = -1
            }
            toggle(t) {
                this.mask ^= 1 << t | 0
            }
            disable(t) {
                this.mask &= ~(1 << t | 0)
            }
            disableAll() {
                this.mask = 0
            }
            test(t) {
                return 0 != (this.mask & t.mask)
            }
            isEnabled(t) {
                return 0 != (this.mask & (1 << t | 0))
            }
        }
        let we = 0;
        const Se = new Nt,
        Te = new It,
        Ee = new ue,
        Ae = new Nt,
        Le = new Nt,
        Re = new Nt,
        Ce = new It,
        Pe = new Nt(1, 0, 0),
        De = new Nt(0, 1, 0),
        Ie = new Nt(0, 0, 1),
        Ne = {
            type: "added"
        },
        ze = {
            type: "removed"
        };
        class Be extends rt {
            constructor() {
                super(),
                Object.defineProperty(this, "id", {
                    value: we++
                }),
                this.uuid = ct(),
                this.name = "",
                this.type = "Object3D",
                this.parent = null,
                this.children = [],
                this.up = Be.DefaultUp.clone();
                const t = new Nt,
                e = new Me,
                n = new It,
                i = new Nt(1, 1, 1);
                e._onChange(function () {
                    n.setFromEuler(e, !1)
                }),
                n._onChange(function () {
                    e.setFromQuaternion(n, void 0, !1)
                }),
                Object.defineProperties(this, {
                    position: {
                        configurable: !0,
                        enumerable: !0,
                        value: t
                    },
                    rotation: {
                        configurable: !0,
                        enumerable: !0,
                        value: e
                    },
                    quaternion: {
                        configurable: !0,
                        enumerable: !0,
                        value: n
                    },
                    scale: {
                        configurable: !0,
                        enumerable: !0,
                        value: i
                    },
                    modelViewMatrix: {
                        value: new ue
                    },
                    normalMatrix: {
                        value: new yt
                    }
                }),
                this.matrix = new ue,
                this.matrixWorld = new ue,
                this.matrixAutoUpdate = Be.DefaultMatrixAutoUpdate,
                this.matrixWorldNeedsUpdate = !1,
                this.layers = new be,
                this.visible = !0,
                this.castShadow = !1,
                this.receiveShadow = !1,
                this.frustumCulled = !0,
                this.renderOrder = 0,
                this.animations = [],
                this.userData = {}
            }
            onBeforeRender() {}
            onAfterRender() {}
            applyMatrix4(t) {
                this.matrixAutoUpdate && this.updateMatrix(),
                this.matrix.premultiply(t),
                this.matrix.decompose(this.position, this.quaternion, this.scale)
            }
            applyQuaternion(t) {
                return this.quaternion.premultiply(t),
                this
            }
            setRotationFromAxisAngle(t, e) {
                this.quaternion.setFromAxisAngle(t, e)
            }
            setRotationFromEuler(t) {
                this.quaternion.setFromEuler(t, !0)
            }
            setRotationFromMatrix(t) {
                this.quaternion.setFromRotationMatrix(t)
            }
            setRotationFromQuaternion(t) {
                this.quaternion.copy(t)
            }
            rotateOnAxis(t, e) {
                return Te.setFromAxisAngle(t, e),
                this.quaternion.multiply(Te),
                this
            }
            rotateOnWorldAxis(t, e) {
                return Te.setFromAxisAngle(t, e),
                this.quaternion.premultiply(Te),
                this
            }
            rotateX(t) {
                return this.rotateOnAxis(Pe, t)
            }
            rotateY(t) {
                return this.rotateOnAxis(De, t)
            }
            rotateZ(t) {
                return this.rotateOnAxis(Ie, t)
            }
            translateOnAxis(t, e) {
                return Se.copy(t).applyQuaternion(this.quaternion),
                this.position.add(Se.multiplyScalar(e)),
                this
            }
            translateX(t) {
                return this.translateOnAxis(Pe, t)
            }
            translateY(t) {
                return this.translateOnAxis(De, t)
            }
            translateZ(t) {
                return this.translateOnAxis(Ie, t)
            }
            localToWorld(t) {
                return t.applyMatrix4(this.matrixWorld)
            }
            worldToLocal(t) {
                return t.applyMatrix4(Ee.copy(this.matrixWorld).invert())
            }
            lookAt(t, e, n) {
                t.isVector3 ? Ae.copy(t) : Ae.set(t, e, n);
                const i = this.parent;
                this.updateWorldMatrix(!0, !1),
                Le.setFromMatrixPosition(this.matrixWorld),
                this.isCamera || this.isLight ? Ee.lookAt(Le, Ae, this.up) : Ee.lookAt(Ae, Le, this.up),
                this.quaternion.setFromRotationMatrix(Ee),
                i && (Ee.extractRotation(i.matrixWorld), Te.setFromRotationMatrix(Ee), this.quaternion.premultiply(Te.invert()))
            }
            add(t) {
                if (arguments.length > 1) {
                    for (let t = 0; t < arguments.length; t++)
                        this.add(arguments[t]);
                    return this
                }
                return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Ne)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this)
            }
            remove(t) {
                if (arguments.length > 1) {
                    for (let t = 0; t < arguments.length; t++)
                        this.remove(arguments[t]);
                    return this
                }
                const e = this.children.indexOf(t);
                return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(ze)),
                this
            }
            removeFromParent() {
                const t = this.parent;
                return null !== t && t.remove(this),
                this
            }
            clear() {
                for (let t = 0; t < this.children.length; t++) {
                    const e = this.children[t];
                    e.parent = null,
                    e.dispatchEvent(ze)
                }
                return this.children.length = 0,
                this
            }
            attach(t) {
                return this.updateWorldMatrix(!0, !1),
                Ee.copy(this.matrixWorld).invert(),
                null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), Ee.multiply(t.parent.matrixWorld)),
                t.applyMatrix4(Ee),
                this.add(t),
                t.updateWorldMatrix(!1, !0),
                this
            }
            getObjectById(t) {
                return this.getObjectByProperty("id", t)
            }
            getObjectByName(t) {
                return this.getObjectByProperty("name", t)
            }
            getObjectByProperty(t, e) {
                if (this[t] === e)
                    return this;
                for (let n = 0, i = this.children.length; n < i; n++) {
                    const i = this.children[n].getObjectByProperty(t, e);
                    if (void 0 !== i)
                        return i
                }
            }
            getWorldPosition(t) {
                return this.updateWorldMatrix(!0, !1),
                t.setFromMatrixPosition(this.matrixWorld)
            }
            getWorldQuaternion(t) {
                return this.updateWorldMatrix(!0, !1),
                this.matrixWorld.decompose(Le, t, Re),
                t
            }
            getWorldScale(t) {
                return this.updateWorldMatrix(!0, !1),
                this.matrixWorld.decompose(Le, Ce, t),
                t
            }
            getWorldDirection(t) {
                this.updateWorldMatrix(!0, !1);
                const e = this.matrixWorld.elements;
                return t.set(e[8], e[9], e[10]).normalize()
            }
            raycast() {}
            traverse(t) {
                t(this);
                const e = this.children;
                for (let n = 0, i = e.length; n < i; n++)
                    e[n].traverse(t)
            }
            traverseVisible(t) {
                if (!1 === this.visible)
                    return;
                t(this);
                const e = this.children;
                for (let n = 0, i = e.length; n < i; n++)
                    e[n].traverseVisible(t)
            }
            traverseAncestors(t) {
                const e = this.parent;
                null !== e && (t(e), e.traverseAncestors(t))
            }
            updateMatrix() {
                this.matrix.compose(this.position, this.quaternion, this.scale),
                this.matrixWorldNeedsUpdate = !0
            }
            updateMatrixWorld(t) {
                this.matrixAutoUpdate && this.updateMatrix(),
                (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0);
                const e = this.children;
                for (let n = 0, i = e.length; n < i; n++)
                    e[n].updateMatrixWorld(t)
            }
            updateWorldMatrix(t, e) {
                const n = this.parent;
                if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) {
                    const t = this.children;
                    for (let e = 0, n = t.length; e < n; e++)
                        t[e].updateWorldMatrix(!1, !0)
                }
            }
            toJSON(t) {
                const e = void 0 === t || "string" == typeof t,
                n = {};
                e && (t = {
                        geometries: {},
                        materials: {},
                        textures: {},
                        images: {},
                        shapes: {},
                        skeletons: {},
                        animations: {}
                    }, n.metadata = {
                        version: 4.5,
                        type: "Object",
                        generator: "Object3D.toJSON"
                    });
                const i = {};
                function r(e, n) {
                    return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)),
                    n.uuid
                }
                if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON(), null !== this.instanceColor && (i.instanceColor = this.instanceColor.toJSON())), this.isScene)
                    this.background && (this.background.isColor ? i.background = this.background.toJSON() : this.background.isTexture && (i.background = this.background.toJSON(t).uuid)), this.environment && this.environment.isTexture && (i.environment = this.environment.toJSON(t).uuid);
                else if (this.isMesh || this.isLine || this.isPoints) {
                    i.geometry = r(t.geometries, this.geometry);
                    const e = this.geometry.parameters;
                    if (void 0 !== e && void 0 !== e.shapes) {
                        const n = e.shapes;
                        if (Array.isArray(n))
                            for (let e = 0, i = n.length; e < i; e++) {
                                const i = n[e];
                                r(t.shapes, i)
                            }
                        else
                            r(t.shapes, n)
                    }
                }
                if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material)
                    if (Array.isArray(this.material)) {
                        const e = [];
                        for (let n = 0, i = this.material.length; n < i; n++)
                            e.push(r(t.materials, this.material[n]));
                        i.material = e
                    } else
                        i.material = r(t.materials, this.material);
                if (this.children.length > 0) {
                    i.children = [];
                    for (let e = 0; e < this.children.length; e++)
                        i.children.push(this.children[e].toJSON(t).object)
                }
                if (this.animations.length > 0) {
                    i.animations = [];
                    for (let e = 0; e < this.animations.length; e++) {
                        const n = this.animations[e];
                        i.animations.push(r(t.animations, n))
                    }
                }
                if (e) {
                    const e = s(t.geometries),
                    i = s(t.materials),
                    r = s(t.textures),
                    a = s(t.images),
                    o = s(t.shapes),
                    l = s(t.skeletons),
                    c = s(t.animations);
                    e.length > 0 && (n.geometries = e),
                    i.length > 0 && (n.materials = i),
                    r.length > 0 && (n.textures = r),
                    a.length > 0 && (n.images = a),
                    o.length > 0 && (n.shapes = o),
                    l.length > 0 && (n.skeletons = l),
                    c.length > 0 && (n.animations = c)
                }
                return n.object = i,
                n;
                function s(t) {
                    const e = [];
                    for (const n in t) {
                        const i = t[n];
                        delete i.metadata,
                        e.push(i)
                    }
                    return e
                }
            }
            clone(t) {
                return new this.constructor().copy(this, t)
            }
            copy(t, e = !0) {
                if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e)
                    for (let e = 0; e < t.children.length; e++) {
                        const n = t.children[e];
                        this.add(n.clone())
                    }
                return this
            }
        }
        Be.DefaultUp = new Nt(0, 1, 0),
        Be.DefaultMatrixAutoUpdate = !0,
        Be.prototype.isObject3D = !0;
        const Fe = new Nt,
        Oe = new Nt,
        Ue = new Nt,
        He = new Nt,
        Ge = new Nt,
        ke = new Nt,
        Ve = new Nt,
        We = new Nt,
        je = new Nt,
        qe = new Nt;
        class Xe {
            constructor(t = new Nt, e = new Nt, n = new Nt) {
                this.a = t,
                this.b = e,
                this.c = n
            }
            static getNormal(t, e, n, i) {
                i.subVectors(n, e),
                Fe.subVectors(t, e),
                i.cross(Fe);
                const r = i.lengthSq();
                return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0)
            }
            static getBarycoord(t, e, n, i, r) {
                Fe.subVectors(i, e),
                Oe.subVectors(n, e),
                Ue.subVectors(t, e);
                const s = Fe.dot(Fe),
                a = Fe.dot(Oe),
                o = Fe.dot(Ue),
                l = Oe.dot(Oe),
                c = Oe.dot(Ue),
                h = s * l - a * a;
                if (0 === h)
                    return r.set(-2, -1, -1);
                const u = 1 / h,
                d = (l * o - a * c) * u,
                p = (s * c - a * o) * u;
                return r.set(1 - d - p, p, d)
            }
            static containsPoint(t, e, n, i) {
                return this.getBarycoord(t, e, n, i, He),
                He.x >= 0 && He.y >= 0 && He.x + He.y <= 1
            }
            static getUV(t, e, n, i, r, s, a, o) {
                return this.getBarycoord(t, e, n, i, He),
                o.set(0, 0),
                o.addScaledVector(r, He.x),
                o.addScaledVector(s, He.y),
                o.addScaledVector(a, He.z),
                o
            }
            static isFrontFacing(t, e, n, i) {
                return Fe.subVectors(n, e),
                Oe.subVectors(t, e),
                Fe.cross(Oe).dot(i) < 0
            }
            set(t, e, n) {
                return this.a.copy(t),
                this.b.copy(e),
                this.c.copy(n),
                this
            }
            setFromPointsAndIndices(t, e, n, i) {
                return this.a.copy(t[e]),
                this.b.copy(t[n]),
                this.c.copy(t[i]),
                this
            }
            setFromAttributeAndIndices(t, e, n, i) {
                return this.a.fromBufferAttribute(t, e),
                this.b.fromBufferAttribute(t, n),
                this.c.fromBufferAttribute(t, i),
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.a.copy(t.a),
                this.b.copy(t.b),
                this.c.copy(t.c),
                this
            }
            getArea() {
                return Fe.subVectors(this.c, this.b),
                Oe.subVectors(this.a, this.b),
                .5 * Fe.cross(Oe).length()
            }
            getMidpoint(t) {
                return t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3)
            }
            getNormal(t) {
                return Xe.getNormal(this.a, this.b, this.c, t)
            }
            getPlane(t) {
                return t.setFromCoplanarPoints(this.a, this.b, this.c)
            }
            getBarycoord(t, e) {
                return Xe.getBarycoord(t, this.a, this.b, this.c, e)
            }
            getUV(t, e, n, i, r) {
                return Xe.getUV(t, this.a, this.b, this.c, e, n, i, r)
            }
            containsPoint(t) {
                return Xe.containsPoint(t, this.a, this.b, this.c)
            }
            isFrontFacing(t) {
                return Xe.isFrontFacing(this.a, this.b, this.c, t)
            }
            intersectsBox(t) {
                return t.intersectsTriangle(this)
            }
            closestPointToPoint(t, e) {
                const n = this.a,
                i = this.b,
                r = this.c;
                let s,
                a;
                Ge.subVectors(i, n),
                ke.subVectors(r, n),
                We.subVectors(t, n);
                const o = Ge.dot(We),
                l = ke.dot(We);
                if (o <= 0 && l <= 0)
                    return e.copy(n);
                je.subVectors(t, i);
                const c = Ge.dot(je),
                h = ke.dot(je);
                if (c >= 0 && h <= c)
                    return e.copy(i);
                const u = o * h - c * l;
                if (u <= 0 && o >= 0 && c <= 0)
                    return s = o / (o - c), e.copy(n).addScaledVector(Ge, s);
                qe.subVectors(t, r);
                const d = Ge.dot(qe),
                p = ke.dot(qe);
                if (p >= 0 && d <= p)
                    return e.copy(r);
                const m = d * l - o * p;
                if (m <= 0 && l >= 0 && p <= 0)
                    return a = l / (l - p), e.copy(n).addScaledVector(ke, a);
                const f = c * p - d * h;
                if (f <= 0 && h - c >= 0 && d - p >= 0)
                    return Ve.subVectors(r, i), a = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ve, a);
                const g = 1 / (f + m + u);
                return s = m * g,
                a = u * g,
                e.copy(n).addScaledVector(Ge, s).addScaledVector(ke, a)
            }
            equals(t) {
                return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c)
            }
        }
        let Je = 0;
        class Ye extends rt {
            constructor() {
                super(),
                Object.defineProperty(this, "id", {
                    value: Je++
                }),
                this.uuid = ct(),
                this.name = "",
                this.type = "Material",
                this.fog = !0,
                this.blending = 1,
                this.side = 0,
                this.vertexColors = !1,
                this.opacity = 1,
                this.format = E,
                this.transparent = !1,
                this.blendSrc = 204,
                this.blendDst = 205,
                this.blendEquation = n,
                this.blendSrcAlpha = null,
                this.blendDstAlpha = null,
                this.blendEquationAlpha = null,
                this.depthFunc = 3,
                this.depthTest = !0,
                this.depthWrite = !0,
                this.stencilWriteMask = 255,
                this.stencilFunc = 519,
                this.stencilRef = 0,
                this.stencilFuncMask = 255,
                this.stencilFail = tt,
                this.stencilZFail = tt,
                this.stencilZPass = tt,
                this.stencilWrite = !1,
                this.clippingPlanes = null,
                this.clipIntersection = !1,
                this.clipShadows = !1,
                this.shadowSide = null,
                this.colorWrite = !0,
                this.precision = null,
                this.polygonOffset = !1,
                this.polygonOffsetFactor = 0,
                this.polygonOffsetUnits = 0,
                this.dithering = !1,
                this.alphaToCoverage = !1,
                this.premultipliedAlpha = !1,
                this.visible = !0,
                this.toneMapped = !0,
                this.userData = {},
                this.version = 0,
                this._alphaTest = 0
            }
            get alphaTest() {
                return this._alphaTest
            }
            set alphaTest(t) {
                this._alphaTest > 0 != t > 0 && this.version++,
                this._alphaTest = t
            }
            onBuild() {}
            onBeforeRender() {}
            onBeforeCompile() {}
            customProgramCacheKey() {
                return this.onBeforeCompile.toString()
            }
            setValues(t) {
                if (void 0 !== t)
                    for (const e in t) {
                        const n = t[e];
                        if (void 0 === n) {
                            console.warn("THREE.Material: '" + e + "' parameter is undefined.");
                            continue
                        }
                        if ("shading" === e) {
                            console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."),
                            this.flatShading = 1 === n;
                            continue
                        }
                        const i = this[e];
                        void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.")
                    }
            }
            toJSON(t) {
                const e = void 0 === t || "string" == typeof t;
                e && (t = {
                        textures: {},
                        images: {}
                    });
                const n = {
                    metadata: {
                        version: 4.5,
                        type: "Material",
                        generator: "Material.toJSON"
                    }
                };
                function i(t) {
                    const e = [];
                    for (const n in t) {
                        const i = t[n];
                        delete i.metadata,
                        e.push(i)
                    }
                    return e
                }
                if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), void 0 !== this.sheen && (n.sheen = this.sheen), this.sheenColor && this.sheenColor.isColor && (n.sheenColor = this.sheenColor.getHex()), void 0 !== this.sheenRoughness && (n.sheenRoughness = this.sheenRoughness), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.specularIntensity && (n.specularIntensity = this.specularIntensity), this.specularColor && this.specularColor.isColor && (n.specularColor = this.specularColor.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid, n.lightMapIntensity = this.lightMapIntensity), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.specularIntensityMap && this.specularIntensityMap.isTexture && (n.specularIntensityMap = this.specularIntensityMap.toJSON(t).uuid), this.specularColorMap && this.specularColorMap.isTexture && (n.specularColorMap = this.specularColorMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, void 0 !== this.combine && (n.combine = this.combine)), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity), void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity), void 0 !== this.refractionRatio && (n.refractionRatio = this.refractionRatio), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.transmission && (n.transmission = this.transmission), this.transmissionMap && this.transmissionMap.isTexture && (n.transmissionMap = this.transmissionMap.toJSON(t).uuid), void 0 !== this.thickness && (n.thickness = this.thickness), this.thicknessMap && this.thicknessMap.isTexture && (n.thicknessMap = this.thicknessMap.toJSON(t).uuid), void 0 !== this.attenuationDistance && (n.attenuationDistance = this.attenuationDistance), void 0 !== this.attenuationColor && (n.attenuationColor = this.attenuationColor.getHex()), void 0 !== this.size && (n.size = this.size), null !== this.shadowSide && (n.shadowSide = this.shadowSide), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), this.format !== E && (n.format = this.format), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.colorWrite = this.colorWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.alphaToCoverage && (n.alphaToCoverage = this.alphaToCoverage), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.flatShading && (n.flatShading = this.flatShading), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) {
                    const e = i(t.textures),
                    r = i(t.images);
                    e.length > 0 && (n.textures = e),
                    r.length > 0 && (n.images = r)
                }
                return n
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                this.name = t.name,
                this.fog = t.fog,
                this.blending = t.blending,
                this.side = t.side,
                this.vertexColors = t.vertexColors,
                this.opacity = t.opacity,
                this.format = t.format,
                this.transparent = t.transparent,
                this.blendSrc = t.blendSrc,
                this.blendDst = t.blendDst,
                this.blendEquation = t.blendEquation,
                this.blendSrcAlpha = t.blendSrcAlpha,
                this.blendDstAlpha = t.blendDstAlpha,
                this.blendEquationAlpha = t.blendEquationAlpha,
                this.depthFunc = t.depthFunc,
                this.depthTest = t.depthTest,
                this.depthWrite = t.depthWrite,
                this.stencilWriteMask = t.stencilWriteMask,
                this.stencilFunc = t.stencilFunc,
                this.stencilRef = t.stencilRef,
                this.stencilFuncMask = t.stencilFuncMask,
                this.stencilFail = t.stencilFail,
                this.stencilZFail = t.stencilZFail,
                this.stencilZPass = t.stencilZPass,
                this.stencilWrite = t.stencilWrite;
                const e = t.clippingPlanes;
                let n = null;
                if (null !== e) {
                    const t = e.length;
                    n = new Array(t);
                    for (let i = 0; i !== t; ++i)
                        n[i] = e[i].clone()
                }
                return this.clippingPlanes = n,
                this.clipIntersection = t.clipIntersection,
                this.clipShadows = t.clipShadows,
                this.shadowSide = t.shadowSide,
                this.colorWrite = t.colorWrite,
                this.precision = t.precision,
                this.polygonOffset = t.polygonOffset,
                this.polygonOffsetFactor = t.polygonOffsetFactor,
                this.polygonOffsetUnits = t.polygonOffsetUnits,
                this.dithering = t.dithering,
                this.alphaTest = t.alphaTest,
                this.alphaToCoverage = t.alphaToCoverage,
                this.premultipliedAlpha = t.premultipliedAlpha,
                this.visible = t.visible,
                this.toneMapped = t.toneMapped,
                this.userData = JSON.parse(JSON.stringify(t.userData)),
                this
            }
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
            set needsUpdate(t) {
                !0 === t && this.version++
            }
        }
        Ye.prototype.isMaterial = !0;
        const Ze = {
            aliceblue: 15792383,
            antiquewhite: 16444375,
            aqua: 65535,
            aquamarine: 8388564,
            azure: 15794175,
            beige: 16119260,
            bisque: 16770244,
            black: 0,
            blanchedalmond: 16772045,
            blue: 255,
            blueviolet: 9055202,
            brown: 10824234,
            burlywood: 14596231,
            cadetblue: 6266528,
            chartreuse: 8388352,
            chocolate: 13789470,
            coral: 16744272,
            cornflowerblue: 6591981,
            cornsilk: 16775388,
            crimson: 14423100,
            cyan: 65535,
            darkblue: 139,
            darkcyan: 35723,
            darkgoldenrod: 12092939,
            darkgray: 11119017,
            darkgreen: 25600,
            darkgrey: 11119017,
            darkkhaki: 12433259,
            darkmagenta: 9109643,
            darkolivegreen: 5597999,
            darkorange: 16747520,
            darkorchid: 10040012,
            darkred: 9109504,
            darksalmon: 15308410,
            darkseagreen: 9419919,
            darkslateblue: 4734347,
            darkslategray: 3100495,
            darkslategrey: 3100495,
            darkturquoise: 52945,
            darkviolet: 9699539,
            deeppink: 16716947,
            deepskyblue: 49151,
            dimgray: 6908265,
            dimgrey: 6908265,
            dodgerblue: 2003199,
            firebrick: 11674146,
            floralwhite: 16775920,
            forestgreen: 2263842,
            fuchsia: 16711935,
            gainsboro: 14474460,
            ghostwhite: 16316671,
            gold: 16766720,
            goldenrod: 14329120,
            gray: 8421504,
            green: 32768,
            greenyellow: 11403055,
            grey: 8421504,
            honeydew: 15794160,
            hotpink: 16738740,
            indianred: 13458524,
            indigo: 4915330,
            ivory: 16777200,
            khaki: 15787660,
            lavender: 15132410,
            lavenderblush: 16773365,
            lawngreen: 8190976,
            lemonchiffon: 16775885,
            lightblue: 11393254,
            lightcoral: 15761536,
            lightcyan: 14745599,
            lightgoldenrodyellow: 16448210,
            lightgray: 13882323,
            lightgreen: 9498256,
            lightgrey: 13882323,
            lightpink: 16758465,
            lightsalmon: 16752762,
            lightseagreen: 2142890,
            lightskyblue: 8900346,
            lightslategray: 7833753,
            lightslategrey: 7833753,
            lightsteelblue: 11584734,
            lightyellow: 16777184,
            lime: 65280,
            limegreen: 3329330,
            linen: 16445670,
            magenta: 16711935,
            maroon: 8388608,
            mediumaquamarine: 6737322,
            mediumblue: 205,
            mediumorchid: 12211667,
            mediumpurple: 9662683,
            mediumseagreen: 3978097,
            mediumslateblue: 8087790,
            mediumspringgreen: 64154,
            mediumturquoise: 4772300,
            mediumvioletred: 13047173,
            midnightblue: 1644912,
            mintcream: 16121850,
            mistyrose: 16770273,
            moccasin: 16770229,
            navajowhite: 16768685,
            navy: 128,
            oldlace: 16643558,
            olive: 8421376,
            olivedrab: 7048739,
            orange: 16753920,
            orangered: 16729344,
            orchid: 14315734,
            palegoldenrod: 15657130,
            palegreen: 10025880,
            paleturquoise: 11529966,
            palevioletred: 14381203,
            papayawhip: 16773077,
            peachpuff: 16767673,
            peru: 13468991,
            pink: 16761035,
            plum: 14524637,
            powderblue: 11591910,
            purple: 8388736,
            rebeccapurple: 6697881,
            red: 16711680,
            rosybrown: 12357519,
            royalblue: 4286945,
            saddlebrown: 9127187,
            salmon: 16416882,
            sandybrown: 16032864,
            seagreen: 3050327,
            seashell: 16774638,
            sienna: 10506797,
            silver: 12632256,
            skyblue: 8900331,
            slateblue: 6970061,
            slategray: 7372944,
            slategrey: 7372944,
            snow: 16775930,
            springgreen: 65407,
            steelblue: 4620980,
            tan: 13808780,
            teal: 32896,
            thistle: 14204888,
            tomato: 16737095,
            turquoise: 4251856,
            violet: 15631086,
            wheat: 16113331,
            white: 16777215,
            whitesmoke: 16119285,
            yellow: 16776960,
            yellowgreen: 10145074
        },
        Qe = {
            h: 0,
            s: 0,
            l: 0
        },
        Ke = {
            h: 0,
            s: 0,
            l: 0
        };
        function $e(t, e, n) {
            return n < 0 && (n += 1),
            n > 1 && (n -= 1),
            n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t
        }
        function tn(t) {
            return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4)
        }
        function en(t) {
            return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055
        }
        class nn {
            constructor(t, e, n) {
                return void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n)
            }
            set(t) {
                return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t),
                this
            }
            setScalar(t) {
                return this.r = t,
                this.g = t,
                this.b = t,
                this
            }
            setHex(t) {
                return t = Math.floor(t),
                this.r = (t >> 16 & 255) / 255,
                this.g = (t >> 8 & 255) / 255,
                this.b = (255 & t) / 255,
                this
            }
            setRGB(t, e, n) {
                return this.r = t,
                this.g = e,
                this.b = n,
                this
            }
            setHSL(t, e, n) {
                if (t = ut(t, 1), e = ht(e, 0, 1), n = ht(n, 0, 1), 0 === e)
                    this.r = this.g = this.b = n;
                else {
                    const i = n <= .5 ? n * (1 + e) : n + e - n * e,
                    r = 2 * n - i;
                    this.r = $e(r, i, t + 1 / 3),
                    this.g = $e(r, i, t),
                    this.b = $e(r, i, t - 1 / 3)
                }
                return this
            }
            setStyle(t) {
                function e(e) {
                    void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.")
                }
                let n;
                if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) {
                    let t;
                    const i = n[1],
                    r = n[2];
                    switch (i) {
                    case "rgb":
                    case "rgba":
                        if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))
                            return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this;
                        if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))
                            return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this;
                        break;
                    case "hsl":
                    case "hsla":
                        if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) {
                            const n = parseFloat(t[1]) / 360,
                            i = parseInt(t[2], 10) / 100,
                            r = parseInt(t[3], 10) / 100;
                            return e(t[4]),
                            this.setHSL(n, i, r)
                        }
                    }
                } else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) {
                    const t = n[1],
                    e = t.length;
                    if (3 === e)
                        return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this;
                    if (6 === e)
                        return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this
                }
                return t && t.length > 0 ? this.setColorName(t) : this
            }
            setColorName(t) {
                const e = Ze[t.toLowerCase()];
                return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t),
                this
            }
            clone() {
                return new this.constructor(this.r, this.g, this.b)
            }
            copy(t) {
                return this.r = t.r,
                this.g = t.g,
                this.b = t.b,
                this
            }
            copyGammaToLinear(t, e = 2) {
                return this.r = Math.pow(t.r, e),
                this.g = Math.pow(t.g, e),
                this.b = Math.pow(t.b, e),
                this
            }
            copyLinearToGamma(t, e = 2) {
                const n = e > 0 ? 1 / e : 1;
                return this.r = Math.pow(t.r, n),
                this.g = Math.pow(t.g, n),
                this.b = Math.pow(t.b, n),
                this
            }
            convertGammaToLinear(t) {
                return this.copyGammaToLinear(this, t),
                this
            }
            convertLinearToGamma(t) {
                return this.copyLinearToGamma(this, t),
                this
            }
            copySRGBToLinear(t) {
                return this.r = tn(t.r),
                this.g = tn(t.g),
                this.b = tn(t.b),
                this
            }
            copyLinearToSRGB(t) {
                return this.r = en(t.r),
                this.g = en(t.g),
                this.b = en(t.b),
                this
            }
            convertSRGBToLinear() {
                return this.copySRGBToLinear(this),
                this
            }
            convertLinearToSRGB() {
                return this.copyLinearToSRGB(this),
                this
            }
            getHex() {
                return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0
            }
            getHexString() {
                return ("000000" + this.getHex().toString(16)).slice(-6)
            }
            getHSL(t) {
                const e = this.r,
                n = this.g,
                i = this.b,
                r = Math.max(e, n, i),
                s = Math.min(e, n, i);
                let a,
                o;
                const l = (s + r) / 2;
                if (s === r)
                    a = 0, o = 0;
                else {
                    const t = r - s;
                    switch (o = l <= .5 ? t / (r + s) : t / (2 - r - s), r) {
                    case e:
                        a = (n - i) / t + (n < i ? 6 : 0);
                        break;
                    case n:
                        a = (i - e) / t + 2;
                        break;
                    case i:
                        a = (e - n) / t + 4;
                    }
                    a /= 6
                }
                return t.h = a,
                t.s = o,
                t.l = l,
                t
            }
            getStyle() {
                return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")"
            }
            offsetHSL(t, e, n) {
                return this.getHSL(Qe),
                Qe.h += t,
                Qe.s += e,
                Qe.l += n,
                this.setHSL(Qe.h, Qe.s, Qe.l),
                this
            }
            add(t) {
                return this.r += t.r,
                this.g += t.g,
                this.b += t.b,
                this
            }
            addColors(t, e) {
                return this.r = t.r + e.r,
                this.g = t.g + e.g,
                this.b = t.b + e.b,
                this
            }
            addScalar(t) {
                return this.r += t,
                this.g += t,
                this.b += t,
                this
            }
            sub(t) {
                return this.r = Math.max(0, this.r - t.r),
                this.g = Math.max(0, this.g - t.g),
                this.b = Math.max(0, this.b - t.b),
                this
            }
            multiply(t) {
                return this.r *= t.r,
                this.g *= t.g,
                this.b *= t.b,
                this
            }
            multiplyScalar(t) {
                return this.r *= t,
                this.g *= t,
                this.b *= t,
                this
            }
            lerp(t, e) {
                return this.r += (t.r - this.r) * e,
                this.g += (t.g - this.g) * e,
                this.b += (t.b - this.b) * e,
                this
            }
            lerpColors(t, e, n) {
                return this.r = t.r + (e.r - t.r) * n,
                this.g = t.g + (e.g - t.g) * n,
                this.b = t.b + (e.b - t.b) * n,
                this
            }
            lerpHSL(t, e) {
                this.getHSL(Qe),
                t.getHSL(Ke);
                const n = dt(Qe.h, Ke.h, e),
                i = dt(Qe.s, Ke.s, e),
                r = dt(Qe.l, Ke.l, e);
                return this.setHSL(n, i, r),
                this
            }
            equals(t) {
                return t.r === this.r && t.g === this.g && t.b === this.b
            }
            fromArray(t, e = 0) {
                return this.r = t[e],
                this.g = t[e + 1],
                this.b = t[e + 2],
                this
            }
            toArray(t = [], e = 0) {
                return t[e] = this.r,
                t[e + 1] = this.g,
                t[e + 2] = this.b,
                t
            }
            fromBufferAttribute(t, e) {
                return this.r = t.getX(e),
                this.g = t.getY(e),
                this.b = t.getZ(e),
                !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255),
                this
            }
            toJSON() {
                return this.getHex()
            }
        }
        nn.NAMES = Ze,
        nn.prototype.isColor = !0,
        nn.prototype.r = 1,
        nn.prototype.g = 1,
        nn.prototype.b = 1;
        class rn extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshBasicMaterial",
                this.color = new nn(16777215),
                this.map = null,
                this.lightMap = null,
                this.lightMapIntensity = 1,
                this.aoMap = null,
                this.aoMapIntensity = 1,
                this.specularMap = null,
                this.alphaMap = null,
                this.envMap = null,
                this.combine = 0,
                this.reflectivity = 1,
                this.refractionRatio = .98,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.wireframeLinecap = "round",
                this.wireframeLinejoin = "round",
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.map = t.map,
                this.lightMap = t.lightMap,
                this.lightMapIntensity = t.lightMapIntensity,
                this.aoMap = t.aoMap,
                this.aoMapIntensity = t.aoMapIntensity,
                this.specularMap = t.specularMap,
                this.alphaMap = t.alphaMap,
                this.envMap = t.envMap,
                this.combine = t.combine,
                this.reflectivity = t.reflectivity,
                this.refractionRatio = t.refractionRatio,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.wireframeLinecap = t.wireframeLinecap,
                this.wireframeLinejoin = t.wireframeLinejoin,
                this
            }
        }
        rn.prototype.isMeshBasicMaterial = !0;
        const sn = new Nt,
        an = new vt;
        class on {
            constructor(t, e, n) {
                if (Array.isArray(t))
                    throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");
                this.name = "",
                this.array = t,
                this.itemSize = e,
                this.count = void 0 !== t ? t.length / e : 0,
                this.normalized = !0 === n,
                this.usage = et,
                this.updateRange = {
                    offset: 0,
                    count: -1
                },
                this.version = 0
            }
            onUploadCallback() {}
            set needsUpdate(t) {
                !0 === t && this.version++
            }
            setUsage(t) {
                return this.usage = t,
                this
            }
            copy(t) {
                return this.name = t.name,
                this.array = new t.array.constructor(t.array),
                this.itemSize = t.itemSize,
                this.count = t.count,
                this.normalized = t.normalized,
                this.usage = t.usage,
                this
            }
            copyAt(t, e, n) {
                t *= this.itemSize,
                n *= e.itemSize;
                for (let i = 0, r = this.itemSize; i < r; i++)
                    this.array[t + i] = e.array[n + i];
                return this
            }
            copyArray(t) {
                return this.array.set(t),
                this
            }
            copyColorsArray(t) {
                const e = this.array;
                let n = 0;
                for (let i = 0, r = t.length; i < r; i++) {
                    let r = t[i];
                    void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new nn),
                    e[n++] = r.r,
                    e[n++] = r.g,
                    e[n++] = r.b
                }
                return this
            }
            copyVector2sArray(t) {
                const e = this.array;
                let n = 0;
                for (let i = 0, r = t.length; i < r; i++) {
                    let r = t[i];
                    void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new vt),
                    e[n++] = r.x,
                    e[n++] = r.y
                }
                return this
            }
            copyVector3sArray(t) {
                const e = this.array;
                let n = 0;
                for (let i = 0, r = t.length; i < r; i++) {
                    let r = t[i];
                    void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new Nt),
                    e[n++] = r.x,
                    e[n++] = r.y,
                    e[n++] = r.z
                }
                return this
            }
            copyVector4sArray(t) {
                const e = this.array;
                let n = 0;
                for (let i = 0, r = t.length; i < r; i++) {
                    let r = t[i];
                    void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new Rt),
                    e[n++] = r.x,
                    e[n++] = r.y,
                    e[n++] = r.z,
                    e[n++] = r.w
                }
                return this
            }
            applyMatrix3(t) {
                if (2 === this.itemSize)
                    for (let e = 0, n = this.count; e < n; e++)
                        an.fromBufferAttribute(this, e), an.applyMatrix3(t), this.setXY(e, an.x, an.y);
                else if (3 === this.itemSize)
                    for (let e = 0, n = this.count; e < n; e++)
                        sn.fromBufferAttribute(this, e), sn.applyMatrix3(t), this.setXYZ(e, sn.x, sn.y, sn.z);
                return this
            }
            applyMatrix4(t) {
                for (let e = 0, n = this.count; e < n; e++)
                    sn.x = this.getX(e), sn.y = this.getY(e), sn.z = this.getZ(e), sn.applyMatrix4(t), this.setXYZ(e, sn.x, sn.y, sn.z);
                return this
            }
            applyNormalMatrix(t) {
                for (let e = 0, n = this.count; e < n; e++)
                    sn.x = this.getX(e), sn.y = this.getY(e), sn.z = this.getZ(e), sn.applyNormalMatrix(t), this.setXYZ(e, sn.x, sn.y, sn.z);
                return this
            }
            transformDirection(t) {
                for (let e = 0, n = this.count; e < n; e++)
                    sn.x = this.getX(e), sn.y = this.getY(e), sn.z = this.getZ(e), sn.transformDirection(t), this.setXYZ(e, sn.x, sn.y, sn.z);
                return this
            }
            set(t, e = 0) {
                return this.array.set(t, e),
                this
            }
            getX(t) {
                return this.array[t * this.itemSize]
            }
            setX(t, e) {
                return this.array[t * this.itemSize] = e,
                this
            }
            getY(t) {
                return this.array[t * this.itemSize + 1]
            }
            setY(t, e) {
                return this.array[t * this.itemSize + 1] = e,
                this
            }
            getZ(t) {
                return this.array[t * this.itemSize + 2]
            }
            setZ(t, e) {
                return this.array[t * this.itemSize + 2] = e,
                this
            }
            getW(t) {
                return this.array[t * this.itemSize + 3]
            }
            setW(t, e) {
                return this.array[t * this.itemSize + 3] = e,
                this
            }
            setXY(t, e, n) {
                return t *= this.itemSize,
                this.array[t + 0] = e,
                this.array[t + 1] = n,
                this
            }
            setXYZ(t, e, n, i) {
                return t *= this.itemSize,
                this.array[t + 0] = e,
                this.array[t + 1] = n,
                this.array[t + 2] = i,
                this
            }
            setXYZW(t, e, n, i, r) {
                return t *= this.itemSize,
                this.array[t + 0] = e,
                this.array[t + 1] = n,
                this.array[t + 2] = i,
                this.array[t + 3] = r,
                this
            }
            onUpload(t) {
                return this.onUploadCallback = t,
                this
            }
            clone() {
                return new this.constructor(this.array, this.itemSize).copy(this)
            }
            toJSON() {
                const t = {
                    itemSize: this.itemSize,
                    type: this.array.constructor.name,
                    array: Array.prototype.slice.call(this.array),
                    normalized: this.normalized
                };
                return "" !== this.name && (t.name = this.name),
                this.usage !== et && (t.usage = this.usage),
                0 === this.updateRange.offset && -1 === this.updateRange.count || (t.updateRange = this.updateRange),
                t
            }
        }
        on.prototype.isBufferAttribute = !0;
        class ln extends on {
            constructor(t, e, n) {
                super(new Int8Array(t), e, n)
            }
        }
        class cn extends on {
            constructor(t, e, n) {
                super(new Uint8Array(t), e, n)
            }
        }
        class hn extends on {
            constructor(t, e, n) {
                super(new Uint8ClampedArray(t), e, n)
            }
        }
        class un extends on {
            constructor(t, e, n) {
                super(new Int16Array(t), e, n)
            }
        }
        class dn extends on {
            constructor(t, e, n) {
                super(new Uint16Array(t), e, n)
            }
        }
        class pn extends on {
            constructor(t, e, n) {
                super(new Int32Array(t), e, n)
            }
        }
        class mn extends on {
            constructor(t, e, n) {
                super(new Uint32Array(t), e, n)
            }
        }
        class fn extends on {
            constructor(t, e, n) {
                super(new Uint16Array(t), e, n)
            }
        }
        fn.prototype.isFloat16BufferAttribute = !0;
        class gn extends on {
            constructor(t, e, n) {
                super(new Float32Array(t), e, n)
            }
        }
        class vn extends on {
            constructor(t, e, n) {
                super(new Float64Array(t), e, n)
            }
        }
        let yn = 0;
        const xn = new ue,
        _n = new Be,
        Mn = new Nt,
        bn = new Ft,
        wn = new Ft,
        Sn = new Nt;
        class Tn extends rt {
            constructor() {
                super(),
                Object.defineProperty(this, "id", {
                    value: yn++
                }),
                this.uuid = ct(),
                this.name = "",
                this.type = "BufferGeometry",
                this.index = null,
                this.attributes = {},
                this.morphAttributes = {},
                this.morphTargetsRelative = !1,
                this.groups = [],
                this.boundingBox = null,
                this.boundingSphere = null,
                this.drawRange = {
                    start: 0,
                    count: 1 / 0
                },
                this.userData = {}
            }
            getIndex() {
                return this.index
            }
            setIndex(t) {
                return Array.isArray(t) ? this.index = new(xt(t) > 65535 ? mn : dn)(t, 1) : this.index = t,
                this
            }
            getAttribute(t) {
                return this.attributes[t]
            }
            setAttribute(t, e) {
                return this.attributes[t] = e,
                this
            }
            deleteAttribute(t) {
                return delete this.attributes[t],
                this
            }
            hasAttribute(t) {
                return void 0 !== this.attributes[t]
            }
            addGroup(t, e, n = 0) {
                this.groups.push({
                    start: t,
                    count: e,
                    materialIndex: n
                })
            }
            clearGroups() {
                this.groups = []
            }
            setDrawRange(t, e) {
                this.drawRange.start = t,
                this.drawRange.count = e
            }
            applyMatrix4(t) {
                const e = this.attributes.position;
                void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0);
                const n = this.attributes.normal;
                if (void 0 !== n) {
                    const e = new yt().getNormalMatrix(t);
                    n.applyNormalMatrix(e),
                    n.needsUpdate = !0
                }
                const i = this.attributes.tangent;
                return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0),
                null !== this.boundingBox && this.computeBoundingBox(),
                null !== this.boundingSphere && this.computeBoundingSphere(),
                this
            }
            applyQuaternion(t) {
                return xn.makeRotationFromQuaternion(t),
                this.applyMatrix4(xn),
                this
            }
            rotateX(t) {
                return xn.makeRotationX(t),
                this.applyMatrix4(xn),
                this
            }
            rotateY(t) {
                return xn.makeRotationY(t),
                this.applyMatrix4(xn),
                this
            }
            rotateZ(t) {
                return xn.makeRotationZ(t),
                this.applyMatrix4(xn),
                this
            }
            translate(t, e, n) {
                return xn.makeTranslation(t, e, n),
                this.applyMatrix4(xn),
                this
            }
            scale(t, e, n) {
                return xn.makeScale(t, e, n),
                this.applyMatrix4(xn),
                this
            }
            lookAt(t) {
                return _n.lookAt(t),
                _n.updateMatrix(),
                this.applyMatrix4(_n.matrix),
                this
            }
            center() {
                return this.computeBoundingBox(),
                this.boundingBox.getCenter(Mn).negate(),
                this.translate(Mn.x, Mn.y, Mn.z),
                this
            }
            setFromPoints(t) {
                const e = [];
                for (let n = 0, i = t.length; n < i; n++) {
                    const i = t[n];
                    e.push(i.x, i.y, i.z || 0)
                }
                return this.setAttribute("position", new gn(e, 3)),
                this
            }
            computeBoundingBox() {
                null === this.boundingBox && (this.boundingBox = new Ft);
                const t = this.attributes.position,
                e = this.morphAttributes.position;
                if (t && t.isGLBufferAttribute)
                    return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".", this), void this.boundingBox.set(new Nt(-1 / 0, -1 / 0, -1 / 0), new Nt(1 / 0, 1 / 0, 1 / 0));
                if (void 0 !== t) {
                    if (this.boundingBox.setFromBufferAttribute(t), e)
                        for (let t = 0, n = e.length; t < n; t++) {
                            const n = e[t];
                            bn.setFromBufferAttribute(n),
                            this.morphTargetsRelative ? (Sn.addVectors(this.boundingBox.min, bn.min), this.boundingBox.expandByPoint(Sn), Sn.addVectors(this.boundingBox.max, bn.max), this.boundingBox.expandByPoint(Sn)) : (this.boundingBox.expandByPoint(bn.min), this.boundingBox.expandByPoint(bn.max))
                        }
                } else
                    this.boundingBox.makeEmpty();
                (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error("THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.", this)
            }
            computeBoundingSphere() {
                null === this.boundingSphere && (this.boundingSphere = new ne);
                const t = this.attributes.position,
                e = this.morphAttributes.position;
                if (t && t.isGLBufferAttribute)
                    return console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".", this), void this.boundingSphere.set(new Nt, 1 / 0);
                if (t) {
                    const n = this.boundingSphere.center;
                    if (bn.setFromBufferAttribute(t), e)
                        for (let t = 0, n = e.length; t < n; t++) {
                            const n = e[t];
                            wn.setFromBufferAttribute(n),
                            this.morphTargetsRelative ? (Sn.addVectors(bn.min, wn.min), bn.expandByPoint(Sn), Sn.addVectors(bn.max, wn.max), bn.expandByPoint(Sn)) : (bn.expandByPoint(wn.min), bn.expandByPoint(wn.max))
                        }
                    bn.getCenter(n);
                    let i = 0;
                    for (let e = 0, r = t.count; e < r; e++)
                        Sn.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(Sn));
                    if (e)
                        for (let r = 0, s = e.length; r < s; r++) {
                            const s = e[r],
                            a = this.morphTargetsRelative;
                            for (let e = 0, r = s.count; e < r; e++)
                                Sn.fromBufferAttribute(s, e), a && (Mn.fromBufferAttribute(t, e), Sn.add(Mn)), i = Math.max(i, n.distanceToSquared(Sn))
                        }
                    this.boundingSphere.radius = Math.sqrt(i),
                    isNaN(this.boundingSphere.radius) && console.error("THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.", this)
                }
            }
            computeTangents() {
                const t = this.index,
                e = this.attributes;
                if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv)
                    return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");
                const n = t.array,
                i = e.position.array,
                r = e.normal.array,
                s = e.uv.array,
                a = i.length / 3;
                void 0 === e.tangent && this.setAttribute("tangent", new on(new Float32Array(4 * a), 4));
                const o = e.tangent.array,
                l = [],
                c = [];
                for (let t = 0; t < a; t++)
                    l[t] = new Nt, c[t] = new Nt;
                const h = new Nt,
                u = new Nt,
                d = new Nt,
                p = new vt,
                m = new vt,
                f = new vt,
                g = new Nt,
                v = new Nt;
                function y(t, e, n) {
                    h.fromArray(i, 3 * t),
                    u.fromArray(i, 3 * e),
                    d.fromArray(i, 3 * n),
                    p.fromArray(s, 2 * t),
                    m.fromArray(s, 2 * e),
                    f.fromArray(s, 2 * n),
                    u.sub(h),
                    d.sub(h),
                    m.sub(p),
                    f.sub(p);
                    const r = 1 / (m.x * f.y - f.x * m.y);
                    isFinite(r) && (g.copy(u).multiplyScalar(f.y).addScaledVector(d, -m.y).multiplyScalar(r), v.copy(d).multiplyScalar(m.x).addScaledVector(u, -f.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(v), c[e].add(v), c[n].add(v))
                }
                let x = this.groups;
                0 === x.length && (x = [{
                            start: 0,
                            count: n.length
                        }
                    ]);
                for (let t = 0, e = x.length; t < e; ++t) {
                    const e = x[t],
                    i = e.start;
                    for (let t = i, r = i + e.count; t < r; t += 3)
                        y(n[t + 0], n[t + 1], n[t + 2])
                }
                const _ = new Nt,
                M = new Nt,
                b = new Nt,
                w = new Nt;
                function S(t) {
                    b.fromArray(r, 3 * t),
                    w.copy(b);
                    const e = l[t];
                    _.copy(e),
                    _.sub(b.multiplyScalar(b.dot(e))).normalize(),
                    M.crossVectors(w, e);
                    const n = M.dot(c[t]) < 0 ? -1 : 1;
                    o[4 * t] = _.x,
                    o[4 * t + 1] = _.y,
                    o[4 * t + 2] = _.z,
                    o[4 * t + 3] = n
                }
                for (let t = 0, e = x.length; t < e; ++t) {
                    const e = x[t],
                    i = e.start;
                    for (let t = i, r = i + e.count; t < r; t += 3)
                        S(n[t + 0]), S(n[t + 1]), S(n[t + 2])
                }
            }
            computeVertexNormals() {
                const t = this.index,
                e = this.getAttribute("position");
                if (void 0 !== e) {
                    let n = this.getAttribute("normal");
                    if (void 0 === n)
                        n = new on(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n);
                    else
                        for (let t = 0, e = n.count; t < e; t++)
                            n.setXYZ(t, 0, 0, 0);
                    const i = new Nt,
                    r = new Nt,
                    s = new Nt,
                    a = new Nt,
                    o = new Nt,
                    l = new Nt,
                    c = new Nt,
                    h = new Nt;
                    if (t)
                        for (let u = 0, d = t.count; u < d; u += 3) {
                            const d = t.getX(u + 0),
                            p = t.getX(u + 1),
                            m = t.getX(u + 2);
                            i.fromBufferAttribute(e, d),
                            r.fromBufferAttribute(e, p),
                            s.fromBufferAttribute(e, m),
                            c.subVectors(s, r),
                            h.subVectors(i, r),
                            c.cross(h),
                            a.fromBufferAttribute(n, d),
                            o.fromBufferAttribute(n, p),
                            l.fromBufferAttribute(n, m),
                            a.add(c),
                            o.add(c),
                            l.add(c),
                            n.setXYZ(d, a.x, a.y, a.z),
                            n.setXYZ(p, o.x, o.y, o.z),
                            n.setXYZ(m, l.x, l.y, l.z)
                        }
                    else
                        for (let t = 0, a = e.count; t < a; t += 3)
                            i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), s.fromBufferAttribute(e, t + 2), c.subVectors(s, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z);
                    this.normalizeNormals(),
                    n.needsUpdate = !0
                }
            }
            merge(t, e) {
                if (!t || !t.isBufferGeometry)
                    return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t);
                void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));
                const n = this.attributes;
                for (const i in n) {
                    if (void 0 === t.attributes[i])
                        continue;
                    const r = n[i].array,
                    s = t.attributes[i],
                    a = s.array,
                    o = s.itemSize * e,
                    l = Math.min(a.length, r.length - o);
                    for (let t = 0, e = o; t < l; t++, e++)
                        r[e] = a[t]
                }
                return this
            }
            normalizeNormals() {
                const t = this.attributes.normal;
                for (let e = 0, n = t.count; e < n; e++)
                    Sn.fromBufferAttribute(t, e), Sn.normalize(), t.setXYZ(e, Sn.x, Sn.y, Sn.z)
            }
            toNonIndexed() {
                function t(t, e) {
                    const n = t.array,
                    i = t.itemSize,
                    r = t.normalized,
                    s = new n.constructor(e.length * i);
                    let a = 0,
                    o = 0;
                    for (let r = 0, l = e.length; r < l; r++) {
                        a = t.isInterleavedBufferAttribute ? e[r] * t.data.stride + t.offset : e[r] * i;
                        for (let t = 0; t < i; t++)
                            s[o++] = n[a++]
                    }
                    return new on(s, i, r)
                }
                if (null === this.index)
                    return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this;
                const e = new Tn,
                n = this.index.array,
                i = this.attributes;
                for (const r in i) {
                    const s = t(i[r], n);
                    e.setAttribute(r, s)
                }
                const r = this.morphAttributes;
                for (const i in r) {
                    const s = [],
                    a = r[i];
                    for (let e = 0, i = a.length; e < i; e++) {
                        const i = t(a[e], n);
                        s.push(i)
                    }
                    e.morphAttributes[i] = s
                }
                e.morphTargetsRelative = this.morphTargetsRelative;
                const s = this.groups;
                for (let t = 0, n = s.length; t < n; t++) {
                    const n = s[t];
                    e.addGroup(n.start, n.count, n.materialIndex)
                }
                return e
            }
            toJSON() {
                const t = {
                    metadata: {
                        version: 4.5,
                        type: "BufferGeometry",
                        generator: "BufferGeometry.toJSON"
                    }
                };
                if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) {
                    const e = this.parameters;
                    for (const n in e)
                        void 0 !== e[n] && (t[n] = e[n]);
                    return t
                }
                t.data = {
                    attributes: {}
                };
                const e = this.index;
                null !== e && (t.data.index = {
                        type: e.array.constructor.name,
                        array: Array.prototype.slice.call(e.array)
                    });
                const n = this.attributes;
                for (const e in n) {
                    const i = n[e];
                    t.data.attributes[e] = i.toJSON(t.data)
                }
                const i = {};
                let r = !1;
                for (const e in this.morphAttributes) {
                    const n = this.morphAttributes[e],
                    s = [];
                    for (let e = 0, i = n.length; e < i; e++) {
                        const i = n[e];
                        s.push(i.toJSON(t.data))
                    }
                    s.length > 0 && (i[e] = s, r = !0)
                }
                r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative);
                const s = this.groups;
                s.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(s)));
                const a = this.boundingSphere;
                return null !== a && (t.data.boundingSphere = {
                        center: a.center.toArray(),
                        radius: a.radius
                    }),
                t
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                this.index = null,
                this.attributes = {},
                this.morphAttributes = {},
                this.groups = [],
                this.boundingBox = null,
                this.boundingSphere = null;
                const e = {};
                this.name = t.name;
                const n = t.index;
                null !== n && this.setIndex(n.clone(e));
                const i = t.attributes;
                for (const t in i) {
                    const n = i[t];
                    this.setAttribute(t, n.clone(e))
                }
                const r = t.morphAttributes;
                for (const t in r) {
                    const n = [],
                    i = r[t];
                    for (let t = 0, r = i.length; t < r; t++)
                        n.push(i[t].clone(e));
                    this.morphAttributes[t] = n
                }
                this.morphTargetsRelative = t.morphTargetsRelative;
                const s = t.groups;
                for (let t = 0, e = s.length; t < e; t++) {
                    const e = s[t];
                    this.addGroup(e.start, e.count, e.materialIndex)
                }
                const a = t.boundingBox;
                null !== a && (this.boundingBox = a.clone());
                const o = t.boundingSphere;
                return null !== o && (this.boundingSphere = o.clone()),
                this.drawRange.start = t.drawRange.start,
                this.drawRange.count = t.drawRange.count,
                this.userData = t.userData,
                void 0 !== t.parameters && (this.parameters = Object.assign({}, t.parameters)),
                this
            }
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
        }
        Tn.prototype.isBufferGeometry = !0;
        const En = new ue,
        An = new he,
        Ln = new ne,
        Rn = new Nt,
        Cn = new Nt,
        Pn = new Nt,
        Dn = new Nt,
        In = new Nt,
        Nn = new Nt,
        zn = new Nt,
        Bn = new Nt,
        Fn = new Nt,
        On = new vt,
        Un = new vt,
        Hn = new vt,
        Gn = new Nt,
        kn = new Nt;
        class Vn extends Be {
            constructor(t = new Tn, e = new rn) {
                super(),
                this.type = "Mesh",
                this.geometry = t,
                this.material = e,
                this.updateMorphTargets()
            }
            copy(t) {
                return super.copy(t),
                void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()),
                void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)),
                this.material = t.material,
                this.geometry = t.geometry,
                this
            }
            updateMorphTargets() {
                const t = this.geometry;
                if (t.isBufferGeometry) {
                    const e = t.morphAttributes,
                    n = Object.keys(e);
                    if (n.length > 0) {
                        const t = e[n[0]];
                        if (void 0 !== t) {
                            this.morphTargetInfluences = [],
                            this.morphTargetDictionary = {};
                            for (let e = 0, n = t.length; e < n; e++) {
                                const n = t[e].name || String(e);
                                this.morphTargetInfluences.push(0),
                                this.morphTargetDictionary[n] = e
                            }
                        }
                    }
                } else {
                    const e = t.morphTargets;
                    void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
                }
            }
            raycast(t, e) {
                const n = this.geometry,
                i = this.material,
                r = this.matrixWorld;
                if (void 0 === i)
                    return;
                if (null === n.boundingSphere && n.computeBoundingSphere(), Ln.copy(n.boundingSphere), Ln.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ln))
                    return;
                if (En.copy(r).invert(), An.copy(t.ray).applyMatrix4(En), null !== n.boundingBox && !1 === An.intersectsBox(n.boundingBox))
                    return;
                let s;
                if (n.isBufferGeometry) {
                    const r = n.index,
                    a = n.attributes.position,
                    o = n.morphAttributes.position,
                    l = n.morphTargetsRelative,
                    c = n.attributes.uv,
                    h = n.attributes.uv2,
                    u = n.groups,
                    d = n.drawRange;
                    if (null !== r) {
                        if (Array.isArray(i))
                            for (let n = 0, p = u.length; n < p; n++) {
                                const p = u[n],
                                m = i[p.materialIndex];
                                for (let n = Math.max(p.start, d.start), i = Math.min(r.count, Math.min(p.start + p.count, d.start + d.count)); n < i; n += 3) {
                                    const i = r.getX(n),
                                    u = r.getX(n + 1),
                                    d = r.getX(n + 2);
                                    s = Wn(this, m, t, An, a, o, l, c, h, i, u, d),
                                    s && (s.faceIndex = Math.floor(n / 3), s.face.materialIndex = p.materialIndex, e.push(s))
                                }
                            }
                        else {
                            for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) {
                                const u = r.getX(n),
                                d = r.getX(n + 1),
                                p = r.getX(n + 2);
                                s = Wn(this, i, t, An, a, o, l, c, h, u, d, p),
                                s && (s.faceIndex = Math.floor(n / 3), e.push(s))
                            }
                        }
                    } else if (void 0 !== a)
                        if (Array.isArray(i))
                            for (let n = 0, r = u.length; n < r; n++) {
                                const r = u[n],
                                p = i[r.materialIndex];
                                for (let n = Math.max(r.start, d.start), i = Math.min(a.count, Math.min(r.start + r.count, d.start + d.count)); n < i; n += 3) {
                                    s = Wn(this, p, t, An, a, o, l, c, h, n, n + 1, n + 2),
                                    s && (s.faceIndex = Math.floor(n / 3), s.face.materialIndex = r.materialIndex, e.push(s))
                                }
                            }
                        else {
                            for (let n = Math.max(0, d.start), r = Math.min(a.count, d.start + d.count); n < r; n += 3) {
                                s = Wn(this, i, t, An, a, o, l, c, h, n, n + 1, n + 2),
                                s && (s.faceIndex = Math.floor(n / 3), e.push(s))
                            }
                        }
                } else
                    n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
            }
        }
        function Wn(t, e, n, i, r, s, a, o, l, c, h, u) {
            Rn.fromBufferAttribute(r, c),
            Cn.fromBufferAttribute(r, h),
            Pn.fromBufferAttribute(r, u);
            const d = t.morphTargetInfluences;
            if (s && d) {
                zn.set(0, 0, 0),
                Bn.set(0, 0, 0),
                Fn.set(0, 0, 0);
                for (let t = 0, e = s.length; t < e; t++) {
                    const e = d[t],
                    n = s[t];
                    0 !== e && (Dn.fromBufferAttribute(n, c), In.fromBufferAttribute(n, h), Nn.fromBufferAttribute(n, u), a ? (zn.addScaledVector(Dn, e), Bn.addScaledVector(In, e), Fn.addScaledVector(Nn, e)) : (zn.addScaledVector(Dn.sub(Rn), e), Bn.addScaledVector(In.sub(Cn), e), Fn.addScaledVector(Nn.sub(Pn), e)))
                }
                Rn.add(zn),
                Cn.add(Bn),
                Pn.add(Fn)
            }
            t.isSkinnedMesh && (t.boneTransform(c, Rn), t.boneTransform(h, Cn), t.boneTransform(u, Pn));
            const p = function (t, e, n, i, r, s, a, o) {
                let l;
                if (l = 1 === e.side ? i.intersectTriangle(a, s, r, !0, o) : i.intersectTriangle(r, s, a, 2 !== e.side, o), null === l)
                    return null;
                kn.copy(o),
                kn.applyMatrix4(t.matrixWorld);
                const c = n.ray.origin.distanceTo(kn);
                return c < n.near || c > n.far ? null : {
                    distance: c,
                    point: kn.clone(),
                    object: t
                }
            }
            (t, e, n, i, Rn, Cn, Pn, Gn);
            if (p) {
                o && (On.fromBufferAttribute(o, c), Un.fromBufferAttribute(o, h), Hn.fromBufferAttribute(o, u), p.uv = Xe.getUV(Gn, Rn, Cn, Pn, On, Un, Hn, new vt)),
                l && (On.fromBufferAttribute(l, c), Un.fromBufferAttribute(l, h), Hn.fromBufferAttribute(l, u), p.uv2 = Xe.getUV(Gn, Rn, Cn, Pn, On, Un, Hn, new vt));
                const t = {
                    a: c,
                    b: h,
                    c: u,
                    normal: new Nt,
                    materialIndex: 0
                };
                Xe.getNormal(Rn, Cn, Pn, t.normal),
                p.face = t
            }
            return p
        }
        Vn.prototype.isMesh = !0;
        class jn extends Tn {
            constructor(t = 1, e = 1, n = 1, i = 1, r = 1, s = 1) {
                super(),
                this.type = "BoxGeometry",
                this.parameters = {
                    width: t,
                    height: e,
                    depth: n,
                    widthSegments: i,
                    heightSegments: r,
                    depthSegments: s
                };
                const a = this;
                i = Math.floor(i),
                r = Math.floor(r),
                s = Math.floor(s);
                const o = [],
                l = [],
                c = [],
                h = [];
                let u = 0,
                d = 0;
                function p(t, e, n, i, r, s, p, m, f, g, v) {
                    const y = s / f,
                    x = p / g,
                    _ = s / 2,
                    M = p / 2,
                    b = m / 2,
                    w = f + 1,
                    S = g + 1;
                    let T = 0,
                    E = 0;
                    const A = new Nt;
                    for (let s = 0; s < S; s++) {
                        const a = s * x - M;
                        for (let o = 0; o < w; o++) {
                            const u = o * y - _;
                            A[t] = u * i,
                            A[e] = a * r,
                            A[n] = b,
                            l.push(A.x, A.y, A.z),
                            A[t] = 0,
                            A[e] = 0,
                            A[n] = m > 0 ? 1 : -1,
                            c.push(A.x, A.y, A.z),
                            h.push(o / f),
                            h.push(1 - s / g),
                            T += 1
                        }
                    }
                    for (let t = 0; t < g; t++)
                        for (let e = 0; e < f; e++) {
                            const n = u + e + w * t,
                            i = u + e + w * (t + 1),
                            r = u + (e + 1) + w * (t + 1),
                            s = u + (e + 1) + w * t;
                            o.push(n, i, s),
                            o.push(i, r, s),
                            E += 6
                        }
                    a.addGroup(d, E, v),
                    d += E,
                    u += T
                }
                p("z", "y", "x", -1, -1, n, e, t, s, r, 0),
                p("z", "y", "x", 1, -1, n, e, -t, s, r, 1),
                p("x", "z", "y", 1, 1, t, n, e, i, s, 2),
                p("x", "z", "y", 1, -1, t, n, -e, i, s, 3),
                p("x", "y", "z", 1, -1, t, e, n, i, r, 4),
                p("x", "y", "z", -1, -1, t, e, -n, i, r, 5),
                this.setIndex(o),
                this.setAttribute("position", new gn(l, 3)),
                this.setAttribute("normal", new gn(c, 3)),
                this.setAttribute("uv", new gn(h, 2))
            }
            static fromJSON(t) {
                return new jn(t.width, t.height, t.depth, t.widthSegments, t.heightSegments, t.depthSegments)
            }
        }
        function qn(t) {
            const e = {};
            for (const n in t) {
                e[n] = {};
                for (const i in t[n]) {
                    const r = t[n][i];
                    r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture || r.isQuaternion) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r
                }
            }
            return e
        }
        function Xn(t) {
            const e = {};
            for (let n = 0; n < t.length; n++) {
                const i = qn(t[n]);
                for (const t in i)
                    e[t] = i[t]
            }
            return e
        }
        const Jn = {
            clone: qn,
            merge: Xn
        };
        class Yn extends Ye {
            constructor(t) {
                super(),
                this.type = "ShaderMaterial",
                this.defines = {},
                this.uniforms = {},
                this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",
                this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",
                this.linewidth = 1,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.fog = !1,
                this.lights = !1,
                this.clipping = !1,
                this.extensions = {
                    derivatives: !1,
                    fragDepth: !1,
                    drawBuffers: !1,
                    shaderTextureLOD: !1
                },
                this.defaultAttributeValues = {
                    color: [1, 1, 1],
                    uv: [0, 0],
                    uv2: [0, 0]
                },
                this.index0AttributeName = void 0,
                this.uniformsNeedUpdate = !1,
                this.glslVersion = null,
                void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t))
            }
            copy(t) {
                return super.copy(t),
                this.fragmentShader = t.fragmentShader,
                this.vertexShader = t.vertexShader,
                this.uniforms = qn(t.uniforms),
                this.defines = Object.assign({}, t.defines),
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.lights = t.lights,
                this.clipping = t.clipping,
                this.extensions = Object.assign({}, t.extensions),
                this.glslVersion = t.glslVersion,
                this
            }
            toJSON(t) {
                const e = super.toJSON(t);
                e.glslVersion = this.glslVersion,
                e.uniforms = {};
                for (const n in this.uniforms) {
                    const i = this.uniforms[n].value;
                    i && i.isTexture ? e.uniforms[n] = {
                        type: "t",
                        value: i.toJSON(t).uuid
                    }
                     : i && i.isColor ? e.uniforms[n] = {
                        type: "c",
                        value: i.getHex()
                    }
                     : i && i.isVector2 ? e.uniforms[n] = {
                        type: "v2",
                        value: i.toArray()
                    }
                     : i && i.isVector3 ? e.uniforms[n] = {
                        type: "v3",
                        value: i.toArray()
                    }
                     : i && i.isVector4 ? e.uniforms[n] = {
                        type: "v4",
                        value: i.toArray()
                    }
                     : i && i.isMatrix3 ? e.uniforms[n] = {
                        type: "m3",
                        value: i.toArray()
                    }
                     : i && i.isMatrix4 ? e.uniforms[n] = {
                        type: "m4",
                        value: i.toArray()
                    }
                     : e.uniforms[n] = {
                        value: i
                    }
                }
                Object.keys(this.defines).length > 0 && (e.defines = this.defines),
                e.vertexShader = this.vertexShader,
                e.fragmentShader = this.fragmentShader;
                const n = {};
                for (const t in this.extensions)
                    !0 === this.extensions[t] && (n[t] = !0);
                return Object.keys(n).length > 0 && (e.extensions = n),
                e
            }
        }
        Yn.prototype.isShaderMaterial = !0;
        class Zn extends Be {
            constructor() {
                super(),
                this.type = "Camera",
                this.matrixWorldInverse = new ue,
                this.projectionMatrix = new ue,
                this.projectionMatrixInverse = new ue
            }
            copy(t, e) {
                return super.copy(t, e),
                this.matrixWorldInverse.copy(t.matrixWorldInverse),
                this.projectionMatrix.copy(t.projectionMatrix),
                this.projectionMatrixInverse.copy(t.projectionMatrixInverse),
                this
            }
            getWorldDirection(t) {
                this.updateWorldMatrix(!0, !1);
                const e = this.matrixWorld.elements;
                return t.set(-e[8], -e[9], -e[10]).normalize()
            }
            updateMatrixWorld(t) {
                super.updateMatrixWorld(t),
                this.matrixWorldInverse.copy(this.matrixWorld).invert()
            }
            updateWorldMatrix(t, e) {
                super.updateWorldMatrix(t, e),
                this.matrixWorldInverse.copy(this.matrixWorld).invert()
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        Zn.prototype.isCamera = !0;
        class Qn extends Zn {
            constructor(t = 50, e = 1, n = .1, i = 2e3) {
                super(),
                this.type = "PerspectiveCamera",
                this.fov = t,
                this.zoom = 1,
                this.near = n,
                this.far = i,
                this.focus = 10,
                this.aspect = e,
                this.view = null,
                this.filmGauge = 35,
                this.filmOffset = 0,
                this.updateProjectionMatrix()
            }
            copy(t, e) {
                return super.copy(t, e),
                this.fov = t.fov,
                this.zoom = t.zoom,
                this.near = t.near,
                this.far = t.far,
                this.focus = t.focus,
                this.aspect = t.aspect,
                this.view = null === t.view ? null : Object.assign({}, t.view),
                this.filmGauge = t.filmGauge,
                this.filmOffset = t.filmOffset,
                this
            }
            setFocalLength(t) {
                const e = .5 * this.getFilmHeight() / t;
                this.fov = 2 * lt * Math.atan(e),
                this.updateProjectionMatrix()
            }
            getFocalLength() {
                const t = Math.tan(.5 * ot * this.fov);
                return .5 * this.getFilmHeight() / t
            }
            getEffectiveFOV() {
                return 2 * lt * Math.atan(Math.tan(.5 * ot * this.fov) / this.zoom)
            }
            getFilmWidth() {
                return this.filmGauge * Math.min(this.aspect, 1)
            }
            getFilmHeight() {
                return this.filmGauge / Math.max(this.aspect, 1)
            }
            setViewOffset(t, e, n, i, r, s) {
                this.aspect = t / e,
                null === this.view && (this.view = {
                        enabled: !0,
                        fullWidth: 1,
                        fullHeight: 1,
                        offsetX: 0,
                        offsetY: 0,
                        width: 1,
                        height: 1
                    }),
                this.view.enabled = !0,
                this.view.fullWidth = t,
                this.view.fullHeight = e,
                this.view.offsetX = n,
                this.view.offsetY = i,
                this.view.width = r,
                this.view.height = s,
                this.updateProjectionMatrix()
            }
            clearViewOffset() {
                null !== this.view && (this.view.enabled = !1),
                this.updateProjectionMatrix()
            }
            updateProjectionMatrix() {
                const t = this.near;
                let e = t * Math.tan(.5 * ot * this.fov) / this.zoom,
                n = 2 * e,
                i = this.aspect * n,
                r =  - .5 * i;
                const s = this.view;
                if (null !== this.view && this.view.enabled) {
                    const t = s.fullWidth,
                    a = s.fullHeight;
                    r += s.offsetX * i / t,
                    e -= s.offsetY * n / a,
                    i *= s.width / t,
                    n *= s.height / a
                }
                const a = this.filmOffset;
                0 !== a && (r += t * a / this.getFilmWidth()),
                this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far),
                this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.object.fov = this.fov,
                e.object.zoom = this.zoom,
                e.object.near = this.near,
                e.object.far = this.far,
                e.object.focus = this.focus,
                e.object.aspect = this.aspect,
                null !== this.view && (e.object.view = Object.assign({}, this.view)),
                e.object.filmGauge = this.filmGauge,
                e.object.filmOffset = this.filmOffset,
                e
            }
        }
        Qn.prototype.isPerspectiveCamera = !0;
        const Kn = 90;
        class $n extends Be {
            constructor(t, e, n) {
                if (super(), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget)
                    return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");
                this.renderTarget = n;
                const i = new Qn(Kn, 1, t, e);
                i.layers = this.layers,
                i.up.set(0, -1, 0),
                i.lookAt(new Nt(1, 0, 0)),
                this.add(i);
                const r = new Qn(Kn, 1, t, e);
                r.layers = this.layers,
                r.up.set(0, -1, 0),
                r.lookAt(new Nt(-1, 0, 0)),
                this.add(r);
                const s = new Qn(Kn, 1, t, e);
                s.layers = this.layers,
                s.up.set(0, 0, 1),
                s.lookAt(new Nt(0, 1, 0)),
                this.add(s);
                const a = new Qn(Kn, 1, t, e);
                a.layers = this.layers,
                a.up.set(0, 0, -1),
                a.lookAt(new Nt(0, -1, 0)),
                this.add(a);
                const o = new Qn(Kn, 1, t, e);
                o.layers = this.layers,
                o.up.set(0, -1, 0),
                o.lookAt(new Nt(0, 0, 1)),
                this.add(o);
                const l = new Qn(Kn, 1, t, e);
                l.layers = this.layers,
                l.up.set(0, -1, 0),
                l.lookAt(new Nt(0, 0, -1)),
                this.add(l)
            }
            update(t, e) {
                null === this.parent && this.updateMatrixWorld();
                const n = this.renderTarget,
                [i, r, s, a, o, l] = this.children,
                c = t.xr.enabled,
                h = t.getRenderTarget();
                t.xr.enabled = !1;
                const u = n.texture.generateMipmaps;
                n.texture.generateMipmaps = !1,
                t.setRenderTarget(n, 0),
                t.render(e, i),
                t.setRenderTarget(n, 1),
                t.render(e, r),
                t.setRenderTarget(n, 2),
                t.render(e, s),
                t.setRenderTarget(n, 3),
                t.render(e, a),
                t.setRenderTarget(n, 4),
                t.render(e, o),
                n.texture.generateMipmaps = u,
                t.setRenderTarget(n, 5),
                t.render(e, l),
                t.setRenderTarget(h),
                t.xr.enabled = c
            }
        }
        class ti extends At {
            constructor(t, e, n, i, s, a, o, l, c, h) {
                super(t = void 0 !== t ? t : [], e = void 0 !== e ? e : r, n, i, s, a, o, l, c, h),
                this.flipY = !1
            }
            get images() {
                return this.image
            }
            set images(t) {
                this.image = t
            }
        }
        ti.prototype.isCubeTexture = !0;
        class ei extends Ct {
            constructor(t, e, n) {
                Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n),
                super(t, t, e),
                e = e || {},
                this.texture = new ti(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding),
                this.texture.isRenderTargetTexture = !0,
                this.texture.generateMipmaps = void 0 !== e.generateMipmaps && e.generateMipmaps,
                this.texture.minFilter = void 0 !== e.minFilter ? e.minFilter : g,
                this.texture._needsFlipEnvMap = !1
            }
            fromEquirectangularTexture(t, e) {
                this.texture.type = e.type,
                this.texture.format = E,
                this.texture.encoding = e.encoding,
                this.texture.generateMipmaps = e.generateMipmaps,
                this.texture.minFilter = e.minFilter,
                this.texture.magFilter = e.magFilter;
                const n = {
                    uniforms: {
                        tEquirect: {
                            value: null
                        }
                    },
                    vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t",
                    fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"
                },
                i = new jn(5, 5, 5),
                r = new Yn({
                    name: "CubemapFromEquirect",
                    uniforms: qn(n.uniforms),
                    vertexShader: n.vertexShader,
                    fragmentShader: n.fragmentShader,
                    side: 1,
                    blending: 0
                });
                r.uniforms.tEquirect.value = e;
                const s = new Vn(i, r),
                a = e.minFilter;
                e.minFilter === y && (e.minFilter = g);
                return new $n(1, 10, this).update(t, s),
                e.minFilter = a,
                s.geometry.dispose(),
                s.material.dispose(),
                this
            }
            clear(t, e, n, i) {
                const r = t.getRenderTarget();
                for (let r = 0; r < 6; r++)
                    t.setRenderTarget(this, r), t.clear(e, n, i);
                t.setRenderTarget(r)
            }
        }
        ei.prototype.isWebGLCubeRenderTarget = !0;
        const ni = new Nt,
        ii = new Nt,
        ri = new yt;
        class si {
            constructor(t = new Nt(1, 0, 0), e = 0) {
                this.normal = t,
                this.constant = e
            }
            set(t, e) {
                return this.normal.copy(t),
                this.constant = e,
                this
            }
            setComponents(t, e, n, i) {
                return this.normal.set(t, e, n),
                this.constant = i,
                this
            }
            setFromNormalAndCoplanarPoint(t, e) {
                return this.normal.copy(t),
                this.constant = -e.dot(this.normal),
                this
            }
            setFromCoplanarPoints(t, e, n) {
                const i = ni.subVectors(n, e).cross(ii.subVectors(t, e)).normalize();
                return this.setFromNormalAndCoplanarPoint(i, t),
                this
            }
            copy(t) {
                return this.normal.copy(t.normal),
                this.constant = t.constant,
                this
            }
            normalize() {
                const t = 1 / this.normal.length();
                return this.normal.multiplyScalar(t),
                this.constant *= t,
                this
            }
            negate() {
                return this.constant *= -1,
                this.normal.negate(),
                this
            }
            distanceToPoint(t) {
                return this.normal.dot(t) + this.constant
            }
            distanceToSphere(t) {
                return this.distanceToPoint(t.center) - t.radius
            }
            projectPoint(t, e) {
                return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)
            }
            intersectLine(t, e) {
                const n = t.delta(ni),
                i = this.normal.dot(n);
                if (0 === i)
                    return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : null;
                const r =  - (t.start.dot(this.normal) + this.constant) / i;
                return r < 0 || r > 1 ? null : e.copy(n).multiplyScalar(r).add(t.start)
            }
            intersectsLine(t) {
                const e = this.distanceToPoint(t.start),
                n = this.distanceToPoint(t.end);
                return e < 0 && n > 0 || n < 0 && e > 0
            }
            intersectsBox(t) {
                return t.intersectsPlane(this)
            }
            intersectsSphere(t) {
                return t.intersectsPlane(this)
            }
            coplanarPoint(t) {
                return t.copy(this.normal).multiplyScalar(-this.constant)
            }
            applyMatrix4(t, e) {
                const n = e || ri.getNormalMatrix(t),
                i = this.coplanarPoint(ni).applyMatrix4(t),
                r = this.normal.applyMatrix3(n).normalize();
                return this.constant = -i.dot(r),
                this
            }
            translate(t) {
                return this.constant -= t.dot(this.normal),
                this
            }
            equals(t) {
                return t.normal.equals(this.normal) && t.constant === this.constant
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        si.prototype.isPlane = !0;
        const ai = new ne,
        oi = new Nt;
        class li {
            constructor(t = new si, e = new si, n = new si, i = new si, r = new si, s = new si) {
                this.planes = [t, e, n, i, r, s]
            }
            set(t, e, n, i, r, s) {
                const a = this.planes;
                return a[0].copy(t),
                a[1].copy(e),
                a[2].copy(n),
                a[3].copy(i),
                a[4].copy(r),
                a[5].copy(s),
                this
            }
            copy(t) {
                const e = this.planes;
                for (let n = 0; n < 6; n++)
                    e[n].copy(t.planes[n]);
                return this
            }
            setFromProjectionMatrix(t) {
                const e = this.planes,
                n = t.elements,
                i = n[0],
                r = n[1],
                s = n[2],
                a = n[3],
                o = n[4],
                l = n[5],
                c = n[6],
                h = n[7],
                u = n[8],
                d = n[9],
                p = n[10],
                m = n[11],
                f = n[12],
                g = n[13],
                v = n[14],
                y = n[15];
                return e[0].setComponents(a - i, h - o, m - u, y - f).normalize(),
                e[1].setComponents(a + i, h + o, m + u, y + f).normalize(),
                e[2].setComponents(a + r, h + l, m + d, y + g).normalize(),
                e[3].setComponents(a - r, h - l, m - d, y - g).normalize(),
                e[4].setComponents(a - s, h - c, m - p, y - v).normalize(),
                e[5].setComponents(a + s, h + c, m + p, y + v).normalize(),
                this
            }
            intersectsObject(t) {
                const e = t.geometry;
                return null === e.boundingSphere && e.computeBoundingSphere(),
                ai.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),
                this.intersectsSphere(ai)
            }
            intersectsSprite(t) {
                return ai.center.set(0, 0, 0),
                ai.radius = .7071067811865476,
                ai.applyMatrix4(t.matrixWorld),
                this.intersectsSphere(ai)
            }
            intersectsSphere(t) {
                const e = this.planes,
                n = t.center,
                i = -t.radius;
                for (let t = 0; t < 6; t++) {
                    if (e[t].distanceToPoint(n) < i)
                        return !1
                }
                return !0
            }
            intersectsBox(t) {
                const e = this.planes;
                for (let n = 0; n < 6; n++) {
                    const i = e[n];
                    if (oi.x = i.normal.x > 0 ? t.max.x : t.min.x, oi.y = i.normal.y > 0 ? t.max.y : t.min.y, oi.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(oi) < 0)
                        return !1
                }
                return !0
            }
            containsPoint(t) {
                const e = this.planes;
                for (let n = 0; n < 6; n++)
                    if (e[n].distanceToPoint(t) < 0)
                        return !1;
                return !0
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        function ci() {
            let t = null,
            e = !1,
            n = null,
            i = null;
            function r(e, s) {
                n(e, s),
                i = t.requestAnimationFrame(r)
            }
            return {
                start: function () {
                    !0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0)
                },
                stop: function () {
                    t.cancelAnimationFrame(i),
                    e = !1
                },
                setAnimationLoop: function (t) {
                    n = t
                },
                setContext: function (e) {
                    t = e
                }
            }
        }
        function hi(t, e) {
            const n = e.isWebGL2,
            i = new WeakMap;
            return {
                get: function (t) {
                    return t.isInterleavedBufferAttribute && (t = t.data),
                    i.get(t)
                },
                remove: function (e) {
                    e.isInterleavedBufferAttribute && (e = e.data);
                    const n = i.get(e);
                    n && (t.deleteBuffer(n.buffer), i.delete(e))
                },
                update: function (e, r) {
                    if (e.isGLBufferAttribute) {
                        const t = i.get(e);
                        return void((!t || t.version < e.version) && i.set(e, {
                                buffer: e.buffer,
                                type: e.type,
                                bytesPerElement: e.elementSize,
                                version: e.version
                            }))
                    }
                    e.isInterleavedBufferAttribute && (e = e.data);
                    const s = i.get(e);
                    void 0 === s ? i.set(e, function (e, i) {
                        const r = e.array,
                        s = e.usage,
                        a = t.createBuffer();
                        t.bindBuffer(i, a),
                        t.bufferData(i, r, s),
                        e.onUploadCallback();
                        let o = 5126;
                        return r instanceof Float32Array ? o = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? o = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : o = 5123 : r instanceof Int16Array ? o = 5122 : r instanceof Uint32Array ? o = 5125 : r instanceof Int32Array ? o = 5124 : r instanceof Int8Array ? o = 5120 : (r instanceof Uint8Array || r instanceof Uint8ClampedArray) && (o = 5121), {
                            buffer: a,
                            type: o,
                            bytesPerElement: r.BYTES_PER_ELEMENT,
                            version: e.version
                        }
                    }
                        (e, r)) : s.version < e.version && (!function (e, i, r) {
                        const s = i.array,
                        a = i.updateRange;
                        t.bindBuffer(r, e),
                        -1 === a.count ? t.bufferSubData(r, 0, s) : (n ? t.bufferSubData(r, a.offset * s.BYTES_PER_ELEMENT, s, a.offset, a.count) : t.bufferSubData(r, a.offset * s.BYTES_PER_ELEMENT, s.subarray(a.offset, a.offset + a.count)), a.count = -1)
                    }
                        (s.buffer, e, r), s.version = e.version)
                }
            }
        }
        class ui extends Tn {
            constructor(t = 1, e = 1, n = 1, i = 1) {
                super(),
                this.type = "PlaneGeometry",
                this.parameters = {
                    width: t,
                    height: e,
                    widthSegments: n,
                    heightSegments: i
                };
                const r = t / 2,
                s = e / 2,
                a = Math.floor(n),
                o = Math.floor(i),
                l = a + 1,
                c = o + 1,
                h = t / a,
                u = e / o,
                d = [],
                p = [],
                m = [],
                f = [];
                for (let t = 0; t < c; t++) {
                    const e = t * u - s;
                    for (let n = 0; n < l; n++) {
                        const i = n * h - r;
                        p.push(i, -e, 0),
                        m.push(0, 0, 1),
                        f.push(n / a),
                        f.push(1 - t / o)
                    }
                }
                for (let t = 0; t < o; t++)
                    for (let e = 0; e < a; e++) {
                        const n = e + l * t,
                        i = e + l * (t + 1),
                        r = e + 1 + l * (t + 1),
                        s = e + 1 + l * t;
                        d.push(n, i, s),
                        d.push(i, r, s)
                    }
                this.setIndex(d),
                this.setAttribute("position", new gn(p, 3)),
                this.setAttribute("normal", new gn(m, 3)),
                this.setAttribute("uv", new gn(f, 2))
            }
            static fromJSON(t) {
                return new ui(t.width, t.height, t.widthSegments, t.heightSegments)
            }
        }
        const di = {
            alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",
            alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",
            alphatest_fragment: "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif",
            alphatest_pars_fragment: "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif",
            aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif",
            aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",
            begin_vertex: "vec3 transformed = vec3( position );",
            beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",
            bsdfs: "vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",
            bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",
            clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",
            clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",
            clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",
            clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",
            color_fragment: "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",
            color_pars_fragment: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",
            color_pars_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",
            color_vertex: "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",
            common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",
            cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",
            defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",
            displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",
            displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",
            emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",
            emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",
            encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );",
            encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}",
            envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",
            envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",
            envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",
            envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",
            envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",
            envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",
            fog_vertex: "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",
            fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",
            fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",
            fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",
            gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",
            lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",
            lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",
            lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",
            lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",
            lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",
            lights_toon_pars_fragment: "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",
            lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",
            lights_phong_pars_fragment: "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",
            lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= specularColorMapTexelToLinear( texture2D( specularColorMap, vUv ) ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= sheenColorMapTexelToLinear( texture2D( sheenColorMap, vUv ) ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",
            lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",
            lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",
            lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",
            lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",
            logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",
            logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",
            logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",
            logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",
            map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",
            map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",
            map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",
            map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",
            metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",
            metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",
            morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",
            morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform vec2 morphTargetsTextureSize;\n\t\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\n\t\t\tfloat texelIndex = float( vertexIndex * stride + offset );\n\t\t\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\n\t\t\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\n\t\t\treturn texture( morphTargetsTexture, morphUV ).xyz;\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",
            morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\t#ifndef USE_MORPHNORMALS\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\n\t\t\t#else\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\n\t\t\t#endif\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",
            normal_fragment_begin: "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",
            normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",
            normal_pars_fragment: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",
            normal_pars_vertex: "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",
            normal_vertex: "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",
            normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",
            clearcoat_normal_fragment_begin: "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",
            clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",
            clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",
            output_fragment: "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",
            packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",
            premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",
            project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",
            dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",
            dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",
            roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",
            roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",
            shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",
            shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",
            shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",
            shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",
            skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",
            skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",
            skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",
            skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",
            specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",
            specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",
            tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",
            tonemapping_pars_fragment: "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",
            transmission_fragment: "#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",
            transmission_pars_fragment: "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( float roughness, float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",
            uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",
            uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",
            uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",
            uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",
            uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",
            uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",
            worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",
            background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",
            background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
            cube_vert: "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",
            cube_frag: "#include <envmap_common_pars_fragment>\nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include <envmap_fragment>\n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
            depth_vert: "#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}",
            depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",
            distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}",
            distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",
            equirect_vert: "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}",
            equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
            linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",
            linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",
            meshbasic_vert: "#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinbase_vertex>\n\t\t#include <skinnormal_vertex>\n\t\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}",
            meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
            meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}",
            meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            meshnormal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",
            meshnormal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",
            meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
            meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",
            meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
            meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
            points_vert: "uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}",
            points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",
            shadow_vert: "#include <common>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
            shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",
            sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",
            sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}"
        },
        pi = {
            common: {
                diffuse: {
                    value: new nn(16777215)
                },
                opacity: {
                    value: 1
                },
                map: {
                    value: null
                },
                uvTransform: {
                    value: new yt
                },
                uv2Transform: {
                    value: new yt
                },
                alphaMap: {
                    value: null
                },
                alphaTest: {
                    value: 0
                }
            },
            specularmap: {
                specularMap: {
                    value: null
                }
            },
            envmap: {
                envMap: {
                    value: null
                },
                flipEnvMap: {
                    value: -1
                },
                reflectivity: {
                    value: 1
                },
                ior: {
                    value: 1.5
                },
                refractionRatio: {
                    value: .98
                }
            },
            aomap: {
                aoMap: {
                    value: null
                },
                aoMapIntensity: {
                    value: 1
                }
            },
            lightmap: {
                lightMap: {
                    value: null
                },
                lightMapIntensity: {
                    value: 1
                }
            },
            emissivemap: {
                emissiveMap: {
                    value: null
                }
            },
            bumpmap: {
                bumpMap: {
                    value: null
                },
                bumpScale: {
                    value: 1
                }
            },
            normalmap: {
                normalMap: {
                    value: null
                },
                normalScale: {
                    value: new vt(1, 1)
                }
            },
            displacementmap: {
                displacementMap: {
                    value: null
                },
                displacementScale: {
                    value: 1
                },
                displacementBias: {
                    value: 0
                }
            },
            roughnessmap: {
                roughnessMap: {
                    value: null
                }
            },
            metalnessmap: {
                metalnessMap: {
                    value: null
                }
            },
            gradientmap: {
                gradientMap: {
                    value: null
                }
            },
            fog: {
                fogDensity: {
                    value: 25e-5
                },
                fogNear: {
                    value: 1
                },
                fogFar: {
                    value: 2e3
                },
                fogColor: {
                    value: new nn(16777215)
                }
            },
            lights: {
                ambientLightColor: {
                    value: []
                },
                lightProbe: {
                    value: []
                },
                directionalLights: {
                    value: [],
                    properties: {
                        direction: {},
                        color: {}
                    }
                },
                directionalLightShadows: {
                    value: [],
                    properties: {
                        shadowBias: {},
                        shadowNormalBias: {},
                        shadowRadius: {},
                        shadowMapSize: {}
                    }
                },
                directionalShadowMap: {
                    value: []
                },
                directionalShadowMatrix: {
                    value: []
                },
                spotLights: {
                    value: [],
                    properties: {
                        color: {},
                        position: {},
                        direction: {},
                        distance: {},
                        coneCos: {},
                        penumbraCos: {},
                        decay: {}
                    }
                },
                spotLightShadows: {
                    value: [],
                    properties: {
                        shadowBias: {},
                        shadowNormalBias: {},
                        shadowRadius: {},
                        shadowMapSize: {}
                    }
                },
                spotShadowMap: {
                    value: []
                },
                spotShadowMatrix: {
                    value: []
                },
                pointLights: {
                    value: [],
                    properties: {
                        color: {},
                        position: {},
                        decay: {},
                        distance: {}
                    }
                },
                pointLightShadows: {
                    value: [],
                    properties: {
                        shadowBias: {},
                        shadowNormalBias: {},
                        shadowRadius: {},
                        shadowMapSize: {},
                        shadowCameraNear: {},
                        shadowCameraFar: {}
                    }
                },
                pointShadowMap: {
                    value: []
                },
                pointShadowMatrix: {
                    value: []
                },
                hemisphereLights: {
                    value: [],
                    properties: {
                        direction: {},
                        skyColor: {},
                        groundColor: {}
                    }
                },
                rectAreaLights: {
                    value: [],
                    properties: {
                        color: {},
                        position: {},
                        width: {},
                        height: {}
                    }
                },
                ltc_1: {
                    value: null
                },
                ltc_2: {
                    value: null
                }
            },
            points: {
                diffuse: {
                    value: new nn(16777215)
                },
                opacity: {
                    value: 1
                },
                size: {
                    value: 1
                },
                scale: {
                    value: 1
                },
                map: {
                    value: null
                },
                alphaMap: {
                    value: null
                },
                alphaTest: {
                    value: 0
                },
                uvTransform: {
                    value: new yt
                }
            },
            sprite: {
                diffuse: {
                    value: new nn(16777215)
                },
                opacity: {
                    value: 1
                },
                center: {
                    value: new vt(.5, .5)
                },
                rotation: {
                    value: 0
                },
                map: {
                    value: null
                },
                alphaMap: {
                    value: null
                },
                alphaTest: {
                    value: 0
                },
                uvTransform: {
                    value: new yt
                }
            }
        },
        mi = {
            basic: {
                uniforms: Xn([pi.common, pi.specularmap, pi.envmap, pi.aomap, pi.lightmap, pi.fog]),
                vertexShader: di.meshbasic_vert,
                fragmentShader: di.meshbasic_frag
            },
            lambert: {
                uniforms: Xn([pi.common, pi.specularmap, pi.envmap, pi.aomap, pi.lightmap, pi.emissivemap, pi.fog, pi.lights, {
                            emissive: {
                                value: new nn(0)
                            }
                        }
                    ]),
                vertexShader: di.meshlambert_vert,
                fragmentShader: di.meshlambert_frag
            },
            phong: {
                uniforms: Xn([pi.common, pi.specularmap, pi.envmap, pi.aomap, pi.lightmap, pi.emissivemap, pi.bumpmap, pi.normalmap, pi.displacementmap, pi.fog, pi.lights, {
                            emissive: {
                                value: new nn(0)
                            },
                            specular: {
                                value: new nn(1118481)
                            },
                            shininess: {
                                value: 30
                            }
                        }
                    ]),
                vertexShader: di.meshphong_vert,
                fragmentShader: di.meshphong_frag
            },
            standard: {
                uniforms: Xn([pi.common, pi.envmap, pi.aomap, pi.lightmap, pi.emissivemap, pi.bumpmap, pi.normalmap, pi.displacementmap, pi.roughnessmap, pi.metalnessmap, pi.fog, pi.lights, {
                            emissive: {
                                value: new nn(0)
                            },
                            roughness: {
                                value: 1
                            },
                            metalness: {
                                value: 0
                            },
                            envMapIntensity: {
                                value: 1
                            }
                        }
                    ]),
                vertexShader: di.meshphysical_vert,
                fragmentShader: di.meshphysical_frag
            },
            toon: {
                uniforms: Xn([pi.common, pi.aomap, pi.lightmap, pi.emissivemap, pi.bumpmap, pi.normalmap, pi.displacementmap, pi.gradientmap, pi.fog, pi.lights, {
                            emissive: {
                                value: new nn(0)
                            }
                        }
                    ]),
                vertexShader: di.meshtoon_vert,
                fragmentShader: di.meshtoon_frag
            },
            matcap: {
                uniforms: Xn([pi.common, pi.bumpmap, pi.normalmap, pi.displacementmap, pi.fog, {
                            matcap: {
                                value: null
                            }
                        }
                    ]),
                vertexShader: di.meshmatcap_vert,
                fragmentShader: di.meshmatcap_frag
            },
            points: {
                uniforms: Xn([pi.points, pi.fog]),
                vertexShader: di.points_vert,
                fragmentShader: di.points_frag
            },
            dashed: {
                uniforms: Xn([pi.common, pi.fog, {
                            scale: {
                                value: 1
                            },
                            dashSize: {
                                value: 1
                            },
                            totalSize: {
                                value: 2
                            }
                        }
                    ]),
                vertexShader: di.linedashed_vert,
                fragmentShader: di.linedashed_frag
            },
            depth: {
                uniforms: Xn([pi.common, pi.displacementmap]),
                vertexShader: di.depth_vert,
                fragmentShader: di.depth_frag
            },
            normal: {
                uniforms: Xn([pi.common, pi.bumpmap, pi.normalmap, pi.displacementmap, {
                            opacity: {
                                value: 1
                            }
                        }
                    ]),
                vertexShader: di.meshnormal_vert,
                fragmentShader: di.meshnormal_frag
            },
            sprite: {
                uniforms: Xn([pi.sprite, pi.fog]),
                vertexShader: di.sprite_vert,
                fragmentShader: di.sprite_frag
            },
            background: {
                uniforms: {
                    uvTransform: {
                        value: new yt
                    },
                    t2D: {
                        value: null
                    }
                },
                vertexShader: di.background_vert,
                fragmentShader: di.background_frag
            },
            cube: {
                uniforms: Xn([pi.envmap, {
                            opacity: {
                                value: 1
                            }
                        }
                    ]),
                vertexShader: di.cube_vert,
                fragmentShader: di.cube_frag
            },
            equirect: {
                uniforms: {
                    tEquirect: {
                        value: null
                    }
                },
                vertexShader: di.equirect_vert,
                fragmentShader: di.equirect_frag
            },
            distanceRGBA: {
                uniforms: Xn([pi.common, pi.displacementmap, {
                            referencePosition: {
                                value: new Nt
                            },
                            nearDistance: {
                                value: 1
                            },
                            farDistance: {
                                value: 1e3
                            }
                        }
                    ]),
                vertexShader: di.distanceRGBA_vert,
                fragmentShader: di.distanceRGBA_frag
            },
            shadow: {
                uniforms: Xn([pi.lights, pi.fog, {
                            color: {
                                value: new nn(0)
                            },
                            opacity: {
                                value: 1
                            }
                        }
                    ]),
                vertexShader: di.shadow_vert,
                fragmentShader: di.shadow_frag
            }
        };
        function fi(t, e, n, i, r) {
            const s = new nn(0);
            let a,
            o,
            c = 0,
            h = null,
            u = 0,
            d = null;
            function p(t, e) {
                n.buffers.color.setClear(t.r, t.g, t.b, e, r)
            }
            return {
                getClearColor: function () {
                    return s
                },
                setClearColor: function (t, e = 1) {
                    s.set(t),
                    c = e,
                    p(s, c)
                },
                getClearAlpha: function () {
                    return c
                },
                setClearAlpha: function (t) {
                    c = t,
                    p(s, c)
                },
                render: function (n, r) {
                    let m = !1,
                    f = !0 === r.isScene ? r.background : null;
                    f && f.isTexture && (f = e.get(f));
                    const g = t.xr,
                    v = g.getSession && g.getSession();
                    v && "additive" === v.environmentBlendMode && (f = null),
                    null === f ? p(s, c) : f && f.isColor && (p(f, 1), m = !0),
                    (t.autoClear || m) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil),
                    f && (f.isCubeTexture || f.mapping === l) ? (void 0 === o && (o = new Vn(new jn(1, 1, 1), new Yn({
                                        name: "BackgroundCubeMaterial",
                                        uniforms: qn(mi.cube.uniforms),
                                        vertexShader: mi.cube.vertexShader,
                                        fragmentShader: mi.cube.fragmentShader,
                                        side: 1,
                                        depthTest: !1,
                                        depthWrite: !1,
                                        fog: !1
                                    })), o.geometry.deleteAttribute("normal"), o.geometry.deleteAttribute("uv"), o.onBeforeRender = function (t, e, n) {
                            this.matrixWorld.copyPosition(n.matrixWorld)
                        }, Object.defineProperty(o.material, "envMap", {
                                get: function () {
                                    return this.uniforms.envMap.value
                                }
                            }), i.update(o)), o.material.uniforms.envMap.value = f, o.material.uniforms.flipEnvMap.value = f.isCubeTexture && !1 === f.isRenderTargetTexture ? -1 : 1, h === f && u === f.version && d === t.toneMapping || (o.material.needsUpdate = !0, h = f, u = f.version, d = t.toneMapping), n.unshift(o, o.geometry, o.material, 0, 0, null)) : f && f.isTexture && (void 0 === a && (a = new Vn(new ui(2, 2), new Yn({
                                        name: "BackgroundMaterial",
                                        uniforms: qn(mi.background.uniforms),
                                        vertexShader: mi.background.vertexShader,
                                        fragmentShader: mi.background.fragmentShader,
                                        side: 0,
                                        depthTest: !1,
                                        depthWrite: !1,
                                        fog: !1
                                    })), a.geometry.deleteAttribute("normal"), Object.defineProperty(a.material, "map", {
                                get: function () {
                                    return this.uniforms.t2D.value
                                }
                            }), i.update(a)), a.material.uniforms.t2D.value = f, !0 === f.matrixAutoUpdate && f.updateMatrix(), a.material.uniforms.uvTransform.value.copy(f.matrix), h === f && u === f.version && d === t.toneMapping || (a.material.needsUpdate = !0, h = f, u = f.version, d = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null))
                }
            }
        }
        function gi(t, e, n, i) {
            const r = t.getParameter(34921),
            s = i.isWebGL2 ? null : e.get("OES_vertex_array_object"),
            a = i.isWebGL2 || null !== s,
            o = {},
            l = d(null);
            let c = l;
            function h(e) {
                return i.isWebGL2 ? t.bindVertexArray(e) : s.bindVertexArrayOES(e)
            }
            function u(e) {
                return i.isWebGL2 ? t.deleteVertexArray(e) : s.deleteVertexArrayOES(e)
            }
            function d(t) {
                const e = [],
                n = [],
                i = [];
                for (let t = 0; t < r; t++)
                    e[t] = 0, n[t] = 0, i[t] = 0;
                return {
                    geometry: null,
                    program: null,
                    wireframe: !1,
                    newAttributes: e,
                    enabledAttributes: n,
                    attributeDivisors: i,
                    object: t,
                    attributes: {},
                    index: null
                }
            }
            function p() {
                const t = c.newAttributes;
                for (let e = 0, n = t.length; e < n; e++)
                    t[e] = 0
            }
            function m(t) {
                f(t, 0)
            }
            function f(n, r) {
                const s = c.newAttributes,
                a = c.enabledAttributes,
                o = c.attributeDivisors;
                if (s[n] = 1, 0 === a[n] && (t.enableVertexAttribArray(n), a[n] = 1), o[n] !== r) {
                    (i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r),
                    o[n] = r
                }
            }
            function g() {
                const e = c.newAttributes,
                n = c.enabledAttributes;
                for (let i = 0, r = n.length; i < r; i++)
                    n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0)
            }
            function v(e, n, r, s, a, o) {
                !0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, s, a, o) : t.vertexAttribIPointer(e, n, r, a, o)
            }
            function y() {
                x(),
                c !== l && (c = l, h(c.object))
            }
            function x() {
                l.geometry = null,
                l.program = null,
                l.wireframe = !1
            }
            return {
                setup: function (r, l, u, y, x) {
                    let _ = !1;
                    if (a) {
                        const e = function (e, n, r) {
                            const a = !0 === r.wireframe;
                            let l = o[e.id];
                            void 0 === l && (l = {}, o[e.id] = l);
                            let c = l[n.id];
                            void 0 === c && (c = {}, l[n.id] = c);
                            let h = c[a];
                            void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : s.createVertexArrayOES()), c[a] = h);
                            return h
                        }
                        (y, u, l);
                        c !== e && (c = e, h(c.object)),
                        _ = function (t, e) {
                            const n = c.attributes,
                            i = t.attributes;
                            let r = 0;
                            for (const t in i) {
                                const e = n[t],
                                s = i[t];
                                if (void 0 === e)
                                    return !0;
                                if (e.attribute !== s)
                                    return !0;
                                if (e.data !== s.data)
                                    return !0;
                                r++
                            }
                            return c.attributesNum !== r || c.index !== e
                        }
                        (y, x),
                        _ && function (t, e) {
                            const n = {},
                            i = t.attributes;
                            let r = 0;
                            for (const t in i) {
                                const e = i[t],
                                s = {};
                                s.attribute = e,
                                e.data && (s.data = e.data),
                                n[t] = s,
                                r++
                            }
                            c.attributes = n,
                            c.attributesNum = r,
                            c.index = e
                        }
                        (y, x)
                    } else {
                        const t = !0 === l.wireframe;
                        c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, _ = !0)
                    }
                    !0 === r.isInstancedMesh && (_ = !0),
                    null !== x && n.update(x, 34963),
                    _ && (!function (r, s, a, o) {
                        if (!1 === i.isWebGL2 && (r.isInstancedMesh || o.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays"))
                            return;
                        p();
                        const l = o.attributes,
                        c = a.getAttributes(),
                        h = s.defaultAttributeValues;
                        for (const e in c) {
                            const i = c[e];
                            if (i.location >= 0) {
                                let s = l[e];
                                if (void 0 === s && ("instanceMatrix" === e && r.instanceMatrix && (s = r.instanceMatrix), "instanceColor" === e && r.instanceColor && (s = r.instanceColor)), void 0 !== s) {
                                    const e = s.normalized,
                                    a = s.itemSize,
                                    l = n.get(s);
                                    if (void 0 === l)
                                        continue;
                                    const c = l.buffer,
                                    h = l.type,
                                    u = l.bytesPerElement;
                                    if (s.isInterleavedBufferAttribute) {
                                        const n = s.data,
                                        l = n.stride,
                                        d = s.offset;
                                        if (n && n.isInstancedInterleavedBuffer) {
                                            for (let t = 0; t < i.locationSize; t++)
                                                f(i.location + t, n.meshPerAttribute);
                                            !0 !== r.isInstancedMesh && void 0 === o._maxInstanceCount && (o._maxInstanceCount = n.meshPerAttribute * n.count)
                                        } else
                                            for (let t = 0; t < i.locationSize; t++)
                                                m(i.location + t);
                                        t.bindBuffer(34962, c);
                                        for (let t = 0; t < i.locationSize; t++)
                                            v(i.location + t, a / i.locationSize, h, e, l * u, (d + a / i.locationSize * t) * u)
                                    } else {
                                        if (s.isInstancedBufferAttribute) {
                                            for (let t = 0; t < i.locationSize; t++)
                                                f(i.location + t, s.meshPerAttribute);
                                            !0 !== r.isInstancedMesh && void 0 === o._maxInstanceCount && (o._maxInstanceCount = s.meshPerAttribute * s.count)
                                        } else
                                            for (let t = 0; t < i.locationSize; t++)
                                                m(i.location + t);
                                        t.bindBuffer(34962, c);
                                        for (let t = 0; t < i.locationSize; t++)
                                            v(i.location + t, a / i.locationSize, h, e, a * u, a / i.locationSize * t * u)
                                    }
                                } else if (void 0 !== h) {
                                    const n = h[e];
                                    if (void 0 !== n)
                                        switch (n.length) {
                                        case 2:
                                            t.vertexAttrib2fv(i.location, n);
                                            break;
                                        case 3:
                                            t.vertexAttrib3fv(i.location, n);
                                            break;
                                        case 4:
                                            t.vertexAttrib4fv(i.location, n);
                                            break;
                                        default:
                                            t.vertexAttrib1fv(i.location, n);
                                        }
                                }
                            }
                        }
                        g()
                    }
                        (r, l, u, y), null !== x && t.bindBuffer(34963, n.get(x).buffer))
                },
                reset: y,
                resetDefaultState: x,
                dispose: function () {
                    y();
                    for (const t in o) {
                        const e = o[t];
                        for (const t in e) {
                            const n = e[t];
                            for (const t in n)
                                u(n[t].object), delete n[t];
                            delete e[t]
                        }
                        delete o[t]
                    }
                },
                releaseStatesOfGeometry: function (t) {
                    if (void 0 === o[t.id])
                        return;
                    const e = o[t.id];
                    for (const t in e) {
                        const n = e[t];
                        for (const t in n)
                            u(n[t].object), delete n[t];
                        delete e[t]
                    }
                    delete o[t.id]
                },
                releaseStatesOfProgram: function (t) {
                    for (const e in o) {
                        const n = o[e];
                        if (void 0 === n[t.id])
                            continue;
                        const i = n[t.id];
                        for (const t in i)
                            u(i[t].object), delete i[t];
                        delete n[t.id]
                    }
                },
                initAttributes: p,
                enableAttribute: m,
                disableUnusedAttributes: g
            }
        }
        function vi(t, e, n, i) {
            const r = i.isWebGL2;
            let s;
            this.setMode = function (t) {
                s = t
            },
            this.render = function (e, i) {
                t.drawArrays(s, e, i),
                n.update(i, s, 1)
            },
            this.renderInstances = function (i, a, o) {
                if (0 === o)
                    return;
                let l,
                c;
                if (r)
                    l = t, c = "drawArraysInstanced";
                else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l)
                    return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
                l[c](s, i, a, o),
                n.update(a, s, o)
            }
        }
        function yi(t, e, n) {
            let i;
            function r(e) {
                if ("highp" === e) {
                    if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0)
                        return "highp";
                    e = "mediump"
                }
                return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp"
            }
            const s = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext;
            let a = void 0 !== n.precision ? n.precision : "highp";
            const o = r(a);
            o !== a && (console.warn("THREE.WebGLRenderer:", a, "not supported, using", o, "instead."), a = o);
            const l = s || e.has("WEBGL_draw_buffers"),
            c = !0 === n.logarithmicDepthBuffer,
            h = t.getParameter(34930),
            u = t.getParameter(35660),
            d = t.getParameter(3379),
            p = t.getParameter(34076),
            m = t.getParameter(34921),
            f = t.getParameter(36347),
            g = t.getParameter(36348),
            v = t.getParameter(36349),
            y = u > 0,
            x = s || e.has("OES_texture_float");
            return {
                isWebGL2: s,
                drawBuffers: l,
                getMaxAnisotropy: function () {
                    if (void 0 !== i)
                        return i;
                    if (!0 === e.has("EXT_texture_filter_anisotropic")) {
                        const n = e.get("EXT_texture_filter_anisotropic");
                        i = t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)
                    } else
                        i = 0;
                    return i
                },
                getMaxPrecision: r,
                precision: a,
                logarithmicDepthBuffer: c,
                maxTextures: h,
                maxVertexTextures: u,
                maxTextureSize: d,
                maxCubemapSize: p,
                maxAttributes: m,
                maxVertexUniforms: f,
                maxVaryings: g,
                maxFragmentUniforms: v,
                vertexTextures: y,
                floatFragmentTextures: x,
                floatVertexTextures: y && x,
                maxSamples: s ? t.getParameter(36183) : 0
            }
        }
        function xi(t) {
            const e = this;
            let n = null,
            i = 0,
            r = !1,
            s = !1;
            const a = new si,
            o = new yt,
            l = {
                value: null,
                needsUpdate: !1
            };
            function c() {
                l.value !== n && (l.value = n, l.needsUpdate = i > 0),
                e.numPlanes = i,
                e.numIntersection = 0
            }
            function h(t, n, i, r) {
                const s = null !== t ? t.length : 0;
                let c = null;
                if (0 !== s) {
                    if (c = l.value, !0 !== r || null === c) {
                        const e = i + 4 * s,
                        r = n.matrixWorldInverse;
                        o.getNormalMatrix(r),
                        (null === c || c.length < e) && (c = new Float32Array(e));
                        for (let e = 0, n = i; e !== s; ++e, n += 4)
                            a.copy(t[e]).applyMatrix4(r, o), a.normal.toArray(c, n), c[n + 3] = a.constant
                    }
                    l.value = c,
                    l.needsUpdate = !0
                }
                return e.numPlanes = s,
                e.numIntersection = 0,
                c
            }
            this.uniform = l,
            this.numPlanes = 0,
            this.numIntersection = 0,
            this.init = function (t, e, s) {
                const a = 0 !== t.length || e || 0 !== i || r;
                return r = e,
                n = h(t, s, 0),
                i = t.length,
                a
            },
            this.beginShadows = function () {
                s = !0,
                h(null)
            },
            this.endShadows = function () {
                s = !1,
                c()
            },
            this.setState = function (e, a, o) {
                const u = e.clippingPlanes,
                d = e.clipIntersection,
                p = e.clipShadows,
                m = t.get(e);
                if (!r || null === u || 0 === u.length || s && !p)
                    s ? h(null) : c();
                else {
                    const t = s ? 0 : i,
                    e = 4 * t;
                    let r = m.clippingState || null;
                    l.value = r,
                    r = h(u, a, e, o);
                    for (let t = 0; t !== e; ++t)
                        r[t] = n[t];
                    m.clippingState = r,
                    this.numIntersection = d ? this.numPlanes : 0,
                    this.numPlanes += t
                }
            }
        }
        function _i(t) {
            let e = new WeakMap;
            function n(t, e) {
                return e === a ? t.mapping = r : e === o && (t.mapping = s),
                t
            }
            function i(t) {
                const n = t.target;
                n.removeEventListener("dispose", i);
                const r = e.get(n);
                void 0 !== r && (e.delete(n), r.dispose())
            }
            return {
                get: function (r) {
                    if (r && r.isTexture && !1 === r.isRenderTargetTexture) {
                        const s = r.mapping;
                        if (s === a || s === o) {
                            if (e.has(r)) {
                                return n(e.get(r).texture, r.mapping)
                            } {
                                const s = r.image;
                                if (s && s.height > 0) {
                                    const a = t.getRenderTarget(),
                                    o = new ei(s.height / 2);
                                    return o.fromEquirectangularTexture(t, r),
                                    e.set(r, o),
                                    t.setRenderTarget(a),
                                    r.addEventListener("dispose", i),
                                    n(o.texture, r.mapping)
                                }
                                return null
                            }
                        }
                    }
                    return r
                },
                dispose: function () {
                    e = new WeakMap
                }
            }
        }
        mi.physical = {
            uniforms: Xn([mi.standard.uniforms, {
                        clearcoat: {
                            value: 0
                        },
                        clearcoatMap: {
                            value: null
                        },
                        clearcoatRoughness: {
                            value: 0
                        },
                        clearcoatRoughnessMap: {
                            value: null
                        },
                        clearcoatNormalScale: {
                            value: new vt(1, 1)
                        },
                        clearcoatNormalMap: {
                            value: null
                        },
                        sheen: {
                            value: 0
                        },
                        sheenColor: {
                            value: new nn(0)
                        },
                        sheenColorMap: {
                            value: null
                        },
                        sheenRoughness: {
                            value: 0
                        },
                        sheenRoughnessMap: {
                            value: null
                        },
                        transmission: {
                            value: 0
                        },
                        transmissionMap: {
                            value: null
                        },
                        transmissionSamplerSize: {
                            value: new vt
                        },
                        transmissionSamplerMap: {
                            value: null
                        },
                        thickness: {
                            value: 0
                        },
                        thicknessMap: {
                            value: null
                        },
                        attenuationDistance: {
                            value: 0
                        },
                        attenuationColor: {
                            value: new nn(0)
                        },
                        specularIntensity: {
                            value: 0
                        },
                        specularIntensityMap: {
                            value: null
                        },
                        specularColor: {
                            value: new nn(1, 1, 1)
                        },
                        specularColorMap: {
                            value: null
                        }
                    }
                ]),
            vertexShader: di.meshphysical_vert,
            fragmentShader: di.meshphysical_frag
        };
        class Mi extends Zn {
            constructor(t = -1, e = 1, n = 1, i = -1, r = .1, s = 2e3) {
                super(),
                this.type = "OrthographicCamera",
                this.zoom = 1,
                this.view = null,
                this.left = t,
                this.right = e,
                this.top = n,
                this.bottom = i,
                this.near = r,
                this.far = s,
                this.updateProjectionMatrix()
            }
            copy(t, e) {
                return super.copy(t, e),
                this.left = t.left,
                this.right = t.right,
                this.top = t.top,
                this.bottom = t.bottom,
                this.near = t.near,
                this.far = t.far,
                this.zoom = t.zoom,
                this.view = null === t.view ? null : Object.assign({}, t.view),
                this
            }
            setViewOffset(t, e, n, i, r, s) {
                null === this.view && (this.view = {
                        enabled: !0,
                        fullWidth: 1,
                        fullHeight: 1,
                        offsetX: 0,
                        offsetY: 0,
                        width: 1,
                        height: 1
                    }),
                this.view.enabled = !0,
                this.view.fullWidth = t,
                this.view.fullHeight = e,
                this.view.offsetX = n,
                this.view.offsetY = i,
                this.view.width = r,
                this.view.height = s,
                this.updateProjectionMatrix()
            }
            clearViewOffset() {
                null !== this.view && (this.view.enabled = !1),
                this.updateProjectionMatrix()
            }
            updateProjectionMatrix() {
                const t = (this.right - this.left) / (2 * this.zoom),
                e = (this.top - this.bottom) / (2 * this.zoom),
                n = (this.right + this.left) / 2,
                i = (this.top + this.bottom) / 2;
                let r = n - t,
                s = n + t,
                a = i + e,
                o = i - e;
                if (null !== this.view && this.view.enabled) {
                    const t = (this.right - this.left) / this.view.fullWidth / this.zoom,
                    e = (this.top - this.bottom) / this.view.fullHeight / this.zoom;
                    r += t * this.view.offsetX,
                    s = r + t * this.view.width,
                    a -= e * this.view.offsetY,
                    o = a - e * this.view.height
                }
                this.projectionMatrix.makeOrthographic(r, s, a, o, this.near, this.far),
                this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.object.zoom = this.zoom,
                e.object.left = this.left,
                e.object.right = this.right,
                e.object.top = this.top,
                e.object.bottom = this.bottom,
                e.object.near = this.near,
                e.object.far = this.far,
                null !== this.view && (e.object.view = Object.assign({}, this.view)),
                e
            }
        }
        Mi.prototype.isOrthographicCamera = !0;
        class bi extends Yn {
            constructor(t) {
                super(t),
                this.type = "RawShaderMaterial"
            }
        }
        bi.prototype.isRawShaderMaterial = !0;
        const wi = Math.pow(2, 8),
        Si = [.125, .215, .35, .446, .526, .582],
        Ti = 5 + Si.length,
        Ei = 20,
        Ai = {
            [X]: 0,
            [J]: 1,
            [Z]: 2,
            [Q]: 3,
            [K]: 4,
            [$]: 5,
            [Y]: 6
        },
        Li = new Mi, {
            _lodPlanes: Ri,
            _sizeLods: Ci,
            _sigmas: Pi
        } = Ui(),
        Di = new nn;
        let Ii = null;
        const Ni = (1 + Math.sqrt(5)) / 2,
        zi = 1 / Ni,
        Bi = [new Nt(1, 1, 1), new Nt(-1, 1, 1), new Nt(1, 1, -1), new Nt(-1, 1, -1), new Nt(0, Ni, zi), new Nt(0, Ni, -zi), new Nt(zi, 0, Ni), new Nt(-zi, 0, Ni), new Nt(Ni, zi, 0), new Nt(-Ni, zi, 0)];
        class Fi {
            constructor(t) {
                this._renderer = t,
                this._pingPongRenderTarget = null,
                this._blurMaterial = function (t) {
                    const e = new Float32Array(t),
                    n = new Nt(0, 1, 0);
                    return new bi({
                        name: "SphericalGaussianBlur",
                        defines: {
                            n: t
                        },
                        uniforms: {
                            envMap: {
                                value: null
                            },
                            samples: {
                                value: 1
                            },
                            weights: {
                                value: e
                            },
                            latitudinal: {
                                value: !1
                            },
                            dTheta: {
                                value: 0
                            },
                            mipInt: {
                                value: 0
                            },
                            poleAxis: {
                                value: n
                            },
                            inputEncoding: {
                                value: Ai[3e3]
                            },
                            outputEncoding: {
                                value: Ai[3e3]
                            }
                        },
                        vertexShader: Wi(),
                        fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ji()}\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,
                        blending: 0,
                        depthTest: !1,
                        depthWrite: !1
                    })
                }
                (Ei),
                this._equirectShader = null,
                this._cubemapShader = null,
                this._compileMaterial(this._blurMaterial)
            }
            fromScene(t, e = 0, n = .1, i = 100) {
                Ii = this._renderer.getRenderTarget();
                const r = this._allocateTargets();
                return this._sceneToCubeUV(t, n, i, r),
                e > 0 && this._blur(r, 0, 0, e),
                this._applyPMREM(r),
                this._cleanup(r),
                r
            }
            fromEquirectangular(t) {
                return this._fromTexture(t)
            }
            fromCubemap(t) {
                return this._fromTexture(t)
            }
            compileCubemapShader() {
                null === this._cubemapShader && (this._cubemapShader = Vi(), this._compileMaterial(this._cubemapShader))
            }
            compileEquirectangularShader() {
                null === this._equirectShader && (this._equirectShader = ki(), this._compileMaterial(this._equirectShader))
            }
            dispose() {
                this._blurMaterial.dispose(),
                null !== this._cubemapShader && this._cubemapShader.dispose(),
                null !== this._equirectShader && this._equirectShader.dispose();
                for (let t = 0; t < Ri.length; t++)
                    Ri[t].dispose()
            }
            _cleanup(t) {
                this._pingPongRenderTarget.dispose(),
                this._renderer.setRenderTarget(Ii),
                t.scissorTest = !1,
                Gi(t, 0, 0, t.width, t.height)
            }
            _fromTexture(t) {
                Ii = this._renderer.getRenderTarget();
                const e = this._allocateTargets(t);
                return this._textureToCubeUV(t, e),
                this._applyPMREM(e),
                this._cleanup(e),
                e
            }
            _allocateTargets(t) {
                const e = {
                    magFilter: p,
                    minFilter: p,
                    generateMipmaps: !1,
                    type: x,
                    format: 1023,
                    encoding: Oi(t) ? t.encoding : Z,
                    depthBuffer: !1
                },
                n = Hi(e);
                return n.depthBuffer = !t,
                this._pingPongRenderTarget = Hi(e),
                n
            }
            _compileMaterial(t) {
                const e = new Vn(Ri[0], t);
                this._renderer.compile(e, Li)
            }
            _sceneToCubeUV(t, e, n, i) {
                const r = new Qn(90, 1, e, n),
                s = [1, -1, 1, 1, 1, 1],
                a = [1, 1, 1, -1, -1, -1],
                o = this._renderer,
                l = o.autoClear,
                c = o.outputEncoding,
                h = o.toneMapping;
                o.getClearColor(Di),
                o.toneMapping = 0,
                o.outputEncoding = X,
                o.autoClear = !1;
                const u = new rn({
                    name: "PMREM.Background",
                    side: 1,
                    depthWrite: !1,
                    depthTest: !1
                }),
                d = new Vn(new jn(), u);
                let p = !1;
                const m = t.background;
                m ? m.isColor && (u.color.copy(m), t.background = null, p = !0) : (u.color.copy(Di), p = !0);
                for (let e = 0; e < 6; e++) {
                    const n = e % 3;
                    0 == n ? (r.up.set(0, s[e], 0), r.lookAt(a[e], 0, 0)) : 1 == n ? (r.up.set(0, 0, s[e]), r.lookAt(0, a[e], 0)) : (r.up.set(0, s[e], 0), r.lookAt(0, 0, a[e])),
                    Gi(i, n * wi, e > 2 ? wi : 0, wi, wi),
                    o.setRenderTarget(i),
                    p && o.render(d, r),
                    o.render(t, r)
                }
                d.geometry.dispose(),
                d.material.dispose(),
                o.toneMapping = h,
                o.outputEncoding = c,
                o.autoClear = l,
                t.background = m
            }
            _setEncoding(t, e) {
                t.value = Ai[e.encoding]
            }
            _textureToCubeUV(t, e) {
                const n = this._renderer,
                i = t.mapping === r || t.mapping === s;
                i ? null == this._cubemapShader && (this._cubemapShader = Vi()) : null == this._equirectShader && (this._equirectShader = ki());
                const a = i ? this._cubemapShader : this._equirectShader,
                o = new Vn(Ri[0], a),
                l = a.uniforms;
                l.envMap.value = t,
                i || l.texelSize.value.set(1 / t.image.width, 1 / t.image.height),
                this._setEncoding(l.inputEncoding, t),
                this._setEncoding(l.outputEncoding, e.texture),
                Gi(e, 0, 0, 3 * wi, 2 * wi),
                n.setRenderTarget(e),
                n.render(o, Li)
            }
            _applyPMREM(t) {
                const e = this._renderer,
                n = e.autoClear;
                e.autoClear = !1;
                for (let e = 1; e < Ti; e++) {
                    const n = Math.sqrt(Pi[e] * Pi[e] - Pi[e - 1] * Pi[e - 1]),
                    i = Bi[(e - 1) % Bi.length];
                    this._blur(t, e - 1, e, n, i)
                }
                e.autoClear = n
            }
            _blur(t, e, n, i, r) {
                const s = this._pingPongRenderTarget;
                this._halfBlur(t, s, e, n, i, "latitudinal", r),
                this._halfBlur(s, t, n, n, i, "longitudinal", r)
            }
            _halfBlur(t, e, n, i, r, s, a) {
                const o = this._renderer,
                l = this._blurMaterial;
                "latitudinal" !== s && "longitudinal" !== s && console.error("blur direction must be either latitudinal or longitudinal!");
                const c = new Vn(Ri[i], l),
                h = l.uniforms,
                u = Ci[n] - 1,
                d = isFinite(r) ? Math.PI / (2 * u) : 2 * Math.PI / 39,
                p = r / d,
                m = isFinite(r) ? 1 + Math.floor(3 * p) : Ei;
                m > Ei && console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);
                const f = [];
                let g = 0;
                for (let t = 0; t < Ei; ++t) {
                    const e = t / p,
                    n = Math.exp(-e * e / 2);
                    f.push(n),
                    0 == t ? g += n : t < m && (g += 2 * n)
                }
                for (let t = 0; t < f.length; t++)
                    f[t] = f[t] / g;
                h.envMap.value = t.texture,
                h.samples.value = m,
                h.weights.value = f,
                h.latitudinal.value = "latitudinal" === s,
                a && (h.poleAxis.value = a),
                h.dTheta.value = d,
                h.mipInt.value = 8 - n,
                this._setEncoding(h.inputEncoding, t.texture),
                this._setEncoding(h.outputEncoding, t.texture);
                const v = Ci[i];
                Gi(e, 3 * Math.max(0, wi - 2 * v), (0 === i ? 0 : 2 * wi) + 2 * v * (i > 4 ? i - 8 + 4 : 0), 3 * v, 2 * v),
                o.setRenderTarget(e),
                o.render(c, Li)
            }
        }
        function Oi(t) {
            return void 0 !== t && t.type === x && (t.encoding === X || t.encoding === J || t.encoding === Y)
        }
        function Ui() {
            const t = [],
            e = [],
            n = [];
            let i = 8;
            for (let r = 0; r < Ti; r++) {
                const s = Math.pow(2, i);
                e.push(s);
                let a = 1 / s;
                r > 4 ? a = Si[r - 8 + 4 - 1] : 0 == r && (a = 0),
                n.push(a);
                const o = 1 / (s - 1),
                l = -o / 2,
                c = 1 + o / 2,
                h = [l, l, c, l, c, c, l, l, c, c, l, c],
                u = 6,
                d = 6,
                p = 3,
                m = 2,
                f = 1,
                g = new Float32Array(p * d * u),
                v = new Float32Array(m * d * u),
                y = new Float32Array(f * d * u);
                for (let t = 0; t < u; t++) {
                    const e = t % 3 * 2 / 3 - 1,
                    n = t > 2 ? 0 : -1,
                    i = [e, n, 0, e + 2 / 3, n, 0, e + 2 / 3, n + 1, 0, e, n, 0, e + 2 / 3, n + 1, 0, e, n + 1, 0];
                    g.set(i, p * d * t),
                    v.set(h, m * d * t);
                    const r = [t, t, t, t, t, t];
                    y.set(r, f * d * t)
                }
                const x = new Tn;
                x.setAttribute("position", new on(g, p)),
                x.setAttribute("uv", new on(v, m)),
                x.setAttribute("faceIndex", new on(y, f)),
                t.push(x),
                i > 4 && i--
            }
            return {
                _lodPlanes: t,
                _sizeLods: e,
                _sigmas: n
            }
        }
        function Hi(t) {
            const e = new Ct(3 * wi, 3 * wi, t);
            return e.texture.mapping = l,
            e.texture.name = "PMREM.cubeUv",
            e.scissorTest = !0,
            e
        }
        function Gi(t, e, n, i, r) {
            t.viewport.set(e, n, i, r),
            t.scissor.set(e, n, i, r)
        }
        function ki() {
            const t = new vt(1, 1);
            return new bi({
                name: "EquirectangularToCubeUV",
                uniforms: {
                    envMap: {
                        value: null
                    },
                    texelSize: {
                        value: t
                    },
                    inputEncoding: {
                        value: Ai[3e3]
                    },
                    outputEncoding: {
                        value: Ai[3e3]
                    }
                },
                vertexShader: Wi(),
                fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ji()}\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,
                blending: 0,
                depthTest: !1,
                depthWrite: !1
            })
        }
        function Vi() {
            return new bi({
                name: "CubemapToCubeUV",
                uniforms: {
                    envMap: {
                        value: null
                    },
                    inputEncoding: {
                        value: Ai[3e3]
                    },
                    outputEncoding: {
                        value: Ai[3e3]
                    }
                },
                vertexShader: Wi(),
                fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ji()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,
                blending: 0,
                depthTest: !1,
                depthWrite: !1
            })
        }
        function Wi() {
            return "\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"
        }
        function ji() {
            return "\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include <encodings_pars_fragment>\n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"
        }
        function qi(t) {
            let e = new WeakMap,
            n = null;
            function i(t) {
                const n = t.target;
                n.removeEventListener("dispose", i);
                const r = e.get(n);
                void 0 !== r && (e.delete(n), r.dispose())
            }
            return {
                get: function (l) {
                    if (l && l.isTexture && !1 === l.isRenderTargetTexture) {
                        const c = l.mapping,
                        h = c === a || c === o,
                        u = c === r || c === s;
                        if (h || u) {
                            if (e.has(l))
                                return e.get(l).texture; {
                                const r = l.image;
                                if (h && r && r.height > 0 || u && r && function (t) {
                                    let e = 0;
                                    const n = 6;
                                    for (let i = 0; i < n; i++)
                                        void 0 !== t[i] && e++;
                                    return e === n
                                }
                                    (r)) {
                                    const r = t.getRenderTarget();
                                    null === n && (n = new Fi(t));
                                    const s = h ? n.fromEquirectangular(l) : n.fromCubemap(l);
                                    return e.set(l, s),
                                    t.setRenderTarget(r),
                                    l.addEventListener("dispose", i),
                                    s.texture
                                }
                                return null
                            }
                        }
                    }
                    return l
                },
                dispose: function () {
                    e = new WeakMap,
                    null !== n && (n.dispose(), n = null)
                }
            }
        }
        function Xi(t) {
            const e = {};
            function n(n) {
                if (void 0 !== e[n])
                    return e[n];
                let i;
                switch (n) {
                case "WEBGL_depth_texture":
                    i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture");
                    break;
                case "EXT_texture_filter_anisotropic":
                    i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");
                    break;
                case "WEBGL_compressed_texture_s3tc":
                    i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
                    break;
                case "WEBGL_compressed_texture_pvrtc":
                    i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");
                    break;
                default:
                    i = t.getExtension(n);
                }
                return e[n] = i,
                i
            }
            return {
                has: function (t) {
                    return null !== n(t)
                },
                init: function (t) {
                    t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")),
                    n("OES_texture_float_linear"),
                    n("EXT_color_buffer_half_float"),
                    n("WEBGL_multisampled_render_to_texture")
                },
                get: function (t) {
                    const e = n(t);
                    return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."),
                    e
                }
            }
        }
        function Ji(t, e, n, i) {
            const r = {},
            s = new WeakMap;
            function a(t) {
                const o = t.target;
                null !== o.index && e.remove(o.index);
                for (const t in o.attributes)
                    e.remove(o.attributes[t]);
                o.removeEventListener("dispose", a),
                delete r[o.id];
                const l = s.get(o);
                l && (e.remove(l), s.delete(o)),
                i.releaseStatesOfGeometry(o),
                !0 === o.isInstancedBufferGeometry && delete o._maxInstanceCount,
                n.memory.geometries--
            }
            function o(t) {
                const n = [],
                i = t.index,
                r = t.attributes.position;
                let a = 0;
                if (null !== i) {
                    const t = i.array;
                    a = i.version;
                    for (let e = 0, i = t.length; e < i; e += 3) {
                        const i = t[e + 0],
                        r = t[e + 1],
                        s = t[e + 2];
                        n.push(i, r, r, s, s, i)
                    }
                } else {
                    const t = r.array;
                    a = r.version;
                    for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) {
                        const t = e + 0,
                        i = e + 1,
                        r = e + 2;
                        n.push(t, i, i, r, r, t)
                    }
                }
                const o = new(xt(n) > 65535 ? mn : dn)(n, 1);
                o.version = a;
                const l = s.get(t);
                l && e.remove(l),
                s.set(t, o)
            }
            return {
                get: function (t, e) {
                    return !0 === r[e.id] || (e.addEventListener("dispose", a), r[e.id] = !0, n.memory.geometries++),
                    e
                },
                update: function (t) {
                    const n = t.attributes;
                    for (const t in n)
                        e.update(n[t], 34962);
                    const i = t.morphAttributes;
                    for (const t in i) {
                        const n = i[t];
                        for (let t = 0, i = n.length; t < i; t++)
                            e.update(n[t], 34962)
                    }
                },
                getWireframeAttribute: function (t) {
                    const e = s.get(t);
                    if (e) {
                        const n = t.index;
                        null !== n && e.version < n.version && o(t)
                    } else
                        o(t);
                    return s.get(t)
                }
            }
        }
        function Yi(t, e, n, i) {
            const r = i.isWebGL2;
            let s,
            a,
            o;
            this.setMode = function (t) {
                s = t
            },
            this.setIndex = function (t) {
                a = t.type,
                o = t.bytesPerElement
            },
            this.render = function (e, i) {
                t.drawElements(s, i, a, e * o),
                n.update(i, s, 1)
            },
            this.renderInstances = function (i, l, c) {
                if (0 === c)
                    return;
                let h,
                u;
                if (r)
                    h = t, u = "drawElementsInstanced";
                else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h)
                    return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
                h[u](s, l, a, i * o, c),
                n.update(l, s, c)
            }
        }
        function Zi(t) {
            const e = {
                frame: 0,
                calls: 0,
                triangles: 0,
                points: 0,
                lines: 0
            };
            return {
                memory: {
                    geometries: 0,
                    textures: 0
                },
                render: e,
                programs: null,
                autoReset: !0,
                reset: function () {
                    e.frame++,
                    e.calls = 0,
                    e.triangles = 0,
                    e.points = 0,
                    e.lines = 0
                },
                update: function (t, n, i) {
                    switch (e.calls++, n) {
                    case 4:
                        e.triangles += i * (t / 3);
                        break;
                    case 1:
                        e.lines += i * (t / 2);
                        break;
                    case 3:
                        e.lines += i * (t - 1);
                        break;
                    case 2:
                        e.lines += i * t;
                        break;
                    case 0:
                        e.points += i * t;
                        break;
                    default:
                        console.error("THREE.WebGLInfo: Unknown draw mode:", n);
                    }
                }
            }
        }
        class Qi extends At {
            constructor(t = null, e = 1, n = 1, i = 1) {
                super(null),
                this.image = {
                    data: t,
                    width: e,
                    height: n,
                    depth: i
                },
                this.magFilter = p,
                this.minFilter = p,
                this.wrapR = u,
                this.generateMipmaps = !1,
                this.flipY = !1,
                this.unpackAlignment = 1,
                this.needsUpdate = !0
            }
        }
        function Ki(t, e) {
            return t[0] - e[0]
        }
        function $i(t, e) {
            return Math.abs(e[1]) - Math.abs(t[1])
        }
        function tr(t, e) {
            let n = 1;
            const i = e.isInterleavedBufferAttribute ? e.data.array : e.array;
            i instanceof Int8Array ? n = 127 : i instanceof Int16Array ? n = 32767 : i instanceof Int32Array ? n = 2147483647 : console.error("THREE.WebGLMorphtargets: Unsupported morph attribute data type: ", i),
            t.divideScalar(n)
        }
        function er(t, e, n) {
            const i = {},
            r = new Float32Array(8),
            s = new WeakMap,
            a = new Nt,
            o = [];
            for (let t = 0; t < 8; t++)
                o[t] = [t, 0];
            return {
                update: function (l, c, h, u) {
                    const d = l.morphTargetInfluences;
                    if (!0 === e.isWebGL2) {
                        const i = c.morphAttributes.position.length;
                        let r = s.get(c);
                        if (void 0 === r || r.count !== i) {
                            void 0 !== r && r.texture.dispose();
                            const t = void 0 !== c.morphAttributes.normal,
                            n = c.morphAttributes.position,
                            o = c.morphAttributes.normal || [],
                            l = !0 === t ? 2 : 1;
                            let h = c.attributes.position.count * l,
                            u = 1;
                            h > e.maxTextureSize && (u = Math.ceil(h / e.maxTextureSize), h = e.maxTextureSize);
                            const d = new Float32Array(h * u * 4 * i),
                            p = new Qi(d, h, u, i);
                            p.format = E,
                            p.type = b;
                            const m = 4 * l;
                            for (let e = 0; e < i; e++) {
                                const i = n[e],
                                r = o[e],
                                s = h * u * 4 * e;
                                for (let e = 0; e < i.count; e++) {
                                    a.fromBufferAttribute(i, e),
                                    !0 === i.normalized && tr(a, i);
                                    const n = e * m;
                                    d[s + n + 0] = a.x,
                                    d[s + n + 1] = a.y,
                                    d[s + n + 2] = a.z,
                                    d[s + n + 3] = 0,
                                    !0 === t && (a.fromBufferAttribute(r, e), !0 === r.normalized && tr(a, r), d[s + n + 4] = a.x, d[s + n + 5] = a.y, d[s + n + 6] = a.z, d[s + n + 7] = 0)
                                }
                            }
                            r = {
                                count: i,
                                texture: p,
                                size: new vt(h, u)
                            },
                            s.set(c, r)
                        }
                        let o = 0;
                        for (let t = 0; t < d.length; t++)
                            o += d[t];
                        const l = c.morphTargetsRelative ? 1 : 1 - o;
                        u.getUniforms().setValue(t, "morphTargetBaseInfluence", l),
                        u.getUniforms().setValue(t, "morphTargetInfluences", d),
                        u.getUniforms().setValue(t, "morphTargetsTexture", r.texture, n),
                        u.getUniforms().setValue(t, "morphTargetsTextureSize", r.size)
                    } else {
                        const e = void 0 === d ? 0 : d.length;
                        let n = i[c.id];
                        if (void 0 === n || n.length !== e) {
                            n = [];
                            for (let t = 0; t < e; t++)
                                n[t] = [t, 0];
                            i[c.id] = n
                        }
                        for (let t = 0; t < e; t++) {
                            const e = n[t];
                            e[0] = t,
                            e[1] = d[t]
                        }
                        n.sort($i);
                        for (let t = 0; t < 8; t++)
                            t < e && n[t][1] ? (o[t][0] = n[t][0], o[t][1] = n[t][1]) : (o[t][0] = Number.MAX_SAFE_INTEGER, o[t][1] = 0);
                        o.sort(Ki);
                        const s = c.morphAttributes.position,
                        a = c.morphAttributes.normal;
                        let l = 0;
                        for (let t = 0; t < 8; t++) {
                            const e = o[t],
                            n = e[0],
                            i = e[1];
                            n !== Number.MAX_SAFE_INTEGER && i ? (s && c.getAttribute("morphTarget" + t) !== s[n] && c.setAttribute("morphTarget" + t, s[n]), a && c.getAttribute("morphNormal" + t) !== a[n] && c.setAttribute("morphNormal" + t, a[n]), r[t] = i, l += i) : (s && !0 === c.hasAttribute("morphTarget" + t) && c.deleteAttribute("morphTarget" + t), a && !0 === c.hasAttribute("morphNormal" + t) && c.deleteAttribute("morphNormal" + t), r[t] = 0)
                        }
                        const h = c.morphTargetsRelative ? 1 : 1 - l;
                        u.getUniforms().setValue(t, "morphTargetBaseInfluence", h),
                        u.getUniforms().setValue(t, "morphTargetInfluences", r)
                    }
                }
            }
        }
        function nr(t, e, n, i) {
            let r = new WeakMap;
            function s(t) {
                const e = t.target;
                e.removeEventListener("dispose", s),
                n.remove(e.instanceMatrix),
                null !== e.instanceColor && n.remove(e.instanceColor)
            }
            return {
                update: function (t) {
                    const a = i.render.frame,
                    o = t.geometry,
                    l = e.get(t, o);
                    return r.get(l) !== a && (e.update(l), r.set(l, a)),
                    t.isInstancedMesh && (!1 === t.hasEventListener("dispose", s) && t.addEventListener("dispose", s), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)),
                    l
                },
                dispose: function () {
                    r = new WeakMap
                }
            }
        }
        Qi.prototype.isDataTexture2DArray = !0;
        class ir extends At {
            constructor(t = null, e = 1, n = 1, i = 1) {
                super(null),
                this.image = {
                    data: t,
                    width: e,
                    height: n,
                    depth: i
                },
                this.magFilter = p,
                this.minFilter = p,
                this.wrapR = u,
                this.generateMipmaps = !1,
                this.flipY = !1,
                this.unpackAlignment = 1,
                this.needsUpdate = !0
            }
        }
        ir.prototype.isDataTexture3D = !0;
        const rr = new At,
        sr = new Qi,
        ar = new ir,
        or = new ti,
        lr = [],
        cr = [],
        hr = new Float32Array(16),
        ur = new Float32Array(9),
        dr = new Float32Array(4);
        function pr(t, e, n) {
            const i = t[0];
            if (i <= 0 || i > 0)
                return t;
            const r = e * n;
            let s = lr[r];
            if (void 0 === s && (s = new Float32Array(r), lr[r] = s), 0 !== e) {
                i.toArray(s, 0);
                for (let i = 1, r = 0; i !== e; ++i)
                    r += n, t[i].toArray(s, r)
            }
            return s
        }
        function mr(t, e) {
            if (t.length !== e.length)
                return !1;
            for (let n = 0, i = t.length; n < i; n++)
                if (t[n] !== e[n])
                    return !1;
            return !0
        }
        function fr(t, e) {
            for (let n = 0, i = e.length; n < i; n++)
                t[n] = e[n]
        }
        function gr(t, e) {
            let n = cr[e];
            void 0 === n && (n = new Int32Array(e), cr[e] = n);
            for (let i = 0; i !== e; ++i)
                n[i] = t.allocateTextureUnit();
            return n
        }
        function vr(t, e) {
            const n = this.cache;
            n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e)
        }
        function yr(t, e) {
            const n = this.cache;
            if (void 0 !== e.x)
                n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y);
            else {
                if (mr(n, e))
                    return;
                t.uniform2fv(this.addr, e),
                fr(n, e)
            }
        }
        function xr(t, e) {
            const n = this.cache;
            if (void 0 !== e.x)
                n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z);
            else if (void 0 !== e.r)
                n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b);
            else {
                if (mr(n, e))
                    return;
                t.uniform3fv(this.addr, e),
                fr(n, e)
            }
        }
        function _r(t, e) {
            const n = this.cache;
            if (void 0 !== e.x)
                n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w);
            else {
                if (mr(n, e))
                    return;
                t.uniform4fv(this.addr, e),
                fr(n, e)
            }
        }
        function Mr(t, e) {
            const n = this.cache,
            i = e.elements;
            if (void 0 === i) {
                if (mr(n, e))
                    return;
                t.uniformMatrix2fv(this.addr, !1, e),
                fr(n, e)
            } else {
                if (mr(n, i))
                    return;
                dr.set(i),
                t.uniformMatrix2fv(this.addr, !1, dr),
                fr(n, i)
            }
        }
        function br(t, e) {
            const n = this.cache,
            i = e.elements;
            if (void 0 === i) {
                if (mr(n, e))
                    return;
                t.uniformMatrix3fv(this.addr, !1, e),
                fr(n, e)
            } else {
                if (mr(n, i))
                    return;
                ur.set(i),
                t.uniformMatrix3fv(this.addr, !1, ur),
                fr(n, i)
            }
        }
        function wr(t, e) {
            const n = this.cache,
            i = e.elements;
            if (void 0 === i) {
                if (mr(n, e))
                    return;
                t.uniformMatrix4fv(this.addr, !1, e),
                fr(n, e)
            } else {
                if (mr(n, i))
                    return;
                hr.set(i),
                t.uniformMatrix4fv(this.addr, !1, hr),
                fr(n, i)
            }
        }
        function Sr(t, e) {
            const n = this.cache;
            n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e)
        }
        function Tr(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform2iv(this.addr, e), fr(n, e))
        }
        function Er(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform3iv(this.addr, e), fr(n, e))
        }
        function Ar(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform4iv(this.addr, e), fr(n, e))
        }
        function Lr(t, e) {
            const n = this.cache;
            n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e)
        }
        function Rr(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform2uiv(this.addr, e), fr(n, e))
        }
        function Cr(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform3uiv(this.addr, e), fr(n, e))
        }
        function Pr(t, e) {
            const n = this.cache;
            mr(n, e) || (t.uniform4uiv(this.addr, e), fr(n, e))
        }
        function Dr(t, e, n) {
            const i = this.cache,
            r = n.allocateTextureUnit();
            i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r),
            n.safeSetTexture2D(e || rr, r)
        }
        function Ir(t, e, n) {
            const i = this.cache,
            r = n.allocateTextureUnit();
            i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r),
            n.setTexture3D(e || ar, r)
        }
        function Nr(t, e, n) {
            const i = this.cache,
            r = n.allocateTextureUnit();
            i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r),
            n.safeSetTextureCube(e || or, r)
        }
        function zr(t, e, n) {
            const i = this.cache,
            r = n.allocateTextureUnit();
            i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r),
            n.setTexture2DArray(e || sr, r)
        }
        function Br(t, e) {
            t.uniform1fv(this.addr, e)
        }
        function Fr(t, e) {
            const n = pr(e, this.size, 2);
            t.uniform2fv(this.addr, n)
        }
        function Or(t, e) {
            const n = pr(e, this.size, 3);
            t.uniform3fv(this.addr, n)
        }
        function Ur(t, e) {
            const n = pr(e, this.size, 4);
            t.uniform4fv(this.addr, n)
        }
        function Hr(t, e) {
            const n = pr(e, this.size, 4);
            t.uniformMatrix2fv(this.addr, !1, n)
        }
        function Gr(t, e) {
            const n = pr(e, this.size, 9);
            t.uniformMatrix3fv(this.addr, !1, n)
        }
        function kr(t, e) {
            const n = pr(e, this.size, 16);
            t.uniformMatrix4fv(this.addr, !1, n)
        }
        function Vr(t, e) {
            t.uniform1iv(this.addr, e)
        }
        function Wr(t, e) {
            t.uniform2iv(this.addr, e)
        }
        function jr(t, e) {
            t.uniform3iv(this.addr, e)
        }
        function qr(t, e) {
            t.uniform4iv(this.addr, e)
        }
        function Xr(t, e) {
            t.uniform1uiv(this.addr, e)
        }
        function Jr(t, e) {
            t.uniform2uiv(this.addr, e)
        }
        function Yr(t, e) {
            t.uniform3uiv(this.addr, e)
        }
        function Zr(t, e) {
            t.uniform4uiv(this.addr, e)
        }
        function Qr(t, e, n) {
            const i = e.length,
            r = gr(n, i);
            t.uniform1iv(this.addr, r);
            for (let t = 0; t !== i; ++t)
                n.safeSetTexture2D(e[t] || rr, r[t])
        }
        function Kr(t, e, n) {
            const i = e.length,
            r = gr(n, i);
            t.uniform1iv(this.addr, r);
            for (let t = 0; t !== i; ++t)
                n.setTexture3D(e[t] || ar, r[t])
        }
        function $r(t, e, n) {
            const i = e.length,
            r = gr(n, i);
            t.uniform1iv(this.addr, r);
            for (let t = 0; t !== i; ++t)
                n.safeSetTextureCube(e[t] || or, r[t])
        }
        function ts(t, e, n) {
            const i = e.length,
            r = gr(n, i);
            t.uniform1iv(this.addr, r);
            for (let t = 0; t !== i; ++t)
                n.setTexture2DArray(e[t] || sr, r[t])
        }
        function es(t, e, n) {
            this.id = t,
            this.addr = n,
            this.cache = [],
            this.setValue = function (t) {
                switch (t) {
                case 5126:
                    return vr;
                case 35664:
                    return yr;
                case 35665:
                    return xr;
                case 35666:
                    return _r;
                case 35674:
                    return Mr;
                case 35675:
                    return br;
                case 35676:
                    return wr;
                case 5124:
                case 35670:
                    return Sr;
                case 35667:
                case 35671:
                    return Tr;
                case 35668:
                case 35672:
                    return Er;
                case 35669:
                case 35673:
                    return Ar;
                case 5125:
                    return Lr;
                case 36294:
                    return Rr;
                case 36295:
                    return Cr;
                case 36296:
                    return Pr;
                case 35678:
                case 36198:
                case 36298:
                case 36306:
                case 35682:
                    return Dr;
                case 35679:
                case 36299:
                case 36307:
                    return Ir;
                case 35680:
                case 36300:
                case 36308:
                case 36293:
                    return Nr;
                case 36289:
                case 36303:
                case 36311:
                case 36292:
                    return zr;
                }
            }
            (e.type)
        }
        function ns(t, e, n) {
            this.id = t,
            this.addr = n,
            this.cache = [],
            this.size = e.size,
            this.setValue = function (t) {
                switch (t) {
                case 5126:
                    return Br;
                case 35664:
                    return Fr;
                case 35665:
                    return Or;
                case 35666:
                    return Ur;
                case 35674:
                    return Hr;
                case 35675:
                    return Gr;
                case 35676:
                    return kr;
                case 5124:
                case 35670:
                    return Vr;
                case 35667:
                case 35671:
                    return Wr;
                case 35668:
                case 35672:
                    return jr;
                case 35669:
                case 35673:
                    return qr;
                case 5125:
                    return Xr;
                case 36294:
                    return Jr;
                case 36295:
                    return Yr;
                case 36296:
                    return Zr;
                case 35678:
                case 36198:
                case 36298:
                case 36306:
                case 35682:
                    return Qr;
                case 35679:
                case 36299:
                case 36307:
                    return Kr;
                case 35680:
                case 36300:
                case 36308:
                case 36293:
                    return $r;
                case 36289:
                case 36303:
                case 36311:
                case 36292:
                    return ts;
                }
            }
            (e.type)
        }
        function is(t) {
            this.id = t,
            this.seq = [],
            this.map = {}
        }
        ns.prototype.updateCache = function (t) {
            const e = this.cache;
            t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)),
            fr(e, t)
        },
        is.prototype.setValue = function (t, e, n) {
            const i = this.seq;
            for (let r = 0, s = i.length; r !== s; ++r) {
                const s = i[r];
                s.setValue(t, e[s.id], n)
            }
        };
        const rs = /(\w+)(\])?(\[|\.)?/g;
        function ss(t, e) {
            t.seq.push(e),
            t.map[e.id] = e
        }
        function as(t, e, n) {
            const i = t.name,
            r = i.length;
            for (rs.lastIndex = 0; ; ) {
                const s = rs.exec(i),
                a = rs.lastIndex;
                let o = s[1];
                const l = "]" === s[2],
                c = s[3];
                if (l && (o |= 0), void 0 === c || "[" === c && a + 2 === r) {
                    ss(n, void 0 === c ? new es(o, t, e) : new ns(o, t, e));
                    break
                } {
                    let t = n.map[o];
                    void 0 === t && (t = new is(o), ss(n, t)),
                    n = t
                }
            }
        }
        function os(t, e) {
            this.seq = [],
            this.map = {};
            const n = t.getProgramParameter(e, 35718);
            for (let i = 0; i < n; ++i) {
                const n = t.getActiveUniform(e, i);
                as(n, t.getUniformLocation(e, n.name), this)
            }
        }
        function ls(t, e, n) {
            const i = t.createShader(e);
            return t.shaderSource(i, n),
            t.compileShader(i),
            i
        }
        os.prototype.setValue = function (t, e, n, i) {
            const r = this.map[e];
            void 0 !== r && r.setValue(t, n, i)
        },
        os.prototype.setOptional = function (t, e, n) {
            const i = e[n];
            void 0 !== i && this.setValue(t, n, i)
        },
        os.upload = function (t, e, n, i) {
            for (let r = 0, s = e.length; r !== s; ++r) {
                const s = e[r],
                a = n[s.id];
                !1 !== a.needsUpdate && s.setValue(t, a.value, i)
            }
        },
        os.seqWithValue = function (t, e) {
            const n = [];
            for (let i = 0, r = t.length; i !== r; ++i) {
                const r = t[i];
                r.id in e && n.push(r)
            }
            return n
        };
        let cs = 0;
        function hs(t) {
            switch (t) {
            case X:
                return ["Linear", "( value )"];
            case J:
                return ["sRGB", "( value )"];
            case Z:
                return ["RGBE", "( value )"];
            case Q:
                return ["RGBM", "( value, 7.0 )"];
            case K:
                return ["RGBM", "( value, 16.0 )"];
            case $:
                return ["RGBD", "( value, 256.0 )"];
            case Y:
                return ["Gamma", "( value, float( GAMMA_FACTOR ) )"];
            default:
                return console.warn("THREE.WebGLProgram: Unsupported encoding:", t),
                ["Linear", "( value )"];
            }
        }
        function us(t, e, n) {
            const i = t.getShaderParameter(e, 35713),
            r = t.getShaderInfoLog(e).trim();
            return i && "" === r ? "" : n.toUpperCase() + "\n\n" + r + "\n\n" + function (t) {
                const e = t.split("\n");
                for (let t = 0; t < e.length; t++)
                    e[t] = t + 1 + ": " + e[t];
                return e.join("\n")
            }
            (t.getShaderSource(e))
        }
        function ds(t, e) {
            const n = hs(e);
            return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }"
        }
        function ps(t, e) {
            const n = hs(e);
            return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }"
        }
        function ms(t, e) {
            let n;
            switch (e) {
            case 1:
                n = "Linear";
                break;
            case 2:
                n = "Reinhard";
                break;
            case 3:
                n = "OptimizedCineon";
                break;
            case 4:
                n = "ACESFilmic";
                break;
            case 5:
                n = "Custom";
                break;
            default:
                console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e),
                n = "Linear";
            }
            return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }"
        }
        function fs(t) {
            return "" !== t
        }
        function gs(t, e) {
            return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows)
        }
        function vs(t, e) {
            return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection)
        }
        const ys = /^[ \t]*#include +<([\w\d./]+)>/gm;
        function xs(t) {
            return t.replace(ys, _s)
        }
        function _s(t, e) {
            const n = di[e];
            if (void 0 === n)
                throw new Error("Can not resolve #include <" + e + ">");
            return xs(n)
        }
        const Ms = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,
        bs = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
        function ws(t) {
            return t.replace(bs, Ts).replace(Ms, Ss)
        }
        function Ss(t, e, n, i) {
            return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),
            Ts(t, e, n, i)
        }
        function Ts(t, e, n, i) {
            let r = "";
            for (let t = parseInt(e); t < parseInt(n); t++)
                r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t);
            return r
        }
        function Es(t) {
            let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;";
            return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"),
            e
        }
        function As(t, e, n, i) {
            const a = t.getContext(),
            o = n.defines;
            let h = n.vertexShader,
            u = n.fragmentShader;
            const d = function (t) {
                let e = "SHADOWMAP_TYPE_BASIC";
                return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"),
                e
            }
            (n),
            p = function (t) {
                let e = "ENVMAP_TYPE_CUBE";
                if (t.envMap)
                    switch (t.envMapMode) {
                    case r:
                    case s:
                        e = "ENVMAP_TYPE_CUBE";
                        break;
                    case l:
                    case c:
                        e = "ENVMAP_TYPE_CUBE_UV";
                    }
                return e
            }
            (n),
            m = function (t) {
                let e = "ENVMAP_MODE_REFLECTION";
                if (t.envMap)
                    switch (t.envMapMode) {
                    case s:
                    case c:
                        e = "ENVMAP_MODE_REFRACTION";
                    }
                return e
            }
            (n),
            f = function (t) {
                let e = "ENVMAP_BLENDING_NONE";
                if (t.envMap)
                    switch (t.combine) {
                    case 0:
                        e = "ENVMAP_BLENDING_MULTIPLY";
                        break;
                    case 1:
                        e = "ENVMAP_BLENDING_MIX";
                        break;
                    case 2:
                        e = "ENVMAP_BLENDING_ADD";
                    }
                return e
            }
            (n),
            g = t.gammaFactor > 0 ? t.gammaFactor : 1,
            v = n.isWebGL2 ? "" : function (t) {
                return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap || t.transmission) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(fs).join("\n")
            }
            (n),
            y = function (t) {
                const e = [];
                for (const n in t) {
                    const i = t[n];
                    !1 !== i && e.push("#define " + n + " " + i)
                }
                return e.join("\n")
            }
            (o),
            x = a.createProgram();
            let _,
            M,
            b = n.glslVersion ? "#version " + n.glslVersion + "\n" : "";
            n.isRawShaderMaterial ? (_ = [y].filter(fs).join("\n"), _.length > 0 && (_ += "\n"), M = [v, y].filter(fs).join("\n"), M.length > 0 && (M += "\n")) : (_ = [Es(n), "#define SHADER_NAME " + n.shaderName, y, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + g, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + m : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularIntensityMap ? "#define USE_SPECULARINTENSITYMAP" : "", n.specularColorMap ? "#define USE_SPECULARCOLORMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.sheenColorMap ? "#define USE_SHEENCOLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEENROUGHNESSMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.morphTargets && n.isWebGL2 ? "#define MORPHTARGETS_TEXTURE" : "", n.morphTargets && n.isWebGL2 ? "#define MORPHTARGETS_COUNT " + n.morphTargetsCount : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + d : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#if defined( USE_COLOR_ALPHA )", "\tattribute vec4 color;", "#elif defined( USE_COLOR )", "\tattribute vec3 color;", "#endif", "#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(fs).join("\n"), M = [v, Es(n), "#define SHADER_NAME " + n.shaderName, y, "#define GAMMA_FACTOR " + g, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + p : "", n.envMap ? "#define " + m : "", n.envMap ? "#define " + f : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoat ? "#define USE_CLEARCOAT" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.specularIntensityMap ? "#define USE_SPECULARINTENSITYMAP" : "", n.specularColorMap ? "#define USE_SPECULARCOLORMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.alphaTest ? "#define USE_ALPHATEST" : "", n.sheen ? "#define USE_SHEEN" : "", n.sheenColorMap ? "#define USE_SHEENCOLORMAP" : "", n.sheenRoughnessMap ? "#define USE_SHEENROUGHNESSMAP" : "", n.transmission ? "#define USE_TRANSMISSION" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.thicknessMap ? "#define USE_THICKNESSMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + d : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? di.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? ms("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", n.format === T ? "#define OPAQUE" : "", di.encodings_pars_fragment, n.map ? ds("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? ds("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? ds("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? ds("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.specularColorMap ? ds("specularColorMapTexelToLinear", n.specularColorMapEncoding) : "", n.sheenColorMap ? ds("sheenColorMapTexelToLinear", n.sheenColorMapEncoding) : "", n.lightMap ? ds("lightMapTexelToLinear", n.lightMapEncoding) : "", ps("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(fs).join("\n")),
            h = xs(h),
            h = gs(h, n),
            h = vs(h, n),
            u = xs(u),
            u = gs(u, n),
            u = vs(u, n),
            h = ws(h),
            u = ws(u),
            n.isWebGL2 && !0 !== n.isRawShaderMaterial && (b = "#version 300 es\n", _ = ["precision mediump sampler2DArray;", "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + _, M = ["#define varying in", n.glslVersion === it ? "" : "out highp vec4 pc_fragColor;", n.glslVersion === it ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + M);
            const w = b + M + u,
            S = ls(a, 35633, b + _ + h),
            E = ls(a, 35632, w);
            if (a.attachShader(x, S), a.attachShader(x, E), void 0 !== n.index0AttributeName ? a.bindAttribLocation(x, 0, n.index0AttributeName) : !0 === n.morphTargets && a.bindAttribLocation(x, 0, "position"), a.linkProgram(x), t.debug.checkShaderErrors) {
                const t = a.getProgramInfoLog(x).trim(),
                e = a.getShaderInfoLog(S).trim(),
                n = a.getShaderInfoLog(E).trim();
                let i = !0,
                r = !0;
                if (!1 === a.getProgramParameter(x, 35714)) {
                    i = !1;
                    const e = us(a, S, "vertex"),
                    n = us(a, E, "fragment");
                    console.error("THREE.WebGLProgram: Shader Error " + a.getError() + " - VALIDATE_STATUS " + a.getProgramParameter(x, 35715) + "\n\nProgram Info Log: " + t + "\n" + e + "\n" + n)
                } else
                    "" !== t ? console.warn("THREE.WebGLProgram: Program Info Log:", t) : "" !== e && "" !== n || (r = !1);
                r && (this.diagnostics = {
                        runnable: i,
                        programLog: t,
                        vertexShader: {
                            log: e,
                            prefix: _
                        },
                        fragmentShader: {
                            log: n,
                            prefix: M
                        }
                    })
            }
            let A,
            L;
            return a.deleteShader(S),
            a.deleteShader(E),
            this.getUniforms = function () {
                return void 0 === A && (A = new os(a, x)),
                A
            },
            this.getAttributes = function () {
                return void 0 === L && (L = function (t, e) {
                    const n = {},
                    i = t.getProgramParameter(e, 35721);
                    for (let r = 0; r < i; r++) {
                        const i = t.getActiveAttrib(e, r),
                        s = i.name;
                        let a = 1;
                        35674 === i.type && (a = 2),
                        35675 === i.type && (a = 3),
                        35676 === i.type && (a = 4),
                        n[s] = {
                            type: i.type,
                            location: t.getAttribLocation(e, s),
                            locationSize: a
                        }
                    }
                    return n
                }
                    (a, x)),
                L
            },
            this.destroy = function () {
                i.releaseStatesOfProgram(this),
                a.deleteProgram(x),
                this.program = void 0
            },
            this.name = n.shaderName,
            this.id = cs++,
            this.cacheKey = e,
            this.usedTimes = 1,
            this.program = x,
            this.vertexShader = S,
            this.fragmentShader = E,
            this
        }
        function Ls(t, e, n, i, r, s, a) {
            const o = [],
            h = r.isWebGL2,
            u = r.logarithmicDepthBuffer,
            d = r.floatVertexTextures,
            p = r.maxVertexUniforms,
            m = r.vertexTextures;
            let f = r.precision;
            const g = {
                MeshDepthMaterial: "depth",
                MeshDistanceMaterial: "distanceRGBA",
                MeshNormalMaterial: "normal",
                MeshBasicMaterial: "basic",
                MeshLambertMaterial: "lambert",
                MeshPhongMaterial: "phong",
                MeshToonMaterial: "toon",
                MeshStandardMaterial: "physical",
                MeshPhysicalMaterial: "physical",
                MeshMatcapMaterial: "matcap",
                LineBasicMaterial: "basic",
                LineDashedMaterial: "dashed",
                PointsMaterial: "points",
                ShadowMaterial: "shadow",
                SpriteMaterial: "sprite"
            },
            v = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoat", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", , "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "alphaTest", "combine", "vertexColors", "vertexAlphas", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "morphTargetsCount", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "format", "specularIntensityMap", "specularColorMap", "specularColorMapEncoding", "transmission", "transmissionMap", "thicknessMap", "sheen", "sheenColorMap", "sheenColorMapEncoding", "sheenRoughnessMap"];
            function y(t) {
                let e;
                return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = X,
                e
            }
            return {
                getParameters: function (s, o, v, x, _) {
                    const M = x.fog,
                    b = s.isMeshStandardMaterial ? x.environment : null,
                    w = (s.isMeshStandardMaterial ? n : e).get(s.envMap || b),
                    S = g[s.type],
                    T = _.isSkinnedMesh ? function (t) {
                        const e = t.skeleton.bones;
                        if (d)
                            return 1024; {
                            const t = p,
                            n = Math.floor((t - 20) / 4),
                            i = Math.min(n, e.length);
                            return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i
                        }
                    }
                    (_) : 0;
                    let E,
                    A;
                    if (null !== s.precision && (f = r.getMaxPrecision(s.precision), f !== s.precision && console.warn("THREE.WebGLProgram.getParameters:", s.precision, "not supported, using", f, "instead.")), S) {
                        const t = mi[S];
                        E = t.vertexShader,
                        A = t.fragmentShader
                    } else
                        E = s.vertexShader, A = s.fragmentShader;
                    const L = t.getRenderTarget(),
                    R = s.alphaTest > 0,
                    C = s.clearcoat > 0;
                    return {
                        isWebGL2: h,
                        shaderID: S,
                        shaderName: s.type,
                        vertexShader: E,
                        fragmentShader: A,
                        defines: s.defines,
                        isRawShaderMaterial: !0 === s.isRawShaderMaterial,
                        glslVersion: s.glslVersion,
                        precision: f,
                        instancing: !0 === _.isInstancedMesh,
                        instancingColor: !0 === _.isInstancedMesh && null !== _.instanceColor,
                        supportsVertexTextures: m,
                        outputEncoding: null !== L ? y(L.texture) : t.outputEncoding,
                        map: !!s.map,
                        mapEncoding: y(s.map),
                        matcap: !!s.matcap,
                        matcapEncoding: y(s.matcap),
                        envMap: !!w,
                        envMapMode: w && w.mapping,
                        envMapEncoding: y(w),
                        envMapCubeUV: !!w && (w.mapping === l || w.mapping === c),
                        lightMap: !!s.lightMap,
                        lightMapEncoding: y(s.lightMap),
                        aoMap: !!s.aoMap,
                        emissiveMap: !!s.emissiveMap,
                        emissiveMapEncoding: y(s.emissiveMap),
                        bumpMap: !!s.bumpMap,
                        normalMap: !!s.normalMap,
                        objectSpaceNormalMap: 1 === s.normalMapType,
                        tangentSpaceNormalMap: 0 === s.normalMapType,
                        clearcoat: C,
                        clearcoatMap: C && !!s.clearcoatMap,
                        clearcoatRoughnessMap: C && !!s.clearcoatRoughnessMap,
                        clearcoatNormalMap: C && !!s.clearcoatNormalMap,
                        displacementMap: !!s.displacementMap,
                        roughnessMap: !!s.roughnessMap,
                        metalnessMap: !!s.metalnessMap,
                        specularMap: !!s.specularMap,
                        specularIntensityMap: !!s.specularIntensityMap,
                        specularColorMap: !!s.specularColorMap,
                        specularColorMapEncoding: y(s.specularColorMap),
                        alphaMap: !!s.alphaMap,
                        alphaTest: R,
                        gradientMap: !!s.gradientMap,
                        sheen: s.sheen > 0,
                        sheenColorMap: !!s.sheenColorMap,
                        sheenColorMapEncoding: y(s.sheenColorMap),
                        sheenRoughnessMap: !!s.sheenRoughnessMap,
                        transmission: s.transmission > 0,
                        transmissionMap: !!s.transmissionMap,
                        thicknessMap: !!s.thicknessMap,
                        combine: s.combine,
                        vertexTangents: !!s.normalMap && !!_.geometry && !!_.geometry.attributes.tangent,
                        vertexColors: s.vertexColors,
                        vertexAlphas: !0 === s.vertexColors && !!_.geometry && !!_.geometry.attributes.color && 4 === _.geometry.attributes.color.itemSize,
                        vertexUvs: !!s.map || !!s.bumpMap || !!s.normalMap || !!s.specularMap || !!s.alphaMap || !!s.emissiveMap || !!s.roughnessMap || !!s.metalnessMap || !!s.clearcoatMap || !!s.clearcoatRoughnessMap || !!s.clearcoatNormalMap || !!s.displacementMap || !!s.transmissionMap || !!s.thicknessMap || !!s.specularIntensityMap || !!s.specularColorMap || !!s.sheenColorMap || s.sheenRoughnessMap,
                        uvsVertexOnly: !(s.map || s.bumpMap || s.normalMap || s.specularMap || s.alphaMap || s.emissiveMap || s.roughnessMap || s.metalnessMap || s.clearcoatNormalMap || s.transmission > 0 || s.transmissionMap || s.thicknessMap || s.specularIntensityMap || s.specularColorMap || s.sheen > 0 || s.sheenColorMap || s.sheenRoughnessMap || !s.displacementMap),
                        fog: !!M,
                        useFog: s.fog,
                        fogExp2: M && M.isFogExp2,
                        flatShading: !!s.flatShading,
                        sizeAttenuation: s.sizeAttenuation,
                        logarithmicDepthBuffer: u,
                        skinning: !0 === _.isSkinnedMesh && T > 0,
                        maxBones: T,
                        useVertexTexture: d,
                        morphTargets: !!_.geometry && !!_.geometry.morphAttributes.position,
                        morphNormals: !!_.geometry && !!_.geometry.morphAttributes.normal,
                        morphTargetsCount: _.geometry && _.geometry.morphAttributes.position ? _.geometry.morphAttributes.position.length : 0,
                        numDirLights: o.directional.length,
                        numPointLights: o.point.length,
                        numSpotLights: o.spot.length,
                        numRectAreaLights: o.rectArea.length,
                        numHemiLights: o.hemi.length,
                        numDirLightShadows: o.directionalShadowMap.length,
                        numPointLightShadows: o.pointShadowMap.length,
                        numSpotLightShadows: o.spotShadowMap.length,
                        numClippingPlanes: a.numPlanes,
                        numClipIntersection: a.numIntersection,
                        format: s.format,
                        dithering: s.dithering,
                        shadowMapEnabled: t.shadowMap.enabled && v.length > 0,
                        shadowMapType: t.shadowMap.type,
                        toneMapping: s.toneMapped ? t.toneMapping : 0,
                        physicallyCorrectLights: t.physicallyCorrectLights,
                        premultipliedAlpha: s.premultipliedAlpha,
                        doubleSided: 2 === s.side,
                        flipSided: 1 === s.side,
                        depthPacking: void 0 !== s.depthPacking && s.depthPacking,
                        index0AttributeName: s.index0AttributeName,
                        extensionDerivatives: s.extensions && s.extensions.derivatives,
                        extensionFragDepth: s.extensions && s.extensions.fragDepth,
                        extensionDrawBuffers: s.extensions && s.extensions.drawBuffers,
                        extensionShaderTextureLOD: s.extensions && s.extensions.shaderTextureLOD,
                        rendererExtensionFragDepth: h || i.has("EXT_frag_depth"),
                        rendererExtensionDrawBuffers: h || i.has("WEBGL_draw_buffers"),
                        rendererExtensionShaderTextureLod: h || i.has("EXT_shader_texture_lod"),
                        customProgramCacheKey: s.customProgramCacheKey()
                    }
                },
                getProgramCacheKey: function (e) {
                    const n = [];
                    if (e.shaderID ? n.push(e.shaderID) : (n.push(wt(e.fragmentShader)), n.push(wt(e.vertexShader))), void 0 !== e.defines)
                        for (const t in e.defines)
                            n.push(t), n.push(e.defines[t]);
                    if (!1 === e.isRawShaderMaterial) {
                        for (let t = 0; t < v.length; t++)
                            n.push(e[v[t]]);
                        n.push(t.outputEncoding),
                        n.push(t.gammaFactor)
                    }
                    return n.push(e.customProgramCacheKey),
                    n.join()
                },
                getUniforms: function (t) {
                    const e = g[t.type];
                    let n;
                    if (e) {
                        const t = mi[e];
                        n = Jn.clone(t.uniforms)
                    } else
                        n = t.uniforms;
                    return n
                },
                acquireProgram: function (e, n) {
                    let i;
                    for (let t = 0, e = o.length; t < e; t++) {
                        const e = o[t];
                        if (e.cacheKey === n) {
                            i = e,
                            ++i.usedTimes;
                            break
                        }
                    }
                    return void 0 === i && (i = new As(t, n, e, s), o.push(i)),
                    i
                },
                releaseProgram: function (t) {
                    if (0 == --t.usedTimes) {
                        const e = o.indexOf(t);
                        o[e] = o[o.length - 1],
                        o.pop(),
                        t.destroy()
                    }
                },
                programs: o
            }
        }
        function Rs() {
            let t = new WeakMap;
            return {
                get: function (e) {
                    let n = t.get(e);
                    return void 0 === n && (n = {}, t.set(e, n)),
                    n
                },
                remove: function (e) {
                    t.delete(e)
                },
                update: function (e, n, i) {
                    t.get(e)[n] = i
                },
                dispose: function () {
                    t = new WeakMap
                }
            }
        }
        function Cs(t, e) {
            return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id
        }
        function Ps(t, e) {
            return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id
        }
        function Ds(t) {
            const e = [];
            let n = 0;
            const i = [],
            r = [],
            s = [],
            a = {
                id: -1
            };
            function o(i, r, s, o, l, c) {
                let h = e[n];
                const u = t.get(s);
                return void 0 === h ? (h = {
                        id: i.id,
                        object: i,
                        geometry: r,
                        material: s,
                        program: u.program || a,
                        groupOrder: o,
                        renderOrder: i.renderOrder,
                        z: l,
                        group: c
                    }, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || a, h.groupOrder = o, h.renderOrder = i.renderOrder, h.z = l, h.group = c),
                n++,
                h
            }
            return {
                opaque: i,
                transmissive: r,
                transparent: s,
                init: function () {
                    n = 0,
                    i.length = 0,
                    r.length = 0,
                    s.length = 0
                },
                push: function (t, e, n, a, l, c) {
                    const h = o(t, e, n, a, l, c);
                    n.transmission > 0 ? r.push(h) : !0 === n.transparent ? s.push(h) : i.push(h)
                },
                unshift: function (t, e, n, a, l, c) {
                    const h = o(t, e, n, a, l, c);
                    n.transmission > 0 ? r.unshift(h) : !0 === n.transparent ? s.unshift(h) : i.unshift(h)
                },
                finish: function () {
                    for (let t = n, i = e.length; t < i; t++) {
                        const n = e[t];
                        if (null === n.id)
                            break;
                        n.id = null,
                        n.object = null,
                        n.geometry = null,
                        n.material = null,
                        n.program = null,
                        n.group = null
                    }
                },
                sort: function (t, e) {
                    i.length > 1 && i.sort(t || Cs),
                    r.length > 1 && r.sort(e || Ps),
                    s.length > 1 && s.sort(e || Ps)
                }
            }
        }
        function Is(t) {
            let e = new WeakMap;
            return {
                get: function (n, i) {
                    let r;
                    return !1 === e.has(n) ? (r = new Ds(t), e.set(n, [r])) : i >= e.get(n).length ? (r = new Ds(t), e.get(n).push(r)) : r = e.get(n)[i],
                    r
                },
                dispose: function () {
                    e = new WeakMap
                }
            }
        }
        function Ns() {
            const t = {};
            return {
                get: function (e) {
                    if (void 0 !== t[e.id])
                        return t[e.id];
                    let n;
                    switch (e.type) {
                    case "DirectionalLight":
                        n = {
                            direction: new Nt,
                            color: new nn
                        };
                        break;
                    case "SpotLight":
                        n = {
                            position: new Nt,
                            direction: new Nt,
                            color: new nn,
                            distance: 0,
                            coneCos: 0,
                            penumbraCos: 0,
                            decay: 0
                        };
                        break;
                    case "PointLight":
                        n = {
                            position: new Nt,
                            color: new nn,
                            distance: 0,
                            decay: 0
                        };
                        break;
                    case "HemisphereLight":
                        n = {
                            direction: new Nt,
                            skyColor: new nn,
                            groundColor: new nn
                        };
                        break;
                    case "RectAreaLight":
                        n = {
                            color: new nn,
                            position: new Nt,
                            halfWidth: new Nt,
                            halfHeight: new Nt
                        };
                    }
                    return t[e.id] = n,
                    n
                }
            }
        }
        let zs = 0;
        function Bs(t, e) {
            return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0)
        }
        function Fs(t, e) {
            const n = new Ns,
            i = function () {
                const t = {};
                return {
                    get: function (e) {
                        if (void 0 !== t[e.id])
                            return t[e.id];
                        let n;
                        switch (e.type) {
                        case "DirectionalLight":
                        case "SpotLight":
                            n = {
                                shadowBias: 0,
                                shadowNormalBias: 0,
                                shadowRadius: 1,
                                shadowMapSize: new vt
                            };
                            break;
                        case "PointLight":
                            n = {
                                shadowBias: 0,
                                shadowNormalBias: 0,
                                shadowRadius: 1,
                                shadowMapSize: new vt,
                                shadowCameraNear: 1,
                                shadowCameraFar: 1e3
                            };
                        }
                        return t[e.id] = n,
                        n
                    }
                }
            }
            (),
            r = {
                version: 0,
                hash: {
                    directionalLength: -1,
                    pointLength: -1,
                    spotLength: -1,
                    rectAreaLength: -1,
                    hemiLength: -1,
                    numDirectionalShadows: -1,
                    numPointShadows: -1,
                    numSpotShadows: -1
                },
                ambient: [0, 0, 0],
                probe: [],
                directional: [],
                directionalShadow: [],
                directionalShadowMap: [],
                directionalShadowMatrix: [],
                spot: [],
                spotShadow: [],
                spotShadowMap: [],
                spotShadowMatrix: [],
                rectArea: [],
                rectAreaLTC1: null,
                rectAreaLTC2: null,
                point: [],
                pointShadow: [],
                pointShadowMap: [],
                pointShadowMatrix: [],
                hemi: []
            };
            for (let t = 0; t < 9; t++)
                r.probe.push(new Nt);
            const s = new Nt,
            a = new ue,
            o = new ue;
            return {
                setup: function (s, a) {
                    let o = 0,
                    l = 0,
                    c = 0;
                    for (let t = 0; t < 9; t++)
                        r.probe[t].set(0, 0, 0);
                    let h = 0,
                    u = 0,
                    d = 0,
                    p = 0,
                    m = 0,
                    f = 0,
                    g = 0,
                    v = 0;
                    s.sort(Bs);
                    const y = !0 !== a ? Math.PI : 1;
                    for (let t = 0, e = s.length; t < e; t++) {
                        const e = s[t],
                        a = e.color,
                        x = e.intensity,
                        _ = e.distance,
                        M = e.shadow && e.shadow.map ? e.shadow.map.texture : null;
                        if (e.isAmbientLight)
                            o += a.r * x * y, l += a.g * x * y, c += a.b * x * y;
                        else if (e.isLightProbe)
                            for (let t = 0; t < 9; t++)
                                r.probe[t].addScaledVector(e.sh.coefficients[t], x);
                        else if (e.isDirectionalLight) {
                            const t = n.get(e);
                            if (t.color.copy(e.color).multiplyScalar(e.intensity * y), e.castShadow) {
                                const t = e.shadow,
                                n = i.get(e);
                                n.shadowBias = t.bias,
                                n.shadowNormalBias = t.normalBias,
                                n.shadowRadius = t.radius,
                                n.shadowMapSize = t.mapSize,
                                r.directionalShadow[h] = n,
                                r.directionalShadowMap[h] = M,
                                r.directionalShadowMatrix[h] = e.shadow.matrix,
                                f++
                            }
                            r.directional[h] = t,
                            h++
                        } else if (e.isSpotLight) {
                            const t = n.get(e);
                            if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(a).multiplyScalar(x * y), t.distance = _, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) {
                                const t = e.shadow,
                                n = i.get(e);
                                n.shadowBias = t.bias,
                                n.shadowNormalBias = t.normalBias,
                                n.shadowRadius = t.radius,
                                n.shadowMapSize = t.mapSize,
                                r.spotShadow[d] = n,
                                r.spotShadowMap[d] = M,
                                r.spotShadowMatrix[d] = e.shadow.matrix,
                                v++
                            }
                            r.spot[d] = t,
                            d++
                        } else if (e.isRectAreaLight) {
                            const t = n.get(e);
                            t.color.copy(a).multiplyScalar(x),
                            t.halfWidth.set(.5 * e.width, 0, 0),
                            t.halfHeight.set(0, .5 * e.height, 0),
                            r.rectArea[p] = t,
                            p++
                        } else if (e.isPointLight) {
                            const t = n.get(e);
                            if (t.color.copy(e.color).multiplyScalar(e.intensity * y), t.distance = e.distance, t.decay = e.decay, e.castShadow) {
                                const t = e.shadow,
                                n = i.get(e);
                                n.shadowBias = t.bias,
                                n.shadowNormalBias = t.normalBias,
                                n.shadowRadius = t.radius,
                                n.shadowMapSize = t.mapSize,
                                n.shadowCameraNear = t.camera.near,
                                n.shadowCameraFar = t.camera.far,
                                r.pointShadow[u] = n,
                                r.pointShadowMap[u] = M,
                                r.pointShadowMatrix[u] = e.shadow.matrix,
                                g++
                            }
                            r.point[u] = t,
                            u++
                        } else if (e.isHemisphereLight) {
                            const t = n.get(e);
                            t.skyColor.copy(e.color).multiplyScalar(x * y),
                            t.groundColor.copy(e.groundColor).multiplyScalar(x * y),
                            r.hemi[m] = t,
                            m++
                        }
                    }
                    p > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = pi.LTC_FLOAT_1, r.rectAreaLTC2 = pi.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = pi.LTC_HALF_1, r.rectAreaLTC2 = pi.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),
                    r.ambient[0] = o,
                    r.ambient[1] = l,
                    r.ambient[2] = c;
                    const x = r.hash;
                    x.directionalLength === h && x.pointLength === u && x.spotLength === d && x.rectAreaLength === p && x.hemiLength === m && x.numDirectionalShadows === f && x.numPointShadows === g && x.numSpotShadows === v || (r.directional.length = h, r.spot.length = d, r.rectArea.length = p, r.point.length = u, r.hemi.length = m, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = g, r.pointShadowMap.length = g, r.spotShadow.length = v, r.spotShadowMap.length = v, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = g, r.spotShadowMatrix.length = v, x.directionalLength = h, x.pointLength = u, x.spotLength = d, x.rectAreaLength = p, x.hemiLength = m, x.numDirectionalShadows = f, x.numPointShadows = g, x.numSpotShadows = v, r.version = zs++)
                },
                setupView: function (t, e) {
                    let n = 0,
                    i = 0,
                    l = 0,
                    c = 0,
                    h = 0;
                    const u = e.matrixWorldInverse;
                    for (let e = 0, d = t.length; e < d; e++) {
                        const d = t[e];
                        if (d.isDirectionalLight) {
                            const t = r.directional[n];
                            t.direction.setFromMatrixPosition(d.matrixWorld),
                            s.setFromMatrixPosition(d.target.matrixWorld),
                            t.direction.sub(s),
                            t.direction.transformDirection(u),
                            n++
                        } else if (d.isSpotLight) {
                            const t = r.spot[l];
                            t.position.setFromMatrixPosition(d.matrixWorld),
                            t.position.applyMatrix4(u),
                            t.direction.setFromMatrixPosition(d.matrixWorld),
                            s.setFromMatrixPosition(d.target.matrixWorld),
                            t.direction.sub(s),
                            t.direction.transformDirection(u),
                            l++
                        } else if (d.isRectAreaLight) {
                            const t = r.rectArea[c];
                            t.position.setFromMatrixPosition(d.matrixWorld),
                            t.position.applyMatrix4(u),
                            o.identity(),
                            a.copy(d.matrixWorld),
                            a.premultiply(u),
                            o.extractRotation(a),
                            t.halfWidth.set(.5 * d.width, 0, 0),
                            t.halfHeight.set(0, .5 * d.height, 0),
                            t.halfWidth.applyMatrix4(o),
                            t.halfHeight.applyMatrix4(o),
                            c++
                        } else if (d.isPointLight) {
                            const t = r.point[i];
                            t.position.setFromMatrixPosition(d.matrixWorld),
                            t.position.applyMatrix4(u),
                            i++
                        } else if (d.isHemisphereLight) {
                            const t = r.hemi[h];
                            t.direction.setFromMatrixPosition(d.matrixWorld),
                            t.direction.transformDirection(u),
                            t.direction.normalize(),
                            h++
                        }
                    }
                },
                state: r
            }
        }
        function Os(t, e) {
            const n = new Fs(t, e),
            i = [],
            r = [];
            return {
                init: function () {
                    i.length = 0,
                    r.length = 0
                },
                state: {
                    lightsArray: i,
                    shadowsArray: r,
                    lights: n
                },
                setupLights: function (t) {
                    n.setup(i, t)
                },
                setupLightsView: function (t) {
                    n.setupView(i, t)
                },
                pushLight: function (t) {
                    i.push(t)
                },
                pushShadow: function (t) {
                    r.push(t)
                }
            }
        }
        function Us(t, e) {
            let n = new WeakMap;
            return {
                get: function (i, r = 0) {
                    let s;
                    return !1 === n.has(i) ? (s = new Os(t, e), n.set(i, [s])) : r >= n.get(i).length ? (s = new Os(t, e), n.get(i).push(s)) : s = n.get(i)[r],
                    s
                },
                dispose: function () {
                    n = new WeakMap
                }
            }
        }
        class Hs extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshDepthMaterial",
                this.depthPacking = 3200,
                this.map = null,
                this.alphaMap = null,
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.fog = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.depthPacking = t.depthPacking,
                this.map = t.map,
                this.alphaMap = t.alphaMap,
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this
            }
        }
        Hs.prototype.isMeshDepthMaterial = !0;
        class Gs extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshDistanceMaterial",
                this.referencePosition = new Nt,
                this.nearDistance = 1,
                this.farDistance = 1e3,
                this.map = null,
                this.alphaMap = null,
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.fog = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.referencePosition.copy(t.referencePosition),
                this.nearDistance = t.nearDistance,
                this.farDistance = t.farDistance,
                this.map = t.map,
                this.alphaMap = t.alphaMap,
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this
            }
        }
        Gs.prototype.isMeshDistanceMaterial = !0;
        function ks(t, e, n) {
            let i = new li;
            const r = new vt,
            s = new vt,
            a = new Rt,
            o = new Hs({
                depthPacking: 3201
            }),
            l = new Gs,
            c = {},
            h = n.maxTextureSize,
            u = {
                0: 1,
                1: 0,
                2: 2
            },
            d = new Yn({
                defines: {
                    VSM_SAMPLES: 8
                },
                uniforms: {
                    shadow_pass: {
                        value: null
                    },
                    resolution: {
                        value: new vt
                    },
                    radius: {
                        value: 4
                    }
                },
                vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",
                fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"
            }),
            m = d.clone();
            m.defines.HORIZONTAL_PASS = 1;
            const f = new Tn;
            f.setAttribute("position", new on(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3));
            const v = new Vn(f, d),
            y = this;
            function x(n, i) {
                const r = e.update(v);
                d.defines.VSM_SAMPLES !== n.blurSamples && (d.defines.VSM_SAMPLES = n.blurSamples, m.defines.VSM_SAMPLES = n.blurSamples, d.needsUpdate = !0, m.needsUpdate = !0),
                d.uniforms.shadow_pass.value = n.map.texture,
                d.uniforms.resolution.value = n.mapSize,
                d.uniforms.radius.value = n.radius,
                t.setRenderTarget(n.mapPass),
                t.clear(),
                t.renderBufferDirect(i, null, r, d, v, null),
                m.uniforms.shadow_pass.value = n.mapPass.texture,
                m.uniforms.resolution.value = n.mapSize,
                m.uniforms.radius.value = n.radius,
                t.setRenderTarget(n.map),
                t.clear(),
                t.renderBufferDirect(i, null, r, m, v, null)
            }
            function _(e, n, i, r, s, a, h) {
                let d = null;
                const p = !0 === r.isPointLight ? e.customDistanceMaterial : e.customDepthMaterial;
                if (d = void 0 !== p ? p : !0 === r.isPointLight ? l : o, t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length || i.displacementMap && 0 !== i.displacementScale || i.alphaMap && i.alphaTest > 0) {
                    const t = d.uuid,
                    e = i.uuid;
                    let n = c[t];
                    void 0 === n && (n = {}, c[t] = n);
                    let r = n[e];
                    void 0 === r && (r = d.clone(), n[e] = r),
                    d = r
                }
                return d.visible = i.visible,
                d.wireframe = i.wireframe,
                d.side = 3 === h ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : u[i.side],
                d.alphaMap = i.alphaMap,
                d.alphaTest = i.alphaTest,
                d.clipShadows = i.clipShadows,
                d.clippingPlanes = i.clippingPlanes,
                d.clipIntersection = i.clipIntersection,
                d.displacementMap = i.displacementMap,
                d.displacementScale = i.displacementScale,
                d.displacementBias = i.displacementBias,
                d.wireframeLinewidth = i.wireframeLinewidth,
                d.linewidth = i.linewidth,
                !0 === r.isPointLight && !0 === d.isMeshDistanceMaterial && (d.referencePosition.setFromMatrixPosition(r.matrixWorld), d.nearDistance = s, d.farDistance = a),
                d
            }
            function M(n, r, s, a, o) {
                if (!1 === n.visible)
                    return;
                if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === o) && (!n.frustumCulled || i.intersectsObject(n))) {
                    n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse, n.matrixWorld);
                    const i = e.update(n),
                    r = n.material;
                    if (Array.isArray(r)) {
                        const e = i.groups;
                        for (let l = 0, c = e.length; l < c; l++) {
                            const c = e[l],
                            h = r[c.materialIndex];
                            if (h && h.visible) {
                                const e = _(n, 0, h, a, s.near, s.far, o);
                                t.renderBufferDirect(s, null, i, e, n, c)
                            }
                        }
                    } else if (r.visible) {
                        const e = _(n, 0, r, a, s.near, s.far, o);
                        t.renderBufferDirect(s, null, i, e, n, null)
                    }
                }
                const l = n.children;
                for (let t = 0, e = l.length; t < e; t++)
                    M(l[t], r, s, a, o)
            }
            this.enabled = !1,
            this.autoUpdate = !0,
            this.needsUpdate = !1,
            this.type = 1,
            this.render = function (e, n, o) {
                if (!1 === y.enabled)
                    return;
                if (!1 === y.autoUpdate && !1 === y.needsUpdate)
                    return;
                if (0 === e.length)
                    return;
                const l = t.getRenderTarget(),
                c = t.getActiveCubeFace(),
                u = t.getActiveMipmapLevel(),
                d = t.state;
                d.setBlending(0),
                d.buffers.color.setClear(1, 1, 1, 1),
                d.buffers.depth.setTest(!0),
                d.setScissorTest(!1);
                for (let l = 0, c = e.length; l < c; l++) {
                    const c = e[l],
                    u = c.shadow;
                    if (void 0 === u) {
                        console.warn("THREE.WebGLShadowMap:", c, "has no shadow.");
                        continue
                    }
                    if (!1 === u.autoUpdate && !1 === u.needsUpdate)
                        continue;
                    r.copy(u.mapSize);
                    const m = u.getFrameExtents();
                    if (r.multiply(m), s.copy(u.mapSize), (r.x > h || r.y > h) && (r.x > h && (s.x = Math.floor(h / m.x), r.x = s.x * m.x, u.mapSize.x = s.x), r.y > h && (s.y = Math.floor(h / m.y), r.y = s.y * m.y, u.mapSize.y = s.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) {
                        const t = {
                            minFilter: g,
                            magFilter: g,
                            format: E
                        };
                        u.map = new Ct(r.x, r.y, t),
                        u.map.texture.name = c.name + ".shadowMap",
                        u.mapPass = new Ct(r.x, r.y, t),
                        u.camera.updateProjectionMatrix()
                    }
                    if (null === u.map) {
                        const t = {
                            minFilter: p,
                            magFilter: p,
                            format: E
                        };
                        u.map = new Ct(r.x, r.y, t),
                        u.map.texture.name = c.name + ".shadowMap",
                        u.camera.updateProjectionMatrix()
                    }
                    t.setRenderTarget(u.map),
                    t.clear();
                    const f = u.getViewportCount();
                    for (let t = 0; t < f; t++) {
                        const e = u.getViewport(t);
                        a.set(s.x * e.x, s.y * e.y, s.x * e.z, s.y * e.w),
                        d.viewport(a),
                        u.updateMatrices(c, t),
                        i = u.getFrustum(),
                        M(n, o, u.camera, c, this.type)
                    }
                    u.isPointLightShadow || 3 !== this.type || x(u, o),
                    u.needsUpdate = !1
                }
                y.needsUpdate = !1,
                t.setRenderTarget(l, c, u)
            }
        }
        function Vs(t, e, i) {
            const r = i.isWebGL2;
            const s = new function () {
                let e = !1;
                const n = new Rt;
                let i = null;
                const r = new Rt(0, 0, 0, 0);
                return {
                    setMask: function (n) {
                        i === n || e || (t.colorMask(n, n, n, n), i = n)
                    },
                    setLocked: function (t) {
                        e = t
                    },
                    setClear: function (e, i, s, a, o) {
                        !0 === o && (e *= a, i *= a, s *= a),
                        n.set(e, i, s, a),
                        !1 === r.equals(n) && (t.clearColor(e, i, s, a), r.copy(n))
                    },
                    reset: function () {
                        e = !1,
                        i = null,
                        r.set(-1, 0, 0, 0)
                    }
                }
            },
            a = new function () {
                let e = !1,
                n = null,
                i = null,
                r = null;
                return {
                    setTest: function (t) {
                        t ? F(2929) : O(2929)
                    },
                    setMask: function (i) {
                        n === i || e || (t.depthMask(i), n = i)
                    },
                    setFunc: function (e) {
                        if (i !== e) {
                            if (e)
                                switch (e) {
                                case 0:
                                    t.depthFunc(512);
                                    break;
                                case 1:
                                    t.depthFunc(519);
                                    break;
                                case 2:
                                    t.depthFunc(513);
                                    break;
                                default:
                                    t.depthFunc(515);
                                    break;
                                case 4:
                                    t.depthFunc(514);
                                    break;
                                case 5:
                                    t.depthFunc(518);
                                    break;
                                case 6:
                                    t.depthFunc(516);
                                    break;
                                case 7:
                                    t.depthFunc(517);
                                }
                            else
                                t.depthFunc(515);
                            i = e
                        }
                    },
                    setLocked: function (t) {
                        e = t
                    },
                    setClear: function (e) {
                        r !== e && (t.clearDepth(e), r = e)
                    },
                    reset: function () {
                        e = !1,
                        n = null,
                        i = null,
                        r = null
                    }
                }
            },
            o = new function () {
                let e = !1,
                n = null,
                i = null,
                r = null,
                s = null,
                a = null,
                o = null,
                l = null,
                c = null;
                return {
                    setTest: function (t) {
                        e || (t ? F(2960) : O(2960))
                    },
                    setMask: function (i) {
                        n === i || e || (t.stencilMask(i), n = i)
                    },
                    setFunc: function (e, n, a) {
                        i === e && r === n && s === a || (t.stencilFunc(e, n, a), i = e, r = n, s = a)
                    },
                    setOp: function (e, n, i) {
                        a === e && o === n && l === i || (t.stencilOp(e, n, i), a = e, o = n, l = i)
                    },
                    setLocked: function (t) {
                        e = t
                    },
                    setClear: function (e) {
                        c !== e && (t.clearStencil(e), c = e)
                    },
                    reset: function () {
                        e = !1,
                        n = null,
                        i = null,
                        r = null,
                        s = null,
                        a = null,
                        o = null,
                        l = null,
                        c = null
                    }
                }
            };
            let l = {},
            c = {},
            h = null,
            u = !1,
            d = null,
            p = null,
            m = null,
            f = null,
            g = null,
            v = null,
            y = null,
            x = !1,
            _ = null,
            M = null,
            b = null,
            w = null,
            S = null;
            const T = t.getParameter(35661);
            let E = !1,
            A = 0;
            const L = t.getParameter(7938);
            -1 !== L.indexOf("WebGL") ? (A = parseFloat(/^WebGL (\d)/.exec(L)[1]), E = A >= 1) : -1 !== L.indexOf("OpenGL ES") && (A = parseFloat(/^OpenGL ES (\d)/.exec(L)[1]), E = A >= 2);
            let R = null,
            C = {};
            const P = t.getParameter(3088),
            D = t.getParameter(2978),
            I = new Rt().fromArray(P),
            N = new Rt().fromArray(D);
            function z(e, n, i) {
                const r = new Uint8Array(4),
                s = t.createTexture();
                t.bindTexture(e, s),
                t.texParameteri(e, 10241, 9728),
                t.texParameteri(e, 10240, 9728);
                for (let e = 0; e < i; e++)
                    t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r);
                return s
            }
            const B = {};
            function F(e) {
                !0 !== l[e] && (t.enable(e), l[e] = !0)
            }
            function O(e) {
                !1 !== l[e] && (t.disable(e), l[e] = !1)
            }
            B[3553] = z(3553, 3553, 1),
            B[34067] = z(34067, 34069, 6),
            s.setClear(0, 0, 0, 1),
            a.setClear(1),
            o.setClear(0),
            F(2929),
            a.setFunc(3),
            k(!1),
            V(1),
            F(2884),
            G(0);
            const U = {
                [n]: 32774,
                101: 32778,
                102: 32779
            };
            if (r)
                U[103] = 32775, U[104] = 32776;
            else {
                const t = e.get("EXT_blend_minmax");
                null !== t && (U[103] = t.MIN_EXT, U[104] = t.MAX_EXT)
            }
            const H = {
                200: 0,
                201: 1,
                202: 768,
                204: 770,
                210: 776,
                208: 774,
                206: 772,
                203: 769,
                205: 771,
                209: 775,
                207: 773
            };
            function G(e, i, r, s, a, o, l, c) {
                if (0 !== e) {
                    if (!1 === u && (F(3042), u = !0), 5 === e)
                        a = a || i, o = o || r, l = l || s, i === p && a === g || (t.blendEquationSeparate(U[i], U[a]), p = i, g = a), r === m && s === f && o === v && l === y || (t.blendFuncSeparate(H[r], H[s], H[o], H[l]), m = r, f = s, v = o, y = l), d = e, x = null;
                    else if (e !== d || c !== x) {
                        if (p === n && g === n || (t.blendEquation(32774), p = n, g = n), c)
                            switch (e) {
                            case 1:
                                t.blendFuncSeparate(1, 771, 1, 771);
                                break;
                            case 2:
                                t.blendFunc(1, 1);
                                break;
                            case 3:
                                t.blendFuncSeparate(0, 0, 769, 771);
                                break;
                            case 4:
                                t.blendFuncSeparate(0, 768, 0, 770);
                                break;
                            default:
                                console.error("THREE.WebGLState: Invalid blending: ", e);
                            }
                        else
                            switch (e) {
                            case 1:
                                t.blendFuncSeparate(770, 771, 1, 771);
                                break;
                            case 2:
                                t.blendFunc(770, 1);
                                break;
                            case 3:
                                t.blendFunc(0, 769);
                                break;
                            case 4:
                                t.blendFunc(0, 768);
                                break;
                            default:
                                console.error("THREE.WebGLState: Invalid blending: ", e);
                            }
                        m = null,
                        f = null,
                        v = null,
                        y = null,
                        d = e,
                        x = c
                    }
                } else !0 === u && (O(3042), u = !1)
            }
            function k(e) {
                _ !== e && (e ? t.frontFace(2304) : t.frontFace(2305), _ = e)
            }
            function V(e) {
                0 !== e ? (F(2884), e !== M && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : O(2884),
                M = e
            }
            function W(e, n, i) {
                e ? (F(32823), w === n && S === i || (t.polygonOffset(n, i), w = n, S = i)) : O(32823)
            }
            function j(e) {
                void 0 === e && (e = 33984 + T - 1),
                R !== e && (t.activeTexture(e), R = e)
            }
            return {
                buffers: {
                    color: s,
                    depth: a,
                    stencil: o
                },
                enable: F,
                disable: O,
                bindFramebuffer: function (e, n) {
                    return c[e] !== n && (t.bindFramebuffer(e, n), c[e] = n, r && (36009 === e && (c[36160] = n), 36160 === e && (c[36009] = n)), !0)
                },
                useProgram: function (e) {
                    return h !== e && (t.useProgram(e), h = e, !0)
                },
                setBlending: G,
                setMaterial: function (t, e) {
                    2 === t.side ? O(2884) : F(2884);
                    let n = 1 === t.side;
                    e && (n = !n),
                    k(n),
                    1 === t.blending && !1 === t.transparent ? G(0) : G(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha),
                    a.setFunc(t.depthFunc),
                    a.setTest(t.depthTest),
                    a.setMask(t.depthWrite),
                    s.setMask(t.colorWrite);
                    const i = t.stencilWrite;
                    o.setTest(i),
                    i && (o.setMask(t.stencilWriteMask), o.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), o.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)),
                    W(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits),
                    !0 === t.alphaToCoverage ? F(32926) : O(32926)
                },
                setFlipSided: k,
                setCullFace: V,
                setLineWidth: function (e) {
                    e !== b && (E && t.lineWidth(e), b = e)
                },
                setPolygonOffset: W,
                setScissorTest: function (t) {
                    t ? F(3089) : O(3089)
                },
                activeTexture: j,
                bindTexture: function (e, n) {
                    null === R && j();
                    let i = C[R];
                    void 0 === i && (i = {
                            type: void 0,
                            texture: void 0
                        }, C[R] = i),
                    i.type === e && i.texture === n || (t.bindTexture(e, n || B[e]), i.type = e, i.texture = n)
                },
                unbindTexture: function () {
                    const e = C[R];
                    void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0)
                },
                compressedTexImage2D: function () {
                    try {
                        t.compressedTexImage2D.apply(t, arguments)
                    } catch (t) {
                        console.error("THREE.WebGLState:", t)
                    }
                },
                texImage2D: function () {
                    try {
                        t.texImage2D.apply(t, arguments)
                    } catch (t) {
                        console.error("THREE.WebGLState:", t)
                    }
                },
                texImage3D: function () {
                    try {
                        t.texImage3D.apply(t, arguments)
                    } catch (t) {
                        console.error("THREE.WebGLState:", t)
                    }
                },
                texStorage2D: function () {
                    try {
                        t.texStorage2D.apply(t, arguments)
                    } catch (t) {
                        console.error("THREE.WebGLState:", t)
                    }
                },
                texSubImage2D: function () {
                    try {
                        t.texSubImage2D.apply(t, arguments)
                    } catch (t) {
                        console.error("THREE.WebGLState:", t)
                    }
                },
                scissor: function (e) {
                    !1 === I.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), I.copy(e))
                },
                viewport: function (e) {
                    !1 === N.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), N.copy(e))
                },
                reset: function () {
                    t.disable(3042),
                    t.disable(2884),
                    t.disable(2929),
                    t.disable(32823),
                    t.disable(3089),
                    t.disable(2960),
                    t.disable(32926),
                    t.blendEquation(32774),
                    t.blendFunc(1, 0),
                    t.blendFuncSeparate(1, 0, 1, 0),
                    t.colorMask(!0, !0, !0, !0),
                    t.clearColor(0, 0, 0, 0),
                    t.depthMask(!0),
                    t.depthFunc(513),
                    t.clearDepth(1),
                    t.stencilMask(4294967295),
                    t.stencilFunc(519, 0, 4294967295),
                    t.stencilOp(7680, 7680, 7680),
                    t.clearStencil(0),
                    t.cullFace(1029),
                    t.frontFace(2305),
                    t.polygonOffset(0, 0),
                    t.activeTexture(33984),
                    t.bindFramebuffer(36160, null),
                    !0 === r && (t.bindFramebuffer(36009, null), t.bindFramebuffer(36008, null)),
                    t.useProgram(null),
                    t.lineWidth(1),
                    t.scissor(0, 0, t.canvas.width, t.canvas.height),
                    t.viewport(0, 0, t.canvas.width, t.canvas.height),
                    l = {},
                    R = null,
                    C = {},
                    c = {},
                    h = null,
                    u = !1,
                    d = null,
                    p = null,
                    m = null,
                    f = null,
                    g = null,
                    v = null,
                    y = null,
                    x = !1,
                    _ = null,
                    M = null,
                    b = null,
                    w = null,
                    S = null,
                    I.set(0, 0, t.canvas.width, t.canvas.height),
                    N.set(0, 0, t.canvas.width, t.canvas.height),
                    s.reset(),
                    a.reset(),
                    o.reset()
                }
            }
        }
        function Ws(t, e, n, i, r, s, a) {
            const o = r.isWebGL2,
            l = r.maxTextures,
            c = r.maxCubemapSize,
            x = r.maxTextureSize,
            R = r.maxSamples,
            C = e.has("WEBGL_multisampled_render_to_texture") ? e.get("WEBGL_multisampled_render_to_texture") : void 0,
            P = new WeakMap;
            let D,
            I = !1;
            try {
                I = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d")
            } catch (t) {}
            function N(t, e) {
                return I ? new OffscreenCanvas(t, e) : bt("canvas")
            }
            function z(t, e, n, i) {
                let r = 1;
                if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) {
                    if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) {
                        const i = e ? ft : Math.floor,
                        s = i(r * t.width),
                        a = i(r * t.height);
                        void 0 === D && (D = N(s, a));
                        const o = n ? N(s, a) : D;
                        o.width = s,
                        o.height = a;
                        return o.getContext("2d").drawImage(t, 0, 0, s, a),
                        console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + s + "x" + a + ")."),
                        o
                    }
                    return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."),
                    t
                }
                return t
            }
            function B(t) {
                return pt(t.width) && pt(t.height)
            }
            function F(t, e) {
                return t.generateMipmaps && e && t.minFilter !== p && t.minFilter !== g
            }
            function O(e) {
                t.generateMipmap(e)
            }
            function U(n, i, r) {
                if (!1 === o)
                    return i;
                if (null !== n) {
                    if (void 0 !== t[n])
                        return t[n];
                    console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'")
                }
                let s = i;
                return 6403 === i && (5126 === r && (s = 33326), 5131 === r && (s = 33325), 5121 === r && (s = 33321)),
                6407 === i && (5126 === r && (s = 34837), 5131 === r && (s = 34843), 5121 === r && (s = 32849)),
                6408 === i && (5126 === r && (s = 34836), 5131 === r && (s = 34842), 5121 === r && (s = 32856)),
                33325 !== s && 33326 !== s && 34842 !== s && 34836 !== s || e.get("EXT_color_buffer_float"),
                s
            }
            function H(t) {
                return t === p || t === m || t === f ? 9728 : 9729
            }
            function G(e) {
                const n = e.target;
                n.removeEventListener("dispose", G),
                function (e) {
                    const n = i.get(e);
                    if (void 0 === n.__webglInit)
                        return;
                    t.deleteTexture(n.__webglTexture),
                    i.remove(e)
                }
                (n),
                n.isVideoTexture && P.delete(n),
                a.memory.textures--
            }
            function k(e) {
                const n = e.target;
                n.removeEventListener("dispose", k),
                function (e) {
                    const n = e.texture,
                    r = i.get(e),
                    s = i.get(n);
                    if (!e)
                        return;
                    void 0 !== s.__webglTexture && (t.deleteTexture(s.__webglTexture), a.memory.textures--);
                    e.depthTexture && e.depthTexture.dispose();
                    if (e.isWebGLCubeRenderTarget)
                        for (let e = 0; e < 6; e++)
                            t.deleteFramebuffer(r.__webglFramebuffer[e]), r.__webglDepthbuffer && t.deleteRenderbuffer(r.__webglDepthbuffer[e]);
                    else
                        t.deleteFramebuffer(r.__webglFramebuffer), r.__webglDepthbuffer && t.deleteRenderbuffer(r.__webglDepthbuffer), r.__webglMultisampledFramebuffer && t.deleteFramebuffer(r.__webglMultisampledFramebuffer), r.__webglColorRenderbuffer && t.deleteRenderbuffer(r.__webglColorRenderbuffer), r.__webglDepthRenderbuffer && t.deleteRenderbuffer(r.__webglDepthRenderbuffer);
                    if (e.isWebGLMultipleRenderTargets)
                        for (let e = 0, r = n.length; e < r; e++) {
                            const r = i.get(n[e]);
                            r.__webglTexture && (t.deleteTexture(r.__webglTexture), a.memory.textures--),
                            i.remove(n[e])
                        }
                    i.remove(n),
                    i.remove(e)
                }
                (n)
            }
            let V = 0;
            function W(t, e) {
                const r = i.get(t);
                if (t.isVideoTexture && function (t) {
                    const e = a.render.frame;
                    P.get(t) !== e && (P.set(t, e), t.update())
                }
                    (t), t.version > 0 && r.__version !== t.version) {
                    const n = t.image;
                    if (void 0 === n)
                        console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");
                    else {
                        if (!1 !== n.complete)
                            return void Z(r, t, e);
                        console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")
                    }
                }
                n.activeTexture(33984 + e),
                n.bindTexture(3553, r.__webglTexture)
            }
            function j(e, r) {
                const a = i.get(e);
                e.version > 0 && a.__version !== e.version ? function (e, i, r) {
                    if (6 !== i.image.length)
                        return;
                    Y(e, i),
                    n.activeTexture(33984 + r),
                    n.bindTexture(34067, e.__webglTexture),
                    t.pixelStorei(37440, i.flipY),
                    t.pixelStorei(37441, i.premultiplyAlpha),
                    t.pixelStorei(3317, i.unpackAlignment),
                    t.pixelStorei(37443, 0);
                    const a = i && (i.isCompressedTexture || i.image[0].isCompressedTexture),
                    l = i.image[0] && i.image[0].isDataTexture,
                    h = [];
                    for (let t = 0; t < 6; t++)
                        h[t] = a || l ? l ? i.image[t].image : i.image[t] : z(i.image[t], !1, !0, c);
                    const u = B(h[0]) || o,
                    d = s.convert(i.format),
                    p = s.convert(i.type),
                    m = U(i.internalFormat, d, p, i.encoding);
                    let f;
                    if (J(34067, i, u), a)
                        for (let t = 0; t < 6; t++) {
                            f = h[t].mipmaps;
                            for (let e = 0; e < f.length; e++) {
                                const r = f[e];
                                i.format !== E && i.format !== T ? null !== d ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, d, p, r.data)
                            }
                        }
                    else {
                        f = i.mipmaps;
                        for (let t = 0; t < 6; t++)
                            if (l) {
                                n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, d, p, h[t].data);
                                for (let e = 0; e < f.length; e++) {
                                    const i = f[e].image[t].image;
                                    n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, d, p, i.data)
                                }
                            } else {
                                n.texImage2D(34069 + t, 0, m, d, p, h[t]);
                                for (let e = 0; e < f.length; e++) {
                                    const i = f[e];
                                    n.texImage2D(34069 + t, e + 1, m, d, p, i.image[t])
                                }
                            }
                    }
                    F(i, u) && O(34067);
                    e.__version = i.version,
                    i.onUpdate && i.onUpdate(i)
                }
                (a, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, a.__webglTexture))
            }
            const q = {
                [h]: 10497,
                [u]: 33071,
                [d]: 33648
            },
            X = {
                [p]: 9728,
                [m]: 9984,
                [f]: 9986,
                [g]: 9729,
                [v]: 9985,
                [y]: 9987
            };
            function J(n, s, a) {
                if (a ? (t.texParameteri(n, 10242, q[s.wrapS]), t.texParameteri(n, 10243, q[s.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, q[s.wrapR]), t.texParameteri(n, 10240, X[s.magFilter]), t.texParameteri(n, 10241, X[s.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), s.wrapS === u && s.wrapT === u || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, H(s.magFilter)), t.texParameteri(n, 10241, H(s.minFilter)), s.minFilter !== p && s.minFilter !== g && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")), !0 === e.has("EXT_texture_filter_anisotropic")) {
                    const a = e.get("EXT_texture_filter_anisotropic");
                    if (s.type === b && !1 === e.has("OES_texture_float_linear"))
                        return;
                    if (!1 === o && s.type === w && !1 === e.has("OES_texture_half_float_linear"))
                        return;
                    (s.anisotropy > 1 || i.get(s).__currentAnisotropy) && (t.texParameterf(n, a.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(s.anisotropy, r.getMaxAnisotropy())), i.get(s).__currentAnisotropy = s.anisotropy)
                }
            }
            function Y(e, n) {
                void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", G), e.__webglTexture = t.createTexture(), a.memory.textures++)
            }
            function Z(e, i, r) {
                let a = 3553;
                i.isDataTexture2DArray && (a = 35866),
                i.isDataTexture3D && (a = 32879),
                Y(e, i),
                n.activeTexture(33984 + r),
                n.bindTexture(a, e.__webglTexture),
                t.pixelStorei(37440, i.flipY),
                t.pixelStorei(37441, i.premultiplyAlpha),
                t.pixelStorei(3317, i.unpackAlignment),
                t.pixelStorei(37443, 0);
                const l = function (t) {
                    return !o && (t.wrapS !== u || t.wrapT !== u || t.minFilter !== p && t.minFilter !== g)
                }
                (i) && !1 === B(i.image),
                c = z(i.image, l, !1, x),
                h = B(c) || o,
                d = s.convert(i.format);
                let m,
                f = s.convert(i.type),
                v = U(i.internalFormat, d, f, i.encoding);
                J(a, i, h);
                const y = i.mipmaps;
                if (i.isDepthTexture)
                    v = 6402, o ? v = i.type === b ? 36012 : i.type === M ? 33190 : i.type === S ? 35056 : 33189 : i.type === b && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), i.format === A && 6402 === v && i.type !== _ && i.type !== M && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = _, f = s.convert(i.type)), i.format === L && 6402 === v && (v = 34041, i.type !== S && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = S, f = s.convert(i.type))), n.texImage2D(3553, 0, v, c.width, c.height, 0, d, f, null);
                else if (i.isDataTexture) {
                    if (y.length > 0 && h) {
                        for (let t = 0, e = y.length; t < e; t++)
                            m = y[t], n.texImage2D(3553, t, v, m.width, m.height, 0, d, f, m.data);
                        i.generateMipmaps = !1
                    } else
                        n.texImage2D(3553, 0, v, c.width, c.height, 0, d, f, c.data);
                } else if (i.isCompressedTexture)
                    for (let t = 0, e = y.length; t < e; t++)
                        m = y[t], i.format !== E && i.format !== T ? null !== d ? n.compressedTexImage2D(3553, t, v, m.width, m.height, 0, m.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, v, m.width, m.height, 0, d, f, m.data);
                else if (i.isDataTexture2DArray)
                    n.texImage3D(35866, 0, v, c.width, c.height, c.depth, 0, d, f, c.data);
                else if (i.isDataTexture3D)
                    n.texImage3D(32879, 0, v, c.width, c.height, c.depth, 0, d, f, c.data);
                else {
                    const t = function (t, e, n) {
                        return !0 === F(t, n) ? Math.log2(Math.max(e.width, e.height)) + 1 : t.mipmaps.length > 0 ? t.mipmaps.length : 1
                    }
                    (i, c, h),
                    r = o && !0 !== i.isVideoTexture,
                    s = void 0 === e.__version;
                    if (y.length > 0 && h) {
                        r && s && n.texStorage2D(3553, t, v, y[0].width, y[0].height);
                        for (let t = 0, e = y.length; t < e; t++)
                            m = y[t], r ? n.texSubImage2D(3553, t, 0, 0, d, f, m) : n.texImage2D(3553, t, v, d, f, m);
                        i.generateMipmaps = !1
                    } else
                        r ? (s && n.texStorage2D(3553, t, v, c.width, c.height), n.texSubImage2D(3553, 0, 0, 0, d, f, c)) : n.texImage2D(3553, 0, v, d, f, c)
                }
                F(i, h) && O(a),
                e.__version = i.version,
                i.onUpdate && i.onUpdate(i)
            }
            function Q(e, r, a, o, l) {
                const c = s.convert(a.format),
                h = s.convert(a.type),
                u = U(a.internalFormat, c, h, a.encoding);
                i.get(r).__hasExternalTextures || (32879 === l || 35866 === l ? n.texImage3D(l, 0, u, r.width, r.height, r.depth, 0, c, h, null) : n.texImage2D(l, 0, u, r.width, r.height, 0, c, h, null)),
                n.bindFramebuffer(36160, e),
                r.useRenderToTexture ? C.framebufferTexture2DMultisampleEXT(36160, o, l, i.get(a).__webglTexture, 0, tt(r)) : t.framebufferTexture2D(36160, o, l, i.get(a).__webglTexture, 0),
                n.bindFramebuffer(36160, null)
            }
            function K(e, n, i) {
                if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) {
                    let r = 33189;
                    if (i || n.useRenderToTexture) {
                        const e = n.depthTexture;
                        e && e.isDepthTexture && (e.type === b ? r = 36012 : e.type === M && (r = 33190));
                        const i = tt(n);
                        n.useRenderToTexture ? C.renderbufferStorageMultisampleEXT(36161, i, r, n.width, n.height) : t.renderbufferStorageMultisample(36161, i, r, n.width, n.height)
                    } else
                        t.renderbufferStorage(36161, r, n.width, n.height);
                    t.framebufferRenderbuffer(36160, 36096, 36161, e)
                } else if (n.depthBuffer && n.stencilBuffer) {
                    const r = tt(n);
                    i && n.useRenderbuffer ? t.renderbufferStorageMultisample(36161, r, 35056, n.width, n.height) : n.useRenderToTexture ? C.renderbufferStorageMultisampleEXT(36161, r, 35056, n.width, n.height) : t.renderbufferStorage(36161, 34041, n.width, n.height),
                    t.framebufferRenderbuffer(36160, 33306, 36161, e)
                } else {
                    const e = !0 === n.isWebGLMultipleRenderTargets ? n.texture[0] : n.texture,
                    r = s.convert(e.format),
                    a = s.convert(e.type),
                    o = U(e.internalFormat, r, a, e.encoding),
                    l = tt(n);
                    i && n.useRenderbuffer ? t.renderbufferStorageMultisample(36161, l, o, n.width, n.height) : n.useRenderToTexture ? C.renderbufferStorageMultisampleEXT(36161, l, o, n.width, n.height) : t.renderbufferStorage(36161, o, n.width, n.height)
                }
                t.bindRenderbuffer(36161, null)
            }
            function $(e) {
                const r = i.get(e),
                s = !0 === e.isWebGLCubeRenderTarget;
                if (e.depthTexture && !r.__autoAllocateDepthBuffer) {
                    if (s)
                        throw new Error("target.depthTexture not supported in Cube render targets");
                    !function (e, r) {
                        if (r && r.isWebGLCubeRenderTarget)
                            throw new Error("Depth Texture with cube render targets is not supported");
                        if (n.bindFramebuffer(36160, e), !r.depthTexture || !r.depthTexture.isDepthTexture)
                            throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");
                        i.get(r.depthTexture).__webglTexture && r.depthTexture.image.width === r.width && r.depthTexture.image.height === r.height || (r.depthTexture.image.width = r.width, r.depthTexture.image.height = r.height, r.depthTexture.needsUpdate = !0),
                        W(r.depthTexture, 0);
                        const s = i.get(r.depthTexture).__webglTexture,
                        a = tt(r);
                        if (r.depthTexture.format === A)
                            r.useRenderToTexture ? C.framebufferTexture2DMultisampleEXT(36160, 36096, 3553, s, 0, a) : t.framebufferTexture2D(36160, 36096, 3553, s, 0);
                        else {
                            if (r.depthTexture.format !== L)
                                throw new Error("Unknown depthTexture format");
                            r.useRenderToTexture ? C.framebufferTexture2DMultisampleEXT(36160, 33306, 3553, s, 0, a) : t.framebufferTexture2D(36160, 33306, 3553, s, 0)
                        }
                    }
                    (r.__webglFramebuffer, e)
                } else if (s) {
                    r.__webglDepthbuffer = [];
                    for (let i = 0; i < 6; i++)
                        n.bindFramebuffer(36160, r.__webglFramebuffer[i]), r.__webglDepthbuffer[i] = t.createRenderbuffer(), K(r.__webglDepthbuffer[i], e, !1)
                } else
                    n.bindFramebuffer(36160, r.__webglFramebuffer), r.__webglDepthbuffer = t.createRenderbuffer(), K(r.__webglDepthbuffer, e, !1);
                n.bindFramebuffer(36160, null)
            }
            function tt(t) {
                return o && (t.useRenderbuffer || t.useRenderToTexture) ? Math.min(R, t.samples) : 0
            }
            let et = !1,
            nt = !1;
            this.allocateTextureUnit = function () {
                const t = V;
                return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l),
                V += 1,
                t
            },
            this.resetTextureUnits = function () {
                V = 0
            },
            this.setTexture2D = W,
            this.setTexture2DArray = function (t, e) {
                const r = i.get(t);
                t.version > 0 && r.__version !== t.version ? Z(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture))
            },
            this.setTexture3D = function (t, e) {
                const r = i.get(t);
                t.version > 0 && r.__version !== t.version ? Z(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture))
            },
            this.setTextureCube = j,
            this.rebindTextures = function (t, e, n) {
                const r = i.get(t);
                void 0 !== e && Q(r.__webglFramebuffer, t, t.texture, 36064, 3553),
                void 0 !== n && $(t)
            },
            this.setupRenderTarget = function (e) {
                const l = e.texture,
                c = i.get(e),
                h = i.get(l);
                e.addEventListener("dispose", k),
                !0 !== e.isWebGLMultipleRenderTargets && (void 0 === h.__webglTexture && (h.__webglTexture = t.createTexture()), h.__version = l.version, a.memory.textures++);
                const u = !0 === e.isWebGLCubeRenderTarget,
                d = !0 === e.isWebGLMultipleRenderTargets,
                p = l.isDataTexture3D || l.isDataTexture2DArray,
                m = B(e) || o;
                if (!o || l.format !== T || l.type !== b && l.type !== w || (l.format = E, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), u) {
                    c.__webglFramebuffer = [];
                    for (let e = 0; e < 6; e++)
                        c.__webglFramebuffer[e] = t.createFramebuffer()
                } else if (c.__webglFramebuffer = t.createFramebuffer(), d) {
                    if (r.drawBuffers) {
                        const n = e.texture;
                        for (let e = 0, r = n.length; e < r; e++) {
                            const r = i.get(n[e]);
                            void 0 === r.__webglTexture && (r.__webglTexture = t.createTexture(), a.memory.textures++)
                        }
                    } else
                        console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.");
                } else if (e.useRenderbuffer)
                    if (o) {
                        c.__webglMultisampledFramebuffer = t.createFramebuffer(),
                        c.__webglColorRenderbuffer = t.createRenderbuffer(),
                        t.bindRenderbuffer(36161, c.__webglColorRenderbuffer);
                        const i = s.convert(l.format),
                        r = s.convert(l.type),
                        a = U(l.internalFormat, i, r, l.encoding),
                        o = tt(e);
                        t.renderbufferStorageMultisample(36161, o, a, e.width, e.height),
                        n.bindFramebuffer(36160, c.__webglMultisampledFramebuffer),
                        t.framebufferRenderbuffer(36160, 36064, 36161, c.__webglColorRenderbuffer),
                        t.bindRenderbuffer(36161, null),
                        e.depthBuffer && (c.__webglDepthRenderbuffer = t.createRenderbuffer(), K(c.__webglDepthRenderbuffer, e, !0)),
                        n.bindFramebuffer(36160, null)
                    } else
                        console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");
                if (u) {
                    n.bindTexture(34067, h.__webglTexture),
                    J(34067, l, m);
                    for (let t = 0; t < 6; t++)
                        Q(c.__webglFramebuffer[t], e, l, 36064, 34069 + t);
                    F(l, m) && O(34067),
                    n.unbindTexture()
                } else if (d) {
                    const t = e.texture;
                    for (let r = 0, s = t.length; r < s; r++) {
                        const s = t[r],
                        a = i.get(s);
                        n.bindTexture(3553, a.__webglTexture),
                        J(3553, s, m),
                        Q(c.__webglFramebuffer, e, s, 36064 + r, 3553),
                        F(s, m) && O(3553)
                    }
                    n.unbindTexture()
                } else {
                    let t = 3553;
                    if (p)
                        if (o) {
                            t = l.isDataTexture3D ? 32879 : 35866
                        } else
                            console.warn("THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.");
                    n.bindTexture(t, h.__webglTexture),
                    J(t, l, m),
                    Q(c.__webglFramebuffer, e, l, 36064, t),
                    F(l, m) && O(t),
                    n.unbindTexture()
                }
                e.depthBuffer && $(e)
            },
            this.updateRenderTargetMipmap = function (t) {
                const e = B(t) || o,
                r = !0 === t.isWebGLMultipleRenderTargets ? t.texture : [t.texture];
                for (let s = 0, a = r.length; s < a; s++) {
                    const a = r[s];
                    if (F(a, e)) {
                        const e = t.isWebGLCubeRenderTarget ? 34067 : 3553,
                        r = i.get(a).__webglTexture;
                        n.bindTexture(e, r),
                        O(e),
                        n.unbindTexture()
                    }
                }
            },
            this.updateMultisampleRenderTarget = function (e) {
                if (e.useRenderbuffer)
                    if (o) {
                        const r = e.width,
                        s = e.height;
                        let a = 16384;
                        const o = [36064],
                        l = e.stencilBuffer ? 33306 : 36096;
                        e.depthBuffer && o.push(l),
                        e.ignoreDepthForMultisampleCopy || (e.depthBuffer && (a |= 256), e.stencilBuffer && (a |= 1024));
                        const c = i.get(e);
                        n.bindFramebuffer(36008, c.__webglMultisampledFramebuffer),
                        n.bindFramebuffer(36009, c.__webglFramebuffer),
                        e.ignoreDepthForMultisampleCopy && (t.invalidateFramebuffer(36008, [l]), t.invalidateFramebuffer(36009, [l])),
                        t.blitFramebuffer(0, 0, r, s, 0, 0, r, s, a, 9728),
                        t.invalidateFramebuffer(36008, o),
                        n.bindFramebuffer(36008, null),
                        n.bindFramebuffer(36009, c.__webglMultisampledFramebuffer)
                    } else
                        console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")
            },
            this.setupDepthRenderbuffer = $,
            this.setupFrameBufferTexture = Q,
            this.safeSetTexture2D = function (t, e) {
                t && t.isWebGLRenderTarget && (!1 === et && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), et = !0), t = t.texture),
                W(t, e)
            },
            this.safeSetTextureCube = function (t, e) {
                t && t.isWebGLCubeRenderTarget && (!1 === nt && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), nt = !0), t = t.texture),
                j(t, e)
            }
        }
        function js(t, e, n) {
            const i = n.isWebGL2;
            return {
                convert: function (t) {
                    let n;
                    if (t === x)
                        return 5121;
                    if (1017 === t)
                        return 32819;
                    if (1018 === t)
                        return 32820;
                    if (1019 === t)
                        return 33635;
                    if (1010 === t)
                        return 5120;
                    if (1011 === t)
                        return 5122;
                    if (t === _)
                        return 5123;
                    if (1013 === t)
                        return 5124;
                    if (t === M)
                        return 5125;
                    if (t === b)
                        return 5126;
                    if (t === w)
                        return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null);
                    if (1021 === t)
                        return 6406;
                    if (t === T)
                        return 6407;
                    if (t === E)
                        return 6408;
                    if (1024 === t)
                        return 6409;
                    if (1025 === t)
                        return 6410;
                    if (t === A)
                        return 6402;
                    if (t === L)
                        return 34041;
                    if (1028 === t)
                        return 6403;
                    if (1029 === t)
                        return 36244;
                    if (1030 === t)
                        return 33319;
                    if (1031 === t)
                        return 33320;
                    if (1032 === t)
                        return 36248;
                    if (1033 === t)
                        return 36249;
                    if (t === R || t === C || t === P || t === D) {
                        if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n)
                            return null;
                        if (t === R)
                            return n.COMPRESSED_RGB_S3TC_DXT1_EXT;
                        if (t === C)
                            return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;
                        if (t === P)
                            return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;
                        if (t === D)
                            return n.COMPRESSED_RGBA_S3TC_DXT5_EXT
                    }
                    if (t === I || t === N || t === z || t === B) {
                        if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n)
                            return null;
                        if (t === I)
                            return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
                        if (t === N)
                            return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
                        if (t === z)
                            return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
                        if (t === B)
                            return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
                    }
                    if (36196 === t)
                        return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null;
                    if ((t === F || t === O) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) {
                        if (t === F)
                            return n.COMPRESSED_RGB8_ETC2;
                        if (t === O)
                            return n.COMPRESSED_RGBA8_ETC2_EAC
                    }
                    return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : t === S ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0
                }
            }
        }
        class qs extends Qn {
            constructor(t = []) {
                super(),
                this.cameras = t
            }
        }
        qs.prototype.isArrayCamera = !0;
        class Xs extends Be {
            constructor() {
                super(),
                this.type = "Group"
            }
        }
        Xs.prototype.isGroup = !0;
        const Js = {
            type: "move"
        };
        class Ys {
            constructor() {
                this._targetRay = null,
                this._grip = null,
                this._hand = null
            }
            getHandSpace() {
                return null === this._hand && (this._hand = new Xs, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = {
                        pinching: !1
                    }),
                this._hand
            }
            getTargetRaySpace() {
                return null === this._targetRay && (this._targetRay = new Xs, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1, this._targetRay.hasLinearVelocity = !1, this._targetRay.linearVelocity = new Nt, this._targetRay.hasAngularVelocity = !1, this._targetRay.angularVelocity = new Nt),
                this._targetRay
            }
            getGripSpace() {
                return null === this._grip && (this._grip = new Xs, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1, this._grip.hasLinearVelocity = !1, this._grip.linearVelocity = new Nt, this._grip.hasAngularVelocity = !1, this._grip.angularVelocity = new Nt),
                this._grip
            }
            dispatchEvent(t) {
                return null !== this._targetRay && this._targetRay.dispatchEvent(t),
                null !== this._grip && this._grip.dispatchEvent(t),
                null !== this._hand && this._hand.dispatchEvent(t),
                this
            }
            disconnect(t) {
                return this.dispatchEvent({
                    type: "disconnected",
                    data: t
                }),
                null !== this._targetRay && (this._targetRay.visible = !1),
                null !== this._grip && (this._grip.visible = !1),
                null !== this._hand && (this._hand.visible = !1),
                this
            }
            update(t, e, n) {
                let i = null,
                r = null,
                s = null;
                const a = this._targetRay,
                o = this._grip,
                l = this._hand;
                if (t && "visible-blurred" !== e.session.visibilityState)
                    if (null !== a && (i = e.getPose(t.targetRaySpace, n), null !== i && (a.matrix.fromArray(i.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale), i.linearVelocity ? (a.hasLinearVelocity = !0, a.linearVelocity.copy(i.linearVelocity)) : a.hasLinearVelocity = !1, i.angularVelocity ? (a.hasAngularVelocity = !0, a.angularVelocity.copy(i.angularVelocity)) : a.hasAngularVelocity = !1, this.dispatchEvent(Js))), l && t.hand) {
                        s = !0;
                        for (const i of t.hand.values()) {
                            const t = e.getJointPose(i, n);
                            if (void 0 === l.joints[i.jointName]) {
                                const t = new Xs;
                                t.matrixAutoUpdate = !1,
                                t.visible = !1,
                                l.joints[i.jointName] = t,
                                l.add(t)
                            }
                            const r = l.joints[i.jointName];
                            null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius),
                            r.visible = null !== t
                        }
                        const i = l.joints["index-finger-tip"],
                        r = l.joints["thumb-tip"],
                        a = i.position.distanceTo(r.position),
                        o = .02,
                        c = .005;
                        l.inputState.pinching && a > o + c ? (l.inputState.pinching = !1, this.dispatchEvent({
                                type: "pinchend",
                                handedness: t.handedness,
                                target: this
                            })) : !l.inputState.pinching && a <= o - c && (l.inputState.pinching = !0, this.dispatchEvent({
                                type: "pinchstart",
                                handedness: t.handedness,
                                target: this
                            }))
                    } else
                        null !== o && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (o.matrix.fromArray(r.transform.matrix), o.matrix.decompose(o.position, o.rotation, o.scale), r.linearVelocity ? (o.hasLinearVelocity = !0, o.linearVelocity.copy(r.linearVelocity)) : o.hasLinearVelocity = !1, r.angularVelocity ? (o.hasAngularVelocity = !0, o.angularVelocity.copy(r.angularVelocity)) : o.hasAngularVelocity = !1));
                return null !== a && (a.visible = null !== i),
                null !== o && (o.visible = null !== r),
                null !== l && (l.visible = null !== s),
                this
            }
        }
        class Zs extends At {
            constructor(t, e, n, i, r, s, a, o, l, c) {
                if ((c = void 0 !== c ? c : A) !== A && c !== L)
                    throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");
                void 0 === n && c === A && (n = _),
                void 0 === n && c === L && (n = S),
                super(null, i, r, s, a, o, c, n, l),
                this.image = {
                    width: t,
                    height: e
                },
                this.magFilter = void 0 !== a ? a : p,
                this.minFilter = void 0 !== o ? o : p,
                this.flipY = !1,
                this.generateMipmaps = !1
            }
        }
        Zs.prototype.isDepthTexture = !0;
        class Qs extends rt {
            constructor(t, e) {
                super();
                const n = this;
                let i = null,
                r = 1,
                s = null,
                a = "local-floor";
                const o = t.extensions.has("WEBGL_multisampled_render_to_texture");
                let l = null,
                c = null,
                h = null,
                u = null,
                d = !1,
                p = null;
                const m = e.getContextAttributes();
                let f = null,
                g = null;
                const v = [],
                y = new Map,
                M = new Qn;
                M.layers.enable(1),
                M.viewport = new Rt;
                const b = new Qn;
                b.layers.enable(2),
                b.viewport = new Rt;
                const w = [M, b],
                R = new qs;
                R.layers.enable(1),
                R.layers.enable(2);
                let C = null,
                P = null;
                function D(t) {
                    const e = y.get(t.inputSource);
                    e && e.dispatchEvent({
                        type: t.type,
                        data: t.inputSource
                    })
                }
                function I() {
                    y.forEach(function (t, e) {
                        t.disconnect(e)
                    }),
                    y.clear(),
                    C = null,
                    P = null,
                    t.setRenderTarget(f),
                    u = null,
                    h = null,
                    c = null,
                    i = null,
                    g = null,
                    U.stop(),
                    n.isPresenting = !1,
                    n.dispatchEvent({
                        type: "sessionend"
                    })
                }
                function N(t) {
                    const e = i.inputSources;
                    for (let t = 0; t < v.length; t++)
                        y.set(e[t], v[t]);
                    for (let e = 0; e < t.removed.length; e++) {
                        const n = t.removed[e],
                        i = y.get(n);
                        i && (i.dispatchEvent({
                                type: "disconnected",
                                data: n
                            }), y.delete(n))
                    }
                    for (let e = 0; e < t.added.length; e++) {
                        const n = t.added[e],
                        i = y.get(n);
                        i && i.dispatchEvent({
                            type: "connected",
                            data: n
                        })
                    }
                }
                this.cameraAutoUpdate = !0,
                this.enabled = !1,
                this.isPresenting = !1,
                this.getController = function (t) {
                    let e = v[t];
                    return void 0 === e && (e = new Ys, v[t] = e),
                    e.getTargetRaySpace()
                },
                this.getControllerGrip = function (t) {
                    let e = v[t];
                    return void 0 === e && (e = new Ys, v[t] = e),
                    e.getGripSpace()
                },
                this.getHand = function (t) {
                    let e = v[t];
                    return void 0 === e && (e = new Ys, v[t] = e),
                    e.getHandSpace()
                },
                this.setFramebufferScaleFactor = function (t) {
                    r = t,
                    !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")
                },
                this.setReferenceSpaceType = function (t) {
                    a = t,
                    !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")
                },
                this.getReferenceSpace = function () {
                    return s
                },
                this.getBaseLayer = function () {
                    return null !== h ? h : u
                },
                this.getBinding = function () {
                    return c
                },
                this.getFrame = function () {
                    return p
                },
                this.getSession = function () {
                    return i
                },
                this.setSession = async function (l) {
                    if (i = l, null !== i) {
                        if (f = t.getRenderTarget(), i.addEventListener("select", D), i.addEventListener("selectstart", D), i.addEventListener("selectend", D), i.addEventListener("squeeze", D), i.addEventListener("squeezestart", D), i.addEventListener("squeezeend", D), i.addEventListener("end", I), i.addEventListener("inputsourceschange", N), !0 !== m.xrCompatible && (await e.makeXRCompatible()), void 0 === i.renderState.layers || !1 === t.capabilities.isWebGL2) {
                            const t = {
                                antialias: void 0 !== i.renderState.layers || m.antialias,
                                alpha: m.alpha,
                                depth: m.depth,
                                stencil: m.stencil,
                                framebufferScaleFactor: r
                            };
                            u = new XRWebGLLayer(i, e, t),
                            i.updateRenderState({
                                baseLayer: u
                            }),
                            g = new Ct(u.framebufferWidth, u.framebufferHeight)
                        } else {
                            d = m.antialias;
                            let t = null,
                            n = null,
                            s = null;
                            m.depth && (s = m.stencil ? 35056 : 33189, t = m.stencil ? L : A, n = m.stencil ? S : _);
                            const a = {
                                colorFormat: m.alpha || d ? 32856 : 32849,
                                depthFormat: s,
                                scaleFactor: r
                            };
                            c = new XRWebGLBinding(i, e),
                            h = c.createProjectionLayer(a),
                            i.updateRenderState({
                                layers: [h]
                            }),
                            g = d ? new Dt(h.textureWidth, h.textureHeight, {
                                format: E,
                                type: x,
                                depthTexture: new Zs(h.textureWidth, h.textureHeight, n, void 0, void 0, void 0, void 0, void 0, void 0, t),
                                stencilBuffer: m.stencil,
                                ignoreDepth: h.ignoreDepthValues,
                                useRenderToTexture: o
                            }) : new Ct(h.textureWidth, h.textureHeight, {
                                format: m.alpha ? E : T,
                                type: x,
                                depthTexture: new Zs(h.textureWidth, h.textureHeight, n, void 0, void 0, void 0, void 0, void 0, void 0, t),
                                stencilBuffer: m.stencil,
                                ignoreDepth: h.ignoreDepthValues
                            })
                        }
                        this.setFoveation(0),
                        s = await i.requestReferenceSpace(a),
                        U.setContext(i),
                        U.start(),
                        n.isPresenting = !0,
                        n.dispatchEvent({
                            type: "sessionstart"
                        })
                    }
                };
                const z = new Nt,
                B = new Nt;
                function F(t, e) {
                    null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix),
                    t.matrixWorldInverse.copy(t.matrixWorld).invert()
                }
                this.updateCamera = function (t) {
                    if (null === i)
                        return;
                    R.near = b.near = M.near = t.near,
                    R.far = b.far = M.far = t.far,
                    C === R.near && P === R.far || (i.updateRenderState({
                            depthNear: R.near,
                            depthFar: R.far
                        }), C = R.near, P = R.far);
                    const e = t.parent,
                    n = R.cameras;
                    F(R, e);
                    for (let t = 0; t < n.length; t++)
                        F(n[t], e);
                    R.matrixWorld.decompose(R.position, R.quaternion, R.scale),
                    t.position.copy(R.position),
                    t.quaternion.copy(R.quaternion),
                    t.scale.copy(R.scale),
                    t.matrix.copy(R.matrix),
                    t.matrixWorld.copy(R.matrixWorld);
                    const r = t.children;
                    for (let t = 0, e = r.length; t < e; t++)
                        r[t].updateMatrixWorld(!0);
                    2 === n.length ? function (t, e, n) {
                        z.setFromMatrixPosition(e.matrixWorld),
                        B.setFromMatrixPosition(n.matrixWorld);
                        const i = z.distanceTo(B),
                        r = e.projectionMatrix.elements,
                        s = n.projectionMatrix.elements,
                        a = r[14] / (r[10] - 1),
                        o = r[14] / (r[10] + 1),
                        l = (r[9] + 1) / r[5],
                        c = (r[9] - 1) / r[5],
                        h = (r[8] - 1) / r[0],
                        u = (s[8] + 1) / s[0],
                        d = a * h,
                        p = a * u,
                        m = i / (-h + u),
                        f = m * -h;
                        e.matrixWorld.decompose(t.position, t.quaternion, t.scale),
                        t.translateX(f),
                        t.translateZ(m),
                        t.matrixWorld.compose(t.position, t.quaternion, t.scale),
                        t.matrixWorldInverse.copy(t.matrixWorld).invert();
                        const g = a + m,
                        v = o + m,
                        y = d - f,
                        x = p + (i - f),
                        _ = l * o / v * g,
                        M = c * o / v * g;
                        t.projectionMatrix.makePerspective(y, x, _, M, g, v)
                    }
                    (R, M, b) : R.projectionMatrix.copy(M.projectionMatrix)
                },
                this.getCamera = function () {
                    return R
                },
                this.getFoveation = function () {
                    return null !== h ? h.fixedFoveation : null !== u ? u.fixedFoveation : void 0
                },
                this.setFoveation = function (t) {
                    null !== h && (h.fixedFoveation = t),
                    null !== u && void 0 !== u.fixedFoveation && (u.fixedFoveation = t)
                };
                let O = null;
                const U = new ci;
                U.setAnimationLoop(function (e, n) {
                    if (l = n.getViewerPose(s), p = n, null !== l) {
                        const e = l.views;
                        null !== u && (t.setRenderTargetFramebuffer(g, u.framebuffer), t.setRenderTarget(g));
                        let n = !1;
                        e.length !== R.cameras.length && (R.cameras.length = 0, n = !0);
                        for (let i = 0; i < e.length; i++) {
                            const r = e[i];
                            let s = null;
                            if (null !== u)
                                s = u.getViewport(r);
                            else {
                                const e = c.getViewSubImage(h, r);
                                s = e.viewport,
                                0 === i && (t.setRenderTargetTextures(g, e.colorTexture, h.ignoreDepthValues ? void 0 : e.depthStencilTexture), t.setRenderTarget(g))
                            }
                            const a = w[i];
                            a.matrix.fromArray(r.transform.matrix),
                            a.projectionMatrix.fromArray(r.projectionMatrix),
                            a.viewport.set(s.x, s.y, s.width, s.height),
                            0 === i && R.matrix.copy(a.matrix),
                            !0 === n && R.cameras.push(a)
                        }
                    }
                    const r = i.inputSources;
                    for (let t = 0; t < v.length; t++) {
                        const e = v[t],
                        i = r[t];
                        e.update(i, n, s)
                    }
                    O && O(e, n),
                    p = null
                }),
                this.setAnimationLoop = function (t) {
                    O = t
                },
                this.dispose = function () {}
            }
        }
        function Ks(t) {
            function e(e, n) {
                e.opacity.value = n.opacity,
                n.color && e.diffuse.value.copy(n.color),
                n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),
                n.map && (e.map.value = n.map),
                n.alphaMap && (e.alphaMap.value = n.alphaMap),
                n.specularMap && (e.specularMap.value = n.specularMap),
                n.alphaTest > 0 && (e.alphaTest.value = n.alphaTest);
                const i = t.get(n).envMap;
                let r,
                s;
                i && (e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && !1 === i.isRenderTargetTexture ? -1 : 1, e.reflectivity.value = n.reflectivity, e.ior.value = n.ior, e.refractionRatio.value = n.refractionRatio),
                n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity),
                n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity),
                n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap ? r = n.clearcoatRoughnessMap : n.specularIntensityMap ? r = n.specularIntensityMap : n.specularColorMap ? r = n.specularColorMap : n.transmissionMap ? r = n.transmissionMap : n.thicknessMap ? r = n.thicknessMap : n.sheenColorMap ? r = n.sheenColorMap : n.sheenRoughnessMap && (r = n.sheenRoughnessMap),
                void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)),
                n.aoMap ? s = n.aoMap : n.lightMap && (s = n.lightMap),
                void 0 !== s && (s.isWebGLRenderTarget && (s = s.texture), !0 === s.matrixAutoUpdate && s.updateMatrix(), e.uv2Transform.value.copy(s.matrix))
            }
            function n(e, n) {
                e.roughness.value = n.roughness,
                e.metalness.value = n.metalness,
                n.roughnessMap && (e.roughnessMap.value = n.roughnessMap),
                n.metalnessMap && (e.metalnessMap.value = n.metalnessMap),
                n.emissiveMap && (e.emissiveMap.value = n.emissiveMap),
                n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)),
                n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()),
                n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias);
                t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity)
            }
            return {
                refreshFogUniforms: function (t, e) {
                    t.fogColor.value.copy(e.color),
                    e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density)
                },
                refreshMaterialUniforms: function (t, i, r, s, a) {
                    i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function (t, e) {
                        e.emissiveMap && (t.emissiveMap.value = e.emissiveMap)
                    }
                        (t, i)) : i.isMeshToonMaterial ? (e(t, i), function (t, e) {
                        e.gradientMap && (t.gradientMap.value = e.gradientMap);
                        e.emissiveMap && (t.emissiveMap.value = e.emissiveMap);
                        e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
                        e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
                    }
                        (t, i)) : i.isMeshPhongMaterial ? (e(t, i), function (t, e) {
                        t.specular.value.copy(e.specular),
                        t.shininess.value = Math.max(e.shininess, 1e-4),
                        e.emissiveMap && (t.emissiveMap.value = e.emissiveMap);
                        e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
                        e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
                    }
                        (t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function (t, e, i) {
                        n(t, e),
                        t.ior.value = e.ior,
                        e.sheen > 0 && (t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen), t.sheenRoughness.value = e.sheenRoughness, e.sheenColorMap && (t.sheenColorMap.value = e.sheenColorMap), e.sheenRoughnessMap && (t.sheenRoughnessMap.value = e.sheenRoughnessMap));
                        e.clearcoat > 0 && (t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap), e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap), e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate()));
                        e.transmission > 0 && (t.transmission.value = e.transmission, t.transmissionSamplerMap.value = i.texture, t.transmissionSamplerSize.value.set(i.width, i.height), e.transmissionMap && (t.transmissionMap.value = e.transmissionMap), t.thickness.value = e.thickness, e.thicknessMap && (t.thicknessMap.value = e.thicknessMap), t.attenuationDistance.value = e.attenuationDistance, t.attenuationColor.value.copy(e.attenuationColor));
                        t.specularIntensity.value = e.specularIntensity,
                        t.specularColor.value.copy(e.specularColor),
                        e.specularIntensityMap && (t.specularIntensityMap.value = e.specularIntensityMap);
                        e.specularColorMap && (t.specularColorMap.value = e.specularColorMap)
                    }
                        (t, i, a) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function (t, e) {
                        e.matcap && (t.matcap.value = e.matcap);
                        e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
                        e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
                    }
                        (t, i)) : i.isMeshDepthMaterial ? (e(t, i), function (t, e) {
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
                    }
                        (t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function (t, e) {
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias);
                        t.referencePosition.value.copy(e.referencePosition),
                        t.nearDistance.value = e.nearDistance,
                        t.farDistance.value = e.farDistance
                    }
                        (t, i)) : i.isMeshNormalMaterial ? (e(t, i), function (t, e) {
                        e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
                        e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
                        e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
                    }
                        (t, i)) : i.isLineBasicMaterial ? (function (t, e) {
                        t.diffuse.value.copy(e.color),
                        t.opacity.value = e.opacity
                    }
                        (t, i), i.isLineDashedMaterial && function (t, e) {
                        t.dashSize.value = e.dashSize,
                        t.totalSize.value = e.dashSize + e.gapSize,
                        t.scale.value = e.scale
                    }
                        (t, i)) : i.isPointsMaterial ? function (t, e, n, i) {
                        t.diffuse.value.copy(e.color),
                        t.opacity.value = e.opacity,
                        t.size.value = e.size * n,
                        t.scale.value = .5 * i,
                        e.map && (t.map.value = e.map);
                        e.alphaMap && (t.alphaMap.value = e.alphaMap);
                        e.alphaTest > 0 && (t.alphaTest.value = e.alphaTest);
                        let r;
                        e.map ? r = e.map : e.alphaMap && (r = e.alphaMap);
                        void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix))
                    }
                    (t, i, r, s) : i.isSpriteMaterial ? function (t, e) {
                        t.diffuse.value.copy(e.color),
                        t.opacity.value = e.opacity,
                        t.rotation.value = e.rotation,
                        e.map && (t.map.value = e.map);
                        e.alphaMap && (t.alphaMap.value = e.alphaMap);
                        e.alphaTest > 0 && (t.alphaTest.value = e.alphaTest);
                        let n;
                        e.map ? n = e.map : e.alphaMap && (n = e.alphaMap);
                        void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix))
                    }
                    (t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1)
                }
            }
        }
        function $s(t = {}) {
            const e = void 0 !== t.canvas ? t.canvas : function () {
                const t = bt("canvas");
                return t.style.display = "block",
                t
            }
            (),
            n = void 0 !== t.context ? t.context : null,
            i = void 0 !== t.alpha && t.alpha,
            r = void 0 === t.depth || t.depth,
            s = void 0 === t.stencil || t.stencil,
            a = void 0 !== t.antialias && t.antialias,
            o = void 0 === t.premultipliedAlpha || t.premultipliedAlpha,
            l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer,
            c = void 0 !== t.powerPreference ? t.powerPreference : "default",
            h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat;
            let d = null,
            m = null;
            const f = [],
            g = [];
            this.domElement = e,
            this.debug = {
                checkShaderErrors: !0
            },
            this.autoClear = !0,
            this.autoClearColor = !0,
            this.autoClearDepth = !0,
            this.autoClearStencil = !0,
            this.sortObjects = !0,
            this.clippingPlanes = [],
            this.localClippingEnabled = !1,
            this.gammaFactor = 2,
            this.outputEncoding = X,
            this.physicallyCorrectLights = !1,
            this.toneMapping = 0,
            this.toneMappingExposure = 1;
            const v = this;
            let _ = !1,
            M = 0,
            S = 0,
            T = null,
            A = -1,
            L = null;
            const R = new Rt,
            C = new Rt;
            let P = null,
            D = e.width,
            I = e.height,
            N = 1,
            z = null,
            B = null;
            const F = new Rt(0, 0, D, I),
            O = new Rt(0, 0, D, I);
            let U = !1;
            const H = [],
            G = new li;
            let k = !1,
            V = !1,
            W = null;
            const j = new ue,
            q = new Nt,
            J = {
                background: null,
                fog: null,
                environment: null,
                overrideMaterial: null,
                isScene: !0
            };
            function Y() {
                return null === T ? N : 1
            }
            let Z,
            Q,
            K,
            $,
            tt,
            et,
            nt,
            it,
            rt,
            st,
            at,
            ot,
            lt,
            ct,
            ht,
            ut,
            dt,
            pt,
            mt,
            ft,
            gt,
            vt,
            yt,
            xt = n;
            function _t(t, n) {
                for (let i = 0; i < t.length; i++) {
                    const r = t[i],
                    s = e.getContext(r, n);
                    if (null !== s)
                        return s
                }
                return null
            }
            try {
                const t = {
                    alpha: i,
                    depth: r,
                    stencil: s,
                    antialias: a,
                    premultipliedAlpha: o,
                    preserveDrawingBuffer: l,
                    powerPreference: c,
                    failIfMajorPerformanceCaveat: h
                };
                if ("setAttribute" in e && e.setAttribute("data-engine", "three.js r135"), e.addEventListener("webglcontextlost", St, !1), e.addEventListener("webglcontextrestored", Tt, !1), null === xt) {
                    const e = ["webgl2", "webgl", "experimental-webgl"];
                    if (!0 === v.isWebGL1Renderer && e.shift(), xt = _t(e, t), null === xt)
                        throw _t(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.")
                }
                void 0 === xt.getShaderPrecisionFormat && (xt.getShaderPrecisionFormat = function () {
                    return {
                        rangeMin: 1,
                        rangeMax: 1,
                        precision: 1
                    }
                })
            } catch (t) {
                throw console.error("THREE.WebGLRenderer: " + t.message),
                t
            }
            function Mt() {
                Z = new Xi(xt),
                Q = new yi(xt, Z, t),
                Z.init(Q),
                vt = new js(xt, Z, Q),
                K = new Vs(xt, Z, Q),
                H[0] = 1029,
                $ = new Zi(xt),
                tt = new Rs,
                et = new Ws(xt, Z, K, tt, Q, vt, $),
                nt = new _i(v),
                it = new qi(v),
                rt = new hi(xt, Q),
                yt = new gi(xt, Z, rt, Q),
                st = new Ji(xt, rt, $, yt),
                at = new nr(xt, st, rt, $),
                mt = new er(xt, Q, et),
                ut = new xi(tt),
                ot = new Ls(v, nt, it, Z, Q, yt, ut),
                lt = new Ks(tt),
                ct = new Is(tt),
                ht = new Us(Z, Q),
                pt = new fi(v, nt, K, at, o),
                dt = new ks(v, at, Q),
                ft = new vi(xt, Z, $, Q),
                gt = new Yi(xt, Z, $, Q),
                $.programs = ot.programs,
                v.capabilities = Q,
                v.extensions = Z,
                v.properties = tt,
                v.renderLists = ct,
                v.shadowMap = dt,
                v.state = K,
                v.info = $
            }
            Mt();
            const wt = new Qs(v, xt);
            function St(t) {
                t.preventDefault(),
                console.log("THREE.WebGLRenderer: Context Lost."),
                _ = !0
            }
            function Tt() {
                console.log("THREE.WebGLRenderer: Context Restored."),
                _ = !1;
                const t = $.autoReset,
                e = dt.enabled,
                n = dt.autoUpdate,
                i = dt.needsUpdate,
                r = dt.type;
                Mt(),
                $.autoReset = t,
                dt.enabled = e,
                dt.autoUpdate = n,
                dt.needsUpdate = i,
                dt.type = r
            }
            function Et(t) {
                const e = t.target;
                e.removeEventListener("dispose", Et),
                function (t) {
                    (function (t) {
                        const e = tt.get(t).programs;
                        void 0 !== e && e.forEach(function (t) {
                            ot.releaseProgram(t)
                        })
                    })(t),
                    tt.remove(t)
                }
                (e)
            }
            this.xr = wt,
            this.getContext = function () {
                return xt
            },
            this.getContextAttributes = function () {
                return xt.getContextAttributes()
            },
            this.forceContextLoss = function () {
                const t = Z.get("WEBGL_lose_context");
                t && t.loseContext()
            },
            this.forceContextRestore = function () {
                const t = Z.get("WEBGL_lose_context");
                t && t.restoreContext()
            },
            this.getPixelRatio = function () {
                return N
            },
            this.setPixelRatio = function (t) {
                void 0 !== t && (N = t, this.setSize(D, I, !1))
            },
            this.getSize = function (t) {
                return t.set(D, I)
            },
            this.setSize = function (t, n, i) {
                wt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (D = t, I = n, e.width = Math.floor(t * N), e.height = Math.floor(n * N), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n))
            },
            this.getDrawingBufferSize = function (t) {
                return t.set(D * N, I * N).floor()
            },
            this.setDrawingBufferSize = function (t, n, i) {
                D = t,
                I = n,
                N = i,
                e.width = Math.floor(t * i),
                e.height = Math.floor(n * i),
                this.setViewport(0, 0, t, n)
            },
            this.getCurrentViewport = function (t) {
                return t.copy(R)
            },
            this.getViewport = function (t) {
                return t.copy(F)
            },
            this.setViewport = function (t, e, n, i) {
                t.isVector4 ? F.set(t.x, t.y, t.z, t.w) : F.set(t, e, n, i),
                K.viewport(R.copy(F).multiplyScalar(N).floor())
            },
            this.getScissor = function (t) {
                return t.copy(O)
            },
            this.setScissor = function (t, e, n, i) {
                t.isVector4 ? O.set(t.x, t.y, t.z, t.w) : O.set(t, e, n, i),
                K.scissor(C.copy(O).multiplyScalar(N).floor())
            },
            this.getScissorTest = function () {
                return U
            },
            this.setScissorTest = function (t) {
                K.setScissorTest(U = t)
            },
            this.setOpaqueSort = function (t) {
                z = t
            },
            this.setTransparentSort = function (t) {
                B = t
            },
            this.getClearColor = function (t) {
                return t.copy(pt.getClearColor())
            },
            this.setClearColor = function () {
                pt.setClearColor.apply(pt, arguments)
            },
            this.getClearAlpha = function () {
                return pt.getClearAlpha()
            },
            this.setClearAlpha = function () {
                pt.setClearAlpha.apply(pt, arguments)
            },
            this.clear = function (t, e, n) {
                let i = 0;
                (void 0 === t || t) && (i |= 16384),
                (void 0 === e || e) && (i |= 256),
                (void 0 === n || n) && (i |= 1024),
                xt.clear(i)
            },
            this.clearColor = function () {
                this.clear(!0, !1, !1)
            },
            this.clearDepth = function () {
                this.clear(!1, !0, !1)
            },
            this.clearStencil = function () {
                this.clear(!1, !1, !0)
            },
            this.dispose = function () {
                e.removeEventListener("webglcontextlost", St, !1),
                e.removeEventListener("webglcontextrestored", Tt, !1),
                ct.dispose(),
                ht.dispose(),
                tt.dispose(),
                nt.dispose(),
                it.dispose(),
                at.dispose(),
                yt.dispose(),
                wt.dispose(),
                wt.removeEventListener("sessionstart", Lt),
                wt.removeEventListener("sessionend", Pt),
                W && (W.dispose(), W = null),
                It.stop()
            },
            this.renderBufferDirect = function (t, e, n, i, r, s) {
                null === e && (e = J);
                const a = r.isMesh && r.matrixWorld.determinant() < 0,
                o = function (t, e, n, i, r) {
                    !0 !== e.isScene && (e = J);
                    et.resetTextureUnits();
                    const s = e.fog,
                    a = i.isMeshStandardMaterial ? e.environment : null,
                    o = null === T ? v.outputEncoding : T.texture.encoding,
                    l = (i.isMeshStandardMaterial ? it : nt).get(i.envMap || a),
                    c = !0 === i.vertexColors && !!n.attributes.color && 4 === n.attributes.color.itemSize,
                    h = !!i.normalMap && !!n.attributes.tangent,
                    u = !!n.morphAttributes.position,
                    d = !!n.morphAttributes.normal,
                    p = n.morphAttributes.position ? n.morphAttributes.position.length : 0,
                    f = tt.get(i),
                    g = m.state.lights;
                    if (!0 === k && (!0 === V || t !== L)) {
                        const e = t === L && i.id === A;
                        ut.setState(i, t, e)
                    }
                    let y = !1;
                    i.version === f.__version ? f.needsLights && f.lightsStateVersion !== g.state.version || f.outputEncoding !== o || r.isInstancedMesh && !1 === f.instancing ? y = !0 : r.isInstancedMesh || !0 !== f.instancing ? r.isSkinnedMesh && !1 === f.skinning ? y = !0 : r.isSkinnedMesh || !0 !== f.skinning ? f.envMap !== l || i.fog && f.fog !== s ? y = !0 : void 0 === f.numClippingPlanes || f.numClippingPlanes === ut.numPlanes && f.numIntersection === ut.numIntersection ? (f.vertexAlphas !== c || f.vertexTangents !== h || f.morphTargets !== u || f.morphNormals !== d || !0 === Q.isWebGL2 && f.morphTargetsCount !== p) && (y = !0) : y = !0 : y = !0 : y = !0 : (y = !0, f.__version = i.version);
                    let x = f.currentProgram;
                    !0 === y && (x = Ut(i, e, r));
                    let _ = !1,
                    M = !1,
                    b = !1;
                    const w = x.getUniforms(),
                    S = f.uniforms;
                    K.useProgram(x.program) && (_ = !0, M = !0, b = !0);
                    i.id !== A && (A = i.id, M = !0);
                    if (_ || L !== t) {
                        if (w.setValue(xt, "projectionMatrix", t.projectionMatrix), Q.logarithmicDepthBuffer && w.setValue(xt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), L !== t && (L = t, M = !0, b = !0), i.isShaderMaterial || i.isMeshPhongMaterial || i.isMeshToonMaterial || i.isMeshStandardMaterial || i.envMap) {
                            const e = w.map.cameraPosition;
                            void 0 !== e && e.setValue(xt, q.setFromMatrixPosition(t.matrixWorld))
                        }
                        (i.isMeshPhongMaterial || i.isMeshToonMaterial || i.isMeshLambertMaterial || i.isMeshBasicMaterial || i.isMeshStandardMaterial || i.isShaderMaterial) && w.setValue(xt, "isOrthographic", !0 === t.isOrthographicCamera),
                        (i.isMeshPhongMaterial || i.isMeshToonMaterial || i.isMeshLambertMaterial || i.isMeshBasicMaterial || i.isMeshStandardMaterial || i.isShaderMaterial || i.isShadowMaterial || r.isSkinnedMesh) && w.setValue(xt, "viewMatrix", t.matrixWorldInverse)
                    }
                    if (r.isSkinnedMesh) {
                        w.setOptional(xt, r, "bindMatrix"),
                        w.setOptional(xt, r, "bindMatrixInverse");
                        const t = r.skeleton;
                        t && (Q.floatVertexTextures ? (null === t.boneTexture && t.computeBoneTexture(), w.setValue(xt, "boneTexture", t.boneTexture, et), w.setValue(xt, "boneTextureSize", t.boneTextureSize)) : w.setOptional(xt, t, "boneMatrices"))
                    }
                    !n || void 0 === n.morphAttributes.position && void 0 === n.morphAttributes.normal || mt.update(r, n, i, x);
                    (M || f.receiveShadow !== r.receiveShadow) && (f.receiveShadow = r.receiveShadow, w.setValue(xt, "receiveShadow", r.receiveShadow));
                    M && (w.setValue(xt, "toneMappingExposure", v.toneMappingExposure), f.needsLights && (R = b, (E = S).ambientLightColor.needsUpdate = R, E.lightProbe.needsUpdate = R, E.directionalLights.needsUpdate = R, E.directionalLightShadows.needsUpdate = R, E.pointLights.needsUpdate = R, E.pointLightShadows.needsUpdate = R, E.spotLights.needsUpdate = R, E.spotLightShadows.needsUpdate = R, E.rectAreaLights.needsUpdate = R, E.hemisphereLights.needsUpdate = R), s && i.fog && lt.refreshFogUniforms(S, s), lt.refreshMaterialUniforms(S, i, N, I, W), os.upload(xt, f.uniformsList, S, et));
                    var E,
                    R;
                    i.isShaderMaterial && !0 === i.uniformsNeedUpdate && (os.upload(xt, f.uniformsList, S, et), i.uniformsNeedUpdate = !1);
                    i.isSpriteMaterial && w.setValue(xt, "center", r.center);
                    return w.setValue(xt, "modelViewMatrix", r.modelViewMatrix),
                    w.setValue(xt, "normalMatrix", r.normalMatrix),
                    w.setValue(xt, "modelMatrix", r.matrixWorld),
                    x
                }
                (t, e, n, i, r);
                K.setMaterial(i, a);
                let l = n.index;
                const c = n.attributes.position;
                if (null === l) {
                    if (void 0 === c || 0 === c.count)
                        return
                } else if (0 === l.count)
                    return;
                let h,
                u = 1;
                !0 === i.wireframe && (l = st.getWireframeAttribute(n), u = 2),
                yt.setup(r, i, o, n, l);
                let d = ft;
                null !== l && (h = rt.get(l), d = gt, d.setIndex(h));
                const p = null !== l ? l.count : c.count,
                f = n.drawRange.start * u,
                g = n.drawRange.count * u,
                y = null !== s ? s.start * u : 0,
                x = null !== s ? s.count * u : 1 / 0,
                _ = Math.max(f, y),
                M = Math.min(p, f + g, y + x) - 1,
                b = Math.max(0, M - _ + 1);
                if (0 !== b) {
                    if (r.isMesh)
                        !0 === i.wireframe ? (K.setLineWidth(i.wireframeLinewidth * Y()), d.setMode(1)) : d.setMode(4);
                    else if (r.isLine) {
                        let t = i.linewidth;
                        void 0 === t && (t = 1),
                        K.setLineWidth(t * Y()),
                        r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3)
                    } else
                        r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4);
                    if (r.isInstancedMesh)
                        d.renderInstances(_, b, r.count);
                    else if (n.isInstancedBufferGeometry) {
                        const t = Math.min(n.instanceCount, n._maxInstanceCount);
                        d.renderInstances(_, b, t)
                    } else
                        d.render(_, b)
                }
            },
            this.compile = function (t, e) {
                m = ht.get(t),
                m.init(),
                g.push(m),
                t.traverseVisible(function (t) {
                    t.isLight && t.layers.test(e.layers) && (m.pushLight(t), t.castShadow && m.pushShadow(t))
                }),
                m.setupLights(v.physicallyCorrectLights),
                t.traverse(function (e) {
                    const n = e.material;
                    if (n)
                        if (Array.isArray(n))
                            for (let i = 0; i < n.length; i++) {
                                Ut(n[i], t, e)
                            }
                        else
                            Ut(n, t, e)
                }),
                g.pop(),
                m = null
            };
            let At = null;
            function Lt() {
                It.stop()
            }
            function Pt() {
                It.start()
            }
            const It = new ci;
            function zt(t, e, n, i) {
                if (!1 === t.visible)
                    return;
                if (t.layers.test(e.layers))
                    if (t.isGroup)
                        n = t.renderOrder;
                    else if (t.isLOD)
                        !0 === t.autoUpdate && t.update(e);
                    else if (t.isLight)
                        m.pushLight(t), t.castShadow && m.pushShadow(t);
                    else if (t.isSprite) {
                        if (!t.frustumCulled || G.intersectsSprite(t)) {
                            i && q.setFromMatrixPosition(t.matrixWorld).applyMatrix4(j);
                            const e = at.update(t),
                            r = t.material;
                            r.visible && d.push(t, e, r, n, q.z, null)
                        }
                    } else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== $.render.frame && (t.skeleton.update(), t.skeleton.frame = $.render.frame), !t.frustumCulled || G.intersectsObject(t))) {
                        i && q.setFromMatrixPosition(t.matrixWorld).applyMatrix4(j);
                        const e = at.update(t),
                        r = t.material;
                        if (Array.isArray(r)) {
                            const i = e.groups;
                            for (let s = 0, a = i.length; s < a; s++) {
                                const a = i[s],
                                o = r[a.materialIndex];
                                o && o.visible && d.push(t, e, o, n, q.z, a)
                            }
                        } else
                            r.visible && d.push(t, e, r, n, q.z, null)
                    }
                const r = t.children;
                for (let t = 0, s = r.length; t < s; t++)
                    zt(r[t], e, n, i)
            }
            function Bt(t, e, n, i) {
                const r = t.opaque,
                s = t.transmissive,
                o = t.transparent;
                m.setupLightsView(n),
                s.length > 0 && function (t, e, n) {
                    if (null === W) {
                        const t = !0 === a && !0 === Q.isWebGL2;
                        W = new(t ? Dt : Ct)(1024, 1024, {
                            generateMipmaps: !0,
                            type: null !== vt.convert(w) ? w : x,
                            minFilter: y,
                            magFilter: p,
                            wrapS: u,
                            wrapT: u,
                            useRenderToTexture: Z.has("WEBGL_multisampled_render_to_texture")
                        })
                    }
                    const i = v.getRenderTarget();
                    v.setRenderTarget(W),
                    v.clear();
                    const r = v.toneMapping;
                    v.toneMapping = 0,
                    Ft(t, e, n),
                    v.toneMapping = r,
                    et.updateMultisampleRenderTarget(W),
                    et.updateRenderTargetMipmap(W),
                    v.setRenderTarget(i)
                }
                (r, e, n),
                i && K.viewport(R.copy(i)),
                r.length > 0 && Ft(r, e, n),
                s.length > 0 && Ft(s, e, n),
                o.length > 0 && Ft(o, e, n)
            }
            function Ft(t, e, n) {
                const i = !0 === e.isScene ? e.overrideMaterial : null;
                for (let r = 0, s = t.length; r < s; r++) {
                    const s = t[r],
                    a = s.object,
                    o = s.geometry,
                    l = null === i ? s.material : i,
                    c = s.group;
                    a.layers.test(n.layers) && Ot(a, e, n, o, l, c)
                }
            }
            function Ot(t, e, n, i, r, s) {
                t.onBeforeRender(v, e, n, i, r, s),
                t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld),
                t.normalMatrix.getNormalMatrix(t.modelViewMatrix),
                r.onBeforeRender(v, e, n, i, t, s),
                !0 === r.transparent && 2 === r.side ? (r.side = 1, r.needsUpdate = !0, v.renderBufferDirect(n, e, i, r, t, s), r.side = 0, r.needsUpdate = !0, v.renderBufferDirect(n, e, i, r, t, s), r.side = 2) : v.renderBufferDirect(n, e, i, r, t, s),
                t.onAfterRender(v, e, n, i, r, s)
            }
            function Ut(t, e, n) {
                !0 !== e.isScene && (e = J);
                const i = tt.get(t),
                r = m.state.lights,
                s = m.state.shadowsArray,
                a = r.state.version,
                o = ot.getParameters(t, r.state, s, e, n),
                l = ot.getProgramCacheKey(o);
                let c = i.programs;
                i.environment = t.isMeshStandardMaterial ? e.environment : null,
                i.fog = e.fog,
                i.envMap = (t.isMeshStandardMaterial ? it : nt).get(t.envMap || i.environment),
                void 0 === c && (t.addEventListener("dispose", Et), c = new Map, i.programs = c);
                let h = c.get(l);
                if (void 0 !== h) {
                    if (i.currentProgram === h && i.lightsStateVersion === a)
                        return Ht(t, o), h
                } else
                    o.uniforms = ot.getUniforms(t), t.onBuild(n, o, v), t.onBeforeCompile(o, v), h = ot.acquireProgram(o, l), c.set(l, h), i.uniforms = o.uniforms;
                const u = i.uniforms;
                (t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (u.clippingPlanes = ut.uniform),
                Ht(t, o),
                i.needsLights = function (t) {
                    return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights
                }
                (t),
                i.lightsStateVersion = a,
                i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix);
                const d = h.getUniforms(),
                p = os.seqWithValue(d.seq, u);
                return i.currentProgram = h,
                i.uniformsList = p,
                h
            }
            function Ht(t, e) {
                const n = tt.get(t);
                n.outputEncoding = e.outputEncoding,
                n.instancing = e.instancing,
                n.skinning = e.skinning,
                n.morphTargets = e.morphTargets,
                n.morphNormals = e.morphNormals,
                n.morphTargetsCount = e.morphTargetsCount,
                n.numClippingPlanes = e.numClippingPlanes,
                n.numIntersection = e.numClipIntersection,
                n.vertexAlphas = e.vertexAlphas,
                n.vertexTangents = e.vertexTangents
            }
            It.setAnimationLoop(function (t) {
                At && At(t)
            }),
            "undefined" != typeof window && It.setContext(window),
            this.setAnimationLoop = function (t) {
                At = t,
                wt.setAnimationLoop(t),
                null === t ? It.stop() : It.start()
            },
            wt.addEventListener("sessionstart", Lt),
            wt.addEventListener("sessionend", Pt),
            this.render = function (t, e) {
                if (void 0 !== e && !0 !== e.isCamera)
                    return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");
                if (!0 === _)
                    return;
                !0 === t.autoUpdate && t.updateMatrixWorld(),
                null === e.parent && e.updateMatrixWorld(),
                !0 === wt.enabled && !0 === wt.isPresenting && (!0 === wt.cameraAutoUpdate && wt.updateCamera(e), e = wt.getCamera()),
                !0 === t.isScene && t.onBeforeRender(v, t, e, T),
                m = ht.get(t, g.length),
                m.init(),
                g.push(m),
                j.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse),
                G.setFromProjectionMatrix(j),
                V = this.localClippingEnabled,
                k = ut.init(this.clippingPlanes, V, e),
                d = ct.get(t, f.length),
                d.init(),
                f.push(d),
                zt(t, e, 0, v.sortObjects),
                d.finish(),
                !0 === v.sortObjects && d.sort(z, B),
                !0 === k && ut.beginShadows();
                const n = m.state.shadowsArray;
                if (dt.render(n, t, e), !0 === k && ut.endShadows(), !0 === this.info.autoReset && this.info.reset(), pt.render(d, t), m.setupLights(v.physicallyCorrectLights), e.isArrayCamera) {
                    const n = e.cameras;
                    for (let e = 0, i = n.length; e < i; e++) {
                        const i = n[e];
                        Bt(d, t, i, i.viewport)
                    }
                } else
                    Bt(d, t, e);
                null !== T && (et.updateMultisampleRenderTarget(T), et.updateRenderTargetMipmap(T)),
                !0 === t.isScene && t.onAfterRender(v, t, e),
                K.buffers.depth.setTest(!0),
                K.buffers.depth.setMask(!0),
                K.buffers.color.setMask(!0),
                K.setPolygonOffset(!1),
                yt.resetDefaultState(),
                A = -1,
                L = null,
                g.pop(),
                m = g.length > 0 ? g[g.length - 1] : null,
                f.pop(),
                d = f.length > 0 ? f[f.length - 1] : null
            },
            this.getActiveCubeFace = function () {
                return M
            },
            this.getActiveMipmapLevel = function () {
                return S
            },
            this.getRenderTarget = function () {
                return T
            },
            this.setRenderTargetTextures = function (t, e, n) {
                tt.get(t.texture).__webglTexture = e,
                tt.get(t.depthTexture).__webglTexture = n;
                const i = tt.get(t);
                i.__hasExternalTextures = !0,
                i.__hasExternalTextures && (i.__autoAllocateDepthBuffer = void 0 === n, i.__autoAllocateDepthBuffer || t.useRenderToTexture && (console.warn("render-to-texture extension was disabled because an external texture was provided"), t.useRenderToTexture = !1, t.useRenderbuffer = !0))
            },
            this.setRenderTargetFramebuffer = function (t, e) {
                const n = tt.get(t);
                n.__webglFramebuffer = e,
                n.__useDefaultFramebuffer = void 0 === e
            },
            this.setRenderTarget = function (t, e = 0, n = 0) {
                T = t,
                M = e,
                S = n;
                let i = !0;
                if (t) {
                    const e = tt.get(t);
                    void 0 !== e.__useDefaultFramebuffer ? (K.bindFramebuffer(36160, null), i = !1) : void 0 === e.__webglFramebuffer ? et.setupRenderTarget(t) : e.__hasExternalTextures && et.rebindTextures(t, tt.get(t.texture).__webglTexture, tt.get(t.depthTexture).__webglTexture)
                }
                let r = null,
                s = !1,
                a = !1;
                if (t) {
                    const n = t.texture;
                    (n.isDataTexture3D || n.isDataTexture2DArray) && (a = !0);
                    const i = tt.get(t).__webglFramebuffer;
                    t.isWebGLCubeRenderTarget ? (r = i[e], s = !0) : r = t.useRenderbuffer ? tt.get(t).__webglMultisampledFramebuffer : i,
                    R.copy(t.viewport),
                    C.copy(t.scissor),
                    P = t.scissorTest
                } else
                    R.copy(F).multiplyScalar(N).floor(), C.copy(O).multiplyScalar(N).floor(), P = U;
                if (K.bindFramebuffer(36160, r) && Q.drawBuffers && i) {
                    let e = !1;
                    if (t) {
                        if (t.isWebGLMultipleRenderTargets) {
                            const n = t.texture;
                            if (H.length !== n.length || 36064 !== H[0]) {
                                for (let t = 0, e = n.length; t < e; t++)
                                    H[t] = 36064 + t;
                                H.length = n.length,
                                e = !0
                            }
                        } else
                            1 === H.length && 36064 === H[0] || (H[0] = 36064, H.length = 1, e = !0);
                    } else
                        1 === H.length && 1029 === H[0] || (H[0] = 1029, H.length = 1, e = !0);
                    e && (Q.isWebGL2 ? xt.drawBuffers(H) : Z.get("WEBGL_draw_buffers").drawBuffersWEBGL(H))
                }
                if (K.viewport(R), K.scissor(C), K.setScissorTest(P), s) {
                    const i = tt.get(t.texture);
                    xt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n)
                } else if (a) {
                    const i = tt.get(t.texture),
                    r = e || 0;
                    xt.framebufferTextureLayer(36160, 36064, i.__webglTexture, n || 0, r)
                }
                A = -1
            },
            this.readRenderTargetPixels = function (t, e, n, i, r, s, a) {
                if (!t || !t.isWebGLRenderTarget)
                    return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");
                let o = tt.get(t).__webglFramebuffer;
                if (t.isWebGLCubeRenderTarget && void 0 !== a && (o = o[a]), o) {
                    K.bindFramebuffer(36160, o);
                    try {
                        const a = t.texture,
                        o = a.format,
                        l = a.type;
                        if (o !== E && vt.convert(o) !== xt.getParameter(35739))
                            return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");
                        const c = l === w && (Z.has("EXT_color_buffer_half_float") || Q.isWebGL2 && Z.has("EXT_color_buffer_float"));
                        if (!(l === x || vt.convert(l) === xt.getParameter(35738) || l === b && (Q.isWebGL2 || Z.has("OES_texture_float") || Z.has("WEBGL_color_buffer_float")) || c))
                            return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");
                        36053 === xt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && xt.readPixels(e, n, i, r, vt.convert(o), vt.convert(l), s) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")
                    }
                    finally {
                        const t = null !== T ? tt.get(T).__webglFramebuffer : null;
                        K.bindFramebuffer(36160, t)
                    }
                }
            },
            this.copyFramebufferToTexture = function (t, e, n = 0) {
                const i = Math.pow(2, -n),
                r = Math.floor(e.image.width * i),
                s = Math.floor(e.image.height * i);
                let a = vt.convert(e.format);
                Q.isWebGL2 && (6407 === a && (a = 32849), 6408 === a && (a = 32856)),
                et.setTexture2D(e, 0),
                xt.copyTexImage2D(3553, n, a, t.x, t.y, r, s, 0),
                K.unbindTexture()
            },
            this.copyTextureToTexture = function (t, e, n, i = 0) {
                const r = e.image.width,
                s = e.image.height,
                a = vt.convert(n.format),
                o = vt.convert(n.type);
                et.setTexture2D(n, 0),
                xt.pixelStorei(37440, n.flipY),
                xt.pixelStorei(37441, n.premultiplyAlpha),
                xt.pixelStorei(3317, n.unpackAlignment),
                e.isDataTexture ? xt.texSubImage2D(3553, i, t.x, t.y, r, s, a, o, e.image.data) : e.isCompressedTexture ? xt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, a, e.mipmaps[0].data) : xt.texSubImage2D(3553, i, t.x, t.y, a, o, e.image),
                0 === i && n.generateMipmaps && xt.generateMipmap(3553),
                K.unbindTexture()
            },
            this.copyTextureToTexture3D = function (t, e, n, i, r = 0) {
                if (v.isWebGL1Renderer)
                    return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");
                const s = t.max.x - t.min.x + 1,
                a = t.max.y - t.min.y + 1,
                o = t.max.z - t.min.z + 1,
                l = vt.convert(i.format),
                c = vt.convert(i.type);
                let h;
                if (i.isDataTexture3D)
                    et.setTexture3D(i, 0), h = 32879;
                else {
                    if (!i.isDataTexture2DArray)
                        return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");
                    et.setTexture2DArray(i, 0),
                    h = 35866
                }
                xt.pixelStorei(37440, i.flipY),
                xt.pixelStorei(37441, i.premultiplyAlpha),
                xt.pixelStorei(3317, i.unpackAlignment);
                const u = xt.getParameter(3314),
                d = xt.getParameter(32878),
                p = xt.getParameter(3316),
                m = xt.getParameter(3315),
                f = xt.getParameter(32877),
                g = n.isCompressedTexture ? n.mipmaps[0] : n.image;
                xt.pixelStorei(3314, g.width),
                xt.pixelStorei(32878, g.height),
                xt.pixelStorei(3316, t.min.x),
                xt.pixelStorei(3315, t.min.y),
                xt.pixelStorei(32877, t.min.z),
                n.isDataTexture || n.isDataTexture3D ? xt.texSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, c, g.data) : n.isCompressedTexture ? (console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."), xt.compressedTexSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, g.data)) : xt.texSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, c, g),
                xt.pixelStorei(3314, u),
                xt.pixelStorei(32878, d),
                xt.pixelStorei(3316, p),
                xt.pixelStorei(3315, m),
                xt.pixelStorei(32877, f),
                0 === r && i.generateMipmaps && xt.generateMipmap(h),
                K.unbindTexture()
            },
            this.initTexture = function (t) {
                et.setTexture2D(t, 0),
                K.unbindTexture()
            },
            this.resetState = function () {
                M = 0,
                S = 0,
                T = null,
                K.reset(),
                yt.reset()
            },
            "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", {
                    detail: this
                }))
        }
        $s.prototype.isWebGLRenderer = !0;
        class ta extends $s {}
        ta.prototype.isWebGL1Renderer = !0;
        class ea {
            constructor(t, e = 25e-5) {
                this.name = "",
                this.color = new nn(t),
                this.density = e
            }
            clone() {
                return new ea(this.color, this.density)
            }
            toJSON() {
                return {
                    type: "FogExp2",
                    color: this.color.getHex(),
                    density: this.density
                }
            }
        }
        ea.prototype.isFogExp2 = !0;
        class na {
            constructor(t, e = 1, n = 1e3) {
                this.name = "",
                this.color = new nn(t),
                this.near = e,
                this.far = n
            }
            clone() {
                return new na(this.color, this.near, this.far)
            }
            toJSON() {
                return {
                    type: "Fog",
                    color: this.color.getHex(),
                    near: this.near,
                    far: this.far
                }
            }
        }
        na.prototype.isFog = !0;
        class ia extends Be {
            constructor() {
                super(),
                this.type = "Scene",
                this.background = null,
                this.environment = null,
                this.fog = null,
                this.overrideMaterial = null,
                this.autoUpdate = !0,
                "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", {
                        detail: this
                    }))
            }
            copy(t, e) {
                return super.copy(t, e),
                null !== t.background && (this.background = t.background.clone()),
                null !== t.environment && (this.environment = t.environment.clone()),
                null !== t.fog && (this.fog = t.fog.clone()),
                null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()),
                this.autoUpdate = t.autoUpdate,
                this.matrixAutoUpdate = t.matrixAutoUpdate,
                this
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return null !== this.fog && (e.object.fog = this.fog.toJSON()),
                e
            }
        }
        ia.prototype.isScene = !0;
        class ra {
            constructor(t, e) {
                this.array = t,
                this.stride = e,
                this.count = void 0 !== t ? t.length / e : 0,
                this.usage = et,
                this.updateRange = {
                    offset: 0,
                    count: -1
                },
                this.version = 0,
                this.uuid = ct()
            }
            onUploadCallback() {}
            set needsUpdate(t) {
                !0 === t && this.version++
            }
            setUsage(t) {
                return this.usage = t,
                this
            }
            copy(t) {
                return this.array = new t.array.constructor(t.array),
                this.count = t.count,
                this.stride = t.stride,
                this.usage = t.usage,
                this
            }
            copyAt(t, e, n) {
                t *= this.stride,
                n *= e.stride;
                for (let i = 0, r = this.stride; i < r; i++)
                    this.array[t + i] = e.array[n + i];
                return this
            }
            set(t, e = 0) {
                return this.array.set(t, e),
                this
            }
            clone(t) {
                void 0 === t.arrayBuffers && (t.arrayBuffers = {}),
                void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = ct()),
                void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer);
                const e = new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),
                n = new this.constructor(e, this.stride);
                return n.setUsage(this.usage),
                n
            }
            onUpload(t) {
                return this.onUploadCallback = t,
                this
            }
            toJSON(t) {
                return void 0 === t.arrayBuffers && (t.arrayBuffers = {}),
                void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = ct()),
                void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), {
                    uuid: this.uuid,
                    buffer: this.array.buffer._uuid,
                    type: this.array.constructor.name,
                    stride: this.stride
                }
            }
        }
        ra.prototype.isInterleavedBuffer = !0;
        const sa = new Nt;
        class aa {
            constructor(t, e, n, i = !1) {
                this.name = "",
                this.data = t,
                this.itemSize = e,
                this.offset = n,
                this.normalized = !0 === i
            }
            get count() {
                return this.data.count
            }
            get array() {
                return this.data.array
            }
            set needsUpdate(t) {
                this.data.needsUpdate = t
            }
            applyMatrix4(t) {
                for (let e = 0, n = this.data.count; e < n; e++)
                    sa.x = this.getX(e), sa.y = this.getY(e), sa.z = this.getZ(e), sa.applyMatrix4(t), this.setXYZ(e, sa.x, sa.y, sa.z);
                return this
            }
            applyNormalMatrix(t) {
                for (let e = 0, n = this.count; e < n; e++)
                    sa.x = this.getX(e), sa.y = this.getY(e), sa.z = this.getZ(e), sa.applyNormalMatrix(t), this.setXYZ(e, sa.x, sa.y, sa.z);
                return this
            }
            transformDirection(t) {
                for (let e = 0, n = this.count; e < n; e++)
                    sa.x = this.getX(e), sa.y = this.getY(e), sa.z = this.getZ(e), sa.transformDirection(t), this.setXYZ(e, sa.x, sa.y, sa.z);
                return this
            }
            setX(t, e) {
                return this.data.array[t * this.data.stride + this.offset] = e,
                this
            }
            setY(t, e) {
                return this.data.array[t * this.data.stride + this.offset + 1] = e,
                this
            }
            setZ(t, e) {
                return this.data.array[t * this.data.stride + this.offset + 2] = e,
                this
            }
            setW(t, e) {
                return this.data.array[t * this.data.stride + this.offset + 3] = e,
                this
            }
            getX(t) {
                return this.data.array[t * this.data.stride + this.offset]
            }
            getY(t) {
                return this.data.array[t * this.data.stride + this.offset + 1]
            }
            getZ(t) {
                return this.data.array[t * this.data.stride + this.offset + 2]
            }
            getW(t) {
                return this.data.array[t * this.data.stride + this.offset + 3]
            }
            setXY(t, e, n) {
                return t = t * this.data.stride + this.offset,
                this.data.array[t + 0] = e,
                this.data.array[t + 1] = n,
                this
            }
            setXYZ(t, e, n, i) {
                return t = t * this.data.stride + this.offset,
                this.data.array[t + 0] = e,
                this.data.array[t + 1] = n,
                this.data.array[t + 2] = i,
                this
            }
            setXYZW(t, e, n, i, r) {
                return t = t * this.data.stride + this.offset,
                this.data.array[t + 0] = e,
                this.data.array[t + 1] = n,
                this.data.array[t + 2] = i,
                this.data.array[t + 3] = r,
                this
            }
            clone(t) {
                if (void 0 === t) {
                    console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.");
                    const t = [];
                    for (let e = 0; e < this.count; e++) {
                        const n = e * this.data.stride + this.offset;
                        for (let e = 0; e < this.itemSize; e++)
                            t.push(this.data.array[n + e])
                    }
                    return new on(new this.array.constructor(t), this.itemSize, this.normalized)
                }
                return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}),
                void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)),
                new aa(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized)
            }
            toJSON(t) {
                if (void 0 === t) {
                    console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.");
                    const t = [];
                    for (let e = 0; e < this.count; e++) {
                        const n = e * this.data.stride + this.offset;
                        for (let e = 0; e < this.itemSize; e++)
                            t.push(this.data.array[n + e])
                    }
                    return {
                        itemSize: this.itemSize,
                        type: this.array.constructor.name,
                        array: t,
                        normalized: this.normalized
                    }
                }
                return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}),
                void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), {
                    isInterleavedBufferAttribute: !0,
                    itemSize: this.itemSize,
                    data: this.data.uuid,
                    offset: this.offset,
                    normalized: this.normalized
                }
            }
        }
        aa.prototype.isInterleavedBufferAttribute = !0;
        class oa extends Ye {
            constructor(t) {
                super(),
                this.type = "SpriteMaterial",
                this.color = new nn(16777215),
                this.map = null,
                this.alphaMap = null,
                this.rotation = 0,
                this.sizeAttenuation = !0,
                this.transparent = !0,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.map = t.map,
                this.alphaMap = t.alphaMap,
                this.rotation = t.rotation,
                this.sizeAttenuation = t.sizeAttenuation,
                this
            }
        }
        let la;
        oa.prototype.isSpriteMaterial = !0;
        const ca = new Nt,
        ha = new Nt,
        ua = new Nt,
        da = new vt,
        pa = new vt,
        ma = new ue,
        fa = new Nt,
        ga = new Nt,
        va = new Nt,
        ya = new vt,
        xa = new vt,
        _a = new vt;
        class Ma extends Be {
            constructor(t) {
                if (super(), this.type = "Sprite", void 0 === la) {
                    la = new Tn;
                    const t = new Float32Array([ - .5,  - .5, 0, 0, 0, .5,  - .5, 0, 1, 0, .5, .5, 0, 1, 1,  - .5, .5, 0, 0, 1]),
                    e = new ra(t, 5);
                    la.setIndex([0, 1, 2, 0, 2, 3]),
                    la.setAttribute("position", new aa(e, 3, 0, !1)),
                    la.setAttribute("uv", new aa(e, 2, 3, !1))
                }
                this.geometry = la,
                this.material = void 0 !== t ? t : new oa,
                this.center = new vt(.5, .5)
            }
            raycast(t, e) {
                null === t.camera && console.error("THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites."),
                ha.setFromMatrixScale(this.matrixWorld),
                ma.copy(t.camera.matrixWorld),
                this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld),
                ua.setFromMatrixPosition(this.modelViewMatrix),
                t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && ha.multiplyScalar(-ua.z);
                const n = this.material.rotation;
                let i,
                r;
                0 !== n && (r = Math.cos(n), i = Math.sin(n));
                const s = this.center;
                ba(fa.set( - .5,  - .5, 0), ua, s, ha, i, r),
                ba(ga.set(.5,  - .5, 0), ua, s, ha, i, r),
                ba(va.set(.5, .5, 0), ua, s, ha, i, r),
                ya.set(0, 0),
                xa.set(1, 0),
                _a.set(1, 1);
                let a = t.ray.intersectTriangle(fa, ga, va, !1, ca);
                if (null === a && (ba(ga.set( - .5, .5, 0), ua, s, ha, i, r), xa.set(0, 1), a = t.ray.intersectTriangle(fa, va, ga, !1, ca), null === a))
                    return;
                const o = t.ray.origin.distanceTo(ca);
                o < t.near || o > t.far || e.push({
                    distance: o,
                    point: ca.clone(),
                    uv: Xe.getUV(ca, fa, ga, va, ya, xa, _a, new vt),
                    face: null,
                    object: this
                })
            }
            copy(t) {
                return super.copy(t),
                void 0 !== t.center && this.center.copy(t.center),
                this.material = t.material,
                this
            }
        }
        function ba(t, e, n, i, r, s) {
            da.subVectors(t, n).addScalar(.5).multiply(i),
            void 0 !== r ? (pa.x = s * da.x - r * da.y, pa.y = r * da.x + s * da.y) : pa.copy(da),
            t.copy(e),
            t.x += pa.x,
            t.y += pa.y,
            t.applyMatrix4(ma)
        }
        Ma.prototype.isSprite = !0;
        const wa = new Nt,
        Sa = new Nt;
        class Ta extends Be {
            constructor() {
                super(),
                this._currentLevel = 0,
                this.type = "LOD",
                Object.defineProperties(this, {
                    levels: {
                        enumerable: !0,
                        value: []
                    },
                    isLOD: {
                        value: !0
                    }
                }),
                this.autoUpdate = !0
            }
            copy(t) {
                super.copy(t, !1);
                const e = t.levels;
                for (let t = 0, n = e.length; t < n; t++) {
                    const n = e[t];
                    this.addLevel(n.object.clone(), n.distance)
                }
                return this.autoUpdate = t.autoUpdate,
                this
            }
            addLevel(t, e = 0) {
                e = Math.abs(e);
                const n = this.levels;
                let i;
                for (i = 0; i < n.length && !(e < n[i].distance); i++);
                return n.splice(i, 0, {
                    distance: e,
                    object: t
                }),
                this.add(t),
                this
            }
            getCurrentLevel() {
                return this._currentLevel
            }
            getObjectForDistance(t) {
                const e = this.levels;
                if (e.length > 0) {
                    let n,
                    i;
                    for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++);
                    return e[n - 1].object
                }
                return null
            }
            raycast(t, e) {
                if (this.levels.length > 0) {
                    wa.setFromMatrixPosition(this.matrixWorld);
                    const n = t.ray.origin.distanceTo(wa);
                    this.getObjectForDistance(n).raycast(t, e)
                }
            }
            update(t) {
                const e = this.levels;
                if (e.length > 1) {
                    wa.setFromMatrixPosition(t.matrixWorld),
                    Sa.setFromMatrixPosition(this.matrixWorld);
                    const n = wa.distanceTo(Sa) / t.zoom;
                    let i,
                    r;
                    for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++)
                        e[i - 1].object.visible = !1, e[i].object.visible = !0;
                    for (this._currentLevel = i - 1; i < r; i++)
                        e[i].object.visible = !1
                }
            }
            toJSON(t) {
                const e = super.toJSON(t);
                !1 === this.autoUpdate && (e.object.autoUpdate = !1),
                e.object.levels = [];
                const n = this.levels;
                for (let t = 0, i = n.length; t < i; t++) {
                    const i = n[t];
                    e.object.levels.push({
                        object: i.object.uuid,
                        distance: i.distance
                    })
                }
                return e
            }
        }
        const Ea = new Nt,
        Aa = new Rt,
        La = new Rt,
        Ra = new Nt,
        Ca = new ue;
        class Pa extends Vn {
            constructor(t, e) {
                super(t, e),
                this.type = "SkinnedMesh",
                this.bindMode = "attached",
                this.bindMatrix = new ue,
                this.bindMatrixInverse = new ue
            }
            copy(t) {
                return super.copy(t),
                this.bindMode = t.bindMode,
                this.bindMatrix.copy(t.bindMatrix),
                this.bindMatrixInverse.copy(t.bindMatrixInverse),
                this.skeleton = t.skeleton,
                this
            }
            bind(t, e) {
                this.skeleton = t,
                void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld),
                this.bindMatrix.copy(e),
                this.bindMatrixInverse.copy(e).invert()
            }
            pose() {
                this.skeleton.pose()
            }
            normalizeSkinWeights() {
                const t = new Rt,
                e = this.geometry.attributes.skinWeight;
                for (let n = 0, i = e.count; n < i; n++) {
                    t.x = e.getX(n),
                    t.y = e.getY(n),
                    t.z = e.getZ(n),
                    t.w = e.getW(n);
                    const i = 1 / t.manhattanLength();
                    i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0),
                    e.setXYZW(n, t.x, t.y, t.z, t.w)
                }
            }
            updateMatrixWorld(t) {
                super.updateMatrixWorld(t),
                "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode)
            }
            boneTransform(t, e) {
                const n = this.skeleton,
                i = this.geometry;
                Aa.fromBufferAttribute(i.attributes.skinIndex, t),
                La.fromBufferAttribute(i.attributes.skinWeight, t),
                Ea.copy(e).applyMatrix4(this.bindMatrix),
                e.set(0, 0, 0);
                for (let t = 0; t < 4; t++) {
                    const i = La.getComponent(t);
                    if (0 !== i) {
                        const r = Aa.getComponent(t);
                        Ca.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]),
                        e.addScaledVector(Ra.copy(Ea).applyMatrix4(Ca), i)
                    }
                }
                return e.applyMatrix4(this.bindMatrixInverse)
            }
        }
        Pa.prototype.isSkinnedMesh = !0;
        class Da extends Be {
            constructor() {
                super(),
                this.type = "Bone"
            }
        }
        Da.prototype.isBone = !0;
        class Ia extends At {
            constructor(t = null, e = 1, n = 1, i, r, s, a, o, l = 1003, c = 1003, h, u) {
                super(null, s, a, o, l, c, i, r, h, u),
                this.image = {
                    data: t,
                    width: e,
                    height: n
                },
                this.magFilter = l,
                this.minFilter = c,
                this.generateMipmaps = !1,
                this.flipY = !1,
                this.unpackAlignment = 1,
                this.needsUpdate = !0
            }
        }
        Ia.prototype.isDataTexture = !0;
        const Na = new ue,
        za = new ue;
        class Ba {
            constructor(t = [], e = []) {
                this.uuid = ct(),
                this.bones = t.slice(0),
                this.boneInverses = e,
                this.boneMatrices = null,
                this.boneTexture = null,
                this.boneTextureSize = 0,
                this.frame = -1,
                this.init()
            }
            init() {
                const t = this.bones,
                e = this.boneInverses;
                if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length)
                    this.calculateInverses();
                else if (t.length !== e.length) {
                    console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),
                    this.boneInverses = [];
                    for (let t = 0, e = this.bones.length; t < e; t++)
                        this.boneInverses.push(new ue)
                }
            }
            calculateInverses() {
                this.boneInverses.length = 0;
                for (let t = 0, e = this.bones.length; t < e; t++) {
                    const e = new ue;
                    this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(),
                    this.boneInverses.push(e)
                }
            }
            pose() {
                for (let t = 0, e = this.bones.length; t < e; t++) {
                    const e = this.bones[t];
                    e && e.matrixWorld.copy(this.boneInverses[t]).invert()
                }
                for (let t = 0, e = this.bones.length; t < e; t++) {
                    const e = this.bones[t];
                    e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale))
                }
            }
            update() {
                const t = this.bones,
                e = this.boneInverses,
                n = this.boneMatrices,
                i = this.boneTexture;
                for (let i = 0, r = t.length; i < r; i++) {
                    const r = t[i] ? t[i].matrixWorld : za;
                    Na.multiplyMatrices(r, e[i]),
                    Na.toArray(n, 16 * i)
                }
                null !== i && (i.needsUpdate = !0)
            }
            clone() {
                return new Ba(this.bones, this.boneInverses)
            }
            computeBoneTexture() {
                let t = Math.sqrt(4 * this.bones.length);
                t = mt(t),
                t = Math.max(t, 4);
                const e = new Float32Array(t * t * 4);
                e.set(this.boneMatrices);
                const n = new Ia(e, t, t, E, b);
                return this.boneMatrices = e,
                this.boneTexture = n,
                this.boneTextureSize = t,
                this
            }
            getBoneByName(t) {
                for (let e = 0, n = this.bones.length; e < n; e++) {
                    const n = this.bones[e];
                    if (n.name === t)
                        return n
                }
            }
            dispose() {
                null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null)
            }
            fromJSON(t, e) {
                this.uuid = t.uuid;
                for (let n = 0, i = t.bones.length; n < i; n++) {
                    const i = t.bones[n];
                    let r = e[i];
                    void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Da),
                    this.bones.push(r),
                    this.boneInverses.push(new ue().fromArray(t.boneInverses[n]))
                }
                return this.init(),
                this
            }
            toJSON() {
                const t = {
                    metadata: {
                        version: 4.5,
                        type: "Skeleton",
                        generator: "Skeleton.toJSON"
                    },
                    bones: [],
                    boneInverses: []
                };
                t.uuid = this.uuid;
                const e = this.bones,
                n = this.boneInverses;
                for (let i = 0, r = e.length; i < r; i++) {
                    const r = e[i];
                    t.bones.push(r.uuid);
                    const s = n[i];
                    t.boneInverses.push(s.toArray())
                }
                return t
            }
        }
        class Fa extends on {
            constructor(t, e, n, i = 1) {
                "number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),
                super(t, e, n),
                this.meshPerAttribute = i
            }
            copy(t) {
                return super.copy(t),
                this.meshPerAttribute = t.meshPerAttribute,
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.meshPerAttribute = this.meshPerAttribute,
                t.isInstancedBufferAttribute = !0,
                t
            }
        }
        Fa.prototype.isInstancedBufferAttribute = !0;
        const Oa = new ue,
        Ua = new ue,
        Ha = [],
        Ga = new Vn;
        class ka extends Vn {
            constructor(t, e, n) {
                super(t, e),
                this.instanceMatrix = new Fa(new Float32Array(16 * n), 16),
                this.instanceColor = null,
                this.count = n,
                this.frustumCulled = !1
            }
            copy(t) {
                return super.copy(t),
                this.instanceMatrix.copy(t.instanceMatrix),
                null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()),
                this.count = t.count,
                this
            }
            getColorAt(t, e) {
                e.fromArray(this.instanceColor.array, 3 * t)
            }
            getMatrixAt(t, e) {
                e.fromArray(this.instanceMatrix.array, 16 * t)
            }
            raycast(t, e) {
                const n = this.matrixWorld,
                i = this.count;
                if (Ga.geometry = this.geometry, Ga.material = this.material, void 0 !== Ga.material)
                    for (let r = 0; r < i; r++) {
                        this.getMatrixAt(r, Oa),
                        Ua.multiplyMatrices(n, Oa),
                        Ga.matrixWorld = Ua,
                        Ga.raycast(t, Ha);
                        for (let t = 0, n = Ha.length; t < n; t++) {
                            const n = Ha[t];
                            n.instanceId = r,
                            n.object = this,
                            e.push(n)
                        }
                        Ha.length = 0
                    }
            }
            setColorAt(t, e) {
                null === this.instanceColor && (this.instanceColor = new Fa(new Float32Array(3 * this.instanceMatrix.count), 3)),
                e.toArray(this.instanceColor.array, 3 * t)
            }
            setMatrixAt(t, e) {
                e.toArray(this.instanceMatrix.array, 16 * t)
            }
            updateMorphTargets() {}
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
        }
        ka.prototype.isInstancedMesh = !0;
        class Va extends Ye {
            constructor(t) {
                super(),
                this.type = "LineBasicMaterial",
                this.color = new nn(16777215),
                this.linewidth = 1,
                this.linecap = "round",
                this.linejoin = "round",
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.linewidth = t.linewidth,
                this.linecap = t.linecap,
                this.linejoin = t.linejoin,
                this
            }
        }
        Va.prototype.isLineBasicMaterial = !0;
        const Wa = new Nt,
        ja = new Nt,
        qa = new ue,
        Xa = new he,
        Ja = new ne;
        class Ya extends Be {
            constructor(t = new Tn, e = new Va) {
                super(),
                this.type = "Line",
                this.geometry = t,
                this.material = e,
                this.updateMorphTargets()
            }
            copy(t) {
                return super.copy(t),
                this.material = t.material,
                this.geometry = t.geometry,
                this
            }
            computeLineDistances() {
                const t = this.geometry;
                if (t.isBufferGeometry) {
                    if (null === t.index) {
                        const e = t.attributes.position,
                        n = [0];
                        for (let t = 1, i = e.count; t < i; t++)
                            Wa.fromBufferAttribute(e, t - 1), ja.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Wa.distanceTo(ja);
                        t.setAttribute("lineDistance", new gn(n, 1))
                    } else
                        console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");
                } else
                    t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");
                return this
            }
            raycast(t, e) {
                const n = this.geometry,
                i = this.matrixWorld,
                r = t.params.Line.threshold,
                s = n.drawRange;
                if (null === n.boundingSphere && n.computeBoundingSphere(), Ja.copy(n.boundingSphere), Ja.applyMatrix4(i), Ja.radius += r, !1 === t.ray.intersectsSphere(Ja))
                    return;
                qa.copy(i).invert(),
                Xa.copy(t.ray).applyMatrix4(qa);
                const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3),
                o = a * a,
                l = new Nt,
                c = new Nt,
                h = new Nt,
                u = new Nt,
                d = this.isLineSegments ? 2 : 1;
                if (n.isBufferGeometry) {
                    const i = n.index,
                    r = n.attributes.position;
                    if (null !== i) {
                        for (let n = Math.max(0, s.start), a = Math.min(i.count, s.start + s.count) - 1; n < a; n += d) {
                            const s = i.getX(n),
                            a = i.getX(n + 1);
                            l.fromBufferAttribute(r, s),
                            c.fromBufferAttribute(r, a);
                            if (Xa.distanceSqToSegment(l, c, u, h) > o)
                                continue;
                            u.applyMatrix4(this.matrixWorld);
                            const d = t.ray.origin.distanceTo(u);
                            d < t.near || d > t.far || e.push({
                                distance: d,
                                point: h.clone().applyMatrix4(this.matrixWorld),
                                index: n,
                                face: null,
                                faceIndex: null,
                                object: this
                            })
                        }
                    } else {
                        for (let n = Math.max(0, s.start), i = Math.min(r.count, s.start + s.count) - 1; n < i; n += d) {
                            l.fromBufferAttribute(r, n),
                            c.fromBufferAttribute(r, n + 1);
                            if (Xa.distanceSqToSegment(l, c, u, h) > o)
                                continue;
                            u.applyMatrix4(this.matrixWorld);
                            const i = t.ray.origin.distanceTo(u);
                            i < t.near || i > t.far || e.push({
                                distance: i,
                                point: h.clone().applyMatrix4(this.matrixWorld),
                                index: n,
                                face: null,
                                faceIndex: null,
                                object: this
                            })
                        }
                    }
                } else
                    n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
            }
            updateMorphTargets() {
                const t = this.geometry;
                if (t.isBufferGeometry) {
                    const e = t.morphAttributes,
                    n = Object.keys(e);
                    if (n.length > 0) {
                        const t = e[n[0]];
                        if (void 0 !== t) {
                            this.morphTargetInfluences = [],
                            this.morphTargetDictionary = {};
                            for (let e = 0, n = t.length; e < n; e++) {
                                const n = t[e].name || String(e);
                                this.morphTargetInfluences.push(0),
                                this.morphTargetDictionary[n] = e
                            }
                        }
                    }
                } else {
                    const e = t.morphTargets;
                    void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")
                }
            }
        }
        Ya.prototype.isLine = !0;
        const Za = new Nt,
        Qa = new Nt;
        class Ka extends Ya {
            constructor(t, e) {
                super(t, e),
                this.type = "LineSegments"
            }
            computeLineDistances() {
                const t = this.geometry;
                if (t.isBufferGeometry) {
                    if (null === t.index) {
                        const e = t.attributes.position,
                        n = [];
                        for (let t = 0, i = e.count; t < i; t += 2)
                            Za.fromBufferAttribute(e, t), Qa.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + Za.distanceTo(Qa);
                        t.setAttribute("lineDistance", new gn(n, 1))
                    } else
                        console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");
                } else
                    t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");
                return this
            }
        }
        Ka.prototype.isLineSegments = !0;
        class $a extends Ya {
            constructor(t, e) {
                super(t, e),
                this.type = "LineLoop"
            }
        }
        $a.prototype.isLineLoop = !0;
        class to extends Ye {
            constructor(t) {
                super(),
                this.type = "PointsMaterial",
                this.color = new nn(16777215),
                this.map = null,
                this.alphaMap = null,
                this.size = 1,
                this.sizeAttenuation = !0,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.map = t.map,
                this.alphaMap = t.alphaMap,
                this.size = t.size,
                this.sizeAttenuation = t.sizeAttenuation,
                this
            }
        }
        to.prototype.isPointsMaterial = !0;
        const eo = new ue,
        no = new he,
        io = new ne,
        ro = new Nt;
        class so extends Be {
            constructor(t = new Tn, e = new to) {
                super(),
                this.type = "Points",
                this.geometry = t,
                this.material = e,
                this.updateMorphTargets()
            }
            copy(t) {
                return super.copy(t),
                this.material = t.material,
                this.geometry = t.geometry,
                this
            }
            raycast(t, e) {
                const n = this.geometry,
                i = this.matrixWorld,
                r = t.params.Points.threshold,
                s = n.drawRange;
                if (null === n.boundingSphere && n.computeBoundingSphere(), io.copy(n.boundingSphere), io.applyMatrix4(i), io.radius += r, !1 === t.ray.intersectsSphere(io))
                    return;
                eo.copy(i).invert(),
                no.copy(t.ray).applyMatrix4(eo);
                const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3),
                o = a * a;
                if (n.isBufferGeometry) {
                    const r = n.index,
                    a = n.attributes.position;
                    if (null !== r) {
                        for (let n = Math.max(0, s.start), l = Math.min(r.count, s.start + s.count); n < l; n++) {
                            const s = r.getX(n);
                            ro.fromBufferAttribute(a, s),
                            ao(ro, s, o, i, t, e, this)
                        }
                    } else {
                        for (let n = Math.max(0, s.start), r = Math.min(a.count, s.start + s.count); n < r; n++)
                            ro.fromBufferAttribute(a, n), ao(ro, n, o, i, t, e, this)
                    }
                } else
                    console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
            }
            updateMorphTargets() {
                const t = this.geometry;
                if (t.isBufferGeometry) {
                    const e = t.morphAttributes,
                    n = Object.keys(e);
                    if (n.length > 0) {
                        const t = e[n[0]];
                        if (void 0 !== t) {
                            this.morphTargetInfluences = [],
                            this.morphTargetDictionary = {};
                            for (let e = 0, n = t.length; e < n; e++) {
                                const n = t[e].name || String(e);
                                this.morphTargetInfluences.push(0),
                                this.morphTargetDictionary[n] = e
                            }
                        }
                    }
                } else {
                    const e = t.morphTargets;
                    void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")
                }
            }
        }
        function ao(t, e, n, i, r, s, a) {
            const o = no.distanceSqToPoint(t);
            if (o < n) {
                const n = new Nt;
                no.closestPointToPoint(t, n),
                n.applyMatrix4(i);
                const l = r.ray.origin.distanceTo(n);
                if (l < r.near || l > r.far)
                    return;
                s.push({
                    distance: l,
                    distanceToRay: Math.sqrt(o),
                    point: n,
                    index: e,
                    face: null,
                    object: a
                })
            }
        }
        so.prototype.isPoints = !0;
        class oo extends At {
            constructor(t, e, n, i, r, s, a, o, l) {
                super(t, e, n, i, r, s, a, o, l),
                this.format = void 0 !== a ? a : T,
                this.minFilter = void 0 !== s ? s : g,
                this.magFilter = void 0 !== r ? r : g,
                this.generateMipmaps = !1;
                const c = this;
                "requestVideoFrameCallback" in t && t.requestVideoFrameCallback(function e() {
                    c.needsUpdate = !0,
                    t.requestVideoFrameCallback(e)
                })
            }
            clone() {
                return new this.constructor(this.image).copy(this)
            }
            update() {
                const t = this.image;
                !1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0)
            }
        }
        oo.prototype.isVideoTexture = !0;
        class lo extends At {
            constructor(t, e, n, i, r, s, a, o, l, c, h, u) {
                super(null, s, a, o, l, c, i, r, h, u),
                this.image = {
                    width: e,
                    height: n
                },
                this.mipmaps = t,
                this.flipY = !1,
                this.generateMipmaps = !1
            }
        }
        lo.prototype.isCompressedTexture = !0;
        class co extends At {
            constructor(t, e, n, i, r, s, a, o, l) {
                super(t, e, n, i, r, s, a, o, l),
                this.needsUpdate = !0
            }
        }
        co.prototype.isCanvasTexture = !0;
        class ho extends Tn {
            constructor(t = 1, e = 8, n = 0, i = 2 * Math.PI) {
                super(),
                this.type = "CircleGeometry",
                this.parameters = {
                    radius: t,
                    segments: e,
                    thetaStart: n,
                    thetaLength: i
                },
                e = Math.max(3, e);
                const r = [],
                s = [],
                a = [],
                o = [],
                l = new Nt,
                c = new vt;
                s.push(0, 0, 0),
                a.push(0, 0, 1),
                o.push(.5, .5);
                for (let r = 0, h = 3; r <= e; r++, h += 3) {
                    const u = n + r / e * i;
                    l.x = t * Math.cos(u),
                    l.y = t * Math.sin(u),
                    s.push(l.x, l.y, l.z),
                    a.push(0, 0, 1),
                    c.x = (s[h] / t + 1) / 2,
                    c.y = (s[h + 1] / t + 1) / 2,
                    o.push(c.x, c.y)
                }
                for (let t = 1; t <= e; t++)
                    r.push(t, t + 1, 0);
                this.setIndex(r),
                this.setAttribute("position", new gn(s, 3)),
                this.setAttribute("normal", new gn(a, 3)),
                this.setAttribute("uv", new gn(o, 2))
            }
            static fromJSON(t) {
                return new ho(t.radius, t.segments, t.thetaStart, t.thetaLength)
            }
        }
        class uo extends Tn {
            constructor(t = 1, e = 1, n = 1, i = 8, r = 1, s = !1, a = 0, o = 2 * Math.PI) {
                super(),
                this.type = "CylinderGeometry",
                this.parameters = {
                    radiusTop: t,
                    radiusBottom: e,
                    height: n,
                    radialSegments: i,
                    heightSegments: r,
                    openEnded: s,
                    thetaStart: a,
                    thetaLength: o
                };
                const l = this;
                i = Math.floor(i),
                r = Math.floor(r);
                const c = [],
                h = [],
                u = [],
                d = [];
                let p = 0;
                const m = [],
                f = n / 2;
                let g = 0;
                function v(n) {
                    const r = p,
                    s = new vt,
                    m = new Nt;
                    let v = 0;
                    const y = !0 === n ? t : e,
                    x = !0 === n ? 1 : -1;
                    for (let t = 1; t <= i; t++)
                        h.push(0, f * x, 0), u.push(0, x, 0), d.push(.5, .5), p++;
                    const _ = p;
                    for (let t = 0; t <= i; t++) {
                        const e = t / i * o + a,
                        n = Math.cos(e),
                        r = Math.sin(e);
                        m.x = y * r,
                        m.y = f * x,
                        m.z = y * n,
                        h.push(m.x, m.y, m.z),
                        u.push(0, x, 0),
                        s.x = .5 * n + .5,
                        s.y = .5 * r * x + .5,
                        d.push(s.x, s.y),
                        p++
                    }
                    for (let t = 0; t < i; t++) {
                        const e = r + t,
                        i = _ + t;
                        !0 === n ? c.push(i, i + 1, e) : c.push(i + 1, i, e),
                        v += 3
                    }
                    l.addGroup(g, v, !0 === n ? 1 : 2),
                    g += v
                }
                !function () {
                    const s = new Nt,
                    v = new Nt;
                    let y = 0;
                    const x = (e - t) / n;
                    for (let l = 0; l <= r; l++) {
                        const c = [],
                        g = l / r,
                        y = g * (e - t) + t;
                        for (let t = 0; t <= i; t++) {
                            const e = t / i,
                            r = e * o + a,
                            l = Math.sin(r),
                            m = Math.cos(r);
                            v.x = y * l,
                            v.y = -g * n + f,
                            v.z = y * m,
                            h.push(v.x, v.y, v.z),
                            s.set(l, x, m).normalize(),
                            u.push(s.x, s.y, s.z),
                            d.push(e, 1 - g),
                            c.push(p++)
                        }
                        m.push(c)
                    }
                    for (let t = 0; t < i; t++)
                        for (let e = 0; e < r; e++) {
                            const n = m[e][t],
                            i = m[e + 1][t],
                            r = m[e + 1][t + 1],
                            s = m[e][t + 1];
                            c.push(n, i, s),
                            c.push(i, r, s),
                            y += 6
                        }
                    l.addGroup(g, y, 0),
                    g += y
                }
                (),
                !1 === s && (t > 0 && v(!0), e > 0 && v(!1)),
                this.setIndex(c),
                this.setAttribute("position", new gn(h, 3)),
                this.setAttribute("normal", new gn(u, 3)),
                this.setAttribute("uv", new gn(d, 2))
            }
            static fromJSON(t) {
                return new uo(t.radiusTop, t.radiusBottom, t.height, t.radialSegments, t.heightSegments, t.openEnded, t.thetaStart, t.thetaLength)
            }
        }
        class po extends uo {
            constructor(t = 1, e = 1, n = 8, i = 1, r = !1, s = 0, a = 2 * Math.PI) {
                super(0, t, e, n, i, r, s, a),
                this.type = "ConeGeometry",
                this.parameters = {
                    radius: t,
                    height: e,
                    radialSegments: n,
                    heightSegments: i,
                    openEnded: r,
                    thetaStart: s,
                    thetaLength: a
                }
            }
            static fromJSON(t) {
                return new po(t.radius, t.height, t.radialSegments, t.heightSegments, t.openEnded, t.thetaStart, t.thetaLength)
            }
        }
        class mo extends Tn {
            constructor(t = [], e = [], n = 1, i = 0) {
                super(),
                this.type = "PolyhedronGeometry",
                this.parameters = {
                    vertices: t,
                    indices: e,
                    radius: n,
                    detail: i
                };
                const r = [],
                s = [];
                function a(t, e, n, i) {
                    const r = i + 1,
                    s = [];
                    for (let i = 0; i <= r; i++) {
                        s[i] = [];
                        const a = t.clone().lerp(n, i / r),
                        o = e.clone().lerp(n, i / r),
                        l = r - i;
                        for (let t = 0; t <= l; t++)
                            s[i][t] = 0 === t && i === r ? a : a.clone().lerp(o, t / l)
                    }
                    for (let t = 0; t < r; t++)
                        for (let e = 0; e < 2 * (r - t) - 1; e++) {
                            const n = Math.floor(e / 2);
                            e % 2 == 0 ? (o(s[t][n + 1]), o(s[t + 1][n]), o(s[t][n])) : (o(s[t][n + 1]), o(s[t + 1][n + 1]), o(s[t + 1][n]))
                        }
                }
                function o(t) {
                    r.push(t.x, t.y, t.z)
                }
                function l(e, n) {
                    const i = 3 * e;
                    n.x = t[i + 0],
                    n.y = t[i + 1],
                    n.z = t[i + 2]
                }
                function c(t, e, n, i) {
                    i < 0 && 1 === t.x && (s[e] = t.x - 1),
                    0 === n.x && 0 === n.z && (s[e] = i / 2 / Math.PI + .5)
                }
                function h(t) {
                    return Math.atan2(t.z, -t.x)
                }
                !function (t) {
                    const n = new Nt,
                    i = new Nt,
                    r = new Nt;
                    for (let s = 0; s < e.length; s += 3)
                        l(e[s + 0], n), l(e[s + 1], i), l(e[s + 2], r), a(n, i, r, t)
                }
                (i),
                function (t) {
                    const e = new Nt;
                    for (let n = 0; n < r.length; n += 3)
                        e.x = r[n + 0], e.y = r[n + 1], e.z = r[n + 2], e.normalize().multiplyScalar(t), r[n + 0] = e.x, r[n + 1] = e.y, r[n + 2] = e.z
                }
                (n),
                function () {
                    const t = new Nt;
                    for (let n = 0; n < r.length; n += 3) {
                        t.x = r[n + 0],
                        t.y = r[n + 1],
                        t.z = r[n + 2];
                        const i = h(t) / 2 / Math.PI + .5,
                        a = (e = t, Math.atan2(-e.y, Math.sqrt(e.x * e.x + e.z * e.z)) / Math.PI + .5);
                        s.push(i, 1 - a)
                    }
                    var e;
                    (function () {
                        const t = new Nt,
                        e = new Nt,
                        n = new Nt,
                        i = new Nt,
                        a = new vt,
                        o = new vt,
                        l = new vt;
                        for (let u = 0, d = 0; u < r.length; u += 9, d += 6) {
                            t.set(r[u + 0], r[u + 1], r[u + 2]),
                            e.set(r[u + 3], r[u + 4], r[u + 5]),
                            n.set(r[u + 6], r[u + 7], r[u + 8]),
                            a.set(s[d + 0], s[d + 1]),
                            o.set(s[d + 2], s[d + 3]),
                            l.set(s[d + 4], s[d + 5]),
                            i.copy(t).add(e).add(n).divideScalar(3);
                            const p = h(i);
                            c(a, d + 0, t, p),
                            c(o, d + 2, e, p),
                            c(l, d + 4, n, p)
                        }
                    })(),
                    function () {
                        for (let t = 0; t < s.length; t += 6) {
                            const e = s[t + 0],
                            n = s[t + 2],
                            i = s[t + 4],
                            r = Math.max(e, n, i),
                            a = Math.min(e, n, i);
                            r > .9 && a < .1 && (e < .2 && (s[t + 0] += 1), n < .2 && (s[t + 2] += 1), i < .2 && (s[t + 4] += 1))
                        }
                    }
                    ()
                }
                (),
                this.setAttribute("position", new gn(r, 3)),
                this.setAttribute("normal", new gn(r.slice(), 3)),
                this.setAttribute("uv", new gn(s, 2)),
                0 === i ? this.computeVertexNormals() : this.normalizeNormals()
            }
            static fromJSON(t) {
                return new mo(t.vertices, t.indices, t.radius, t.details)
            }
        }
        class fo extends mo {
            constructor(t = 1, e = 0) {
                const n = (1 + Math.sqrt(5)) / 2,
                i = 1 / n;
                super([-1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 0, -i, -n, 0, -i, n, 0, i, -n, 0, i, n, -i, -n, 0, -i, n, 0, i, -n, 0, i, n, 0, -n, 0, -i, n, 0, -i, -n, 0, i, n, 0, i], [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9], t, e),
                this.type = "DodecahedronGeometry",
                this.parameters = {
                    radius: t,
                    detail: e
                }
            }
            static fromJSON(t) {
                return new fo(t.radius, t.detail)
            }
        }
        const go = new Nt,
        vo = new Nt,
        yo = new Nt,
        xo = new Xe;
        class _o extends Tn {
            constructor(t = null, e = 1) {
                if (super(), this.type = "EdgesGeometry", this.parameters = {
                        geometry: t,
                        thresholdAngle: e
                    }, null !== t) {
                    const n = 4,
                    i = Math.pow(10, n),
                    r = Math.cos(ot * e),
                    s = t.getIndex(),
                    a = t.getAttribute("position"),
                    o = s ? s.count : a.count,
                    l = [0, 0, 0],
                    c = ["a", "b", "c"],
                    h = new Array(3),
                    u = {},
                    d = [];
                    for (let t = 0; t < o; t += 3) {
                        s ? (l[0] = s.getX(t), l[1] = s.getX(t + 1), l[2] = s.getX(t + 2)) : (l[0] = t, l[1] = t + 1, l[2] = t + 2);
                        const {
                            a: e,
                            b: n,
                            c: o
                        } = xo;
                        if (e.fromBufferAttribute(a, l[0]), n.fromBufferAttribute(a, l[1]), o.fromBufferAttribute(a, l[2]), xo.getNormal(yo), h[0] = `${Math.round(e.x*i)},${Math.round(e.y*i)},${Math.round(e.z*i)}`, h[1] = `${Math.round(n.x*i)},${Math.round(n.y*i)},${Math.round(n.z*i)}`, h[2] = `${Math.round(o.x*i)},${Math.round(o.y*i)},${Math.round(o.z*i)}`, h[0] !== h[1] && h[1] !== h[2] && h[2] !== h[0])
                            for (let t = 0; t < 3; t++) {
                                const e = (t + 1) % 3,
                                n = h[t],
                                i = h[e],
                                s = xo[c[t]],
                                a = xo[c[e]],
                                o = `${n}_${i}`,
                                p = `${i}_${n}`;
                                p in u && u[p] ? (yo.dot(u[p].normal) <= r && (d.push(s.x, s.y, s.z), d.push(a.x, a.y, a.z)), u[p] = null) : o in u || (u[o] = {
                                        index0: l[t],
                                        index1: l[e],
                                        normal: yo.clone()
                                    })
                            }
                    }
                    for (const t in u)
                        if (u[t]) {
                            const {
                                index0: e,
                                index1: n
                            } = u[t];
                            go.fromBufferAttribute(a, e),
                            vo.fromBufferAttribute(a, n),
                            d.push(go.x, go.y, go.z),
                            d.push(vo.x, vo.y, vo.z)
                        }
                    this.setAttribute("position", new gn(d, 3))
                }
            }
        }
        class Mo {
            constructor() {
                this.type = "Curve",
                this.arcLengthDivisions = 200
            }
            getPoint() {
                return console.warn("THREE.Curve: .getPoint() not implemented."),
                null
            }
            getPointAt(t, e) {
                const n = this.getUtoTmapping(t);
                return this.getPoint(n, e)
            }
            getPoints(t = 5) {
                const e = [];
                for (let n = 0; n <= t; n++)
                    e.push(this.getPoint(n / t));
                return e
            }
            getSpacedPoints(t = 5) {
                const e = [];
                for (let n = 0; n <= t; n++)
                    e.push(this.getPointAt(n / t));
                return e
            }
            getLength() {
                const t = this.getLengths();
                return t[t.length - 1]
            }
            getLengths(t = this.arcLengthDivisions) {
                if (this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate)
                    return this.cacheArcLengths;
                this.needsUpdate = !1;
                const e = [];
                let n,
                i = this.getPoint(0),
                r = 0;
                e.push(0);
                for (let s = 1; s <= t; s++)
                    n = this.getPoint(s / t), r += n.distanceTo(i), e.push(r), i = n;
                return this.cacheArcLengths = e,
                e
            }
            updateArcLengths() {
                this.needsUpdate = !0,
                this.getLengths()
            }
            getUtoTmapping(t, e) {
                const n = this.getLengths();
                let i = 0;
                const r = n.length;
                let s;
                s = e || t * n[r - 1];
                let a,
                o = 0,
                l = r - 1;
                for (; o <= l; )
                    if (i = Math.floor(o + (l - o) / 2), a = n[i] - s, a < 0)
                        o = i + 1;
                    else {
                        if (!(a > 0)) {
                            l = i;
                            break
                        }
                        l = i - 1
                    }
                if (i = l, n[i] === s)
                    return i / (r - 1);
                const c = n[i];
                return (i + (s - c) / (n[i + 1] - c)) / (r - 1)
            }
            getTangent(t, e) {
                const n = 1e-4;
                let i = t - n,
                r = t + n;
                i < 0 && (i = 0),
                r > 1 && (r = 1);
                const s = this.getPoint(i),
                a = this.getPoint(r),
                o = e || (s.isVector2 ? new vt : new Nt);
                return o.copy(a).sub(s).normalize(),
                o
            }
            getTangentAt(t, e) {
                const n = this.getUtoTmapping(t);
                return this.getTangent(n, e)
            }
            computeFrenetFrames(t, e) {
                const n = new Nt,
                i = [],
                r = [],
                s = [],
                a = new Nt,
                o = new ue;
                for (let e = 0; e <= t; e++) {
                    const n = e / t;
                    i[e] = this.getTangentAt(n, new Nt)
                }
                r[0] = new Nt,
                s[0] = new Nt;
                let l = Number.MAX_VALUE;
                const c = Math.abs(i[0].x),
                h = Math.abs(i[0].y),
                u = Math.abs(i[0].z);
                c <= l && (l = c, n.set(1, 0, 0)),
                h <= l && (l = h, n.set(0, 1, 0)),
                u <= l && n.set(0, 0, 1),
                a.crossVectors(i[0], n).normalize(),
                r[0].crossVectors(i[0], a),
                s[0].crossVectors(i[0], r[0]);
                for (let e = 1; e <= t; e++) {
                    if (r[e] = r[e - 1].clone(), s[e] = s[e - 1].clone(), a.crossVectors(i[e - 1], i[e]), a.length() > Number.EPSILON) {
                        a.normalize();
                        const t = Math.acos(ht(i[e - 1].dot(i[e]), -1, 1));
                        r[e].applyMatrix4(o.makeRotationAxis(a, t))
                    }
                    s[e].crossVectors(i[e], r[e])
                }
                if (!0 === e) {
                    let e = Math.acos(ht(r[0].dot(r[t]), -1, 1));
                    e /= t,
                    i[0].dot(a.crossVectors(r[0], r[t])) > 0 && (e = -e);
                    for (let n = 1; n <= t; n++)
                        r[n].applyMatrix4(o.makeRotationAxis(i[n], e * n)), s[n].crossVectors(i[n], r[n])
                }
                return {
                    tangents: i,
                    normals: r,
                    binormals: s
                }
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.arcLengthDivisions = t.arcLengthDivisions,
                this
            }
            toJSON() {
                const t = {
                    metadata: {
                        version: 4.5,
                        type: "Curve",
                        generator: "Curve.toJSON"
                    }
                };
                return t.arcLengthDivisions = this.arcLengthDivisions,
                t.type = this.type,
                t
            }
            fromJSON(t) {
                return this.arcLengthDivisions = t.arcLengthDivisions,
                this
            }
        }
        class bo extends Mo {
            constructor(t = 0, e = 0, n = 1, i = 1, r = 0, s = 2 * Math.PI, a = !1, o = 0) {
                super(),
                this.type = "EllipseCurve",
                this.aX = t,
                this.aY = e,
                this.xRadius = n,
                this.yRadius = i,
                this.aStartAngle = r,
                this.aEndAngle = s,
                this.aClockwise = a,
                this.aRotation = o
            }
            getPoint(t, e) {
                const n = e || new vt,
                i = 2 * Math.PI;
                let r = this.aEndAngle - this.aStartAngle;
                const s = Math.abs(r) < Number.EPSILON;
                for (; r < 0; )
                    r += i;
                for (; r > i; )
                    r -= i;
                r < Number.EPSILON && (r = s ? 0 : i),
                !0 !== this.aClockwise || s || (r === i ? r = -i : r -= i);
                const a = this.aStartAngle + t * r;
                let o = this.aX + this.xRadius * Math.cos(a),
                l = this.aY + this.yRadius * Math.sin(a);
                if (0 !== this.aRotation) {
                    const t = Math.cos(this.aRotation),
                    e = Math.sin(this.aRotation),
                    n = o - this.aX,
                    i = l - this.aY;
                    o = n * t - i * e + this.aX,
                    l = n * e + i * t + this.aY
                }
                return n.set(o, l)
            }
            copy(t) {
                return super.copy(t),
                this.aX = t.aX,
                this.aY = t.aY,
                this.xRadius = t.xRadius,
                this.yRadius = t.yRadius,
                this.aStartAngle = t.aStartAngle,
                this.aEndAngle = t.aEndAngle,
                this.aClockwise = t.aClockwise,
                this.aRotation = t.aRotation,
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.aX = this.aX,
                t.aY = this.aY,
                t.xRadius = this.xRadius,
                t.yRadius = this.yRadius,
                t.aStartAngle = this.aStartAngle,
                t.aEndAngle = this.aEndAngle,
                t.aClockwise = this.aClockwise,
                t.aRotation = this.aRotation,
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.aX = t.aX,
                this.aY = t.aY,
                this.xRadius = t.xRadius,
                this.yRadius = t.yRadius,
                this.aStartAngle = t.aStartAngle,
                this.aEndAngle = t.aEndAngle,
                this.aClockwise = t.aClockwise,
                this.aRotation = t.aRotation,
                this
            }
        }
        bo.prototype.isEllipseCurve = !0;
        class wo extends bo {
            constructor(t, e, n, i, r, s) {
                super(t, e, n, n, i, r, s),
                this.type = "ArcCurve"
            }
        }
        function So() {
            let t = 0,
            e = 0,
            n = 0,
            i = 0;
            function r(r, s, a, o) {
                t = r,
                e = a,
                n = -3 * r + 3 * s - 2 * a - o,
                i = 2 * r - 2 * s + a + o
            }
            return {
                initCatmullRom: function (t, e, n, i, s) {
                    r(e, n, s * (n - t), s * (i - e))
                },
                initNonuniformCatmullRom: function (t, e, n, i, s, a, o) {
                    let l = (e - t) / s - (n - t) / (s + a) + (n - e) / a,
                    c = (n - e) / a - (i - e) / (a + o) + (i - n) / o;
                    l *= a,
                    c *= a,
                    r(e, n, l, c)
                },
                calc: function (r) {
                    const s = r * r;
                    return t + e * r + n * s + i * (s * r)
                }
            }
        }
        wo.prototype.isArcCurve = !0;
        const To = new Nt,
        Eo = new So,
        Ao = new So,
        Lo = new So;
        class Ro extends Mo {
            constructor(t = [], e = !1, n = "centripetal", i = .5) {
                super(),
                this.type = "CatmullRomCurve3",
                this.points = t,
                this.closed = e,
                this.curveType = n,
                this.tension = i
            }
            getPoint(t, e = new Nt) {
                const n = e,
                i = this.points,
                r = i.length,
                s = (r - (this.closed ? 0 : 1)) * t;
                let a,
                o,
                l = Math.floor(s),
                c = s - l;
                this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1),
                this.closed || l > 0 ? a = i[(l - 1) % r] : (To.subVectors(i[0], i[1]).add(i[0]), a = To);
                const h = i[l % r],
                u = i[(l + 1) % r];
                if (this.closed || l + 2 < r ? o = i[(l + 2) % r] : (To.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), o = To), "centripetal" === this.curveType || "chordal" === this.curveType) {
                    const t = "chordal" === this.curveType ? .5 : .25;
                    let e = Math.pow(a.distanceToSquared(h), t),
                    n = Math.pow(h.distanceToSquared(u), t),
                    i = Math.pow(u.distanceToSquared(o), t);
                    n < 1e-4 && (n = 1),
                    e < 1e-4 && (e = n),
                    i < 1e-4 && (i = n),
                    Eo.initNonuniformCatmullRom(a.x, h.x, u.x, o.x, e, n, i),
                    Ao.initNonuniformCatmullRom(a.y, h.y, u.y, o.y, e, n, i),
                    Lo.initNonuniformCatmullRom(a.z, h.z, u.z, o.z, e, n, i)
                } else
                    "catmullrom" === this.curveType && (Eo.initCatmullRom(a.x, h.x, u.x, o.x, this.tension), Ao.initCatmullRom(a.y, h.y, u.y, o.y, this.tension), Lo.initCatmullRom(a.z, h.z, u.z, o.z, this.tension));
                return n.set(Eo.calc(c), Ao.calc(c), Lo.calc(c)),
                n
            }
            copy(t) {
                super.copy(t),
                this.points = [];
                for (let e = 0, n = t.points.length; e < n; e++) {
                    const n = t.points[e];
                    this.points.push(n.clone())
                }
                return this.closed = t.closed,
                this.curveType = t.curveType,
                this.tension = t.tension,
                this
            }
            toJSON() {
                const t = super.toJSON();
                t.points = [];
                for (let e = 0, n = this.points.length; e < n; e++) {
                    const n = this.points[e];
                    t.points.push(n.toArray())
                }
                return t.closed = this.closed,
                t.curveType = this.curveType,
                t.tension = this.tension,
                t
            }
            fromJSON(t) {
                super.fromJSON(t),
                this.points = [];
                for (let e = 0, n = t.points.length; e < n; e++) {
                    const n = t.points[e];
                    this.points.push(new Nt().fromArray(n))
                }
                return this.closed = t.closed,
                this.curveType = t.curveType,
                this.tension = t.tension,
                this
            }
        }
        function Co(t, e, n, i, r) {
            const s = .5 * (i - e),
            a = .5 * (r - n),
            o = t * t;
            return (2 * n - 2 * i + s + a) * (t * o) + (-3 * n + 3 * i - 2 * s - a) * o + s * t + n
        }
        function Po(t, e, n, i) {
            return function (t, e) {
                const n = 1 - t;
                return n * n * e
            }
            (t, e) + function (t, e) {
                return 2 * (1 - t) * t * e
            }
            (t, n) + function (t, e) {
                return t * t * e
            }
            (t, i)
        }
        function Do(t, e, n, i, r) {
            return function (t, e) {
                const n = 1 - t;
                return n * n * n * e
            }
            (t, e) + function (t, e) {
                const n = 1 - t;
                return 3 * n * n * t * e
            }
            (t, n) + function (t, e) {
                return 3 * (1 - t) * t * t * e
            }
            (t, i) + function (t, e) {
                return t * t * t * e
            }
            (t, r)
        }
        Ro.prototype.isCatmullRomCurve3 = !0;
        class Io extends Mo {
            constructor(t = new vt, e = new vt, n = new vt, i = new vt) {
                super(),
                this.type = "CubicBezierCurve",
                this.v0 = t,
                this.v1 = e,
                this.v2 = n,
                this.v3 = i
            }
            getPoint(t, e = new vt) {
                const n = e,
                i = this.v0,
                r = this.v1,
                s = this.v2,
                a = this.v3;
                return n.set(Do(t, i.x, r.x, s.x, a.x), Do(t, i.y, r.y, s.y, a.y)),
                n
            }
            copy(t) {
                return super.copy(t),
                this.v0.copy(t.v0),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this.v3.copy(t.v3),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v0 = this.v0.toArray(),
                t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t.v3 = this.v3.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v0.fromArray(t.v0),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this.v3.fromArray(t.v3),
                this
            }
        }
        Io.prototype.isCubicBezierCurve = !0;
        class No extends Mo {
            constructor(t = new Nt, e = new Nt, n = new Nt, i = new Nt) {
                super(),
                this.type = "CubicBezierCurve3",
                this.v0 = t,
                this.v1 = e,
                this.v2 = n,
                this.v3 = i
            }
            getPoint(t, e = new Nt) {
                const n = e,
                i = this.v0,
                r = this.v1,
                s = this.v2,
                a = this.v3;
                return n.set(Do(t, i.x, r.x, s.x, a.x), Do(t, i.y, r.y, s.y, a.y), Do(t, i.z, r.z, s.z, a.z)),
                n
            }
            copy(t) {
                return super.copy(t),
                this.v0.copy(t.v0),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this.v3.copy(t.v3),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v0 = this.v0.toArray(),
                t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t.v3 = this.v3.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v0.fromArray(t.v0),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this.v3.fromArray(t.v3),
                this
            }
        }
        No.prototype.isCubicBezierCurve3 = !0;
        class zo extends Mo {
            constructor(t = new vt, e = new vt) {
                super(),
                this.type = "LineCurve",
                this.v1 = t,
                this.v2 = e
            }
            getPoint(t, e = new vt) {
                const n = e;
                return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)),
                n
            }
            getPointAt(t, e) {
                return this.getPoint(t, e)
            }
            getTangent(t, e) {
                const n = e || new vt;
                return n.copy(this.v2).sub(this.v1).normalize(),
                n
            }
            copy(t) {
                return super.copy(t),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this
            }
        }
        zo.prototype.isLineCurve = !0;
        class Bo extends Mo {
            constructor(t = new Nt, e = new Nt) {
                super(),
                this.type = "LineCurve3",
                this.isLineCurve3 = !0,
                this.v1 = t,
                this.v2 = e
            }
            getPoint(t, e = new Nt) {
                const n = e;
                return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)),
                n
            }
            getPointAt(t, e) {
                return this.getPoint(t, e)
            }
            copy(t) {
                return super.copy(t),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this
            }
        }
        class Fo extends Mo {
            constructor(t = new vt, e = new vt, n = new vt) {
                super(),
                this.type = "QuadraticBezierCurve",
                this.v0 = t,
                this.v1 = e,
                this.v2 = n
            }
            getPoint(t, e = new vt) {
                const n = e,
                i = this.v0,
                r = this.v1,
                s = this.v2;
                return n.set(Po(t, i.x, r.x, s.x), Po(t, i.y, r.y, s.y)),
                n
            }
            copy(t) {
                return super.copy(t),
                this.v0.copy(t.v0),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v0 = this.v0.toArray(),
                t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v0.fromArray(t.v0),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this
            }
        }
        Fo.prototype.isQuadraticBezierCurve = !0;
        class Oo extends Mo {
            constructor(t = new Nt, e = new Nt, n = new Nt) {
                super(),
                this.type = "QuadraticBezierCurve3",
                this.v0 = t,
                this.v1 = e,
                this.v2 = n
            }
            getPoint(t, e = new Nt) {
                const n = e,
                i = this.v0,
                r = this.v1,
                s = this.v2;
                return n.set(Po(t, i.x, r.x, s.x), Po(t, i.y, r.y, s.y), Po(t, i.z, r.z, s.z)),
                n
            }
            copy(t) {
                return super.copy(t),
                this.v0.copy(t.v0),
                this.v1.copy(t.v1),
                this.v2.copy(t.v2),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.v0 = this.v0.toArray(),
                t.v1 = this.v1.toArray(),
                t.v2 = this.v2.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.v0.fromArray(t.v0),
                this.v1.fromArray(t.v1),
                this.v2.fromArray(t.v2),
                this
            }
        }
        Oo.prototype.isQuadraticBezierCurve3 = !0;
        class Uo extends Mo {
            constructor(t = []) {
                super(),
                this.type = "SplineCurve",
                this.points = t
            }
            getPoint(t, e = new vt) {
                const n = e,
                i = this.points,
                r = (i.length - 1) * t,
                s = Math.floor(r),
                a = r - s,
                o = i[0 === s ? s : s - 1],
                l = i[s],
                c = i[s > i.length - 2 ? i.length - 1 : s + 1],
                h = i[s > i.length - 3 ? i.length - 1 : s + 2];
                return n.set(Co(a, o.x, l.x, c.x, h.x), Co(a, o.y, l.y, c.y, h.y)),
                n
            }
            copy(t) {
                super.copy(t),
                this.points = [];
                for (let e = 0, n = t.points.length; e < n; e++) {
                    const n = t.points[e];
                    this.points.push(n.clone())
                }
                return this
            }
            toJSON() {
                const t = super.toJSON();
                t.points = [];
                for (let e = 0, n = this.points.length; e < n; e++) {
                    const n = this.points[e];
                    t.points.push(n.toArray())
                }
                return t
            }
            fromJSON(t) {
                super.fromJSON(t),
                this.points = [];
                for (let e = 0, n = t.points.length; e < n; e++) {
                    const n = t.points[e];
                    this.points.push(new vt().fromArray(n))
                }
                return this
            }
        }
        Uo.prototype.isSplineCurve = !0;
        var Ho = Object.freeze({
            __proto__: null,
            ArcCurve: wo,
            CatmullRomCurve3: Ro,
            CubicBezierCurve: Io,
            CubicBezierCurve3: No,
            EllipseCurve: bo,
            LineCurve: zo,
            LineCurve3: Bo,
            QuadraticBezierCurve: Fo,
            QuadraticBezierCurve3: Oo,
            SplineCurve: Uo
        });
        class Go extends Mo {
            constructor() {
                super(),
                this.type = "CurvePath",
                this.curves = [],
                this.autoClose = !1
            }
            add(t) {
                this.curves.push(t)
            }
            closePath() {
                const t = this.curves[0].getPoint(0),
                e = this.curves[this.curves.length - 1].getPoint(1);
                t.equals(e) || this.curves.push(new zo(e, t))
            }
            getPoint(t, e) {
                const n = t * this.getLength(),
                i = this.getCurveLengths();
                let r = 0;
                for (; r < i.length; ) {
                    if (i[r] >= n) {
                        const t = i[r] - n,
                        s = this.curves[r],
                        a = s.getLength(),
                        o = 0 === a ? 0 : 1 - t / a;
                        return s.getPointAt(o, e)
                    }
                    r++
                }
                return null
            }
            getLength() {
                const t = this.getCurveLengths();
                return t[t.length - 1]
            }
            updateArcLengths() {
                this.needsUpdate = !0,
                this.cacheLengths = null,
                this.getCurveLengths()
            }
            getCurveLengths() {
                if (this.cacheLengths && this.cacheLengths.length === this.curves.length)
                    return this.cacheLengths;
                const t = [];
                let e = 0;
                for (let n = 0, i = this.curves.length; n < i; n++)
                    e += this.curves[n].getLength(), t.push(e);
                return this.cacheLengths = t,
                t
            }
            getSpacedPoints(t = 40) {
                const e = [];
                for (let n = 0; n <= t; n++)
                    e.push(this.getPoint(n / t));
                return this.autoClose && e.push(e[0]),
                e
            }
            getPoints(t = 12) {
                const e = [];
                let n;
                for (let i = 0, r = this.curves; i < r.length; i++) {
                    const s = r[i],
                    a = s && s.isEllipseCurve ? 2 * t : s && (s.isLineCurve || s.isLineCurve3) ? 1 : s && s.isSplineCurve ? t * s.points.length : t,
                    o = s.getPoints(a);
                    for (let t = 0; t < o.length; t++) {
                        const i = o[t];
                        n && n.equals(i) || (e.push(i), n = i)
                    }
                }
                return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]),
                e
            }
            copy(t) {
                super.copy(t),
                this.curves = [];
                for (let e = 0, n = t.curves.length; e < n; e++) {
                    const n = t.curves[e];
                    this.curves.push(n.clone())
                }
                return this.autoClose = t.autoClose,
                this
            }
            toJSON() {
                const t = super.toJSON();
                t.autoClose = this.autoClose,
                t.curves = [];
                for (let e = 0, n = this.curves.length; e < n; e++) {
                    const n = this.curves[e];
                    t.curves.push(n.toJSON())
                }
                return t
            }
            fromJSON(t) {
                super.fromJSON(t),
                this.autoClose = t.autoClose,
                this.curves = [];
                for (let e = 0, n = t.curves.length; e < n; e++) {
                    const n = t.curves[e];
                    this.curves.push(new Ho[n.type]().fromJSON(n))
                }
                return this
            }
        }
        class ko extends Go {
            constructor(t) {
                super(),
                this.type = "Path",
                this.currentPoint = new vt,
                t && this.setFromPoints(t)
            }
            setFromPoints(t) {
                this.moveTo(t[0].x, t[0].y);
                for (let e = 1, n = t.length; e < n; e++)
                    this.lineTo(t[e].x, t[e].y);
                return this
            }
            moveTo(t, e) {
                return this.currentPoint.set(t, e),
                this
            }
            lineTo(t, e) {
                const n = new zo(this.currentPoint.clone(), new vt(t, e));
                return this.curves.push(n),
                this.currentPoint.set(t, e),
                this
            }
            quadraticCurveTo(t, e, n, i) {
                const r = new Fo(this.currentPoint.clone(), new vt(t, e), new vt(n, i));
                return this.curves.push(r),
                this.currentPoint.set(n, i),
                this
            }
            bezierCurveTo(t, e, n, i, r, s) {
                const a = new Io(this.currentPoint.clone(), new vt(t, e), new vt(n, i), new vt(r, s));
                return this.curves.push(a),
                this.currentPoint.set(r, s),
                this
            }
            splineThru(t) {
                const e = [this.currentPoint.clone()].concat(t),
                n = new Uo(e);
                return this.curves.push(n),
                this.currentPoint.copy(t[t.length - 1]),
                this
            }
            arc(t, e, n, i, r, s) {
                const a = this.currentPoint.x,
                o = this.currentPoint.y;
                return this.absarc(t + a, e + o, n, i, r, s),
                this
            }
            absarc(t, e, n, i, r, s) {
                return this.absellipse(t, e, n, n, i, r, s),
                this
            }
            ellipse(t, e, n, i, r, s, a, o) {
                const l = this.currentPoint.x,
                c = this.currentPoint.y;
                return this.absellipse(t + l, e + c, n, i, r, s, a, o),
                this
            }
            absellipse(t, e, n, i, r, s, a, o) {
                const l = new bo(t, e, n, i, r, s, a, o);
                if (this.curves.length > 0) {
                    const t = l.getPoint(0);
                    t.equals(this.currentPoint) || this.lineTo(t.x, t.y)
                }
                this.curves.push(l);
                const c = l.getPoint(1);
                return this.currentPoint.copy(c),
                this
            }
            copy(t) {
                return super.copy(t),
                this.currentPoint.copy(t.currentPoint),
                this
            }
            toJSON() {
                const t = super.toJSON();
                return t.currentPoint = this.currentPoint.toArray(),
                t
            }
            fromJSON(t) {
                return super.fromJSON(t),
                this.currentPoint.fromArray(t.currentPoint),
                this
            }
        }
        class Vo extends ko {
            constructor(t) {
                super(t),
                this.uuid = ct(),
                this.type = "Shape",
                this.holes = []
            }
            getPointsHoles(t) {
                const e = [];
                for (let n = 0, i = this.holes.length; n < i; n++)
                    e[n] = this.holes[n].getPoints(t);
                return e
            }
            extractPoints(t) {
                return {
                    shape: this.getPoints(t),
                    holes: this.getPointsHoles(t)
                }
            }
            copy(t) {
                super.copy(t),
                this.holes = [];
                for (let e = 0, n = t.holes.length; e < n; e++) {
                    const n = t.holes[e];
                    this.holes.push(n.clone())
                }
                return this
            }
            toJSON() {
                const t = super.toJSON();
                t.uuid = this.uuid,
                t.holes = [];
                for (let e = 0, n = this.holes.length; e < n; e++) {
                    const n = this.holes[e];
                    t.holes.push(n.toJSON())
                }
                return t
            }
            fromJSON(t) {
                super.fromJSON(t),
                this.uuid = t.uuid,
                this.holes = [];
                for (let e = 0, n = t.holes.length; e < n; e++) {
                    const n = t.holes[e];
                    this.holes.push(new ko().fromJSON(n))
                }
                return this
            }
        }
        const Wo = function (t, e, n = 2) {
            const i = e && e.length,
            r = i ? e[0] * n : t.length;
            let s = jo(t, 0, r, n, !0);
            const a = [];
            if (!s || s.next === s.prev)
                return a;
            let o,
            l,
            c,
            h,
            u,
            d,
            p;
            if (i && (s = function (t, e, n, i) {
                    const r = [];
                    let s,
                    a,
                    o,
                    l,
                    c;
                    for (s = 0, a = e.length; s < a; s++)
                        o = e[s] * i, l = s < a - 1 ? e[s + 1] * i : t.length, c = jo(t, o, l, i, !1), c === c.next && (c.steiner = !0) , r.push(nl(c));
                        for (r.sort(Ko), s = 0; s < r.length; s++)
                            $o(r[s], n), n = qo(n, n.next);
                        return n
                    }
                        (t, e, s, n)), t.length > 80 * n) {
                    o = c = t[0],
                    l = h = t[1];
                    for (let e = n; e < r; e += n)
                        u = t[e], d = t[e + 1], u < o && (o = u), d < l && (l = d), u > c && (c = u), d > h && (h = d);
                    p = Math.max(c - o, h - l),
                    p = 0 !== p ? 1 / p : 0
                }
            return Xo(s, a, n, o, l, p),
            a
        };
        function jo(t, e, n, i, r) {
            let s,
            a;
            if (r === function (t, e, n, i) {
                let r = 0;
                for (let s = e, a = n - i; s < n; s += i)
                    r += (t[a] - t[s])
                         * (t[s + 1] + t[a + 1]), a = s;
                    return r
                }
                    (t, e, n, i) > 0)for (s = e; s < n; s += i)
                    a = dl(s, t[s], t[s + 1], a);
            else
                for (s = n - i; s >= e; s -= i)
                    a = dl(s, t[s], t[s + 1], a);
            return a && al(a, a.next) && (pl(a), a = a.next),
            a
        }
        function qo(t, e) {
            if (!t)
                return t;
            e || (e = t);
            let n,
            i = t;
            do {
                if (n = !1, i.steiner || !al(i, i.next) && 0 !== sl(i.prev, i, i.next))
                    i = i.next;
                else {
                    if (pl(i), i = e = i.prev, i === i.next)
                        break;
                    n = !0
                }
            } while (n || i !== e);
            return e
        }
        function Xo(t, e, n, i, r, s, a) {
            if (!t)
                return;
            !a && s && function (t, e, n, i) {
                let r = t;
                do {
                    null === r.z && (r.z = el(r.x, r.y, e, n, i)),
                    r.prevZ = r.prev,
                    r.nextZ = r.next,
                    r = r.next
                } while (r !== t);
                r.prevZ.nextZ = null,
                r.prevZ = null,
                function (t) {
                    let e,
                    n,
                    i,
                    r,
                    s,
                    a,
                    o,
                    l,
                    c = 1;
                    do {
                        for (n = t, t = null, s = null, a = 0; n; ) {
                            for (a++, i = n, o = 0, e = 0; e < c && (o++, i = i.nextZ, i); e++);
                            for (l = c; o > 0 || l > 0 && i; )
                                0 !== o && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, o--) : (r = i, i = i.nextZ, l--), s ? s.nextZ = r : t = r, r.prevZ = s, s = r;
                            n = i
                        }
                        s.nextZ = null,
                        c *= 2
                    } while (a > 1)
                }
                (r)
            }
            (t, i, r, s);
            let o,
            l,
            c = t;
            for (; t.prev !== t.next; )
                if (o = t.prev, l = t.next, s ? Yo(t, i, r, s) : Jo(t))
                    e.push(o.i / n), e.push(t.i / n), e.push(l.i / n), pl(t), t = l.next, c = l.next;
                else if ((t = l) === c) {
                    a ? 1 === a ? Xo(t = Zo(qo(t), e, n), e, n, i, r, s, 2) : 2 === a && Qo(t, e, n, i, r, s) : Xo(qo(t), e, n, i, r, s, 1);
                    break
                }
        }
        function Jo(t) {
            const e = t.prev,
            n = t,
            i = t.next;
            if (sl(e, n, i) >= 0)
                return !1;
            let r = t.next.next;
            for (; r !== t.prev; ) {
                if (il(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && sl(r.prev, r, r.next) >= 0)
                    return !1;
                r = r.next
            }
            return !0
        }
        function Yo(t, e, n, i) {
            const r = t.prev,
            s = t,
            a = t.next;
            if (sl(r, s, a) >= 0)
                return !1;
            const o = r.x < s.x ? r.x < a.x ? r.x : a.x : s.x < a.x ? s.x : a.x,
            l = r.y < s.y ? r.y < a.y ? r.y : a.y : s.y < a.y ? s.y : a.y,
            c = r.x > s.x ? r.x > a.x ? r.x : a.x : s.x > a.x ? s.x : a.x,
            h = r.y > s.y ? r.y > a.y ? r.y : a.y : s.y > a.y ? s.y : a.y,
            u = el(o, l, e, n, i),
            d = el(c, h, e, n, i);
            let p = t.prevZ,
            m = t.nextZ;
            for (; p && p.z >= u && m && m.z <= d; ) {
                if (p !== t.prev && p !== t.next && il(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && sl(p.prev, p, p.next) >= 0)
                    return !1;
                if (p = p.prevZ, m !== t.prev && m !== t.next && il(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && sl(m.prev, m, m.next) >= 0)
                    return !1;
                m = m.nextZ
            }
            for (; p && p.z >= u; ) {
                if (p !== t.prev && p !== t.next && il(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && sl(p.prev, p, p.next) >= 0)
                    return !1;
                p = p.prevZ
            }
            for (; m && m.z <= d; ) {
                if (m !== t.prev && m !== t.next && il(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && sl(m.prev, m, m.next) >= 0)
                    return !1;
                m = m.nextZ
            }
            return !0
        }
        function Zo(t, e, n) {
            let i = t;
            do {
                const r = i.prev,
                s = i.next.next;
                !al(r, s) && ol(r, i, i.next, s) && hl(r, s) && hl(s, r) && (e.push(r.i / n), e.push(i.i / n), e.push(s.i / n), pl(i), pl(i.next), i = t = s),
                i = i.next
            } while (i !== t);
            return qo(i)
        }
        function Qo(t, e, n, i, r, s) {
            let a = t;
            do {
                let t = a.next.next;
                for (; t !== a.prev; ) {
                    if (a.i !== t.i && rl(a, t)) {
                        let o = ul(a, t);
                        return a = qo(a, a.next),
                        o = qo(o, o.next),
                        Xo(a, e, n, i, r, s),
                        void Xo(o, e, n, i, r, s)
                    }
                    t = t.next
                }
                a = a.next
            } while (a !== t)
        }
        function Ko(t, e) {
            return t.x - e.x
        }
        function $o(t, e) {
            if (e = function (t, e) {
                let n = e;
                const i = t.x,
                r = t.y;
                let s,
                a = -1 / 0;
                do {
                    if (r <= n.y && r >= n.next.y && n.next.y !== n.y) {
                        const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y);
                        if (t <= i && t > a) {
                            if (a = t, t === i) {
                                if (r === n.y)
                                    return n;
                                if (r === n.next.y)
                                    return n.next
                            }
                            s = n.x < n.next.x ? n : n.next
                        }
                    }
                    n = n.next
                } while (n !== e);
                if (!s)
                    return null;
                if (i === a)
                    return s;
                const o = s,
                l = s.x,
                c = s.y;
                let h,
                u = 1 / 0;
                n = s;
                do {
                    i >= n.x && n.x >= l && i !== n.x && il(r < c ? i : a, r, l, c, r < c ? a : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), hl(n, t) && (h < u || h === u && (n.x > s.x || n.x === s.x && tl(s, n))) && (s = n, u = h)),
                    n = n.next
                } while (n !== o);
                return s
            }
                (t, e), e) {
                const n = ul(e, t);
                qo(e, e.next),
                qo(n, n.next)
            }
        }
        function tl(t, e) {
            return sl(t.prev, t, e.prev) < 0 && sl(e.next, t, t.next) < 0
        }
        function el(t, e, n, i, r) {
            return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1
        }
        function nl(t) {
            let e = t,
            n = t;
            do {
                (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e),
                e = e.next
            } while (e !== t);
            return n
        }
        function il(t, e, n, i, r, s, a, o) {
            return (r - a) * (e - o) - (t - a) * (s - o) >= 0 && (t - a) * (i - o) - (n - a) * (e - o) >= 0 && (n - a) * (s - o) - (r - a) * (i - o) >= 0
        }
        function rl(t, e) {
            return t.next.i !== e.i && t.prev.i !== e.i && !function (t, e) {
                let n = t;
                do {
                    if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && ol(n, n.next, t, e))
                        return !0;
                    n = n.next
                } while (n !== t);
                return !1
            }
            (t, e) && (hl(t, e) && hl(e, t) && function (t, e) {
                let n = t,
                i = !1;
                const r = (t.x + e.x) / 2,
                s = (t.y + e.y) / 2;
                do {
                    n.y > s != n.next.y > s && n.next.y !== n.y && r < (n.next.x - n.x) * (s - n.y) / (n.next.y - n.y) + n.x && (i = !i),
                    n = n.next
                } while (n !== t);
                return i
            }
                (t, e) && (sl(t.prev, t, e.prev) || sl(t, e.prev, e)) || al(t, e) && sl(t.prev, t, t.next) > 0 && sl(e.prev, e, e.next) > 0)
        }
        function sl(t, e, n) {
            return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y)
        }
        function al(t, e) {
            return t.x === e.x && t.y === e.y
        }
        function ol(t, e, n, i) {
            const r = cl(sl(t, e, n)),
            s = cl(sl(t, e, i)),
            a = cl(sl(n, i, t)),
            o = cl(sl(n, i, e));
            return r !== s && a !== o || !(0 !== r || !ll(t, n, e)) || !(0 !== s || !ll(t, i, e)) || !(0 !== a || !ll(n, t, i)) || !(0 !== o || !ll(n, e, i))
        }
        function ll(t, e, n) {
            return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y)
        }
        function cl(t) {
            return t > 0 ? 1 : t < 0 ? -1 : 0
        }
        function hl(t, e) {
            return sl(t.prev, t, t.next) < 0 ? sl(t, e, t.next) >= 0 && sl(t, t.prev, e) >= 0 : sl(t, e, t.prev) < 0 || sl(t, t.next, e) < 0
        }
        function ul(t, e) {
            const n = new ml(t.i, t.x, t.y),
            i = new ml(e.i, e.x, e.y),
            r = t.next,
            s = e.prev;
            return t.next = e,
            e.prev = t,
            n.next = r,
            r.prev = n,
            i.next = n,
            n.prev = i,
            s.next = i,
            i.prev = s,
            i
        }
        function dl(t, e, n, i) {
            const r = new ml(t, e, n);
            return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r),
            r
        }
        function pl(t) {
            t.next.prev = t.prev,
            t.prev.next = t.next,
            t.prevZ && (t.prevZ.nextZ = t.nextZ),
            t.nextZ && (t.nextZ.prevZ = t.prevZ)
        }
        function ml(t, e, n) {
            this.i = t,
            this.x = e,
            this.y = n,
            this.prev = null,
            this.next = null,
            this.z = null,
            this.prevZ = null,
            this.nextZ = null,
            this.steiner = !1
        }
        class fl {
            static area(t) {
                const e = t.length;
                let n = 0;
                for (let i = e - 1, r = 0; r < e; i = r++)
                    n += t[i].x * t[r].y - t[r].x * t[i].y;
                return .5 * n
            }
            static isClockWise(t) {
                return fl.area(t) < 0
            }
            static triangulateShape(t, e) {
                const n = [],
                i = [],
                r = [];
                gl(t),
                vl(n, t);
                let s = t.length;
                e.forEach(gl);
                for (let t = 0; t < e.length; t++)
                    i.push(s), s += e[t].length, vl(n, e[t]);
                const a = Wo(n, i);
                for (let t = 0; t < a.length; t += 3)
                    r.push(a.slice(t, t + 3));
                return r
            }
        }
        function gl(t) {
            const e = t.length;
            e > 2 && t[e - 1].equals(t[0]) && t.pop()
        }
        function vl(t, e) {
            for (let n = 0; n < e.length; n++)
                t.push(e[n].x), t.push(e[n].y)
        }
        class yl extends Tn {
            constructor(t = new Vo([new vt(.5, .5), new vt( - .5, .5), new vt( - .5,  - .5), new vt(.5,  - .5)]), e = {}) {
                super(),
                this.type = "ExtrudeGeometry",
                this.parameters = {
                    shapes: t,
                    options: e
                },
                t = Array.isArray(t) ? t : [t];
                const n = this,
                i = [],
                r = [];
                for (let e = 0, n = t.length; e < n; e++) {
                    s(t[e])
                }
                function s(t) {
                    const s = [],
                    a = void 0 !== e.curveSegments ? e.curveSegments : 12,
                    o = void 0 !== e.steps ? e.steps : 1;
                    let l = void 0 !== e.depth ? e.depth : 1,
                    c = void 0 === e.bevelEnabled || e.bevelEnabled,
                    h = void 0 !== e.bevelThickness ? e.bevelThickness : .2,
                    u = void 0 !== e.bevelSize ? e.bevelSize : h - .1,
                    d = void 0 !== e.bevelOffset ? e.bevelOffset : 0,
                    p = void 0 !== e.bevelSegments ? e.bevelSegments : 3;
                    const m = e.extrudePath,
                    f = void 0 !== e.UVGenerator ? e.UVGenerator : xl;
                    void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount);
                    let g,
                    v,
                    y,
                    x,
                    _,
                    M = !1;
                    m && (g = m.getSpacedPoints(o), M = !0, c = !1, v = m.computeFrenetFrames(o, !1), y = new Nt, x = new Nt, _ = new Nt),
                    c || (p = 0, h = 0, u = 0, d = 0);
                    const b = t.extractPoints(a);
                    let w = b.shape;
                    const S = b.holes;
                    if (!fl.isClockWise(w)) {
                        w = w.reverse();
                        for (let t = 0, e = S.length; t < e; t++) {
                            const e = S[t];
                            fl.isClockWise(e) && (S[t] = e.reverse())
                        }
                    }
                    const T = fl.triangulateShape(w, S),
                    E = w;
                    for (let t = 0, e = S.length; t < e; t++) {
                        const e = S[t];
                        w = w.concat(e)
                    }
                    function A(t, e, n) {
                        return e || console.error("THREE.ExtrudeGeometry: vec does not exist"),
                        e.clone().multiplyScalar(n).add(t)
                    }
                    const L = w.length,
                    R = T.length;
                    function C(t, e, n) {
                        let i,
                        r,
                        s;
                        const a = t.x - e.x,
                        o = t.y - e.y,
                        l = n.x - t.x,
                        c = n.y - t.y,
                        h = a * a + o * o,
                        u = a * c - o * l;
                        if (Math.abs(u) > Number.EPSILON) {
                            const u = Math.sqrt(h),
                            d = Math.sqrt(l * l + c * c),
                            p = e.x - o / u,
                            m = e.y + a / u,
                            f = ((n.x - c / d - p) * c - (n.y + l / d - m) * l) / (a * c - o * l);
                            i = p + a * f - t.x,
                            r = m + o * f - t.y;
                            const g = i * i + r * r;
                            if (g <= 2)
                                return new vt(i, r);
                            s = Math.sqrt(g / 2)
                        } else {
                            let t = !1;
                            a > Number.EPSILON ? l > Number.EPSILON && (t = !0) : a < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(o) === Math.sign(c) && (t = !0),
                            t ? (i = -o, r = a, s = Math.sqrt(h)) : (i = a, r = o, s = Math.sqrt(h / 2))
                        }
                        return new vt(i / s, r / s)
                    }
                    const P = [];
                    for (let t = 0, e = E.length, n = e - 1, i = t + 1; t < e; t++, n++, i++)
                        n === e && (n = 0), i === e && (i = 0), P[t] = C(E[t], E[n], E[i]);
                    const D = [];
                    let I,
                    N = P.concat();
                    for (let t = 0, e = S.length; t < e; t++) {
                        const e = S[t];
                        I = [];
                        for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++)
                            i === n && (i = 0), r === n && (r = 0), I[t] = C(e[t], e[i], e[r]);
                        D.push(I),
                        N = N.concat(I)
                    }
                    for (let t = 0; t < p; t++) {
                        const e = t / p,
                        n = h * Math.cos(e * Math.PI / 2),
                        i = u * Math.sin(e * Math.PI / 2) + d;
                        for (let t = 0, e = E.length; t < e; t++) {
                            const e = A(E[t], P[t], i);
                            F(e.x, e.y, -n)
                        }
                        for (let t = 0, e = S.length; t < e; t++) {
                            const e = S[t];
                            I = D[t];
                            for (let t = 0, r = e.length; t < r; t++) {
                                const r = A(e[t], I[t], i);
                                F(r.x, r.y, -n)
                            }
                        }
                    }
                    const z = u + d;
                    for (let t = 0; t < L; t++) {
                        const e = c ? A(w[t], N[t], z) : w[t];
                        M ? (x.copy(v.normals[0]).multiplyScalar(e.x), y.copy(v.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(y), F(_.x, _.y, _.z)) : F(e.x, e.y, 0)
                    }
                    for (let t = 1; t <= o; t++)
                        for (let e = 0; e < L; e++) {
                            const n = c ? A(w[e], N[e], z) : w[e];
                            M ? (x.copy(v.normals[t]).multiplyScalar(n.x), y.copy(v.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(y), F(_.x, _.y, _.z)) : F(n.x, n.y, l / o * t)
                        }
                    for (let t = p - 1; t >= 0; t--) {
                        const e = t / p,
                        n = h * Math.cos(e * Math.PI / 2),
                        i = u * Math.sin(e * Math.PI / 2) + d;
                        for (let t = 0, e = E.length; t < e; t++) {
                            const e = A(E[t], P[t], i);
                            F(e.x, e.y, l + n)
                        }
                        for (let t = 0, e = S.length; t < e; t++) {
                            const e = S[t];
                            I = D[t];
                            for (let t = 0, r = e.length; t < r; t++) {
                                const r = A(e[t], I[t], i);
                                M ? F(r.x, r.y + g[o - 1].y, g[o - 1].x + n) : F(r.x, r.y, l + n)
                            }
                        }
                    }
                    function B(t, e) {
                        let n = t.length;
                        for (; --n >= 0; ) {
                            const i = n;
                            let r = n - 1;
                            r < 0 && (r = t.length - 1);
                            for (let t = 0, n = o + 2 * p; t < n; t++) {
                                const n = L * t,
                                s = L * (t + 1);
                                U(e + i + n, e + r + n, e + r + s, e + i + s)
                            }
                        }
                    }
                    function F(t, e, n) {
                        s.push(t),
                        s.push(e),
                        s.push(n)
                    }
                    function O(t, e, r) {
                        H(t),
                        H(e),
                        H(r);
                        const s = i.length / 3,
                        a = f.generateTopUV(n, i, s - 3, s - 2, s - 1);
                        G(a[0]),
                        G(a[1]),
                        G(a[2])
                    }
                    function U(t, e, r, s) {
                        H(t),
                        H(e),
                        H(s),
                        H(e),
                        H(r),
                        H(s);
                        const a = i.length / 3,
                        o = f.generateSideWallUV(n, i, a - 6, a - 3, a - 2, a - 1);
                        G(o[0]),
                        G(o[1]),
                        G(o[3]),
                        G(o[1]),
                        G(o[2]),
                        G(o[3])
                    }
                    function H(t) {
                        i.push(s[3 * t + 0]),
                        i.push(s[3 * t + 1]),
                        i.push(s[3 * t + 2])
                    }
                    function G(t) {
                        r.push(t.x),
                        r.push(t.y)
                    }
                    !function () {
                        const t = i.length / 3;
                        if (c) {
                            let t = 0,
                            e = L * t;
                            for (let t = 0; t < R; t++) {
                                const n = T[t];
                                O(n[2] + e, n[1] + e, n[0] + e)
                            }
                            t = o + 2 * p,
                            e = L * t;
                            for (let t = 0; t < R; t++) {
                                const n = T[t];
                                O(n[0] + e, n[1] + e, n[2] + e)
                            }
                        } else {
                            for (let t = 0; t < R; t++) {
                                const e = T[t];
                                O(e[2], e[1], e[0])
                            }
                            for (let t = 0; t < R; t++) {
                                const e = T[t];
                                O(e[0] + L * o, e[1] + L * o, e[2] + L * o)
                            }
                        }
                        n.addGroup(t, i.length / 3 - t, 0)
                    }
                    (),
                    function () {
                        const t = i.length / 3;
                        let e = 0;
                        B(E, e),
                        e += E.length;
                        for (let t = 0, n = S.length; t < n; t++) {
                            const n = S[t];
                            B(n, e),
                            e += n.length
                        }
                        n.addGroup(t, i.length / 3 - t, 1)
                    }
                    ()
                }
                this.setAttribute("position", new gn(i, 3)),
                this.setAttribute("uv", new gn(r, 2)),
                this.computeVertexNormals()
            }
            toJSON() {
                const t = super.toJSON();
                return function (t, e, n) {
                    if (n.shapes = [], Array.isArray(t))
                        for (let e = 0, i = t.length; e < i; e++) {
                            const i = t[e];
                            n.shapes.push(i.uuid)
                        }
                    else
                        n.shapes.push(t.uuid);
                    void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON());
                    return n
                }
                (this.parameters.shapes, this.parameters.options, t)
            }
            static fromJSON(t, e) {
                const n = [];
                for (let i = 0, r = t.shapes.length; i < r; i++) {
                    const r = e[t.shapes[i]];
                    n.push(r)
                }
                const i = t.options.extrudePath;
                return void 0 !== i && (t.options.extrudePath = new Ho[i.type]().fromJSON(i)),
                new yl(n, t.options)
            }
        }
        const xl = {
            generateTopUV: function (t, e, n, i, r) {
                const s = e[3 * n],
                a = e[3 * n + 1],
                o = e[3 * i],
                l = e[3 * i + 1],
                c = e[3 * r],
                h = e[3 * r + 1];
                return [new vt(s, a), new vt(o, l), new vt(c, h)]
            },
            generateSideWallUV: function (t, e, n, i, r, s) {
                const a = e[3 * n],
                o = e[3 * n + 1],
                l = e[3 * n + 2],
                c = e[3 * i],
                h = e[3 * i + 1],
                u = e[3 * i + 2],
                d = e[3 * r],
                p = e[3 * r + 1],
                m = e[3 * r + 2],
                f = e[3 * s],
                g = e[3 * s + 1],
                v = e[3 * s + 2];
                return Math.abs(o - h) < Math.abs(a - c) ? [new vt(a, 1 - l), new vt(c, 1 - u), new vt(d, 1 - m), new vt(f, 1 - v)] : [new vt(o, 1 - l), new vt(h, 1 - u), new vt(p, 1 - m), new vt(g, 1 - v)]
            }
        };
        class _l extends mo {
            constructor(t = 1, e = 0) {
                const n = (1 + Math.sqrt(5)) / 2;
                super([-1, n, 0, 1, n, 0, -1, -n, 0, 1, -n, 0, 0, -1, n, 0, 1, n, 0, -1, -n, 0, 1, -n, n, 0, -1, n, 0, 1, -n, 0, -1, -n, 0, 1], [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1], t, e),
                this.type = "IcosahedronGeometry",
                this.parameters = {
                    radius: t,
                    detail: e
                }
            }
            static fromJSON(t) {
                return new _l(t.radius, t.detail)
            }
        }
        class Ml extends Tn {
            constructor(t = [new vt(0, .5), new vt(.5, 0), new vt(0,  - .5)], e = 12, n = 0, i = 2 * Math.PI) {
                super(),
                this.type = "LatheGeometry",
                this.parameters = {
                    points: t,
                    segments: e,
                    phiStart: n,
                    phiLength: i
                },
                e = Math.floor(e),
                i = ht(i, 0, 2 * Math.PI);
                const r = [],
                s = [],
                a = [],
                o = 1 / e,
                l = new Nt,
                c = new vt;
                for (let r = 0; r <= e; r++) {
                    const h = n + r * o * i,
                    u = Math.sin(h),
                    d = Math.cos(h);
                    for (let n = 0; n <= t.length - 1; n++)
                        l.x = t[n].x * u, l.y = t[n].y, l.z = t[n].x * d, s.push(l.x, l.y, l.z), c.x = r / e, c.y = n / (t.length - 1), a.push(c.x, c.y)
                }
                for (let n = 0; n < e; n++)
                    for (let e = 0; e < t.length - 1; e++) {
                        const i = e + n * t.length,
                        s = i,
                        a = i + t.length,
                        o = i + t.length + 1,
                        l = i + 1;
                        r.push(s, a, l),
                        r.push(a, o, l)
                    }
                if (this.setIndex(r), this.setAttribute("position", new gn(s, 3)), this.setAttribute("uv", new gn(a, 2)), this.computeVertexNormals(), i === 2 * Math.PI) {
                    const n = this.attributes.normal.array,
                    i = new Nt,
                    r = new Nt,
                    s = new Nt,
                    a = e * t.length * 3;
                    for (let e = 0, o = 0; e < t.length; e++, o += 3)
                        i.x = n[o + 0], i.y = n[o + 1], i.z = n[o + 2], r.x = n[a + o + 0], r.y = n[a + o + 1], r.z = n[a + o + 2], s.addVectors(i, r).normalize(), n[o + 0] = n[a + o + 0] = s.x, n[o + 1] = n[a + o + 1] = s.y, n[o + 2] = n[a + o + 2] = s.z
                }
            }
            static fromJSON(t) {
                return new Ml(t.points, t.segments, t.phiStart, t.phiLength)
            }
        }
        class bl extends mo {
            constructor(t = 1, e = 0) {
                super([1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2], t, e),
                this.type = "OctahedronGeometry",
                this.parameters = {
                    radius: t,
                    detail: e
                }
            }
            static fromJSON(t) {
                return new bl(t.radius, t.detail)
            }
        }
        class wl extends Tn {
            constructor(t = .5, e = 1, n = 8, i = 1, r = 0, s = 2 * Math.PI) {
                super(),
                this.type = "RingGeometry",
                this.parameters = {
                    innerRadius: t,
                    outerRadius: e,
                    thetaSegments: n,
                    phiSegments: i,
                    thetaStart: r,
                    thetaLength: s
                },
                n = Math.max(3, n);
                const a = [],
                o = [],
                l = [],
                c = [];
                let h = t;
                const u = (e - t) / (i = Math.max(1, i)),
                d = new Nt,
                p = new vt;
                for (let t = 0; t <= i; t++) {
                    for (let t = 0; t <= n; t++) {
                        const i = r + t / n * s;
                        d.x = h * Math.cos(i),
                        d.y = h * Math.sin(i),
                        o.push(d.x, d.y, d.z),
                        l.push(0, 0, 1),
                        p.x = (d.x / e + 1) / 2,
                        p.y = (d.y / e + 1) / 2,
                        c.push(p.x, p.y)
                    }
                    h += u
                }
                for (let t = 0; t < i; t++) {
                    const e = t * (n + 1);
                    for (let t = 0; t < n; t++) {
                        const i = t + e,
                        r = i,
                        s = i + n + 1,
                        o = i + n + 2,
                        l = i + 1;
                        a.push(r, s, l),
                        a.push(s, o, l)
                    }
                }
                this.setIndex(a),
                this.setAttribute("position", new gn(o, 3)),
                this.setAttribute("normal", new gn(l, 3)),
                this.setAttribute("uv", new gn(c, 2))
            }
            static fromJSON(t) {
                return new wl(t.innerRadius, t.outerRadius, t.thetaSegments, t.phiSegments, t.thetaStart, t.thetaLength)
            }
        }
        class Sl extends Tn {
            constructor(t = new Vo([new vt(0, .5), new vt( - .5,  - .5), new vt(.5,  - .5)]), e = 12) {
                super(),
                this.type = "ShapeGeometry",
                this.parameters = {
                    shapes: t,
                    curveSegments: e
                };
                const n = [],
                i = [],
                r = [],
                s = [];
                let a = 0,
                o = 0;
                if (!1 === Array.isArray(t))
                    l(t);
                else
                    for (let e = 0; e < t.length; e++)
                        l(t[e]), this.addGroup(a, o, e), a += o, o = 0;
                function l(t) {
                    const a = i.length / 3,
                    l = t.extractPoints(e);
                    let c = l.shape;
                    const h = l.holes;
                    !1 === fl.isClockWise(c) && (c = c.reverse());
                    for (let t = 0, e = h.length; t < e; t++) {
                        const e = h[t];
                        !0 === fl.isClockWise(e) && (h[t] = e.reverse())
                    }
                    const u = fl.triangulateShape(c, h);
                    for (let t = 0, e = h.length; t < e; t++) {
                        const e = h[t];
                        c = c.concat(e)
                    }
                    for (let t = 0, e = c.length; t < e; t++) {
                        const e = c[t];
                        i.push(e.x, e.y, 0),
                        r.push(0, 0, 1),
                        s.push(e.x, e.y)
                    }
                    for (let t = 0, e = u.length; t < e; t++) {
                        const e = u[t],
                        i = e[0] + a,
                        r = e[1] + a,
                        s = e[2] + a;
                        n.push(i, r, s),
                        o += 3
                    }
                }
                this.setIndex(n),
                this.setAttribute("position", new gn(i, 3)),
                this.setAttribute("normal", new gn(r, 3)),
                this.setAttribute("uv", new gn(s, 2))
            }
            toJSON() {
                const t = super.toJSON();
                return function (t, e) {
                    if (e.shapes = [], Array.isArray(t))
                        for (let n = 0, i = t.length; n < i; n++) {
                            const i = t[n];
                            e.shapes.push(i.uuid)
                        }
                    else
                        e.shapes.push(t.uuid);
                    return e
                }
                (this.parameters.shapes, t)
            }
            static fromJSON(t, e) {
                const n = [];
                for (let i = 0, r = t.shapes.length; i < r; i++) {
                    const r = e[t.shapes[i]];
                    n.push(r)
                }
                return new Sl(n, t.curveSegments)
            }
        }
        class Tl extends Tn {
            constructor(t = 1, e = 32, n = 16, i = 0, r = 2 * Math.PI, s = 0, a = Math.PI) {
                super(),
                this.type = "SphereGeometry",
                this.parameters = {
                    radius: t,
                    widthSegments: e,
                    heightSegments: n,
                    phiStart: i,
                    phiLength: r,
                    thetaStart: s,
                    thetaLength: a
                },
                e = Math.max(3, Math.floor(e)),
                n = Math.max(2, Math.floor(n));
                const o = Math.min(s + a, Math.PI);
                let l = 0;
                const c = [],
                h = new Nt,
                u = new Nt,
                d = [],
                p = [],
                m = [],
                f = [];
                for (let d = 0; d <= n; d++) {
                    const g = [],
                    v = d / n;
                    let y = 0;
                    0 == d && 0 == s ? y = .5 / e : d == n && o == Math.PI && (y =  - .5 / e);
                    for (let n = 0; n <= e; n++) {
                        const o = n / e;
                        h.x = -t * Math.cos(i + o * r) * Math.sin(s + v * a),
                        h.y = t * Math.cos(s + v * a),
                        h.z = t * Math.sin(i + o * r) * Math.sin(s + v * a),
                        p.push(h.x, h.y, h.z),
                        u.copy(h).normalize(),
                        m.push(u.x, u.y, u.z),
                        f.push(o + y, 1 - v),
                        g.push(l++)
                    }
                    c.push(g)
                }
                for (let t = 0; t < n; t++)
                    for (let i = 0; i < e; i++) {
                        const e = c[t][i + 1],
                        r = c[t][i],
                        a = c[t + 1][i],
                        l = c[t + 1][i + 1];
                        (0 !== t || s > 0) && d.push(e, r, l),
                        (t !== n - 1 || o < Math.PI) && d.push(r, a, l)
                    }
                this.setIndex(d),
                this.setAttribute("position", new gn(p, 3)),
                this.setAttribute("normal", new gn(m, 3)),
                this.setAttribute("uv", new gn(f, 2))
            }
            static fromJSON(t) {
                return new Tl(t.radius, t.widthSegments, t.heightSegments, t.phiStart, t.phiLength, t.thetaStart, t.thetaLength)
            }
        }
        class El extends mo {
            constructor(t = 1, e = 0) {
                super([1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], t, e),
                this.type = "TetrahedronGeometry",
                this.parameters = {
                    radius: t,
                    detail: e
                }
            }
            static fromJSON(t) {
                return new El(t.radius, t.detail)
            }
        }
        class Al extends Tn {
            constructor(t = 1, e = .4, n = 8, i = 6, r = 2 * Math.PI) {
                super(),
                this.type = "TorusGeometry",
                this.parameters = {
                    radius: t,
                    tube: e,
                    radialSegments: n,
                    tubularSegments: i,
                    arc: r
                },
                n = Math.floor(n),
                i = Math.floor(i);
                const s = [],
                a = [],
                o = [],
                l = [],
                c = new Nt,
                h = new Nt,
                u = new Nt;
                for (let s = 0; s <= n; s++)
                    for (let d = 0; d <= i; d++) {
                        const p = d / i * r,
                        m = s / n * Math.PI * 2;
                        h.x = (t + e * Math.cos(m)) * Math.cos(p),
                        h.y = (t + e * Math.cos(m)) * Math.sin(p),
                        h.z = e * Math.sin(m),
                        a.push(h.x, h.y, h.z),
                        c.x = t * Math.cos(p),
                        c.y = t * Math.sin(p),
                        u.subVectors(h, c).normalize(),
                        o.push(u.x, u.y, u.z),
                        l.push(d / i),
                        l.push(s / n)
                    }
                for (let t = 1; t <= n; t++)
                    for (let e = 1; e <= i; e++) {
                        const n = (i + 1) * t + e - 1,
                        r = (i + 1) * (t - 1) + e - 1,
                        a = (i + 1) * (t - 1) + e,
                        o = (i + 1) * t + e;
                        s.push(n, r, o),
                        s.push(r, a, o)
                    }
                this.setIndex(s),
                this.setAttribute("position", new gn(a, 3)),
                this.setAttribute("normal", new gn(o, 3)),
                this.setAttribute("uv", new gn(l, 2))
            }
            static fromJSON(t) {
                return new Al(t.radius, t.tube, t.radialSegments, t.tubularSegments, t.arc)
            }
        }
        class Ll extends Tn {
            constructor(t = 1, e = .4, n = 64, i = 8, r = 2, s = 3) {
                super(),
                this.type = "TorusKnotGeometry",
                this.parameters = {
                    radius: t,
                    tube: e,
                    tubularSegments: n,
                    radialSegments: i,
                    p: r,
                    q: s
                },
                n = Math.floor(n),
                i = Math.floor(i);
                const a = [],
                o = [],
                l = [],
                c = [],
                h = new Nt,
                u = new Nt,
                d = new Nt,
                p = new Nt,
                m = new Nt,
                f = new Nt,
                g = new Nt;
                for (let a = 0; a <= n; ++a) {
                    const y = a / n * r * Math.PI * 2;
                    v(y, r, s, t, d),
                    v(y + .01, r, s, t, p),
                    f.subVectors(p, d),
                    g.addVectors(p, d),
                    m.crossVectors(f, g),
                    g.crossVectors(m, f),
                    m.normalize(),
                    g.normalize();
                    for (let t = 0; t <= i; ++t) {
                        const r = t / i * Math.PI * 2,
                        s = -e * Math.cos(r),
                        p = e * Math.sin(r);
                        h.x = d.x + (s * g.x + p * m.x),
                        h.y = d.y + (s * g.y + p * m.y),
                        h.z = d.z + (s * g.z + p * m.z),
                        o.push(h.x, h.y, h.z),
                        u.subVectors(h, d).normalize(),
                        l.push(u.x, u.y, u.z),
                        c.push(a / n),
                        c.push(t / i)
                    }
                }
                for (let t = 1; t <= n; t++)
                    for (let e = 1; e <= i; e++) {
                        const n = (i + 1) * (t - 1) + (e - 1),
                        r = (i + 1) * t + (e - 1),
                        s = (i + 1) * t + e,
                        o = (i + 1) * (t - 1) + e;
                        a.push(n, r, o),
                        a.push(r, s, o)
                    }
                function v(t, e, n, i, r) {
                    const s = Math.cos(t),
                    a = Math.sin(t),
                    o = n / e * t,
                    l = Math.cos(o);
                    r.x = i * (2 + l) * .5 * s,
                    r.y = i * (2 + l) * a * .5,
                    r.z = i * Math.sin(o) * .5
                }
                this.setIndex(a),
                this.setAttribute("position", new gn(o, 3)),
                this.setAttribute("normal", new gn(l, 3)),
                this.setAttribute("uv", new gn(c, 2))
            }
            static fromJSON(t) {
                return new Ll(t.radius, t.tube, t.tubularSegments, t.radialSegments, t.p, t.q)
            }
        }
        class Rl extends Tn {
            constructor(t = new Oo(new Nt(-1, -1, 0), new Nt(-1, 1, 0), new Nt(1, 1, 0)), e = 64, n = 1, i = 8, r = !1) {
                super(),
                this.type = "TubeGeometry",
                this.parameters = {
                    path: t,
                    tubularSegments: e,
                    radius: n,
                    radialSegments: i,
                    closed: r
                };
                const s = t.computeFrenetFrames(e, r);
                this.tangents = s.tangents,
                this.normals = s.normals,
                this.binormals = s.binormals;
                const a = new Nt,
                o = new Nt,
                l = new vt;
                let c = new Nt;
                const h = [],
                u = [],
                d = [],
                p = [];
                function m(r) {
                    c = t.getPointAt(r / e, c);
                    const l = s.normals[r],
                    d = s.binormals[r];
                    for (let t = 0; t <= i; t++) {
                        const e = t / i * Math.PI * 2,
                        r = Math.sin(e),
                        s = -Math.cos(e);
                        o.x = s * l.x + r * d.x,
                        o.y = s * l.y + r * d.y,
                        o.z = s * l.z + r * d.z,
                        o.normalize(),
                        u.push(o.x, o.y, o.z),
                        a.x = c.x + n * o.x,
                        a.y = c.y + n * o.y,
                        a.z = c.z + n * o.z,
                        h.push(a.x, a.y, a.z)
                    }
                }
                !function () {
                    for (let t = 0; t < e; t++)
                        m(t);
                    m(!1 === r ? e : 0),
                    function () {
                        for (let t = 0; t <= e; t++)
                            for (let n = 0; n <= i; n++)
                                l.x = t / e, l.y = n / i, d.push(l.x, l.y)
                    }
                    (),
                    function () {
                        for (let t = 1; t <= e; t++)
                            for (let e = 1; e <= i; e++) {
                                const n = (i + 1) * (t - 1) + (e - 1),
                                r = (i + 1) * t + (e - 1),
                                s = (i + 1) * t + e,
                                a = (i + 1) * (t - 1) + e;
                                p.push(n, r, a),
                                p.push(r, s, a)
                            }
                    }
                    ()
                }
                (),
                this.setIndex(p),
                this.setAttribute("position", new gn(h, 3)),
                this.setAttribute("normal", new gn(u, 3)),
                this.setAttribute("uv", new gn(d, 2))
            }
            toJSON() {
                const t = super.toJSON();
                return t.path = this.parameters.path.toJSON(),
                t
            }
            static fromJSON(t) {
                return new Rl(new Ho[t.path.type]().fromJSON(t.path), t.tubularSegments, t.radius, t.radialSegments, t.closed)
            }
        }
        class Cl extends Tn {
            constructor(t = null) {
                if (super(), this.type = "WireframeGeometry", this.parameters = {
                        geometry: t
                    }, null !== t) {
                    const e = [],
                    n = new Set,
                    i = new Nt,
                    r = new Nt;
                    if (null !== t.index) {
                        const s = t.attributes.position,
                        a = t.index;
                        let o = t.groups;
                        0 === o.length && (o = [{
                                    start: 0,
                                    count: a.count,
                                    materialIndex: 0
                                }
                            ]);
                        for (let t = 0, l = o.length; t < l; ++t) {
                            const l = o[t],
                            c = l.start;
                            for (let t = c, o = c + l.count; t < o; t += 3)
                                for (let o = 0; o < 3; o++) {
                                    const l = a.getX(t + o),
                                    c = a.getX(t + (o + 1) % 3);
                                    i.fromBufferAttribute(s, l),
                                    r.fromBufferAttribute(s, c),
                                    !0 === Pl(i, r, n) && (e.push(i.x, i.y, i.z), e.push(r.x, r.y, r.z))
                                }
                        }
                    } else {
                        const s = t.attributes.position;
                        for (let t = 0, a = s.count / 3; t < a; t++)
                            for (let a = 0; a < 3; a++) {
                                const o = 3 * t + a,
                                l = 3 * t + (a + 1) % 3;
                                i.fromBufferAttribute(s, o),
                                r.fromBufferAttribute(s, l),
                                !0 === Pl(i, r, n) && (e.push(i.x, i.y, i.z), e.push(r.x, r.y, r.z))
                            }
                    }
                    this.setAttribute("position", new gn(e, 3))
                }
            }
        }
        function Pl(t, e, n) {
            const i = `${t.x},${t.y},${t.z}-${e.x},${e.y},${e.z}`,
            r = `${e.x},${e.y},${e.z}-${t.x},${t.y},${t.z}`;
            return !0 !== n.has(i) && !0 !== n.has(r) && (n.add(i, r), !0)
        }
        var Dl = Object.freeze({
            __proto__: null,
            BoxGeometry: jn,
            BoxBufferGeometry: jn,
            CircleGeometry: ho,
            CircleBufferGeometry: ho,
            ConeGeometry: po,
            ConeBufferGeometry: po,
            CylinderGeometry: uo,
            CylinderBufferGeometry: uo,
            DodecahedronGeometry: fo,
            DodecahedronBufferGeometry: fo,
            EdgesGeometry: _o,
            ExtrudeGeometry: yl,
            ExtrudeBufferGeometry: yl,
            IcosahedronGeometry: _l,
            IcosahedronBufferGeometry: _l,
            LatheGeometry: Ml,
            LatheBufferGeometry: Ml,
            OctahedronGeometry: bl,
            OctahedronBufferGeometry: bl,
            PlaneGeometry: ui,
            PlaneBufferGeometry: ui,
            PolyhedronGeometry: mo,
            PolyhedronBufferGeometry: mo,
            RingGeometry: wl,
            RingBufferGeometry: wl,
            ShapeGeometry: Sl,
            ShapeBufferGeometry: Sl,
            SphereGeometry: Tl,
            SphereBufferGeometry: Tl,
            TetrahedronGeometry: El,
            TetrahedronBufferGeometry: El,
            TorusGeometry: Al,
            TorusBufferGeometry: Al,
            TorusKnotGeometry: Ll,
            TorusKnotBufferGeometry: Ll,
            TubeGeometry: Rl,
            TubeBufferGeometry: Rl,
            WireframeGeometry: Cl
        });
        class Il extends Ye {
            constructor(t) {
                super(),
                this.type = "ShadowMaterial",
                this.color = new nn(0),
                this.transparent = !0,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this
            }
        }
        Il.prototype.isShadowMaterial = !0;
        class Nl extends Ye {
            constructor(t) {
                super(),
                this.defines = {
                    STANDARD: ""
                },
                this.type = "MeshStandardMaterial",
                this.color = new nn(16777215),
                this.roughness = 1,
                this.metalness = 0,
                this.map = null,
                this.lightMap = null,
                this.lightMapIntensity = 1,
                this.aoMap = null,
                this.aoMapIntensity = 1,
                this.emissive = new nn(0),
                this.emissiveIntensity = 1,
                this.emissiveMap = null,
                this.bumpMap = null,
                this.bumpScale = 1,
                this.normalMap = null,
                this.normalMapType = 0,
                this.normalScale = new vt(1, 1),
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.roughnessMap = null,
                this.metalnessMap = null,
                this.alphaMap = null,
                this.envMap = null,
                this.envMapIntensity = 1,
                this.refractionRatio = .98,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.wireframeLinecap = "round",
                this.wireframeLinejoin = "round",
                this.flatShading = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.defines = {
                    STANDARD: ""
                },
                this.color.copy(t.color),
                this.roughness = t.roughness,
                this.metalness = t.metalness,
                this.map = t.map,
                this.lightMap = t.lightMap,
                this.lightMapIntensity = t.lightMapIntensity,
                this.aoMap = t.aoMap,
                this.aoMapIntensity = t.aoMapIntensity,
                this.emissive.copy(t.emissive),
                this.emissiveMap = t.emissiveMap,
                this.emissiveIntensity = t.emissiveIntensity,
                this.bumpMap = t.bumpMap,
                this.bumpScale = t.bumpScale,
                this.normalMap = t.normalMap,
                this.normalMapType = t.normalMapType,
                this.normalScale.copy(t.normalScale),
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.roughnessMap = t.roughnessMap,
                this.metalnessMap = t.metalnessMap,
                this.alphaMap = t.alphaMap,
                this.envMap = t.envMap,
                this.envMapIntensity = t.envMapIntensity,
                this.refractionRatio = t.refractionRatio,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.wireframeLinecap = t.wireframeLinecap,
                this.wireframeLinejoin = t.wireframeLinejoin,
                this.flatShading = t.flatShading,
                this
            }
        }
        Nl.prototype.isMeshStandardMaterial = !0;
        class zl extends Nl {
            constructor(t) {
                super(),
                this.defines = {
                    STANDARD: "",
                    PHYSICAL: ""
                },
                this.type = "MeshPhysicalMaterial",
                this.clearcoatMap = null,
                this.clearcoatRoughness = 0,
                this.clearcoatRoughnessMap = null,
                this.clearcoatNormalScale = new vt(1, 1),
                this.clearcoatNormalMap = null,
                this.ior = 1.5,
                Object.defineProperty(this, "reflectivity", {
                    get: function () {
                        return ht(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1)
                    },
                    set: function (t) {
                        this.ior = (1 + .4 * t) / (1 - .4 * t)
                    }
                }),
                this.sheenColor = new nn(0),
                this.sheenColorMap = null,
                this.sheenRoughness = 1,
                this.sheenRoughnessMap = null,
                this.transmissionMap = null,
                this.thickness = 0,
                this.thicknessMap = null,
                this.attenuationDistance = 0,
                this.attenuationColor = new nn(1, 1, 1),
                this.specularIntensity = 1,
                this.specularIntensityMap = null,
                this.specularColor = new nn(1, 1, 1),
                this.specularColorMap = null,
                this._sheen = 0,
                this._clearcoat = 0,
                this._transmission = 0,
                this.setValues(t)
            }
            get sheen() {
                return this._sheen
            }
            set sheen(t) {
                this._sheen > 0 != t > 0 && this.version++,
                this._sheen = t
            }
            get clearcoat() {
                return this._clearcoat
            }
            set clearcoat(t) {
                this._clearcoat > 0 != t > 0 && this.version++,
                this._clearcoat = t
            }
            get transmission() {
                return this._transmission
            }
            set transmission(t) {
                this._transmission > 0 != t > 0 && this.version++,
                this._transmission = t
            }
            copy(t) {
                return super.copy(t),
                this.defines = {
                    STANDARD: "",
                    PHYSICAL: ""
                },
                this.clearcoat = t.clearcoat,
                this.clearcoatMap = t.clearcoatMap,
                this.clearcoatRoughness = t.clearcoatRoughness,
                this.clearcoatRoughnessMap = t.clearcoatRoughnessMap,
                this.clearcoatNormalMap = t.clearcoatNormalMap,
                this.clearcoatNormalScale.copy(t.clearcoatNormalScale),
                this.ior = t.ior,
                this.sheen = t.sheen,
                this.sheenColor.copy(t.sheenColor),
                this.sheenColorMap = t.sheenColorMap,
                this.sheenRoughness = t.sheenRoughness,
                this.sheenRoughnessMap = t.sheenRoughnessMap,
                this.transmission = t.transmission,
                this.transmissionMap = t.transmissionMap,
                this.thickness = t.thickness,
                this.thicknessMap = t.thicknessMap,
                this.attenuationDistance = t.attenuationDistance,
                this.attenuationColor.copy(t.attenuationColor),
                this.specularIntensity = t.specularIntensity,
                this.specularIntensityMap = t.specularIntensityMap,
                this.specularColor.copy(t.specularColor),
                this.specularColorMap = t.specularColorMap,
                this
            }
        }
        zl.prototype.isMeshPhysicalMaterial = !0;
        class Bl extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshPhongMaterial",
                this.color = new nn(16777215),
                this.specular = new nn(1118481),
                this.shininess = 30,
                this.map = null,
                this.lightMap = null,
                this.lightMapIntensity = 1,
                this.aoMap = null,
                this.aoMapIntensity = 1,
                this.emissive = new nn(0),
                this.emissiveIntensity = 1,
                this.emissiveMap = null,
                this.bumpMap = null,
                this.bumpScale = 1,
                this.normalMap = null,
                this.normalMapType = 0,
                this.normalScale = new vt(1, 1),
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.specularMap = null,
                this.alphaMap = null,
                this.envMap = null,
                this.combine = 0,
                this.reflectivity = 1,
                this.refractionRatio = .98,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.wireframeLinecap = "round",
                this.wireframeLinejoin = "round",
                this.flatShading = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.specular.copy(t.specular),
                this.shininess = t.shininess,
                this.map = t.map,
                this.lightMap = t.lightMap,
                this.lightMapIntensity = t.lightMapIntensity,
                this.aoMap = t.aoMap,
                this.aoMapIntensity = t.aoMapIntensity,
                this.emissive.copy(t.emissive),
                this.emissiveMap = t.emissiveMap,
                this.emissiveIntensity = t.emissiveIntensity,
                this.bumpMap = t.bumpMap,
                this.bumpScale = t.bumpScale,
                this.normalMap = t.normalMap,
                this.normalMapType = t.normalMapType,
                this.normalScale.copy(t.normalScale),
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.specularMap = t.specularMap,
                this.alphaMap = t.alphaMap,
                this.envMap = t.envMap,
                this.combine = t.combine,
                this.reflectivity = t.reflectivity,
                this.refractionRatio = t.refractionRatio,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.wireframeLinecap = t.wireframeLinecap,
                this.wireframeLinejoin = t.wireframeLinejoin,
                this.flatShading = t.flatShading,
                this
            }
        }
        Bl.prototype.isMeshPhongMaterial = !0;
        class Fl extends Ye {
            constructor(t) {
                super(),
                this.defines = {
                    TOON: ""
                },
                this.type = "MeshToonMaterial",
                this.color = new nn(16777215),
                this.map = null,
                this.gradientMap = null,
                this.lightMap = null,
                this.lightMapIntensity = 1,
                this.aoMap = null,
                this.aoMapIntensity = 1,
                this.emissive = new nn(0),
                this.emissiveIntensity = 1,
                this.emissiveMap = null,
                this.bumpMap = null,
                this.bumpScale = 1,
                this.normalMap = null,
                this.normalMapType = 0,
                this.normalScale = new vt(1, 1),
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.alphaMap = null,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.wireframeLinecap = "round",
                this.wireframeLinejoin = "round",
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.map = t.map,
                this.gradientMap = t.gradientMap,
                this.lightMap = t.lightMap,
                this.lightMapIntensity = t.lightMapIntensity,
                this.aoMap = t.aoMap,
                this.aoMapIntensity = t.aoMapIntensity,
                this.emissive.copy(t.emissive),
                this.emissiveMap = t.emissiveMap,
                this.emissiveIntensity = t.emissiveIntensity,
                this.bumpMap = t.bumpMap,
                this.bumpScale = t.bumpScale,
                this.normalMap = t.normalMap,
                this.normalMapType = t.normalMapType,
                this.normalScale.copy(t.normalScale),
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.alphaMap = t.alphaMap,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.wireframeLinecap = t.wireframeLinecap,
                this.wireframeLinejoin = t.wireframeLinejoin,
                this
            }
        }
        Fl.prototype.isMeshToonMaterial = !0;
        class Ol extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshNormalMaterial",
                this.bumpMap = null,
                this.bumpScale = 1,
                this.normalMap = null,
                this.normalMapType = 0,
                this.normalScale = new vt(1, 1),
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.fog = !1,
                this.flatShading = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.bumpMap = t.bumpMap,
                this.bumpScale = t.bumpScale,
                this.normalMap = t.normalMap,
                this.normalMapType = t.normalMapType,
                this.normalScale.copy(t.normalScale),
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.flatShading = t.flatShading,
                this
            }
        }
        Ol.prototype.isMeshNormalMaterial = !0;
        class Ul extends Ye {
            constructor(t) {
                super(),
                this.type = "MeshLambertMaterial",
                this.color = new nn(16777215),
                this.map = null,
                this.lightMap = null,
                this.lightMapIntensity = 1,
                this.aoMap = null,
                this.aoMapIntensity = 1,
                this.emissive = new nn(0),
                this.emissiveIntensity = 1,
                this.emissiveMap = null,
                this.specularMap = null,
                this.alphaMap = null,
                this.envMap = null,
                this.combine = 0,
                this.reflectivity = 1,
                this.refractionRatio = .98,
                this.wireframe = !1,
                this.wireframeLinewidth = 1,
                this.wireframeLinecap = "round",
                this.wireframeLinejoin = "round",
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.map = t.map,
                this.lightMap = t.lightMap,
                this.lightMapIntensity = t.lightMapIntensity,
                this.aoMap = t.aoMap,
                this.aoMapIntensity = t.aoMapIntensity,
                this.emissive.copy(t.emissive),
                this.emissiveMap = t.emissiveMap,
                this.emissiveIntensity = t.emissiveIntensity,
                this.specularMap = t.specularMap,
                this.alphaMap = t.alphaMap,
                this.envMap = t.envMap,
                this.combine = t.combine,
                this.reflectivity = t.reflectivity,
                this.refractionRatio = t.refractionRatio,
                this.wireframe = t.wireframe,
                this.wireframeLinewidth = t.wireframeLinewidth,
                this.wireframeLinecap = t.wireframeLinecap,
                this.wireframeLinejoin = t.wireframeLinejoin,
                this
            }
        }
        Ul.prototype.isMeshLambertMaterial = !0;
        class Hl extends Ye {
            constructor(t) {
                super(),
                this.defines = {
                    MATCAP: ""
                },
                this.type = "MeshMatcapMaterial",
                this.color = new nn(16777215),
                this.matcap = null,
                this.map = null,
                this.bumpMap = null,
                this.bumpScale = 1,
                this.normalMap = null,
                this.normalMapType = 0,
                this.normalScale = new vt(1, 1),
                this.displacementMap = null,
                this.displacementScale = 1,
                this.displacementBias = 0,
                this.alphaMap = null,
                this.flatShading = !1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.defines = {
                    MATCAP: ""
                },
                this.color.copy(t.color),
                this.matcap = t.matcap,
                this.map = t.map,
                this.bumpMap = t.bumpMap,
                this.bumpScale = t.bumpScale,
                this.normalMap = t.normalMap,
                this.normalMapType = t.normalMapType,
                this.normalScale.copy(t.normalScale),
                this.displacementMap = t.displacementMap,
                this.displacementScale = t.displacementScale,
                this.displacementBias = t.displacementBias,
                this.alphaMap = t.alphaMap,
                this.flatShading = t.flatShading,
                this
            }
        }
        Hl.prototype.isMeshMatcapMaterial = !0;
        class Gl extends Va {
            constructor(t) {
                super(),
                this.type = "LineDashedMaterial",
                this.scale = 1,
                this.dashSize = 3,
                this.gapSize = 1,
                this.setValues(t)
            }
            copy(t) {
                return super.copy(t),
                this.scale = t.scale,
                this.dashSize = t.dashSize,
                this.gapSize = t.gapSize,
                this
            }
        }
        Gl.prototype.isLineDashedMaterial = !0;
        var kl = Object.freeze({
            __proto__: null,
            ShadowMaterial: Il,
            SpriteMaterial: oa,
            RawShaderMaterial: bi,
            ShaderMaterial: Yn,
            PointsMaterial: to,
            MeshPhysicalMaterial: zl,
            MeshStandardMaterial: Nl,
            MeshPhongMaterial: Bl,
            MeshToonMaterial: Fl,
            MeshNormalMaterial: Ol,
            MeshLambertMaterial: Ul,
            MeshDepthMaterial: Hs,
            MeshDistanceMaterial: Gs,
            MeshBasicMaterial: rn,
            MeshMatcapMaterial: Hl,
            LineDashedMaterial: Gl,
            LineBasicMaterial: Va,
            Material: Ye
        });
        const Vl = {
            arraySlice: function (t, e, n) {
                return Vl.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n)
            },
            convertArray: function (t, e, n) {
                return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t)
            },
            isTypedArray: function (t) {
                return ArrayBuffer.isView(t) && !(t instanceof DataView)
            },
            getKeyframeOrder: function (t) {
                const e = t.length,
                n = new Array(e);
                for (let t = 0; t !== e; ++t)
                    n[t] = t;
                return n.sort(function (e, n) {
                    return t[e] - t[n]
                }),
                n
            },
            sortedArray: function (t, e, n) {
                const i = t.length,
                r = new t.constructor(i);
                for (let s = 0, a = 0; a !== i; ++s) {
                    const i = n[s] * e;
                    for (let n = 0; n !== e; ++n)
                        r[a++] = t[i + n]
                }
                return r
            },
            flattenJSON: function (t, e, n, i) {
                let r = 1,
                s = t[0];
                for (; void 0 !== s && void 0 === s[i]; )
                    s = t[r++];
                if (void 0 === s)
                    return;
                let a = s[i];
                if (void 0 !== a)
                    if (Array.isArray(a))
                        do {
                            a = s[i],
                            void 0 !== a && (e.push(s.time), n.push.apply(n, a)),
                            s = t[r++]
                        } while (void 0 !== s);
                    else if (void 0 !== a.toArray)
                        do {
                            a = s[i],
                            void 0 !== a && (e.push(s.time), a.toArray(n, n.length)),
                            s = t[r++]
                        } while (void 0 !== s);
                    else
                        do {
                            a = s[i],
                            void 0 !== a && (e.push(s.time), n.push(a)),
                            s = t[r++]
                        } while (void 0 !== s)
            },
            subclip: function (t, e, n, i, r = 30) {
                const s = t.clone();
                s.name = e;
                const a = [];
                for (let t = 0; t < s.tracks.length; ++t) {
                    const e = s.tracks[t],
                    o = e.getValueSize(),
                    l = [],
                    c = [];
                    for (let t = 0; t < e.times.length; ++t) {
                        const s = e.times[t] * r;
                        if (!(s < n || s >= i)) {
                            l.push(e.times[t]);
                            for (let n = 0; n < o; ++n)
                                c.push(e.values[t * o + n])
                        }
                    }
                    0 !== l.length && (e.times = Vl.convertArray(l, e.times.constructor), e.values = Vl.convertArray(c, e.values.constructor), a.push(e))
                }
                s.tracks = a;
                let o = 1 / 0;
                for (let t = 0; t < s.tracks.length; ++t)
                    o > s.tracks[t].times[0] && (o = s.tracks[t].times[0]);
                for (let t = 0; t < s.tracks.length; ++t)
                    s.tracks[t].shift(-1 * o);
                return s.resetDuration(),
                s
            },
            makeClipAdditive: function (t, e = 0, n = t, i = 30) {
                i <= 0 && (i = 30);
                const r = n.tracks.length,
                s = e / i;
                for (let e = 0; e < r; ++e) {
                    const i = n.tracks[e],
                    r = i.ValueTypeName;
                    if ("bool" === r || "string" === r)
                        continue;
                    const a = t.tracks.find(function (t) {
                        return t.name === i.name && t.ValueTypeName === r
                    });
                    if (void 0 === a)
                        continue;
                    let o = 0;
                    const l = i.getValueSize();
                    i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (o = l / 3);
                    let c = 0;
                    const h = a.getValueSize();
                    a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3);
                    const u = i.times.length - 1;
                    let d;
                    if (s <= i.times[0]) {
                        const t = o,
                        e = l - o;
                        d = Vl.arraySlice(i.values, t, e)
                    } else if (s >= i.times[u]) {
                        const t = u * l + o,
                        e = t + l - o;
                        d = Vl.arraySlice(i.values, t, e)
                    } else {
                        const t = i.createInterpolant(),
                        e = o,
                        n = l - o;
                        t.evaluate(s),
                        d = Vl.arraySlice(t.resultBuffer, e, n)
                    }
                    if ("quaternion" === r) {
                        new It().fromArray(d).normalize().conjugate().toArray(d)
                    }
                    const p = a.times.length;
                    for (let t = 0; t < p; ++t) {
                        const e = t * h + c;
                        if ("quaternion" === r)
                            It.multiplyQuaternionsFlat(a.values, e, d, 0, a.values, e);
                        else {
                            const t = h - 2 * c;
                            for (let n = 0; n < t; ++n)
                                a.values[e + n] -= d[n]
                        }
                    }
                }
                return t.blendMode = q,
                t
            }
        };
        class Wl {
            constructor(t, e, n, i) {
                this.parameterPositions = t,
                this._cachedIndex = 0,
                this.resultBuffer = void 0 !== i ? i : new e.constructor(n),
                this.sampleValues = e,
                this.valueSize = n,
                this.settings = null,
                this.DefaultSettings_ = {}
            }
            evaluate(t) {
                const e = this.parameterPositions;
                let n = this._cachedIndex,
                i = e[n],
                r = e[n - 1];
                t: {
                    e: {
                        let s;
                        n: {
                            i: if (!(t < i)) {
                                for (let s = n + 2; ; ) {
                                    if (void 0 === i) {
                                        if (t < r)
                                            break i;
                                        return n = e.length,
                                        this._cachedIndex = n,
                                        this.afterEnd_(n - 1, t, r)
                                    }
                                    if (n === s)
                                        break;
                                    if (r = i, i = e[++n], t < i)
                                        break e
                                }
                                s = e.length;
                                break n
                            }
                            if (t >= r)
                                break t; {
                                const a = e[1];
                                t < a && (n = 2, r = a);
                                for (let s = n - 2; ; ) {
                                    if (void 0 === r)
                                        return this._cachedIndex = 0, this.beforeStart_(0, t, i);
                                    if (n === s)
                                        break;
                                    if (i = r, r = e[--n - 1], t >= r)
                                        break e
                                }
                                s = n,
                                n = 0
                            }
                        }
                        for (; n < s; ) {
                            const i = n + s >>> 1;
                            t < e[i] ? s = i : n = i + 1
                        }
                        if (i = e[n], r = e[n - 1], void 0 === r)
                            return this._cachedIndex = 0, this.beforeStart_(0, t, i);
                        if (void 0 === i)
                            return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, r, t)
                    }
                    this._cachedIndex = n,
                    this.intervalChanged_(n, r, i)
                }
                return this.interpolate_(n, r, t, i)
            }
            getSettings_() {
                return this.settings || this.DefaultSettings_
            }
            copySampleValue_(t) {
                const e = this.resultBuffer,
                n = this.sampleValues,
                i = this.valueSize,
                r = t * i;
                for (let t = 0; t !== i; ++t)
                    e[t] = n[r + t];
                return e
            }
            interpolate_() {
                throw new Error("call to abstract method")
            }
            intervalChanged_() {}
        }
        Wl.prototype.beforeStart_ = Wl.prototype.copySampleValue_,
        Wl.prototype.afterEnd_ = Wl.prototype.copySampleValue_;
        class jl extends Wl {
            constructor(t, e, n, i) {
                super(t, e, n, i),
                this._weightPrev = -0,
                this._offsetPrev = -0,
                this._weightNext = -0,
                this._offsetNext = -0,
                this.DefaultSettings_ = {
                    endingStart: k,
                    endingEnd: k
                }
            }
            intervalChanged_(t, e, n) {
                const i = this.parameterPositions;
                let r = t - 2,
                s = t + 1,
                a = i[r],
                o = i[s];
                if (void 0 === a)
                    switch (this.getSettings_().endingStart) {
                    case V:
                        r = t,
                        a = 2 * e - n;
                        break;
                    case W:
                        r = i.length - 2,
                        a = e + i[r] - i[r + 1];
                        break;
                    default:
                        r = t,
                        a = n;
                    }
                if (void 0 === o)
                    switch (this.getSettings_().endingEnd) {
                    case V:
                        s = t,
                        o = 2 * n - e;
                        break;
                    case W:
                        s = 1,
                        o = n + i[1] - i[0];
                        break;
                    default:
                        s = t - 1,
                        o = e;
                    }
                const l = .5 * (n - e),
                c = this.valueSize;
                this._weightPrev = l / (e - a),
                this._weightNext = l / (o - n),
                this._offsetPrev = r * c,
                this._offsetNext = s * c
            }
            interpolate_(t, e, n, i) {
                const r = this.resultBuffer,
                s = this.sampleValues,
                a = this.valueSize,
                o = t * a,
                l = o - a,
                c = this._offsetPrev,
                h = this._offsetNext,
                u = this._weightPrev,
                d = this._weightNext,
                p = (n - e) / (i - e),
                m = p * p,
                f = m * p,
                g = -u * f + 2 * u * m - u * p,
                v = (1 + u) * f + (-1.5 - 2 * u) * m + ( - .5 + u) * p + 1,
                y = (-1 - d) * f + (1.5 + d) * m + .5 * p,
                x = d * f - d * m;
                for (let t = 0; t !== a; ++t)
                    r[t] = g * s[c + t] + v * s[l + t] + y * s[o + t] + x * s[h + t];
                return r
            }
        }
        class ql extends Wl {
            constructor(t, e, n, i) {
                super(t, e, n, i)
            }
            interpolate_(t, e, n, i) {
                const r = this.resultBuffer,
                s = this.sampleValues,
                a = this.valueSize,
                o = t * a,
                l = o - a,
                c = (n - e) / (i - e),
                h = 1 - c;
                for (let t = 0; t !== a; ++t)
                    r[t] = s[l + t] * h + s[o + t] * c;
                return r
            }
        }
        class Xl extends Wl {
            constructor(t, e, n, i) {
                super(t, e, n, i)
            }
            interpolate_(t) {
                return this.copySampleValue_(t - 1)
            }
        }
        class Jl {
            constructor(t, e, n, i) {
                if (void 0 === t)
                    throw new Error("THREE.KeyframeTrack: track name is undefined");
                if (void 0 === e || 0 === e.length)
                    throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t);
                this.name = t,
                this.times = Vl.convertArray(e, this.TimeBufferType),
                this.values = Vl.convertArray(n, this.ValueBufferType),
                this.setInterpolation(i || this.DefaultInterpolation)
            }
            static toJSON(t) {
                const e = t.constructor;
                let n;
                if (e.toJSON !== this.toJSON)
                    n = e.toJSON(t);
                else {
                    n = {
                        name: t.name,
                        times: Vl.convertArray(t.times, Array),
                        values: Vl.convertArray(t.values, Array)
                    };
                    const e = t.getInterpolation();
                    e !== t.DefaultInterpolation && (n.interpolation = e)
                }
                return n.type = t.ValueTypeName,
                n
            }
            InterpolantFactoryMethodDiscrete(t) {
                return new Xl(this.times, this.values, this.getValueSize(), t)
            }
            InterpolantFactoryMethodLinear(t) {
                return new ql(this.times, this.values, this.getValueSize(), t)
            }
            InterpolantFactoryMethodSmooth(t) {
                return new jl(this.times, this.values, this.getValueSize(), t)
            }
            setInterpolation(t) {
                let e;
                switch (t) {
                case U:
                    e = this.InterpolantFactoryMethodDiscrete;
                    break;
                case H:
                    e = this.InterpolantFactoryMethodLinear;
                    break;
                case G:
                    e = this.InterpolantFactoryMethodSmooth;
                }
                if (void 0 === e) {
                    const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name;
                    if (void 0 === this.createInterpolant) {
                        if (t === this.DefaultInterpolation)
                            throw new Error(e);
                        this.setInterpolation(this.DefaultInterpolation)
                    }
                    return console.warn("THREE.KeyframeTrack:", e),
                    this
                }
                return this.createInterpolant = e,
                this
            }
            getInterpolation() {
                switch (this.createInterpolant) {
                case this.InterpolantFactoryMethodDiscrete:
                    return U;
                case this.InterpolantFactoryMethodLinear:
                    return H;
                case this.InterpolantFactoryMethodSmooth:
                    return G;
                }
            }
            getValueSize() {
                return this.values.length / this.times.length
            }
            shift(t) {
                if (0 !== t) {
                    const e = this.times;
                    for (let n = 0, i = e.length; n !== i; ++n)
                        e[n] += t
                }
                return this
            }
            scale(t) {
                if (1 !== t) {
                    const e = this.times;
                    for (let n = 0, i = e.length; n !== i; ++n)
                        e[n] *= t
                }
                return this
            }
            trim(t, e) {
                const n = this.times,
                i = n.length;
                let r = 0,
                s = i - 1;
                for (; r !== i && n[r] < t; )
                    ++r;
                for (; -1 !== s && n[s] > e; )
                    --s;
                if (++s, 0 !== r || s !== i) {
                    r >= s && (s = Math.max(s, 1), r = s - 1);
                    const t = this.getValueSize();
                    this.times = Vl.arraySlice(n, r, s),
                    this.values = Vl.arraySlice(this.values, r * t, s * t)
                }
                return this
            }
            validate() {
                let t = !0;
                const e = this.getValueSize();
                e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1);
                const n = this.times,
                i = this.values,
                r = n.length;
                0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1);
                let s = null;
                for (let e = 0; e !== r; e++) {
                    const i = n[e];
                    if ("number" == typeof i && isNaN(i)) {
                        console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i),
                        t = !1;
                        break
                    }
                    if (null !== s && s > i) {
                        console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, s),
                        t = !1;
                        break
                    }
                    s = i
                }
                if (void 0 !== i && Vl.isTypedArray(i))
                    for (let e = 0, n = i.length; e !== n; ++e) {
                        const n = i[e];
                        if (isNaN(n)) {
                            console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n),
                            t = !1;
                            break
                        }
                    }
                return t
            }
            optimize() {
                const t = Vl.arraySlice(this.times),
                e = Vl.arraySlice(this.values),
                n = this.getValueSize(),
                i = this.getInterpolation() === G,
                r = t.length - 1;
                let s = 1;
                for (let a = 1; a < r; ++a) {
                    let r = !1;
                    const o = t[a];
                    if (o !== t[a + 1] && (1 !== a || o !== t[0]))
                        if (i)
                            r = !0;
                        else {
                            const t = a * n,
                            i = t - n,
                            s = t + n;
                            for (let a = 0; a !== n; ++a) {
                                const n = e[t + a];
                                if (n !== e[i + a] || n !== e[s + a]) {
                                    r = !0;
                                    break
                                }
                            }
                        }
                    if (r) {
                        if (a !== s) {
                            t[s] = t[a];
                            const i = a * n,
                            r = s * n;
                            for (let t = 0; t !== n; ++t)
                                e[r + t] = e[i + t]
                        }
                        ++s
                    }
                }
                if (r > 0) {
                    t[s] = t[r];
                    for (let t = r * n, i = s * n, a = 0; a !== n; ++a)
                        e[i + a] = e[t + a];
                    ++s
                }
                return s !== t.length ? (this.times = Vl.arraySlice(t, 0, s), this.values = Vl.arraySlice(e, 0, s * n)) : (this.times = t, this.values = e),
                this
            }
            clone() {
                const t = Vl.arraySlice(this.times, 0),
                e = Vl.arraySlice(this.values, 0),
                n = new(0, this.constructor)(this.name, t, e);
                return n.createInterpolant = this.createInterpolant,
                n
            }
        }
        Jl.prototype.TimeBufferType = Float32Array,
        Jl.prototype.ValueBufferType = Float32Array,
        Jl.prototype.DefaultInterpolation = H;
        class Yl extends Jl {}
        Yl.prototype.ValueTypeName = "bool",
        Yl.prototype.ValueBufferType = Array,
        Yl.prototype.DefaultInterpolation = U,
        Yl.prototype.InterpolantFactoryMethodLinear = void 0,
        Yl.prototype.InterpolantFactoryMethodSmooth = void 0;
        class Zl extends Jl {}
        Zl.prototype.ValueTypeName = "color";
        class Ql extends Jl {}
        Ql.prototype.ValueTypeName = "number";
        class Kl extends Wl {
            constructor(t, e, n, i) {
                super(t, e, n, i)
            }
            interpolate_(t, e, n, i) {
                const r = this.resultBuffer,
                s = this.sampleValues,
                a = this.valueSize,
                o = (n - e) / (i - e);
                let l = t * a;
                for (let t = l + a; l !== t; l += 4)
                    It.slerpFlat(r, 0, s, l - a, s, l, o);
                return r
            }
        }
        class $l extends Jl {
            InterpolantFactoryMethodLinear(t) {
                return new Kl(this.times, this.values, this.getValueSize(), t)
            }
        }
        $l.prototype.ValueTypeName = "quaternion",
        $l.prototype.DefaultInterpolation = H,
        $l.prototype.InterpolantFactoryMethodSmooth = void 0;
        class tc extends Jl {}
        tc.prototype.ValueTypeName = "string",
        tc.prototype.ValueBufferType = Array,
        tc.prototype.DefaultInterpolation = U,
        tc.prototype.InterpolantFactoryMethodLinear = void 0,
        tc.prototype.InterpolantFactoryMethodSmooth = void 0;
        class ec extends Jl {}
        ec.prototype.ValueTypeName = "vector";
        class nc {
            constructor(t, e = -1, n, i = 2500) {
                this.name = t,
                this.tracks = n,
                this.duration = e,
                this.blendMode = i,
                this.uuid = ct(),
                this.duration < 0 && this.resetDuration()
            }
            static parse(t) {
                const e = [],
                n = t.tracks,
                i = 1 / (t.fps || 1);
                for (let t = 0, r = n.length; t !== r; ++t)
                    e.push(ic(n[t]).scale(i));
                const r = new this(t.name, t.duration, e, t.blendMode);
                return r.uuid = t.uuid,
                r
            }
            static toJSON(t) {
                const e = [],
                n = t.tracks,
                i = {
                    name: t.name,
                    duration: t.duration,
                    tracks: e,
                    uuid: t.uuid,
                    blendMode: t.blendMode
                };
                for (let t = 0, i = n.length; t !== i; ++t)
                    e.push(Jl.toJSON(n[t]));
                return i
            }
            static CreateFromMorphTargetSequence(t, e, n, i) {
                const r = e.length,
                s = [];
                for (let t = 0; t < r; t++) {
                    let a = [],
                    o = [];
                    a.push((t + r - 1) % r, t, (t + 1) % r),
                    o.push(0, 1, 0);
                    const l = Vl.getKeyframeOrder(a);
                    a = Vl.sortedArray(a, 1, l),
                    o = Vl.sortedArray(o, 1, l),
                    i || 0 !== a[0] || (a.push(r), o.push(o[0])),
                    s.push(new Ql(".morphTargetInfluences[" + e[t].name + "]", a, o).scale(1 / n))
                }
                return new this(t, -1, s)
            }
            static findByName(t, e) {
                let n = t;
                if (!Array.isArray(t)) {
                    const e = t;
                    n = e.geometry && e.geometry.animations || e.animations
                }
                for (let t = 0; t < n.length; t++)
                    if (n[t].name === e)
                        return n[t];
                return null
            }
            static CreateClipsFromMorphTargetSequences(t, e, n) {
                const i = {},
                r = /^([\w-]*?)([\d]+)$/;
                for (let e = 0, n = t.length; e < n; e++) {
                    const n = t[e],
                    s = n.name.match(r);
                    if (s && s.length > 1) {
                        const t = s[1];
                        let e = i[t];
                        e || (i[t] = e = []),
                        e.push(n)
                    }
                }
                const s = [];
                for (const t in i)
                    s.push(this.CreateFromMorphTargetSequence(t, i[t], e, n));
                return s
            }
            static parseAnimation(t, e) {
                if (!t)
                    return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null;
                const n = function (t, e, n, i, r) {
                    if (0 !== n.length) {
                        const s = [],
                        a = [];
                        Vl.flattenJSON(n, s, a, i),
                        0 !== s.length && r.push(new t(e, s, a))
                    }
                },
                i = [],
                r = t.name || "default",
                s = t.fps || 30,
                a = t.blendMode;
                let o = t.length || -1;
                const l = t.hierarchy || [];
                for (let t = 0; t < l.length; t++) {
                    const r = l[t].keys;
                    if (r && 0 !== r.length)
                        if (r[0].morphTargets) {
                            const t = {};
                            let e;
                            for (e = 0; e < r.length; e++)
                                if (r[e].morphTargets)
                                    for (let n = 0; n < r[e].morphTargets.length; n++)
                                        t[r[e].morphTargets[n]] = -1;
                            for (const n in t) {
                                const t = [],
                                s = [];
                                for (let i = 0; i !== r[e].morphTargets.length; ++i) {
                                    const i = r[e];
                                    t.push(i.time),
                                    s.push(i.morphTarget === n ? 1 : 0)
                                }
                                i.push(new Ql(".morphTargetInfluence[" + n + "]", t, s))
                            }
                            o = t.length * (s || 1)
                        } else {
                            const s = ".bones[" + e[t].name + "]";
                            n(ec, s + ".position", r, "pos", i),
                            n($l, s + ".quaternion", r, "rot", i),
                            n(ec, s + ".scale", r, "scl", i)
                        }
                }
                if (0 === i.length)
                    return null;
                return new this(r, o, i, a)
            }
            resetDuration() {
                let t = 0;
                for (let e = 0, n = this.tracks.length; e !== n; ++e) {
                    const n = this.tracks[e];
                    t = Math.max(t, n.times[n.times.length - 1])
                }
                return this.duration = t,
                this
            }
            trim() {
                for (let t = 0; t < this.tracks.length; t++)
                    this.tracks[t].trim(0, this.duration);
                return this
            }
            validate() {
                let t = !0;
                for (let e = 0; e < this.tracks.length; e++)
                    t = t && this.tracks[e].validate();
                return t
            }
            optimize() {
                for (let t = 0; t < this.tracks.length; t++)
                    this.tracks[t].optimize();
                return this
            }
            clone() {
                const t = [];
                for (let e = 0; e < this.tracks.length; e++)
                    t.push(this.tracks[e].clone());
                return new this.constructor(this.name, this.duration, t, this.blendMode)
            }
            toJSON() {
                return this.constructor.toJSON(this)
            }
        }
        function ic(t) {
            if (void 0 === t.type)
                throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");
            const e = function (t) {
                switch (t.toLowerCase()) {
                case "scalar":
                case "double":
                case "float":
                case "number":
                case "integer":
                    return Ql;
                case "vector":
                case "vector2":
                case "vector3":
                case "vector4":
                    return ec;
                case "color":
                    return Zl;
                case "quaternion":
                    return $l;
                case "bool":
                case "boolean":
                    return Yl;
                case "string":
                    return tc;
                }
                throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t)
            }
            (t.type);
            if (void 0 === t.times) {
                const e = [],
                n = [];
                Vl.flattenJSON(t.keys, e, n, "value"),
                t.times = e,
                t.values = n
            }
            return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation)
        }
        const rc = {
            enabled: !1,
            files: {},
            add: function (t, e) {
                !1 !== this.enabled && (this.files[t] = e)
            },
            get: function (t) {
                if (!1 !== this.enabled)
                    return this.files[t]
            },
            remove: function (t) {
                delete this.files[t]
            },
            clear: function () {
                this.files = {}
            }
        };
        class sc {
            constructor(t, e, n) {
                const i = this;
                let r,
                s = !1,
                a = 0,
                o = 0;
                const l = [];
                this.onStart = void 0,
                this.onLoad = t,
                this.onProgress = e,
                this.onError = n,
                this.itemStart = function (t) {
                    o++,
                    !1 === s && void 0 !== i.onStart && i.onStart(t, a, o),
                    s = !0
                },
                this.itemEnd = function (t) {
                    a++,
                    void 0 !== i.onProgress && i.onProgress(t, a, o),
                    a === o && (s = !1, void 0 !== i.onLoad && i.onLoad())
                },
                this.itemError = function (t) {
                    void 0 !== i.onError && i.onError(t)
                },
                this.resolveURL = function (t) {
                    return r ? r(t) : t
                },
                this.setURLModifier = function (t) {
                    return r = t,
                    this
                },
                this.addHandler = function (t, e) {
                    return l.push(t, e),
                    this
                },
                this.removeHandler = function (t) {
                    const e = l.indexOf(t);
                    return -1 !== e && l.splice(e, 2),
                    this
                },
                this.getHandler = function (t) {
                    for (let e = 0, n = l.length; e < n; e += 2) {
                        const n = l[e],
                        i = l[e + 1];
                        if (n.global && (n.lastIndex = 0), n.test(t))
                            return i
                    }
                    return null
                }
            }
        }
        const ac = new sc;
        class oc {
            constructor(t) {
                this.manager = void 0 !== t ? t : ac,
                this.crossOrigin = "anonymous",
                this.withCredentials = !1,
                this.path = "",
                this.resourcePath = "",
                this.requestHeader = {}
            }
            load() {}
            loadAsync(t, e) {
                const n = this;
                return new Promise(function (i, r) {
                    n.load(t, i, e, r)
                })
            }
            parse() {}
            setCrossOrigin(t) {
                return this.crossOrigin = t,
                this
            }
            setWithCredentials(t) {
                return this.withCredentials = t,
                this
            }
            setPath(t) {
                return this.path = t,
                this
            }
            setResourcePath(t) {
                return this.resourcePath = t,
                this
            }
            setRequestHeader(t) {
                return this.requestHeader = t,
                this
            }
        }
        const lc = {};
        class cc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                void 0 === t && (t = ""),
                void 0 !== this.path && (t = this.path + t),
                t = this.manager.resolveURL(t);
                const r = rc.get(t);
                if (void 0 !== r)
                    return this.manager.itemStart(t), setTimeout(() => {
                        e && e(r),
                        this.manager.itemEnd(t)
                    }, 0), r;
                if (void 0 !== lc[t])
                    return void lc[t].push({
                        onLoad: e,
                        onProgress: n,
                        onError: i
                    });
                lc[t] = [],
                lc[t].push({
                    onLoad: e,
                    onProgress: n,
                    onError: i
                });
                const s = new Request(t, {
                    headers: new Headers(this.requestHeader),
                    credentials: this.withCredentials ? "include" : "same-origin"
                });
                fetch(s).then(e => {
                    if (200 === e.status || 0 === e.status) {
                        0 === e.status && console.warn("THREE.FileLoader: HTTP Status 0 received.");
                        const n = lc[t],
                        i = e.body.getReader(),
                        r = e.headers.get("Content-Length"),
                        s = r ? parseInt(r) : 0,
                        a = 0 !== s;
                        let o = 0;
                        return new ReadableStream({
                            start(t) {
                                !function e() {
                                    i.read().then(({
                                            done: i,
                                            value: r
                                        }) => {
                                        if (i)
                                            t.close();
                                        else {
                                            o += r.byteLength;
                                            const i = new ProgressEvent("progress", {
                                                lengthComputable: a,
                                                loaded: o,
                                                total: s
                                            });
                                            for (let t = 0, e = n.length; t < e; t++) {
                                                const e = n[t];
                                                e.onProgress && e.onProgress(i)
                                            }
                                            t.enqueue(r),
                                            e()
                                        }
                                    })
                                }
                                ()
                            }
                        })
                    }
                    throw Error(`fetch for "${e.url}" responded with ${e.status}: ${e.statusText}`)
                }).then(t => {
                    const e = new Response(t);
                    switch (this.responseType) {
                    case "arraybuffer":
                        return e.arrayBuffer();
                    case "blob":
                        return e.blob();
                    case "document":
                        return e.text().then(t => new DOMParser().parseFromString(t, this.mimeType));
                    case "json":
                        return e.json();
                    default:
                        return e.text();
                    }
                }).then(e => {
                    rc.add(t, e);
                    const n = lc[t];
                    delete lc[t];
                    for (let t = 0, i = n.length; t < i; t++) {
                        const i = n[t];
                        i.onLoad && i.onLoad(e)
                    }
                    this.manager.itemEnd(t)
                }).catch(e => {
                    const n = lc[t];
                    delete lc[t];
                    for (let t = 0, i = n.length; t < i; t++) {
                        const i = n[t];
                        i.onError && i.onError(e)
                    }
                    this.manager.itemError(t),
                    this.manager.itemEnd(t)
                }),
                this.manager.itemStart(t)
            }
            setResponseType(t) {
                return this.responseType = t,
                this
            }
            setMimeType(t) {
                return this.mimeType = t,
                this
            }
        }
        class hc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                void 0 !== this.path && (t = this.path + t),
                t = this.manager.resolveURL(t);
                const r = this,
                s = rc.get(t);
                if (void 0 !== s)
                    return r.manager.itemStart(t), setTimeout(function () {
                        e && e(s),
                        r.manager.itemEnd(t)
                    }, 0), s;
                const a = bt("img");
                function o() {
                    c(),
                    rc.add(t, this),
                    e && e(this),
                    r.manager.itemEnd(t)
                }
                function l(e) {
                    c(),
                    i && i(e),
                    r.manager.itemError(t),
                    r.manager.itemEnd(t)
                }
                function c() {
                    a.removeEventListener("load", o, !1),
                    a.removeEventListener("error", l, !1)
                }
                return a.addEventListener("load", o, !1),
                a.addEventListener("error", l, !1),
                "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (a.crossOrigin = this.crossOrigin),
                r.manager.itemStart(t),
                a.src = t,
                a
            }
        }
        class uc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = new ti,
                s = new hc(this.manager);
                s.setCrossOrigin(this.crossOrigin),
                s.setPath(this.path);
                let a = 0;
                function o(n) {
                    s.load(t[n], function (t) {
                        r.images[n] = t,
                        a++,
                        6 === a && (r.needsUpdate = !0, e && e(r))
                    }, void 0, i)
                }
                for (let e = 0; e < t.length; ++e)
                    o(e);
                return r
            }
        }
        class dc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = new Ia,
                a = new cc(this.manager);
                return a.setResponseType("arraybuffer"),
                a.setRequestHeader(this.requestHeader),
                a.setPath(this.path),
                a.setWithCredentials(r.withCredentials),
                a.load(t, function (t) {
                    const n = r.parse(t);
                    n && (void 0 !== n.image ? s.image = n.image : void 0 !== n.data && (s.image.width = n.width, s.image.height = n.height, s.image.data = n.data), s.wrapS = void 0 !== n.wrapS ? n.wrapS : u, s.wrapT = void 0 !== n.wrapT ? n.wrapT : u, s.magFilter = void 0 !== n.magFilter ? n.magFilter : g, s.minFilter = void 0 !== n.minFilter ? n.minFilter : g, s.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (s.encoding = n.encoding), void 0 !== n.flipY && (s.flipY = n.flipY), void 0 !== n.format && (s.format = n.format), void 0 !== n.type && (s.type = n.type), void 0 !== n.mipmaps && (s.mipmaps = n.mipmaps, s.minFilter = y), 1 === n.mipmapCount && (s.minFilter = g), void 0 !== n.generateMipmaps && (s.generateMipmaps = n.generateMipmaps), s.needsUpdate = !0, e && e(s, n))
                }, n, i),
                s
            }
        }
        class pc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = new At,
                s = new hc(this.manager);
                return s.setCrossOrigin(this.crossOrigin),
                s.setPath(this.path),
                s.load(t, function (t) {
                    r.image = t,
                    r.needsUpdate = !0,
                    void 0 !== e && e(r)
                }, n, i),
                r
            }
        }
        class mc extends Be {
            constructor(t, e = 1) {
                super(),
                this.type = "Light",
                this.color = new nn(t),
                this.intensity = e
            }
            dispose() {}
            copy(t) {
                return super.copy(t),
                this.color.copy(t.color),
                this.intensity = t.intensity,
                this
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.object.color = this.color.getHex(),
                e.object.intensity = this.intensity,
                void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()),
                void 0 !== this.distance && (e.object.distance = this.distance),
                void 0 !== this.angle && (e.object.angle = this.angle),
                void 0 !== this.decay && (e.object.decay = this.decay),
                void 0 !== this.penumbra && (e.object.penumbra = this.penumbra),
                void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()),
                e
            }
        }
        mc.prototype.isLight = !0;
        class fc extends mc {
            constructor(t, e, n) {
                super(t, n),
                this.type = "HemisphereLight",
                this.position.copy(Be.DefaultUp),
                this.updateMatrix(),
                this.groundColor = new nn(e)
            }
            copy(t) {
                return mc.prototype.copy.call(this, t),
                this.groundColor.copy(t.groundColor),
                this
            }
        }
        fc.prototype.isHemisphereLight = !0;
        const gc = new ue,
        vc = new Nt,
        yc = new Nt;
        class xc {
            constructor(t) {
                this.camera = t,
                this.bias = 0,
                this.normalBias = 0,
                this.radius = 1,
                this.blurSamples = 8,
                this.mapSize = new vt(512, 512),
                this.map = null,
                this.mapPass = null,
                this.matrix = new ue,
                this.autoUpdate = !0,
                this.needsUpdate = !1,
                this._frustum = new li,
                this._frameExtents = new vt(1, 1),
                this._viewportCount = 1,
                this._viewports = [new Rt(0, 0, 1, 1)]
            }
            getViewportCount() {
                return this._viewportCount
            }
            getFrustum() {
                return this._frustum
            }
            updateMatrices(t) {
                const e = this.camera,
                n = this.matrix;
                vc.setFromMatrixPosition(t.matrixWorld),
                e.position.copy(vc),
                yc.setFromMatrixPosition(t.target.matrixWorld),
                e.lookAt(yc),
                e.updateMatrixWorld(),
                gc.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse),
                this._frustum.setFromProjectionMatrix(gc),
                n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1),
                n.multiply(e.projectionMatrix),
                n.multiply(e.matrixWorldInverse)
            }
            getViewport(t) {
                return this._viewports[t]
            }
            getFrameExtents() {
                return this._frameExtents
            }
            dispose() {
                this.map && this.map.dispose(),
                this.mapPass && this.mapPass.dispose()
            }
            copy(t) {
                return this.camera = t.camera.clone(),
                this.bias = t.bias,
                this.radius = t.radius,
                this.mapSize.copy(t.mapSize),
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
            toJSON() {
                const t = {};
                return 0 !== this.bias && (t.bias = this.bias),
                0 !== this.normalBias && (t.normalBias = this.normalBias),
                1 !== this.radius && (t.radius = this.radius),
                512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()),
                t.camera = this.camera.toJSON(!1).object,
                delete t.camera.matrix,
                t
            }
        }
        class _c extends xc {
            constructor() {
                super(new Qn(50, 1, .5, 500)),
                this.focus = 1
            }
            updateMatrices(t) {
                const e = this.camera,
                n = 2 * lt * t.angle * this.focus,
                i = this.mapSize.width / this.mapSize.height,
                r = t.distance || e.far;
                n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()),
                super.updateMatrices(t)
            }
            copy(t) {
                return super.copy(t),
                this.focus = t.focus,
                this
            }
        }
        _c.prototype.isSpotLightShadow = !0;
        class Mc extends mc {
            constructor(t, e, n = 0, i = Math.PI / 3, r = 0, s = 1) {
                super(t, e),
                this.type = "SpotLight",
                this.position.copy(Be.DefaultUp),
                this.updateMatrix(),
                this.target = new Be,
                this.distance = n,
                this.angle = i,
                this.penumbra = r,
                this.decay = s,
                this.shadow = new _c
            }
            get power() {
                return this.intensity * Math.PI
            }
            set power(t) {
                this.intensity = t / Math.PI
            }
            dispose() {
                this.shadow.dispose()
            }
            copy(t) {
                return super.copy(t),
                this.distance = t.distance,
                this.angle = t.angle,
                this.penumbra = t.penumbra,
                this.decay = t.decay,
                this.target = t.target.clone(),
                this.shadow = t.shadow.clone(),
                this
            }
        }
        Mc.prototype.isSpotLight = !0;
        const bc = new ue,
        wc = new Nt,
        Sc = new Nt;
        class Tc extends xc {
            constructor() {
                super(new Qn(90, 1, .5, 500)),
                this._frameExtents = new vt(4, 2),
                this._viewportCount = 6,
                this._viewports = [new Rt(2, 1, 1, 1), new Rt(0, 1, 1, 1), new Rt(3, 1, 1, 1), new Rt(1, 1, 1, 1), new Rt(3, 0, 1, 1), new Rt(1, 0, 1, 1)],
                this._cubeDirections = [new Nt(1, 0, 0), new Nt(-1, 0, 0), new Nt(0, 0, 1), new Nt(0, 0, -1), new Nt(0, 1, 0), new Nt(0, -1, 0)],
                this._cubeUps = [new Nt(0, 1, 0), new Nt(0, 1, 0), new Nt(0, 1, 0), new Nt(0, 1, 0), new Nt(0, 0, 1), new Nt(0, 0, -1)]
            }
            updateMatrices(t, e = 0) {
                const n = this.camera,
                i = this.matrix,
                r = t.distance || n.far;
                r !== n.far && (n.far = r, n.updateProjectionMatrix()),
                wc.setFromMatrixPosition(t.matrixWorld),
                n.position.copy(wc),
                Sc.copy(n.position),
                Sc.add(this._cubeDirections[e]),
                n.up.copy(this._cubeUps[e]),
                n.lookAt(Sc),
                n.updateMatrixWorld(),
                i.makeTranslation(-wc.x, -wc.y, -wc.z),
                bc.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse),
                this._frustum.setFromProjectionMatrix(bc)
            }
        }
        Tc.prototype.isPointLightShadow = !0;
        class Ec extends mc {
            constructor(t, e, n = 0, i = 1) {
                super(t, e),
                this.type = "PointLight",
                this.distance = n,
                this.decay = i,
                this.shadow = new Tc
            }
            get power() {
                return 4 * this.intensity * Math.PI
            }
            set power(t) {
                this.intensity = t / (4 * Math.PI)
            }
            dispose() {
                this.shadow.dispose()
            }
            copy(t) {
                return super.copy(t),
                this.distance = t.distance,
                this.decay = t.decay,
                this.shadow = t.shadow.clone(),
                this
            }
        }
        Ec.prototype.isPointLight = !0;
        class Ac extends xc {
            constructor() {
                super(new Mi(-5, 5, 5, -5, .5, 500))
            }
        }
        Ac.prototype.isDirectionalLightShadow = !0;
        class Lc extends mc {
            constructor(t, e) {
                super(t, e),
                this.type = "DirectionalLight",
                this.position.copy(Be.DefaultUp),
                this.updateMatrix(),
                this.target = new Be,
                this.shadow = new Ac
            }
            dispose() {
                this.shadow.dispose()
            }
            copy(t) {
                return super.copy(t),
                this.target = t.target.clone(),
                this.shadow = t.shadow.clone(),
                this
            }
        }
        Lc.prototype.isDirectionalLight = !0;
        class Rc extends mc {
            constructor(t, e) {
                super(t, e),
                this.type = "AmbientLight"
            }
        }
        Rc.prototype.isAmbientLight = !0;
        class Cc extends mc {
            constructor(t, e, n = 10, i = 10) {
                super(t, e),
                this.type = "RectAreaLight",
                this.width = n,
                this.height = i
            }
            get power() {
                return this.intensity * this.width * this.height * Math.PI
            }
            set power(t) {
                this.intensity = t / (this.width * this.height * Math.PI)
            }
            copy(t) {
                return super.copy(t),
                this.width = t.width,
                this.height = t.height,
                this
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.object.width = this.width,
                e.object.height = this.height,
                e
            }
        }
        Cc.prototype.isRectAreaLight = !0;
        class Pc {
            constructor() {
                this.coefficients = [];
                for (let t = 0; t < 9; t++)
                    this.coefficients.push(new Nt)
            }
            set(t) {
                for (let e = 0; e < 9; e++)
                    this.coefficients[e].copy(t[e]);
                return this
            }
            zero() {
                for (let t = 0; t < 9; t++)
                    this.coefficients[t].set(0, 0, 0);
                return this
            }
            getAt(t, e) {
                const n = t.x,
                i = t.y,
                r = t.z,
                s = this.coefficients;
                return e.copy(s[0]).multiplyScalar(.282095),
                e.addScaledVector(s[1], .488603 * i),
                e.addScaledVector(s[2], .488603 * r),
                e.addScaledVector(s[3], .488603 * n),
                e.addScaledVector(s[4], n * i * 1.092548),
                e.addScaledVector(s[5], i * r * 1.092548),
                e.addScaledVector(s[6], .315392 * (3 * r * r - 1)),
                e.addScaledVector(s[7], n * r * 1.092548),
                e.addScaledVector(s[8], .546274 * (n * n - i * i)),
                e
            }
            getIrradianceAt(t, e) {
                const n = t.x,
                i = t.y,
                r = t.z,
                s = this.coefficients;
                return e.copy(s[0]).multiplyScalar(.886227),
                e.addScaledVector(s[1], 1.023328 * i),
                e.addScaledVector(s[2], 1.023328 * r),
                e.addScaledVector(s[3], 1.023328 * n),
                e.addScaledVector(s[4], .858086 * n * i),
                e.addScaledVector(s[5], .858086 * i * r),
                e.addScaledVector(s[6], .743125 * r * r - .247708),
                e.addScaledVector(s[7], .858086 * n * r),
                e.addScaledVector(s[8], .429043 * (n * n - i * i)),
                e
            }
            add(t) {
                for (let e = 0; e < 9; e++)
                    this.coefficients[e].add(t.coefficients[e]);
                return this
            }
            addScaledSH(t, e) {
                for (let n = 0; n < 9; n++)
                    this.coefficients[n].addScaledVector(t.coefficients[n], e);
                return this
            }
            scale(t) {
                for (let e = 0; e < 9; e++)
                    this.coefficients[e].multiplyScalar(t);
                return this
            }
            lerp(t, e) {
                for (let n = 0; n < 9; n++)
                    this.coefficients[n].lerp(t.coefficients[n], e);
                return this
            }
            equals(t) {
                for (let e = 0; e < 9; e++)
                    if (!this.coefficients[e].equals(t.coefficients[e]))
                        return !1;
                return !0
            }
            copy(t) {
                return this.set(t.coefficients)
            }
            clone() {
                return new this.constructor().copy(this)
            }
            fromArray(t, e = 0) {
                const n = this.coefficients;
                for (let i = 0; i < 9; i++)
                    n[i].fromArray(t, e + 3 * i);
                return this
            }
            toArray(t = [], e = 0) {
                const n = this.coefficients;
                for (let i = 0; i < 9; i++)
                    n[i].toArray(t, e + 3 * i);
                return t
            }
            static getBasisAt(t, e) {
                const n = t.x,
                i = t.y,
                r = t.z;
                e[0] = .282095,
                e[1] = .488603 * i,
                e[2] = .488603 * r,
                e[3] = .488603 * n,
                e[4] = 1.092548 * n * i,
                e[5] = 1.092548 * i * r,
                e[6] = .315392 * (3 * r * r - 1),
                e[7] = 1.092548 * n * r,
                e[8] = .546274 * (n * n - i * i)
            }
        }
        Pc.prototype.isSphericalHarmonics3 = !0;
        class Dc extends mc {
            constructor(t = new Pc, e = 1) {
                super(void 0, e),
                this.sh = t
            }
            copy(t) {
                return super.copy(t),
                this.sh.copy(t.sh),
                this
            }
            fromJSON(t) {
                return this.intensity = t.intensity,
                this.sh.fromArray(t.sh),
                this
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.object.sh = this.sh.toArray(),
                e
            }
        }
        Dc.prototype.isLightProbe = !0;
        class Ic extends oc {
            constructor(t) {
                super(t),
                this.textures = {}
            }
            load(t, e, n, i) {
                const r = this,
                s = new cc(r.manager);
                s.setPath(r.path),
                s.setRequestHeader(r.requestHeader),
                s.setWithCredentials(r.withCredentials),
                s.load(t, function (n) {
                    try {
                        e(r.parse(JSON.parse(n)))
                    } catch (e) {
                        i ? i(e) : console.error(e),
                        r.manager.itemError(t)
                    }
                }, n, i)
            }
            parse(t) {
                const e = this.textures;
                function n(t) {
                    return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t),
                    e[t]
                }
                const i = new kl[t.type];
                if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = t.sheen), void 0 !== t.sheenColor && (i.sheenColor = new nn().setHex(t.sheenColor)), void 0 !== t.sheenRoughness && (i.sheenRoughness = t.sheenRoughness), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.specularIntensity && (i.specularIntensity = t.specularIntensity), void 0 !== t.specularColor && void 0 !== i.specularColor && i.specularColor.setHex(t.specularColor), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.thickness && (i.thickness = t.thickness), void 0 !== t.attenuationDistance && (i.attenuationDistance = t.attenuationDistance), void 0 !== t.attenuationColor && void 0 !== i.attenuationColor && i.attenuationColor.setHex(t.attenuationColor), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.shadowSide && (i.shadowSide = t.shadowSide), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.format && (i.format = t.format), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.alphaToCoverage && (i.alphaToCoverage = t.alphaToCoverage), void 0 !== t.premultipliedAlpha && (i.premultipliedAlpha = t.premultipliedAlpha), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms)
                    for (const e in t.uniforms) {
                        const r = t.uniforms[e];
                        switch (i.uniforms[e] = {}, r.type) {
                        case "t":
                            i.uniforms[e].value = n(r.value);
                            break;
                        case "c":
                            i.uniforms[e].value = new nn().setHex(r.value);
                            break;
                        case "v2":
                            i.uniforms[e].value = new vt().fromArray(r.value);
                            break;
                        case "v3":
                            i.uniforms[e].value = new Nt().fromArray(r.value);
                            break;
                        case "v4":
                            i.uniforms[e].value = new Rt().fromArray(r.value);
                            break;
                        case "m3":
                            i.uniforms[e].value = new yt().fromArray(r.value);
                            break;
                        case "m4":
                            i.uniforms[e].value = new ue().fromArray(r.value);
                            break;
                        default:
                            i.uniforms[e].value = r.value;
                        }
                    }
                if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions)
                    for (const e in t.extensions)
                        i.extensions[e] = t.extensions[e];
                if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) {
                    let e = t.normalScale;
                    !1 === Array.isArray(e) && (e = [e, e]),
                    i.normalScale = new vt().fromArray(e)
                }
                return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)),
                void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale),
                void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias),
                void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)),
                void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)),
                void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)),
                void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity),
                void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)),
                void 0 !== t.specularIntensityMap && (i.specularIntensityMap = n(t.specularIntensityMap)),
                void 0 !== t.specularColorMap && (i.specularColorMap = n(t.specularColorMap)),
                void 0 !== t.envMap && (i.envMap = n(t.envMap)),
                void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity),
                void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity),
                void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio),
                void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)),
                void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity),
                void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)),
                void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity),
                void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)),
                void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)),
                void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)),
                void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)),
                void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = new vt().fromArray(t.clearcoatNormalScale)),
                void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)),
                void 0 !== t.thicknessMap && (i.thicknessMap = n(t.thicknessMap)),
                void 0 !== t.sheenColorMap && (i.sheenColorMap = n(t.sheenColorMap)),
                void 0 !== t.sheenRoughnessMap && (i.sheenRoughnessMap = n(t.sheenRoughnessMap)),
                i
            }
            setTextures(t) {
                return this.textures = t,
                this
            }
        }
        class Nc {
            static decodeText(t) {
                if ("undefined" != typeof TextDecoder)
                    return new TextDecoder().decode(t);
                let e = "";
                for (let n = 0, i = t.length; n < i; n++)
                    e += String.fromCharCode(t[n]);
                try {
                    return decodeURIComponent(escape(e))
                } catch (t) {
                    return e
                }
            }
            static extractUrlBase(t) {
                const e = t.lastIndexOf("/");
                return -1 === e ? "./" : t.substr(0, e + 1)
            }
            static resolveURL(t, e) {
                return "string" != typeof t || "" === t ? "" : (/^https?:\/\//i.test(e) && /^\//.test(t) && (e = e.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), /^(https?:)?\/\//i.test(t) || /^data:.*,.*$/i.test(t) || /^blob:.*$/i.test(t) ? t : e + t)
            }
        }
        class zc extends Tn {
            constructor() {
                super(),
                this.type = "InstancedBufferGeometry",
                this.instanceCount = 1 / 0
            }
            copy(t) {
                return super.copy(t),
                this.instanceCount = t.instanceCount,
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
            toJSON() {
                const t = super.toJSON(this);
                return t.instanceCount = this.instanceCount,
                t.isInstancedBufferGeometry = !0,
                t
            }
        }
        zc.prototype.isInstancedBufferGeometry = !0;
        class Bc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = new cc(r.manager);
                s.setPath(r.path),
                s.setRequestHeader(r.requestHeader),
                s.setWithCredentials(r.withCredentials),
                s.load(t, function (n) {
                    try {
                        e(r.parse(JSON.parse(n)))
                    } catch (e) {
                        i ? i(e) : console.error(e),
                        r.manager.itemError(t)
                    }
                }, n, i)
            }
            parse(t) {
                const e = {},
                n = {};
                function i(t, i) {
                    if (void 0 !== e[i])
                        return e[i];
                    const r = t.interleavedBuffers[i],
                    s = function (t, e) {
                        if (void 0 !== n[e])
                            return n[e];
                        const i = t.arrayBuffers[e],
                        r = new Uint32Array(i).buffer;
                        return n[e] = r,
                        r
                    }
                    (t, r.buffer),
                    a = Mt(r.type, s),
                    o = new ra(a, r.stride);
                    return o.uuid = r.uuid,
                    e[i] = o,
                    o
                }
                const r = t.isInstancedBufferGeometry ? new zc : new Tn,
                s = t.data.index;
                if (void 0 !== s) {
                    const t = Mt(s.type, s.array);
                    r.setIndex(new on(t, 1))
                }
                const a = t.data.attributes;
                for (const e in a) {
                    const n = a[e];
                    let s;
                    if (n.isInterleavedBufferAttribute) {
                        const e = i(t.data, n.data);
                        s = new aa(e, n.itemSize, n.offset, n.normalized)
                    } else {
                        const t = Mt(n.type, n.array);
                        s = new(n.isInstancedBufferAttribute ? Fa : on)(t, n.itemSize, n.normalized)
                    }
                    void 0 !== n.name && (s.name = n.name),
                    void 0 !== n.usage && s.setUsage(n.usage),
                    void 0 !== n.updateRange && (s.updateRange.offset = n.updateRange.offset, s.updateRange.count = n.updateRange.count),
                    r.setAttribute(e, s)
                }
                const o = t.data.morphAttributes;
                if (o)
                    for (const e in o) {
                        const n = o[e],
                        s = [];
                        for (let e = 0, r = n.length; e < r; e++) {
                            const r = n[e];
                            let a;
                            if (r.isInterleavedBufferAttribute) {
                                const e = i(t.data, r.data);
                                a = new aa(e, r.itemSize, r.offset, r.normalized)
                            } else {
                                const t = Mt(r.type, r.array);
                                a = new on(t, r.itemSize, r.normalized)
                            }
                            void 0 !== r.name && (a.name = r.name),
                            s.push(a)
                        }
                        r.morphAttributes[e] = s
                    }
                t.data.morphTargetsRelative && (r.morphTargetsRelative = !0);
                const l = t.data.groups || t.data.drawcalls || t.data.offsets;
                if (void 0 !== l)
                    for (let t = 0, e = l.length; t !== e; ++t) {
                        const e = l[t];
                        r.addGroup(e.start, e.count, e.materialIndex)
                    }
                const c = t.data.boundingSphere;
                if (void 0 !== c) {
                    const t = new Nt;
                    void 0 !== c.center && t.fromArray(c.center),
                    r.boundingSphere = new ne(t, c.radius)
                }
                return t.name && (r.name = t.name),
                t.userData && (r.userData = t.userData),
                r
            }
        }
        const Fc = {
            UVMapping: i,
            CubeReflectionMapping: r,
            CubeRefractionMapping: s,
            EquirectangularReflectionMapping: a,
            EquirectangularRefractionMapping: o,
            CubeUVReflectionMapping: l,
            CubeUVRefractionMapping: c
        },
        Oc = {
            RepeatWrapping: h,
            ClampToEdgeWrapping: u,
            MirroredRepeatWrapping: d
        },
        Uc = {
            NearestFilter: p,
            NearestMipmapNearestFilter: m,
            NearestMipmapLinearFilter: f,
            LinearFilter: g,
            LinearMipmapNearestFilter: v,
            LinearMipmapLinearFilter: y
        };
        class Hc extends oc {
            constructor(t) {
                super(t),
                "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),
                "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."),
                this.options = {
                    premultiplyAlpha: "none"
                }
            }
            setOptions(t) {
                return this.options = t,
                this
            }
            load(t, e, n, i) {
                void 0 === t && (t = ""),
                void 0 !== this.path && (t = this.path + t),
                t = this.manager.resolveURL(t);
                const r = this,
                s = rc.get(t);
                if (void 0 !== s)
                    return r.manager.itemStart(t), setTimeout(function () {
                        e && e(s),
                        r.manager.itemEnd(t)
                    }, 0), s;
                const a = {};
                a.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include",
                a.headers = this.requestHeader,
                fetch(t, a).then(function (t) {
                    return t.blob()
                }).then(function (t) {
                    return createImageBitmap(t, Object.assign(r.options, {
                            colorSpaceConversion: "none"
                        }))
                }).then(function (n) {
                    rc.add(t, n),
                    e && e(n),
                    r.manager.itemEnd(t)
                }).catch(function (e) {
                    i && i(e),
                    r.manager.itemError(t),
                    r.manager.itemEnd(t)
                }),
                r.manager.itemStart(t)
            }
        }
        let Gc;
        Hc.prototype.isImageBitmapLoader = !0;
        const kc = {
            getContext: function () {
                return void 0 === Gc && (Gc = new(window.AudioContext || window.webkitAudioContext)),
                Gc
            },
            setContext: function (t) {
                Gc = t
            }
        };
        class Vc extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = new cc(this.manager);
                s.setResponseType("arraybuffer"),
                s.setPath(this.path),
                s.setRequestHeader(this.requestHeader),
                s.setWithCredentials(this.withCredentials),
                s.load(t, function (n) {
                    try {
                        const t = n.slice(0);
                        kc.getContext().decodeAudioData(t, function (t) {
                            e(t)
                        })
                    } catch (e) {
                        i ? i(e) : console.error(e),
                        r.manager.itemError(t)
                    }
                }, n, i)
            }
        }
        class Wc extends Dc {
            constructor(t, e, n = 1) {
                super(void 0, n);
                const i = new nn().set(t),
                r = new nn().set(e),
                s = new Nt(i.r, i.g, i.b),
                a = new Nt(r.r, r.g, r.b),
                o = Math.sqrt(Math.PI),
                l = o * Math.sqrt(.75);
                this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o),
                this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l)
            }
        }
        Wc.prototype.isHemisphereLightProbe = !0;
        class jc extends Dc {
            constructor(t, e = 1) {
                super(void 0, e);
                const n = new nn().set(t);
                this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI))
            }
        }
        jc.prototype.isAmbientLightProbe = !0;
        const qc = new ue,
        Xc = new ue,
        Jc = new ue;
        class Yc {
            constructor(t = !0) {
                this.autoStart = t,
                this.startTime = 0,
                this.oldTime = 0,
                this.elapsedTime = 0,
                this.running = !1
            }
            start() {
                this.startTime = Zc(),
                this.oldTime = this.startTime,
                this.elapsedTime = 0,
                this.running = !0
            }
            stop() {
                this.getElapsedTime(),
                this.running = !1,
                this.autoStart = !1
            }
            getElapsedTime() {
                return this.getDelta(),
                this.elapsedTime
            }
            getDelta() {
                let t = 0;
                if (this.autoStart && !this.running)
                    return this.start(), 0;
                if (this.running) {
                    const e = Zc();
                    t = (e - this.oldTime) / 1e3,
                    this.oldTime = e,
                    this.elapsedTime += t
                }
                return t
            }
        }
        function Zc() {
            return ("undefined" == typeof performance ? Date : performance).now()
        }
        const Qc = new Nt,
        Kc = new It,
        $c = new Nt,
        th = new Nt;
        class eh extends Be {
            constructor(t) {
                super(),
                this.type = "Audio",
                this.listener = t,
                this.context = t.context,
                this.gain = this.context.createGain(),
                this.gain.connect(t.getInput()),
                this.autoplay = !1,
                this.buffer = null,
                this.detune = 0,
                this.loop = !1,
                this.loopStart = 0,
                this.loopEnd = 0,
                this.offset = 0,
                this.duration = void 0,
                this.playbackRate = 1,
                this.isPlaying = !1,
                this.hasPlaybackControl = !0,
                this.source = null,
                this.sourceType = "empty",
                this._startedAt = 0,
                this._progress = 0,
                this._connected = !1,
                this.filters = []
            }
            getOutput() {
                return this.gain
            }
            setNodeSource(t) {
                return this.hasPlaybackControl = !1,
                this.sourceType = "audioNode",
                this.source = t,
                this.connect(),
                this
            }
            setMediaElementSource(t) {
                return this.hasPlaybackControl = !1,
                this.sourceType = "mediaNode",
                this.source = this.context.createMediaElementSource(t),
                this.connect(),
                this
            }
            setMediaStreamSource(t) {
                return this.hasPlaybackControl = !1,
                this.sourceType = "mediaStreamNode",
                this.source = this.context.createMediaStreamSource(t),
                this.connect(),
                this
            }
            setBuffer(t) {
                return this.buffer = t,
                this.sourceType = "buffer",
                this.autoplay && this.play(),
                this
            }
            play(t = 0) {
                if (!0 === this.isPlaying)
                    return void console.warn("THREE.Audio: Audio is already playing.");
                if (!1 === this.hasPlaybackControl)
                    return void console.warn("THREE.Audio: this Audio has no playback control.");
                this._startedAt = this.context.currentTime + t;
                const e = this.context.createBufferSource();
                return e.buffer = this.buffer,
                e.loop = this.loop,
                e.loopStart = this.loopStart,
                e.loopEnd = this.loopEnd,
                e.onended = this.onEnded.bind(this),
                e.start(this._startedAt, this._progress + this.offset, this.duration),
                this.isPlaying = !0,
                this.source = e,
                this.setDetune(this.detune),
                this.setPlaybackRate(this.playbackRate),
                this.connect()
            }
            pause() {
                if (!1 !== this.hasPlaybackControl)
                    return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this;
                console.warn("THREE.Audio: this Audio has no playback control.")
            }
            stop() {
                if (!1 !== this.hasPlaybackControl)
                    return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this;
                console.warn("THREE.Audio: this Audio has no playback control.")
            }
            connect() {
                if (this.filters.length > 0) {
                    this.source.connect(this.filters[0]);
                    for (let t = 1, e = this.filters.length; t < e; t++)
                        this.filters[t - 1].connect(this.filters[t]);
                    this.filters[this.filters.length - 1].connect(this.getOutput())
                } else
                    this.source.connect(this.getOutput());
                return this._connected = !0,
                this
            }
            disconnect() {
                if (this.filters.length > 0) {
                    this.source.disconnect(this.filters[0]);
                    for (let t = 1, e = this.filters.length; t < e; t++)
                        this.filters[t - 1].disconnect(this.filters[t]);
                    this.filters[this.filters.length - 1].disconnect(this.getOutput())
                } else
                    this.source.disconnect(this.getOutput());
                return this._connected = !1,
                this
            }
            getFilters() {
                return this.filters
            }
            setFilters(t) {
                return t || (t = []),
                !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(),
                this
            }
            setDetune(t) {
                if (this.detune = t, void 0 !== this.source.detune)
                    return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this
            }
            getDetune() {
                return this.detune
            }
            getFilter() {
                return this.getFilters()[0]
            }
            setFilter(t) {
                return this.setFilters(t ? [t] : [])
            }
            setPlaybackRate(t) {
                if (!1 !== this.hasPlaybackControl)
                    return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this;
                console.warn("THREE.Audio: this Audio has no playback control.")
            }
            getPlaybackRate() {
                return this.playbackRate
            }
            onEnded() {
                this.isPlaying = !1
            }
            getLoop() {
                return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop
            }
            setLoop(t) {
                if (!1 !== this.hasPlaybackControl)
                    return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this;
                console.warn("THREE.Audio: this Audio has no playback control.")
            }
            setLoopStart(t) {
                return this.loopStart = t,
                this
            }
            setLoopEnd(t) {
                return this.loopEnd = t,
                this
            }
            getVolume() {
                return this.gain.gain.value
            }
            setVolume(t) {
                return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01),
                this
            }
        }
        const nh = new Nt,
        ih = new It,
        rh = new Nt,
        sh = new Nt;
        class ah {
            constructor(t, e = 2048) {
                this.analyser = t.context.createAnalyser(),
                this.analyser.fftSize = e,
                this.data = new Uint8Array(this.analyser.frequencyBinCount),
                t.getOutput().connect(this.analyser)
            }
            getFrequencyData() {
                return this.analyser.getByteFrequencyData(this.data),
                this.data
            }
            getAverageFrequency() {
                let t = 0;
                const e = this.getFrequencyData();
                for (let n = 0; n < e.length; n++)
                    t += e[n];
                return t / e.length
            }
        }
        class oh {
            constructor(t, e, n) {
                let i,
                r,
                s;
                switch (this.binding = t, this.valueSize = n, e) {
                case "quaternion":
                    i = this._slerp,
                    r = this._slerpAdditive,
                    s = this._setAdditiveIdentityQuaternion,
                    this.buffer = new Float64Array(6 * n),
                    this._workIndex = 5;
                    break;
                case "string":
                case "bool":
                    i = this._select,
                    r = this._select,
                    s = this._setAdditiveIdentityOther,
                    this.buffer = new Array(5 * n);
                    break;
                default:
                    i = this._lerp,
                    r = this._lerpAdditive,
                    s = this._setAdditiveIdentityNumeric,
                    this.buffer = new Float64Array(5 * n);
                }
                this._mixBufferRegion = i,
                this._mixBufferRegionAdditive = r,
                this._setIdentity = s,
                this._origIndex = 3,
                this._addIndex = 4,
                this.cumulativeWeight = 0,
                this.cumulativeWeightAdditive = 0,
                this.useCount = 0,
                this.referenceCount = 0
            }
            accumulate(t, e) {
                const n = this.buffer,
                i = this.valueSize,
                r = t * i + i;
                let s = this.cumulativeWeight;
                if (0 === s) {
                    for (let t = 0; t !== i; ++t)
                        n[r + t] = n[t];
                    s = e
                } else {
                    s += e;
                    const t = e / s;
                    this._mixBufferRegion(n, r, 0, t, i)
                }
                this.cumulativeWeight = s
            }
            accumulateAdditive(t) {
                const e = this.buffer,
                n = this.valueSize,
                i = n * this._addIndex;
                0 === this.cumulativeWeightAdditive && this._setIdentity(),
                this._mixBufferRegionAdditive(e, i, 0, t, n),
                this.cumulativeWeightAdditive += t
            }
            apply(t) {
                const e = this.valueSize,
                n = this.buffer,
                i = t * e + e,
                r = this.cumulativeWeight,
                s = this.cumulativeWeightAdditive,
                a = this.binding;
                if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) {
                    const t = e * this._origIndex;
                    this._mixBufferRegion(n, i, t, 1 - r, e)
                }
                s > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e);
                for (let t = e, r = e + e; t !== r; ++t)
                    if (n[t] !== n[t + e]) {
                        a.setValue(n, i);
                        break
                    }
            }
            saveOriginalState() {
                const t = this.binding,
                e = this.buffer,
                n = this.valueSize,
                i = n * this._origIndex;
                t.getValue(e, i);
                for (let t = n, r = i; t !== r; ++t)
                    e[t] = e[i + t % n];
                this._setIdentity(),
                this.cumulativeWeight = 0,
                this.cumulativeWeightAdditive = 0
            }
            restoreOriginalState() {
                const t = 3 * this.valueSize;
                this.binding.setValue(this.buffer, t)
            }
            _setAdditiveIdentityNumeric() {
                const t = this._addIndex * this.valueSize,
                e = t + this.valueSize;
                for (let n = t; n < e; n++)
                    this.buffer[n] = 0
            }
            _setAdditiveIdentityQuaternion() {
                this._setAdditiveIdentityNumeric(),
                this.buffer[this._addIndex * this.valueSize + 3] = 1
            }
            _setAdditiveIdentityOther() {
                const t = this._origIndex * this.valueSize,
                e = this._addIndex * this.valueSize;
                for (let n = 0; n < this.valueSize; n++)
                    this.buffer[e + n] = this.buffer[t + n]
            }
            _select(t, e, n, i, r) {
                if (i >= .5)
                    for (let i = 0; i !== r; ++i)
                        t[e + i] = t[n + i]
            }
            _slerp(t, e, n, i) {
                It.slerpFlat(t, e, t, e, t, n, i)
            }
            _slerpAdditive(t, e, n, i, r) {
                const s = this._workIndex * r;
                It.multiplyQuaternionsFlat(t, s, t, e, t, n),
                It.slerpFlat(t, e, t, e, t, s, i)
            }
            _lerp(t, e, n, i, r) {
                const s = 1 - i;
                for (let a = 0; a !== r; ++a) {
                    const r = e + a;
                    t[r] = t[r] * s + t[n + a] * i
                }
            }
            _lerpAdditive(t, e, n, i, r) {
                for (let s = 0; s !== r; ++s) {
                    const r = e + s;
                    t[r] = t[r] + t[n + s] * i
                }
            }
        }
        const lh = "\\[\\]\\.:\\/",
        ch = new RegExp("[\\[\\]\\.:\\/]", "g"),
        hh = "[^\\[\\]\\.:\\/]",
        uh = "[^" + lh.replace("\\.", "") + "]",
        dh = /((?:WC+[\/:])*)/.source.replace("WC", hh),
        ph = /(WCOD+)?/.source.replace("WCOD", uh),
        mh = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", hh),
        fh = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", hh),
        gh = new RegExp("^" + dh + ph + mh + fh + "$"),
        vh = ["material", "materials", "bones"];
        class yh {
            constructor(t, e, n) {
                this.path = e,
                this.parsedPath = n || yh.parseTrackName(e),
                this.node = yh.findNode(t, this.parsedPath.nodeName) || t,
                this.rootNode = t,
                this.getValue = this._getValue_unbound,
                this.setValue = this._setValue_unbound
            }
            static create(t, e, n) {
                return t && t.isAnimationObjectGroup ? new yh.Composite(t, e, n) : new yh(t, e, n)
            }
            static sanitizeNodeName(t) {
                return t.replace(/\s/g, "_").replace(ch, "")
            }
            static parseTrackName(t) {
                const e = gh.exec(t);
                if (!e)
                    throw new Error("PropertyBinding: Cannot parse trackName: " + t);
                const n = {
                    nodeName: e[2],
                    objectName: e[3],
                    objectIndex: e[4],
                    propertyName: e[5],
                    propertyIndex: e[6]
                },
                i = n.nodeName && n.nodeName.lastIndexOf(".");
                if (void 0 !== i && -1 !== i) {
                    const t = n.nodeName.substring(i + 1);
                    -1 !== vh.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t)
                }
                if (null === n.propertyName || 0 === n.propertyName.length)
                    throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t);
                return n
            }
            static findNode(t, e) {
                if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid)
                    return t;
                if (t.skeleton) {
                    const n = t.skeleton.getBoneByName(e);
                    if (void 0 !== n)
                        return n
                }
                if (t.children) {
                    const n = function (t) {
                        for (let i = 0; i < t.length; i++) {
                            const r = t[i];
                            if (r.name === e || r.uuid === e)
                                return r;
                            const s = n(r.children);
                            if (s)
                                return s
                        }
                        return null
                    },
                    i = n(t.children);
                    if (i)
                        return i
                }
                return null
            }
            _getValue_unavailable() {}
            _setValue_unavailable() {}
            _getValue_direct(t, e) {
                t[e] = this.targetObject[this.propertyName]
            }
            _getValue_array(t, e) {
                const n = this.resolvedProperty;
                for (let i = 0, r = n.length; i !== r; ++i)
                    t[e++] = n[i]
            }
            _getValue_arrayElement(t, e) {
                t[e] = this.resolvedProperty[this.propertyIndex]
            }
            _getValue_toArray(t, e) {
                this.resolvedProperty.toArray(t, e)
            }
            _setValue_direct(t, e) {
                this.targetObject[this.propertyName] = t[e]
            }
            _setValue_direct_setNeedsUpdate(t, e) {
                this.targetObject[this.propertyName] = t[e],
                this.targetObject.needsUpdate = !0
            }
            _setValue_direct_setMatrixWorldNeedsUpdate(t, e) {
                this.targetObject[this.propertyName] = t[e],
                this.targetObject.matrixWorldNeedsUpdate = !0
            }
            _setValue_array(t, e) {
                const n = this.resolvedProperty;
                for (let i = 0, r = n.length; i !== r; ++i)
                    n[i] = t[e++]
            }
            _setValue_array_setNeedsUpdate(t, e) {
                const n = this.resolvedProperty;
                for (let i = 0, r = n.length; i !== r; ++i)
                    n[i] = t[e++];
                this.targetObject.needsUpdate = !0
            }
            _setValue_array_setMatrixWorldNeedsUpdate(t, e) {
                const n = this.resolvedProperty;
                for (let i = 0, r = n.length; i !== r; ++i)
                    n[i] = t[e++];
                this.targetObject.matrixWorldNeedsUpdate = !0
            }
            _setValue_arrayElement(t, e) {
                this.resolvedProperty[this.propertyIndex] = t[e]
            }
            _setValue_arrayElement_setNeedsUpdate(t, e) {
                this.resolvedProperty[this.propertyIndex] = t[e],
                this.targetObject.needsUpdate = !0
            }
            _setValue_arrayElement_setMatrixWorldNeedsUpdate(t, e) {
                this.resolvedProperty[this.propertyIndex] = t[e],
                this.targetObject.matrixWorldNeedsUpdate = !0
            }
            _setValue_fromArray(t, e) {
                this.resolvedProperty.fromArray(t, e)
            }
            _setValue_fromArray_setNeedsUpdate(t, e) {
                this.resolvedProperty.fromArray(t, e),
                this.targetObject.needsUpdate = !0
            }
            _setValue_fromArray_setMatrixWorldNeedsUpdate(t, e) {
                this.resolvedProperty.fromArray(t, e),
                this.targetObject.matrixWorldNeedsUpdate = !0
            }
            _getValue_unbound(t, e) {
                this.bind(),
                this.getValue(t, e)
            }
            _setValue_unbound(t, e) {
                this.bind(),
                this.setValue(t, e)
            }
            bind() {
                let t = this.node;
                const e = this.parsedPath,
                n = e.objectName,
                i = e.propertyName;
                let r = e.propertyIndex;
                if (t || (t = yh.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t)
                    return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found.");
                if (n) {
                    let i = e.objectIndex;
                    switch (n) {
                    case "materials":
                        if (!t.material)
                            return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this);
                        if (!t.material.materials)
                            return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this);
                        t = t.material.materials;
                        break;
                    case "bones":
                        if (!t.skeleton)
                            return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this);
                        t = t.skeleton.bones;
                        for (let e = 0; e < t.length; e++)
                            if (t[e].name === i) {
                                i = e;
                                break
                            }
                        break;
                    default:
                        if (void 0 === t[n])
                            return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this);
                        t = t[n];
                    }
                    if (void 0 !== i) {
                        if (void 0 === t[i])
                            return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t);
                        t = t[i]
                    }
                }
                const s = t[i];
                if (void 0 === s) {
                    const n = e.nodeName;
                    return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t)
                }
                let a = this.Versioning.None;
                this.targetObject = t,
                void 0 !== t.needsUpdate ? a = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (a = this.Versioning.MatrixWorldNeedsUpdate);
                let o = this.BindingType.Direct;
                if (void 0 !== r) {
                    if ("morphTargetInfluences" === i) {
                        if (!t.geometry)
                            return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this);
                        if (!t.geometry.isBufferGeometry)
                            return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this);
                        if (!t.geometry.morphAttributes)
                            return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this);
                        void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r])
                    }
                    o = this.BindingType.ArrayElement,
                    this.resolvedProperty = s,
                    this.propertyIndex = r
                } else
                    void 0 !== s.fromArray && void 0 !== s.toArray ? (o = this.BindingType.HasFromToArray, this.resolvedProperty = s) : Array.isArray(s) ? (o = this.BindingType.EntireArray, this.resolvedProperty = s) : this.propertyName = i;
                this.getValue = this.GetterByBindingType[o],
                this.setValue = this.SetterByBindingTypeAndVersioning[o][a]
            }
            unbind() {
                this.node = null,
                this.getValue = this._getValue_unbound,
                this.setValue = this._setValue_unbound
            }
        }
        yh.Composite = class {
            constructor(t, e, n) {
                const i = n || yh.parseTrackName(e);
                this._targetGroup = t,
                this._bindings = t.subscribe_(e, i)
            }
            getValue(t, e) {
                this.bind();
                const n = this._targetGroup.nCachedObjects_,
                i = this._bindings[n];
                void 0 !== i && i.getValue(t, e)
            }
            setValue(t, e) {
                const n = this._bindings;
                for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i)
                    n[i].setValue(t, e)
            }
            bind() {
                const t = this._bindings;
                for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e)
                    t[e].bind()
            }
            unbind() {
                const t = this._bindings;
                for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e)
                    t[e].unbind()
            }
        },
        yh.prototype.BindingType = {
            Direct: 0,
            EntireArray: 1,
            ArrayElement: 2,
            HasFromToArray: 3
        },
        yh.prototype.Versioning = {
            None: 0,
            NeedsUpdate: 1,
            MatrixWorldNeedsUpdate: 2
        },
        yh.prototype.GetterByBindingType = [yh.prototype._getValue_direct, yh.prototype._getValue_array, yh.prototype._getValue_arrayElement, yh.prototype._getValue_toArray],
        yh.prototype.SetterByBindingTypeAndVersioning = [[yh.prototype._setValue_direct, yh.prototype._setValue_direct_setNeedsUpdate, yh.prototype._setValue_direct_setMatrixWorldNeedsUpdate], [yh.prototype._setValue_array, yh.prototype._setValue_array_setNeedsUpdate, yh.prototype._setValue_array_setMatrixWorldNeedsUpdate], [yh.prototype._setValue_arrayElement, yh.prototype._setValue_arrayElement_setNeedsUpdate, yh.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate], [yh.prototype._setValue_fromArray, yh.prototype._setValue_fromArray_setNeedsUpdate, yh.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];
        class xh {
            constructor() {
                this.uuid = ct(),
                this._objects = Array.prototype.slice.call(arguments),
                this.nCachedObjects_ = 0;
                const t = {};
                this._indicesByUUID = t;
                for (let e = 0, n = arguments.length; e !== n; ++e)
                    t[arguments[e].uuid] = e;
                this._paths = [],
                this._parsedPaths = [],
                this._bindings = [],
                this._bindingsIndicesByPath = {};
                const e = this;
                this.stats = {
                    objects: {
                        get total() {
                            return e._objects.length
                        },
                        get inUse() {
                            return this.total - e.nCachedObjects_
                        }
                    },
                    get bindingsPerObject() {
                        return e._bindings.length
                    }
                }
            }
            add() {
                const t = this._objects,
                e = this._indicesByUUID,
                n = this._paths,
                i = this._parsedPaths,
                r = this._bindings,
                s = r.length;
                let a,
                o = t.length,
                l = this.nCachedObjects_;
                for (let c = 0, h = arguments.length; c !== h; ++c) {
                    const h = arguments[c],
                    u = h.uuid;
                    let d = e[u];
                    if (void 0 === d) {
                        d = o++,
                        e[u] = d,
                        t.push(h);
                        for (let t = 0, e = s; t !== e; ++t)
                            r[t].push(new yh(h, n[t], i[t]))
                    } else if (d < l) {
                        a = t[d];
                        const o = --l,
                        c = t[o];
                        e[c.uuid] = d,
                        t[d] = c,
                        e[u] = o,
                        t[o] = h;
                        for (let t = 0, e = s; t !== e; ++t) {
                            const e = r[t],
                            s = e[o];
                            let a = e[d];
                            e[d] = s,
                            void 0 === a && (a = new yh(h, n[t], i[t])),
                            e[o] = a
                        }
                    } else
                        t[d] !== a && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")
                }
                this.nCachedObjects_ = l
            }
            remove() {
                const t = this._objects,
                e = this._indicesByUUID,
                n = this._bindings,
                i = n.length;
                let r = this.nCachedObjects_;
                for (let s = 0, a = arguments.length; s !== a; ++s) {
                    const a = arguments[s],
                    o = a.uuid,
                    l = e[o];
                    if (void 0 !== l && l >= r) {
                        const s = r++,
                        c = t[s];
                        e[c.uuid] = l,
                        t[l] = c,
                        e[o] = s,
                        t[s] = a;
                        for (let t = 0, e = i; t !== e; ++t) {
                            const e = n[t],
                            i = e[s],
                            r = e[l];
                            e[l] = i,
                            e[s] = r
                        }
                    }
                }
                this.nCachedObjects_ = r
            }
            uncache() {
                const t = this._objects,
                e = this._indicesByUUID,
                n = this._bindings,
                i = n.length;
                let r = this.nCachedObjects_,
                s = t.length;
                for (let a = 0, o = arguments.length; a !== o; ++a) {
                    const o = arguments[a].uuid,
                    l = e[o];
                    if (void 0 !== l)
                        if (delete e[o], l < r) {
                            const a = --r,
                            o = t[a],
                            c = --s,
                            h = t[c];
                            e[o.uuid] = l,
                            t[l] = o,
                            e[h.uuid] = a,
                            t[a] = h,
                            t.pop();
                            for (let t = 0, e = i; t !== e; ++t) {
                                const e = n[t],
                                i = e[a],
                                r = e[c];
                                e[l] = i,
                                e[a] = r,
                                e.pop()
                            }
                        } else {
                            const r = --s,
                            a = t[r];
                            r > 0 && (e[a.uuid] = l),
                            t[l] = a,
                            t.pop();
                            for (let t = 0, e = i; t !== e; ++t) {
                                const e = n[t];
                                e[l] = e[r],
                                e.pop()
                            }
                        }
                }
                this.nCachedObjects_ = r
            }
            subscribe_(t, e) {
                const n = this._bindingsIndicesByPath;
                let i = n[t];
                const r = this._bindings;
                if (void 0 !== i)
                    return r[i];
                const s = this._paths,
                a = this._parsedPaths,
                o = this._objects,
                l = o.length,
                c = this.nCachedObjects_,
                h = new Array(l);
                i = r.length,
                n[t] = i,
                s.push(t),
                a.push(e),
                r.push(h);
                for (let n = c, i = o.length; n !== i; ++n) {
                    const i = o[n];
                    h[n] = new yh(i, t, e)
                }
                return h
            }
            unsubscribe_(t) {
                const e = this._bindingsIndicesByPath,
                n = e[t];
                if (void 0 !== n) {
                    const i = this._paths,
                    r = this._parsedPaths,
                    s = this._bindings,
                    a = s.length - 1,
                    o = s[a];
                    e[t[a]] = n,
                    s[n] = o,
                    s.pop(),
                    r[n] = r[a],
                    r.pop(),
                    i[n] = i[a],
                    i.pop()
                }
            }
        }
        xh.prototype.isAnimationObjectGroup = !0;
        class _h {
            constructor(t, e, n = null, i = e.blendMode) {
                this._mixer = t,
                this._clip = e,
                this._localRoot = n,
                this.blendMode = i;
                const r = e.tracks,
                s = r.length,
                a = new Array(s),
                o = {
                    endingStart: k,
                    endingEnd: k
                };
                for (let t = 0; t !== s; ++t) {
                    const e = r[t].createInterpolant(null);
                    a[t] = e,
                    e.settings = o
                }
                this._interpolantSettings = o,
                this._interpolants = a,
                this._propertyBindings = new Array(s),
                this._cacheIndex = null,
                this._byClipCacheIndex = null,
                this._timeScaleInterpolant = null,
                this._weightInterpolant = null,
                this.loop = 2201,
                this._loopCount = -1,
                this._startTime = null,
                this.time = 0,
                this.timeScale = 1,
                this._effectiveTimeScale = 1,
                this.weight = 1,
                this._effectiveWeight = 1,
                this.repetitions = 1 / 0,
                this.paused = !1,
                this.enabled = !0,
                this.clampWhenFinished = !1,
                this.zeroSlopeAtStart = !0,
                this.zeroSlopeAtEnd = !0
            }
            play() {
                return this._mixer._activateAction(this),
                this
            }
            stop() {
                return this._mixer._deactivateAction(this),
                this.reset()
            }
            reset() {
                return this.paused = !1,
                this.enabled = !0,
                this.time = 0,
                this._loopCount = -1,
                this._startTime = null,
                this.stopFading().stopWarping()
            }
            isRunning() {
                return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this)
            }
            isScheduled() {
                return this._mixer._isActiveAction(this)
            }
            startAt(t) {
                return this._startTime = t,
                this
            }
            setLoop(t, e) {
                return this.loop = t,
                this.repetitions = e,
                this
            }
            setEffectiveWeight(t) {
                return this.weight = t,
                this._effectiveWeight = this.enabled ? t : 0,
                this.stopFading()
            }
            getEffectiveWeight() {
                return this._effectiveWeight
            }
            fadeIn(t) {
                return this._scheduleFading(t, 0, 1)
            }
            fadeOut(t) {
                return this._scheduleFading(t, 1, 0)
            }
            crossFadeFrom(t, e, n) {
                if (t.fadeOut(e), this.fadeIn(e), n) {
                    const n = this._clip.duration,
                    i = t._clip.duration,
                    r = i / n,
                    s = n / i;
                    t.warp(1, r, e),
                    this.warp(s, 1, e)
                }
                return this
            }
            crossFadeTo(t, e, n) {
                return t.crossFadeFrom(this, e, n)
            }
            stopFading() {
                const t = this._weightInterpolant;
                return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)),
                this
            }
            setEffectiveTimeScale(t) {
                return this.timeScale = t,
                this._effectiveTimeScale = this.paused ? 0 : t,
                this.stopWarping()
            }
            getEffectiveTimeScale() {
                return this._effectiveTimeScale
            }
            setDuration(t) {
                return this.timeScale = this._clip.duration / t,
                this.stopWarping()
            }
            syncWith(t) {
                return this.time = t.time,
                this.timeScale = t.timeScale,
                this.stopWarping()
            }
            halt(t) {
                return this.warp(this._effectiveTimeScale, 0, t)
            }
            warp(t, e, n) {
                const i = this._mixer,
                r = i.time,
                s = this.timeScale;
                let a = this._timeScaleInterpolant;
                null === a && (a = i._lendControlInterpolant(), this._timeScaleInterpolant = a);
                const o = a.parameterPositions,
                l = a.sampleValues;
                return o[0] = r,
                o[1] = r + n,
                l[0] = t / s,
                l[1] = e / s,
                this
            }
            stopWarping() {
                const t = this._timeScaleInterpolant;
                return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)),
                this
            }
            getMixer() {
                return this._mixer
            }
            getClip() {
                return this._clip
            }
            getRoot() {
                return this._localRoot || this._mixer._root
            }
            _update(t, e, n, i) {
                if (!this.enabled)
                    return void this._updateWeight(t);
                const r = this._startTime;
                if (null !== r) {
                    const i = (t - r) * n;
                    if (i < 0 || 0 === n)
                        return;
                    this._startTime = null,
                    e = n * i
                }
                e *= this._updateTimeScale(t);
                const s = this._updateTime(e),
                a = this._updateWeight(t);
                if (a > 0) {
                    const t = this._interpolants,
                    e = this._propertyBindings;
                    if (this.blendMode === q)
                        for (let n = 0, i = t.length; n !== i; ++n)
                            t[n].evaluate(s), e[n].accumulateAdditive(a);
                    else
                        for (let n = 0, r = t.length; n !== r; ++n)
                            t[n].evaluate(s), e[n].accumulate(i, a)
                }
            }
            _updateWeight(t) {
                let e = 0;
                if (this.enabled) {
                    e = this.weight;
                    const n = this._weightInterpolant;
                    if (null !== n) {
                        const i = n.evaluate(t)[0];
                        e *= i,
                        t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1))
                    }
                }
                return this._effectiveWeight = e,
                e
            }
            _updateTimeScale(t) {
                let e = 0;
                if (!this.paused) {
                    e = this.timeScale;
                    const n = this._timeScaleInterpolant;
                    if (null !== n) {
                        e *= n.evaluate(t)[0],
                        t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e)
                    }
                }
                return this._effectiveTimeScale = e,
                e
            }
            _updateTime(t) {
                const e = this._clip.duration,
                n = this.loop;
                let i = this.time + t,
                r = this._loopCount;
                const s = 2202 === n;
                if (0 === t)
                    return -1 === r ? i : s && 1 == (1 & r) ? e - i : i;
                if (2200 === n) {
                    -1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1));
                    t: {
                        if (i >= e)
                            i = e;
                        else {
                            if (!(i < 0)) {
                                this.time = i;
                                break t
                            }
                            i = 0
                        }
                        this.clampWhenFinished ? this.paused = !0 : this.enabled = !1,
                        this.time = i,
                        this._mixer.dispatchEvent({
                            type: "finished",
                            action: this,
                            direction: t < 0 ? -1 : 1
                        })
                    }
                } else {
                    if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, s)) : this._setEndings(0 === this.repetitions, !0, s)), i >= e || i < 0) {
                        const n = Math.floor(i / e);
                        i -= e * n,
                        r += Math.abs(n);
                        const a = this.repetitions - r;
                        if (a <= 0)
                            this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({
                                type: "finished",
                                action: this,
                                direction: t > 0 ? 1 : -1
                            });
                        else {
                            if (1 === a) {
                                const e = t < 0;
                                this._setEndings(e, !e, s)
                            } else
                                this._setEndings(!1, !1, s);
                            this._loopCount = r,
                            this.time = i,
                            this._mixer.dispatchEvent({
                                type: "loop",
                                action: this,
                                loopDelta: n
                            })
                        }
                    } else
                        this.time = i;
                    if (s && 1 == (1 & r))
                        return e - i
                }
                return i
            }
            _setEndings(t, e, n) {
                const i = this._interpolantSettings;
                n ? (i.endingStart = V, i.endingEnd = V) : (i.endingStart = t ? this.zeroSlopeAtStart ? V : k : W, i.endingEnd = e ? this.zeroSlopeAtEnd ? V : k : W)
            }
            _scheduleFading(t, e, n) {
                const i = this._mixer,
                r = i.time;
                let s = this._weightInterpolant;
                null === s && (s = i._lendControlInterpolant(), this._weightInterpolant = s);
                const a = s.parameterPositions,
                o = s.sampleValues;
                return a[0] = r,
                o[0] = e,
                a[1] = r + t,
                o[1] = n,
                this
            }
        }
        class Mh extends rt {
            constructor(t) {
                super(),
                this._root = t,
                this._initMemoryManager(),
                this._accuIndex = 0,
                this.time = 0,
                this.timeScale = 1
            }
            _bindAction(t, e) {
                const n = t._localRoot || this._root,
                i = t._clip.tracks,
                r = i.length,
                s = t._propertyBindings,
                a = t._interpolants,
                o = n.uuid,
                l = this._bindingsByRootAndName;
                let c = l[o];
                void 0 === c && (c = {}, l[o] = c);
                for (let t = 0; t !== r; ++t) {
                    const r = i[t],
                    l = r.name;
                    let h = c[l];
                    if (void 0 !== h)
                        s[t] = h;
                    else {
                        if (h = s[t], void 0 !== h) {
                            null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, o, l));
                            continue
                        }
                        const i = e && e._propertyBindings[t].binding.parsedPath;
                        h = new oh(yh.create(n, l, i), r.ValueTypeName, r.getValueSize()),
                        ++h.referenceCount,
                        this._addInactiveBinding(h, o, l),
                        s[t] = h
                    }
                    a[t].resultBuffer = h.buffer
                }
            }
            _activateAction(t) {
                if (!this._isActiveAction(t)) {
                    if (null === t._cacheIndex) {
                        const e = (t._localRoot || this._root).uuid,
                        n = t._clip.uuid,
                        i = this._actionsByClip[n];
                        this._bindAction(t, i && i.knownActions[0]),
                        this._addInactiveAction(t, n, e)
                    }
                    const e = t._propertyBindings;
                    for (let t = 0, n = e.length; t !== n; ++t) {
                        const n = e[t];
                        0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState())
                    }
                    this._lendAction(t)
                }
            }
            _deactivateAction(t) {
                if (this._isActiveAction(t)) {
                    const e = t._propertyBindings;
                    for (let t = 0, n = e.length; t !== n; ++t) {
                        const n = e[t];
                        0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n))
                    }
                    this._takeBackAction(t)
                }
            }
            _initMemoryManager() {
                this._actions = [],
                this._nActiveActions = 0,
                this._actionsByClip = {},
                this._bindings = [],
                this._nActiveBindings = 0,
                this._bindingsByRootAndName = {},
                this._controlInterpolants = [],
                this._nActiveControlInterpolants = 0;
                const t = this;
                this.stats = {
                    actions: {
                        get total() {
                            return t._actions.length
                        },
                        get inUse() {
                            return t._nActiveActions
                        }
                    },
                    bindings: {
                        get total() {
                            return t._bindings.length
                        },
                        get inUse() {
                            return t._nActiveBindings
                        }
                    },
                    controlInterpolants: {
                        get total() {
                            return t._controlInterpolants.length
                        },
                        get inUse() {
                            return t._nActiveControlInterpolants
                        }
                    }
                }
            }
            _isActiveAction(t) {
                const e = t._cacheIndex;
                return null !== e && e < this._nActiveActions
            }
            _addInactiveAction(t, e, n) {
                const i = this._actions,
                r = this._actionsByClip;
                let s = r[e];
                if (void 0 === s)
                    s = {
                        knownActions: [t],
                        actionByRoot: {}
                    },
                t._byClipCacheIndex = 0,
                r[e] = s;
                else {
                    const e = s.knownActions;
                    t._byClipCacheIndex = e.length,
                    e.push(t)
                }
                t._cacheIndex = i.length,
                i.push(t),
                s.actionByRoot[n] = t
            }
            _removeInactiveAction(t) {
                const e = this._actions,
                n = e[e.length - 1],
                i = t._cacheIndex;
                n._cacheIndex = i,
                e[i] = n,
                e.pop(),
                t._cacheIndex = null;
                const r = t._clip.uuid,
                s = this._actionsByClip,
                a = s[r],
                o = a.knownActions,
                l = o[o.length - 1],
                c = t._byClipCacheIndex;
                l._byClipCacheIndex = c,
                o[c] = l,
                o.pop(),
                t._byClipCacheIndex = null;
                delete a.actionByRoot[(t._localRoot || this._root).uuid],
                0 === o.length && delete s[r],
                this._removeInactiveBindingsForAction(t)
            }
            _removeInactiveBindingsForAction(t) {
                const e = t._propertyBindings;
                for (let t = 0, n = e.length; t !== n; ++t) {
                    const n = e[t];
                    0 == --n.referenceCount && this._removeInactiveBinding(n)
                }
            }
            _lendAction(t) {
                const e = this._actions,
                n = t._cacheIndex,
                i = this._nActiveActions++,
                r = e[i];
                t._cacheIndex = i,
                e[i] = t,
                r._cacheIndex = n,
                e[n] = r
            }
            _takeBackAction(t) {
                const e = this._actions,
                n = t._cacheIndex,
                i = --this._nActiveActions,
                r = e[i];
                t._cacheIndex = i,
                e[i] = t,
                r._cacheIndex = n,
                e[n] = r
            }
            _addInactiveBinding(t, e, n) {
                const i = this._bindingsByRootAndName,
                r = this._bindings;
                let s = i[e];
                void 0 === s && (s = {}, i[e] = s),
                s[n] = t,
                t._cacheIndex = r.length,
                r.push(t)
            }
            _removeInactiveBinding(t) {
                const e = this._bindings,
                n = t.binding,
                i = n.rootNode.uuid,
                r = n.path,
                s = this._bindingsByRootAndName,
                a = s[i],
                o = e[e.length - 1],
                l = t._cacheIndex;
                o._cacheIndex = l,
                e[l] = o,
                e.pop(),
                delete a[r],
                0 === Object.keys(a).length && delete s[i]
            }
            _lendBinding(t) {
                const e = this._bindings,
                n = t._cacheIndex,
                i = this._nActiveBindings++,
                r = e[i];
                t._cacheIndex = i,
                e[i] = t,
                r._cacheIndex = n,
                e[n] = r
            }
            _takeBackBinding(t) {
                const e = this._bindings,
                n = t._cacheIndex,
                i = --this._nActiveBindings,
                r = e[i];
                t._cacheIndex = i,
                e[i] = t,
                r._cacheIndex = n,
                e[n] = r
            }
            _lendControlInterpolant() {
                const t = this._controlInterpolants,
                e = this._nActiveControlInterpolants++;
                let n = t[e];
                return void 0 === n && (n = new ql(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n),
                n
            }
            _takeBackControlInterpolant(t) {
                const e = this._controlInterpolants,
                n = t.__cacheIndex,
                i = --this._nActiveControlInterpolants,
                r = e[i];
                t.__cacheIndex = i,
                e[i] = t,
                r.__cacheIndex = n,
                e[n] = r
            }
            clipAction(t, e, n) {
                const i = e || this._root,
                r = i.uuid;
                let s = "string" == typeof t ? nc.findByName(i, t) : t;
                const a = null !== s ? s.uuid : t,
                o = this._actionsByClip[a];
                let l = null;
                if (void 0 === n && (n = null !== s ? s.blendMode : j), void 0 !== o) {
                    const t = o.actionByRoot[r];
                    if (void 0 !== t && t.blendMode === n)
                        return t;
                    l = o.knownActions[0],
                    null === s && (s = l._clip)
                }
                if (null === s)
                    return null;
                const c = new _h(this, s, e, n);
                return this._bindAction(c, l),
                this._addInactiveAction(c, a, r),
                c
            }
            existingAction(t, e) {
                const n = e || this._root,
                i = n.uuid,
                r = "string" == typeof t ? nc.findByName(n, t) : t,
                s = r ? r.uuid : t,
                a = this._actionsByClip[s];
                return void 0 !== a && a.actionByRoot[i] || null
            }
            stopAllAction() {
                const t = this._actions;
                for (let e = this._nActiveActions - 1; e >= 0; --e)
                    t[e].stop();
                return this
            }
            update(t) {
                t *= this.timeScale;
                const e = this._actions,
                n = this._nActiveActions,
                i = this.time += t,
                r = Math.sign(t),
                s = this._accuIndex ^= 1;
                for (let a = 0; a !== n; ++a) {
                    e[a]._update(i, t, r, s)
                }
                const a = this._bindings,
                o = this._nActiveBindings;
                for (let t = 0; t !== o; ++t)
                    a[t].apply(s);
                return this
            }
            setTime(t) {
                this.time = 0;
                for (let t = 0; t < this._actions.length; t++)
                    this._actions[t].time = 0;
                return this.update(t)
            }
            getRoot() {
                return this._root
            }
            uncacheClip(t) {
                const e = this._actions,
                n = t.uuid,
                i = this._actionsByClip,
                r = i[n];
                if (void 0 !== r) {
                    const t = r.knownActions;
                    for (let n = 0, i = t.length; n !== i; ++n) {
                        const i = t[n];
                        this._deactivateAction(i);
                        const r = i._cacheIndex,
                        s = e[e.length - 1];
                        i._cacheIndex = null,
                        i._byClipCacheIndex = null,
                        s._cacheIndex = r,
                        e[r] = s,
                        e.pop(),
                        this._removeInactiveBindingsForAction(i)
                    }
                    delete i[n]
                }
            }
            uncacheRoot(t) {
                const e = t.uuid,
                n = this._actionsByClip;
                for (const t in n) {
                    const i = n[t].actionByRoot[e];
                    void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i))
                }
                const i = this._bindingsByRootAndName[e];
                if (void 0 !== i)
                    for (const t in i) {
                        const e = i[t];
                        e.restoreOriginalState(),
                        this._removeInactiveBinding(e)
                    }
            }
            uncacheAction(t, e) {
                const n = this.existingAction(t, e);
                null !== n && (this._deactivateAction(n), this._removeInactiveAction(n))
            }
        }
        Mh.prototype._controlInterpolantsResultBuffer = new Float32Array(1);
        class bh {
            constructor(t) {
                "string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]),
                this.value = t
            }
            clone() {
                return new bh(void 0 === this.value.clone ? this.value : this.value.clone())
            }
        }
        class wh extends ra {
            constructor(t, e, n = 1) {
                super(t, e),
                this.meshPerAttribute = n
            }
            copy(t) {
                return super.copy(t),
                this.meshPerAttribute = t.meshPerAttribute,
                this
            }
            clone(t) {
                const e = super.clone(t);
                return e.meshPerAttribute = this.meshPerAttribute,
                e
            }
            toJSON(t) {
                const e = super.toJSON(t);
                return e.isInstancedInterleavedBuffer = !0,
                e.meshPerAttribute = this.meshPerAttribute,
                e
            }
        }
        wh.prototype.isInstancedInterleavedBuffer = !0;
        class Sh {
            constructor(t, e, n, i, r) {
                this.buffer = t,
                this.type = e,
                this.itemSize = n,
                this.elementSize = i,
                this.count = r,
                this.version = 0
            }
            set needsUpdate(t) {
                !0 === t && this.version++
            }
            setBuffer(t) {
                return this.buffer = t,
                this
            }
            setType(t, e) {
                return this.type = t,
                this.elementSize = e,
                this
            }
            setItemSize(t) {
                return this.itemSize = t,
                this
            }
            setCount(t) {
                return this.count = t,
                this
            }
        }
        Sh.prototype.isGLBufferAttribute = !0;
        function Th(t, e) {
            return t.distance - e.distance
        }
        function Eh(t, e, n, i) {
            if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) {
                const i = t.children;
                for (let t = 0, r = i.length; t < r; t++)
                    Eh(i[t], e, n, !0)
            }
        }
        const Ah = new vt;
        class Lh {
            constructor(t = new vt(1 / 0, 1 / 0), e = new vt(-1 / 0, -1 / 0)) {
                this.min = t,
                this.max = e
            }
            set(t, e) {
                return this.min.copy(t),
                this.max.copy(e),
                this
            }
            setFromPoints(t) {
                this.makeEmpty();
                for (let e = 0, n = t.length; e < n; e++)
                    this.expandByPoint(t[e]);
                return this
            }
            setFromCenterAndSize(t, e) {
                const n = Ah.copy(e).multiplyScalar(.5);
                return this.min.copy(t).sub(n),
                this.max.copy(t).add(n),
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(t) {
                return this.min.copy(t.min),
                this.max.copy(t.max),
                this
            }
            makeEmpty() {
                return this.min.x = this.min.y = 1 / 0,
                this.max.x = this.max.y = -1 / 0,
                this
            }
            isEmpty() {
                return this.max.x < this.min.x || this.max.y < this.min.y
            }
            getCenter(t) {
                return this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5)
            }
            getSize(t) {
                return this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min)
            }
            expandByPoint(t) {
                return this.min.min(t),
                this.max.max(t),
                this
            }
            expandByVector(t) {
                return this.min.sub(t),
                this.max.add(t),
                this
            }
            expandByScalar(t) {
                return this.min.addScalar(-t),
                this.max.addScalar(t),
                this
            }
            containsPoint(t) {
                return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y)
            }
            containsBox(t) {
                return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y
            }
            getParameter(t, e) {
                return e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y))
            }
            intersectsBox(t) {
                return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y)
            }
            clampPoint(t, e) {
                return e.copy(t).clamp(this.min, this.max)
            }
            distanceToPoint(t) {
                return Ah.copy(t).clamp(this.min, this.max).sub(t).length()
            }
            intersect(t) {
                return this.min.max(t.min),
                this.max.min(t.max),
                this
            }
            union(t) {
                return this.min.min(t.min),
                this.max.max(t.max),
                this
            }
            translate(t) {
                return this.min.add(t),
                this.max.add(t),
                this
            }
            equals(t) {
                return t.min.equals(this.min) && t.max.equals(this.max)
            }
        }
        Lh.prototype.isBox2 = !0;
        const Rh = new Nt,
        Ch = new Nt;
        class Ph {
            constructor(t = new Nt, e = new Nt) {
                this.start = t,
                this.end = e
            }
            set(t, e) {
                return this.start.copy(t),
                this.end.copy(e),
                this
            }
            copy(t) {
                return this.start.copy(t.start),
                this.end.copy(t.end),
                this
            }
            getCenter(t) {
                return t.addVectors(this.start, this.end).multiplyScalar(.5)
            }
            delta(t) {
                return t.subVectors(this.end, this.start)
            }
            distanceSq() {
                return this.start.distanceToSquared(this.end)
            }
            distance() {
                return this.start.distanceTo(this.end)
            }
            at(t, e) {
                return this.delta(e).multiplyScalar(t).add(this.start)
            }
            closestPointToPointParameter(t, e) {
                Rh.subVectors(t, this.start),
                Ch.subVectors(this.end, this.start);
                const n = Ch.dot(Ch);
                let i = Ch.dot(Rh) / n;
                return e && (i = ht(i, 0, 1)),
                i
            }
            closestPointToPoint(t, e, n) {
                const i = this.closestPointToPointParameter(t, e);
                return this.delta(n).multiplyScalar(i).add(this.start)
            }
            applyMatrix4(t) {
                return this.start.applyMatrix4(t),
                this.end.applyMatrix4(t),
                this
            }
            equals(t) {
                return t.start.equals(this.start) && t.end.equals(this.end)
            }
            clone() {
                return new this.constructor().copy(this)
            }
        }
        const Dh = new Nt;
        const Ih = new Nt,
        Nh = new ue,
        zh = new ue;
        class Bh extends Ka {
            constructor(t) {
                const e = Fh(t),
                n = new Tn,
                i = [],
                r = [],
                s = new nn(0, 0, 1),
                a = new nn(0, 1, 0);
                for (let t = 0; t < e.length; t++) {
                    const n = e[t];
                    n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(s.r, s.g, s.b), r.push(a.r, a.g, a.b))
                }
                n.setAttribute("position", new gn(i, 3)),
                n.setAttribute("color", new gn(r, 3));
                super(n, new Va({
                        vertexColors: !0,
                        depthTest: !1,
                        depthWrite: !1,
                        toneMapped: !1,
                        transparent: !0
                    })),
                this.type = "SkeletonHelper",
                this.isSkeletonHelper = !0,
                this.root = t,
                this.bones = e,
                this.matrix = t.matrixWorld,
                this.matrixAutoUpdate = !1
            }
            updateMatrixWorld(t) {
                const e = this.bones,
                n = this.geometry,
                i = n.getAttribute("position");
                zh.copy(this.root.matrixWorld).invert();
                for (let t = 0, n = 0; t < e.length; t++) {
                    const r = e[t];
                    r.parent && r.parent.isBone && (Nh.multiplyMatrices(zh, r.matrixWorld), Ih.setFromMatrixPosition(Nh), i.setXYZ(n, Ih.x, Ih.y, Ih.z), Nh.multiplyMatrices(zh, r.parent.matrixWorld), Ih.setFromMatrixPosition(Nh), i.setXYZ(n + 1, Ih.x, Ih.y, Ih.z), n += 2)
                }
                n.getAttribute("position").needsUpdate = !0,
                super.updateMatrixWorld(t)
            }
        }
        function Fh(t) {
            const e = [];
            t && t.isBone && e.push(t);
            for (let n = 0; n < t.children.length; n++)
                e.push.apply(e, Fh(t.children[n]));
            return e
        }
        const Oh = new Nt,
        Uh = new nn,
        Hh = new nn;
        class Gh extends Ka {
            constructor(t = 10, e = 10, n = 4473924, i = 8947848) {
                n = new nn(n),
                i = new nn(i);
                const r = e / 2,
                s = t / e,
                a = t / 2,
                o = [],
                l = [];
                for (let t = 0, c = 0, h = -a; t <= e; t++, h += s) {
                    o.push(-a, 0, h, a, 0, h),
                    o.push(h, 0, -a, h, 0, a);
                    const e = t === r ? n : i;
                    e.toArray(l, c),
                    c += 3,
                    e.toArray(l, c),
                    c += 3,
                    e.toArray(l, c),
                    c += 3,
                    e.toArray(l, c),
                    c += 3
                }
                const c = new Tn;
                c.setAttribute("position", new gn(o, 3)),
                c.setAttribute("color", new gn(l, 3));
                super(c, new Va({
                        vertexColors: !0,
                        toneMapped: !1
                    })),
                this.type = "GridHelper"
            }
        }
        const kh = new Nt,
        Vh = new Nt,
        Wh = new Nt;
        const jh = new Nt,
        qh = new Zn;
        function Xh(t, e, n, i, r, s, a) {
            jh.set(r, s, a).unproject(i);
            const o = e[t];
            if (void 0 !== o) {
                const t = n.getAttribute("position");
                for (let e = 0, n = o.length; e < n; e++)
                    t.setXYZ(o[e], jh.x, jh.y, jh.z)
            }
        }
        const Jh = new Ft;
        class Yh extends Ka {
            constructor(t, e = 16776960) {
                const n = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]),
                i = new Float32Array(24),
                r = new Tn;
                r.setIndex(new on(n, 1)),
                r.setAttribute("position", new on(i, 3)),
                super(r, new Va({
                        color: e,
                        toneMapped: !1
                    })),
                this.object = t,
                this.type = "BoxHelper",
                this.matrixAutoUpdate = !1,
                this.update()
            }
            update(t) {
                if (void 0 !== t && console.warn("THREE.BoxHelper: .update() has no longer arguments."), void 0 !== this.object && Jh.setFromObject(this.object), Jh.isEmpty())
                    return;
                const e = Jh.min,
                n = Jh.max,
                i = this.geometry.attributes.position,
                r = i.array;
                r[0] = n.x,
                r[1] = n.y,
                r[2] = n.z,
                r[3] = e.x,
                r[4] = n.y,
                r[5] = n.z,
                r[6] = e.x,
                r[7] = e.y,
                r[8] = n.z,
                r[9] = n.x,
                r[10] = e.y,
                r[11] = n.z,
                r[12] = n.x,
                r[13] = n.y,
                r[14] = e.z,
                r[15] = e.x,
                r[16] = n.y,
                r[17] = e.z,
                r[18] = e.x,
                r[19] = e.y,
                r[20] = e.z,
                r[21] = n.x,
                r[22] = e.y,
                r[23] = e.z,
                i.needsUpdate = !0,
                this.geometry.computeBoundingSphere()
            }
            setFromObject(t) {
                return this.object = t,
                this.update(),
                this
            }
            copy(t) {
                return Ka.prototype.copy.call(this, t),
                this.object = t.object,
                this
            }
        }
        const Zh = new Nt;
        let Qh,
        Kh;
        class $h extends Ka {
            constructor(t = 1) {
                const e = [0, 0, 0, t, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, t],
                n = new Tn;
                n.setAttribute("position", new gn(e, 3)),
                n.setAttribute("color", new gn([1, 0, 0, 1, .6, 0, 0, 1, 0, .6, 1, 0, 0, 0, 1, 0, .6, 1], 3));
                super(n, new Va({
                        vertexColors: !0,
                        toneMapped: !1
                    })),
                this.type = "AxesHelper"
            }
            setColors(t, e, n) {
                const i = new nn,
                r = this.geometry.attributes.color.array;
                return i.set(t),
                i.toArray(r, 0),
                i.toArray(r, 3),
                i.set(e),
                i.toArray(r, 6),
                i.toArray(r, 9),
                i.set(n),
                i.toArray(r, 12),
                i.toArray(r, 15),
                this.geometry.attributes.color.needsUpdate = !0,
                this
            }
            dispose() {
                this.geometry.dispose(),
                this.material.dispose()
            }
        }
        const tu = new Float32Array(1),
        eu = new Int32Array(tu.buffer);
        Mo.create = function (t, e) {
            return console.log("THREE.Curve.create() has been deprecated"),
            t.prototype = Object.create(Mo.prototype),
            t.prototype.constructor = t,
            t.prototype.getPoint = e,
            t
        },
        ko.prototype.fromPoints = function (t) {
            return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),
            this.setFromPoints(t)
        },
        Gh.prototype.setColors = function () {
            console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")
        },
        Bh.prototype.update = function () {
            console.error("THREE.SkeletonHelper: update() no longer needs to be called.")
        },
        oc.prototype.extractUrlBase = function (t) {
            return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),
            Nc.extractUrlBase(t)
        },
        oc.Handlers = {
            add: function () {
                console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")
            },
            get: function () {
                console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")
            }
        },
        Lh.prototype.center = function (t) {
            return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),
            this.getCenter(t)
        },
        Lh.prototype.empty = function () {
            return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),
            this.isEmpty()
        },
        Lh.prototype.isIntersectionBox = function (t) {
            return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),
            this.intersectsBox(t)
        },
        Lh.prototype.size = function (t) {
            return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),
            this.getSize(t)
        },
        Ft.prototype.center = function (t) {
            return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),
            this.getCenter(t)
        },
        Ft.prototype.empty = function () {
            return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),
            this.isEmpty()
        },
        Ft.prototype.isIntersectionBox = function (t) {
            return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),
            this.intersectsBox(t)
        },
        Ft.prototype.isIntersectionSphere = function (t) {
            return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),
            this.intersectsSphere(t)
        },
        Ft.prototype.size = function (t) {
            return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),
            this.getSize(t)
        },
        ne.prototype.empty = function () {
            return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),
            this.isEmpty()
        },
        li.prototype.setFromMatrix = function (t) {
            return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),
            this.setFromProjectionMatrix(t)
        },
        Ph.prototype.center = function (t) {
            return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),
            this.getCenter(t)
        },
        yt.prototype.flattenToArrayOffset = function (t, e) {
            return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),
            this.toArray(t, e)
        },
        yt.prototype.multiplyVector3 = function (t) {
            return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),
            t.applyMatrix3(this)
        },
        yt.prototype.multiplyVector3Array = function () {
            console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")
        },
        yt.prototype.applyToBufferAttribute = function (t) {
            return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),
            t.applyMatrix3(this)
        },
        yt.prototype.applyToVector3Array = function () {
            console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")
        },
        yt.prototype.getInverse = function (t) {
            return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),
            this.copy(t).invert()
        },
        ue.prototype.extractPosition = function (t) {
            return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),
            this.copyPosition(t)
        },
        ue.prototype.flattenToArrayOffset = function (t, e) {
            return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),
            this.toArray(t, e)
        },
        ue.prototype.getPosition = function () {
            return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),
            new Nt().setFromMatrixColumn(this, 3)
        },
        ue.prototype.setRotationFromQuaternion = function (t) {
            return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),
            this.makeRotationFromQuaternion(t)
        },
        ue.prototype.multiplyToArray = function () {
            console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")
        },
        ue.prototype.multiplyVector3 = function (t) {
            return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),
            t.applyMatrix4(this)
        },
        ue.prototype.multiplyVector4 = function (t) {
            return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),
            t.applyMatrix4(this)
        },
        ue.prototype.multiplyVector3Array = function () {
            console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")
        },
        ue.prototype.rotateAxis = function (t) {
            console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),
            t.transformDirection(this)
        },
        ue.prototype.crossVector = function (t) {
            return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),
            t.applyMatrix4(this)
        },
        ue.prototype.translate = function () {
            console.error("THREE.Matrix4: .translate() has been removed.")
        },
        ue.prototype.rotateX = function () {
            console.error("THREE.Matrix4: .rotateX() has been removed.")
        },
        ue.prototype.rotateY = function () {
            console.error("THREE.Matrix4: .rotateY() has been removed.")
        },
        ue.prototype.rotateZ = function () {
            console.error("THREE.Matrix4: .rotateZ() has been removed.")
        },
        ue.prototype.rotateByAxis = function () {
            console.error("THREE.Matrix4: .rotateByAxis() has been removed.")
        },
        ue.prototype.applyToBufferAttribute = function (t) {
            return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),
            t.applyMatrix4(this)
        },
        ue.prototype.applyToVector3Array = function () {
            console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")
        },
        ue.prototype.makeFrustum = function (t, e, n, i, r, s) {
            return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),
            this.makePerspective(t, e, i, n, r, s)
        },
        ue.prototype.getInverse = function (t) {
            return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),
            this.copy(t).invert()
        },
        si.prototype.isIntersectionLine = function (t) {
            return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),
            this.intersectsLine(t)
        },
        It.prototype.multiplyVector3 = function (t) {
            return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),
            t.applyQuaternion(this)
        },
        It.prototype.inverse = function () {
            return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),
            this.invert()
        },
        he.prototype.isIntersectionBox = function (t) {
            return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),
            this.intersectsBox(t)
        },
        he.prototype.isIntersectionPlane = function (t) {
            return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),
            this.intersectsPlane(t)
        },
        he.prototype.isIntersectionSphere = function (t) {
            return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),
            this.intersectsSphere(t)
        },
        Xe.prototype.area = function () {
            return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),
            this.getArea()
        },
        Xe.prototype.barycoordFromPoint = function (t, e) {
            return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),
            this.getBarycoord(t, e)
        },
        Xe.prototype.midpoint = function (t) {
            return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),
            this.getMidpoint(t)
        },
        Xe.prototypenormal = function (t) {
            return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),
            this.getNormal(t)
        },
        Xe.prototype.plane = function (t) {
            return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),
            this.getPlane(t)
        },
        Xe.barycoordFromPoint = function (t, e, n, i, r) {
            return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),
            Xe.getBarycoord(t, e, n, i, r)
        },
        Xe.normal = function (t, e, n, i) {
            return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),
            Xe.getNormal(t, e, n, i)
        },
        Vo.prototype.extractAllPoints = function (t) {
            return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),
            this.extractPoints(t)
        },
        Vo.prototype.extrude = function (t) {
            return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),
            new yl(this, t)
        },
        Vo.prototype.makeGeometry = function (t) {
            return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),
            new Sl(this, t)
        },
        vt.prototype.fromAttribute = function (t, e, n) {
            return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),
            this.fromBufferAttribute(t, e, n)
        },
        vt.prototype.distanceToManhattan = function (t) {
            return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),
            this.manhattanDistanceTo(t)
        },
        vt.prototype.lengthManhattan = function () {
            return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),
            this.manhattanLength()
        },
        Nt.prototype.setEulerFromRotationMatrix = function () {
            console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")
        },
        Nt.prototype.setEulerFromQuaternion = function () {
            console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")
        },
        Nt.prototype.getPositionFromMatrix = function (t) {
            return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),
            this.setFromMatrixPosition(t)
        },
        Nt.prototype.getScaleFromMatrix = function (t) {
            return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),
            this.setFromMatrixScale(t)
        },
        Nt.prototype.getColumnFromMatrix = function (t, e) {
            return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),
            this.setFromMatrixColumn(e, t)
        },
        Nt.prototype.applyProjection = function (t) {
            return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),
            this.applyMatrix4(t)
        },
        Nt.prototype.fromAttribute = function (t, e, n) {
            return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),
            this.fromBufferAttribute(t, e, n)
        },
        Nt.prototype.distanceToManhattan = function (t) {
            return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),
            this.manhattanDistanceTo(t)
        },
        Nt.prototype.lengthManhattan = function () {
            return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),
            this.manhattanLength()
        },
        Rt.prototype.fromAttribute = function (t, e, n) {
            return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),
            this.fromBufferAttribute(t, e, n)
        },
        Rt.prototype.lengthManhattan = function () {
            return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),
            this.manhattanLength()
        },
        Be.prototype.getChildByName = function (t) {
            return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),
            this.getObjectByName(t)
        },
        Be.prototype.renderDepth = function () {
            console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")
        },
        Be.prototype.translate = function (t, e) {
            return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),
            this.translateOnAxis(e, t)
        },
        Be.prototype.getWorldRotation = function () {
            console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")
        },
        Be.prototype.applyMatrix = function (t) {
            return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),
            this.applyMatrix4(t)
        },
        Object.defineProperties(Be.prototype, {
            eulerOrder: {
                get: function () {
                    return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),
                    this.rotation.order
                },
                set: function (t) {
                    console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),
                    this.rotation.order = t
                }
            },
            useQuaternion: {
                get: function () {
                    console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")
                },
                set: function () {
                    console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")
                }
            }
        }),
        Vn.prototype.setDrawMode = function () {
            console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")
        },
        Object.defineProperties(Vn.prototype, {
            drawMode: {
                get: function () {
                    return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),
                    0
                },
                set: function () {
                    console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")
                }
            }
        }),
        Pa.prototype.initBones = function () {
            console.error("THREE.SkinnedMesh: initBones() has been removed.")
        },
        Qn.prototype.setLens = function (t, e) {
            console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),
            void 0 !== e && (this.filmGauge = e),
            this.setFocalLength(t)
        },
        Object.defineProperties(mc.prototype, {
            onlyShadow: {
                set: function () {
                    console.warn("THREE.Light: .onlyShadow has been removed.")
                }
            },
            shadowCameraFov: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),
                    this.shadow.camera.fov = t
                }
            },
            shadowCameraLeft: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),
                    this.shadow.camera.left = t
                }
            },
            shadowCameraRight: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),
                    this.shadow.camera.right = t
                }
            },
            shadowCameraTop: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),
                    this.shadow.camera.top = t
                }
            },
            shadowCameraBottom: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),
                    this.shadow.camera.bottom = t
                }
            },
            shadowCameraNear: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),
                    this.shadow.camera.near = t
                }
            },
            shadowCameraFar: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),
                    this.shadow.camera.far = t
                }
            },
            shadowCameraVisible: {
                set: function () {
                    console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")
                }
            },
            shadowBias: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowBias is now .shadow.bias."),
                    this.shadow.bias = t
                }
            },
            shadowDarkness: {
                set: function () {
                    console.warn("THREE.Light: .shadowDarkness has been removed.")
                }
            },
            shadowMapWidth: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),
                    this.shadow.mapSize.width = t
                }
            },
            shadowMapHeight: {
                set: function (t) {
                    console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),
                    this.shadow.mapSize.height = t
                }
            }
        }),
        Object.defineProperties(on.prototype, {
            length: {
                get: function () {
                    return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),
                    this.array.length
                }
            },
            dynamic: {
                get: function () {
                    return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),
                    this.usage === nt
                },
                set: function () {
                    console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),
                    this.setUsage(nt)
                }
            }
        }),
        on.prototype.setDynamic = function (t) {
            return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),
            this.setUsage(!0 === t ? nt : et),
            this
        },
        on.prototype.copyIndicesArray = function () {
            console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")
        },
        on.prototype.setArray = function () {
            console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")
        },
        Tn.prototype.addIndex = function (t) {
            console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),
            this.setIndex(t)
        },
        Tn.prototype.addAttribute = function (t, e) {
            return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),
            e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new on(arguments[1], arguments[2])))
        },
        Tn.prototype.addDrawCall = function (t, e, n) {
            void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),
            console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),
            this.addGroup(t, e)
        },
        Tn.prototype.clearDrawCalls = function () {
            console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),
            this.clearGroups()
        },
        Tn.prototype.computeOffsets = function () {
            console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")
        },
        Tn.prototype.removeAttribute = function (t) {
            return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),
            this.deleteAttribute(t)
        },
        Tn.prototype.applyMatrix = function (t) {
            return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),
            this.applyMatrix4(t)
        },
        Object.defineProperties(Tn.prototype, {
            drawcalls: {
                get: function () {
                    return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),
                    this.groups
                }
            },
            offsets: {
                get: function () {
                    return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),
                    this.groups
                }
            }
        }),
        ra.prototype.setDynamic = function (t) {
            return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),
            this.setUsage(!0 === t ? nt : et),
            this
        },
        ra.prototype.setArray = function () {
            console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")
        },
        yl.prototype.getArrays = function () {
            console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")
        },
        yl.prototype.addShapeList = function () {
            console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")
        },
        yl.prototype.addShape = function () {
            console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")
        },
        ia.prototype.dispose = function () {
            console.error("THREE.Scene: .dispose() has been removed.")
        },
        bh.prototype.onUpdate = function () {
            return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),
            this
        },
        Object.defineProperties(Ye.prototype, {
            wrapAround: {
                get: function () {
                    console.warn("THREE.Material: .wrapAround has been removed.")
                },
                set: function () {
                    console.warn("THREE.Material: .wrapAround has been removed.")
                }
            },
            overdraw: {
                get: function () {
                    console.warn("THREE.Material: .overdraw has been removed.")
                },
                set: function () {
                    console.warn("THREE.Material: .overdraw has been removed.")
                }
            },
            wrapRGB: {
                get: function () {
                    return console.warn("THREE.Material: .wrapRGB has been removed."),
                    new nn
                }
            },
            shading: {
                get: function () {
                    console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.")
                },
                set: function (t) {
                    console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."),
                    this.flatShading = 1 === t
                }
            },
            stencilMask: {
                get: function () {
                    return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."),
                    this.stencilFuncMask
                },
                set: function (t) {
                    console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."),
                    this.stencilFuncMask = t
                }
            },
            vertexTangents: {
                get: function () {
                    console.warn("THREE." + this.type + ": .vertexTangents has been removed.")
                },
                set: function () {
                    console.warn("THREE." + this.type + ": .vertexTangents has been removed.")
                }
            }
        }),
        Object.defineProperties(Yn.prototype, {
            derivatives: {
                get: function () {
                    return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),
                    this.extensions.derivatives
                },
                set: function (t) {
                    console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),
                    this.extensions.derivatives = t
                }
            }
        }),
        $s.prototype.clearTarget = function (t, e, n, i) {
            console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),
            this.setRenderTarget(t),
            this.clear(e, n, i)
        },
        $s.prototype.animate = function (t) {
            console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),
            this.setAnimationLoop(t)
        },
        $s.prototype.getCurrentRenderTarget = function () {
            return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),
            this.getRenderTarget()
        },
        $s.prototype.getMaxAnisotropy = function () {
            return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),
            this.capabilities.getMaxAnisotropy()
        },
        $s.prototype.getPrecision = function () {
            return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),
            this.capabilities.precision
        },
        $s.prototype.resetGLState = function () {
            return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),
            this.state.reset()
        },
        $s.prototype.supportsFloatTextures = function () {
            return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),
            this.extensions.get("OES_texture_float")
        },
        $s.prototype.supportsHalfFloatTextures = function () {
            return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),
            this.extensions.get("OES_texture_half_float")
        },
        $s.prototype.supportsStandardDerivatives = function () {
            return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),
            this.extensions.get("OES_standard_derivatives")
        },
        $s.prototype.supportsCompressedTextureS3TC = function () {
            return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),
            this.extensions.get("WEBGL_compressed_texture_s3tc")
        },
        $s.prototype.supportsCompressedTexturePVRTC = function () {
            return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),
            this.extensions.get("WEBGL_compressed_texture_pvrtc")
        },
        $s.prototype.supportsBlendMinMax = function () {
            return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),
            this.extensions.get("EXT_blend_minmax")
        },
        $s.prototype.supportsVertexTextures = function () {
            return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),
            this.capabilities.vertexTextures
        },
        $s.prototype.supportsInstancedArrays = function () {
            return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),
            this.extensions.get("ANGLE_instanced_arrays")
        },
        $s.prototype.enableScissorTest = function (t) {
            console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),
            this.setScissorTest(t)
        },
        $s.prototype.initMaterial = function () {
            console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")
        },
        $s.prototype.addPrePlugin = function () {
            console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")
        },
        $s.prototype.addPostPlugin = function () {
            console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")
        },
        $s.prototype.updateShadowMap = function () {
            console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")
        },
        $s.prototype.setFaceCulling = function () {
            console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")
        },
        $s.prototype.allocTextureUnit = function () {
            console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")
        },
        $s.prototype.setTexture = function () {
            console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")
        },
        $s.prototype.setTexture2D = function () {
            console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")
        },
        $s.prototype.setTextureCube = function () {
            console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")
        },
        $s.prototype.getActiveMipMapLevel = function () {
            return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),
            this.getActiveMipmapLevel()
        },
        Object.defineProperties($s.prototype, {
            shadowMapEnabled: {
                get: function () {
                    return this.shadowMap.enabled
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),
                    this.shadowMap.enabled = t
                }
            },
            shadowMapType: {
                get: function () {
                    return this.shadowMap.type
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),
                    this.shadowMap.type = t
                }
            },
            shadowMapCullFace: {
                get: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")
                }
            },
            context: {
                get: function () {
                    return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),
                    this.getContext()
                }
            },
            vr: {
                get: function () {
                    return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),
                    this.xr
                }
            },
            gammaInput: {
                get: function () {
                    return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),
                    !1
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")
                }
            },
            gammaOutput: {
                get: function () {
                    return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),
                    !1
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),
                    this.outputEncoding = !0 === t ? J : X
                }
            },
            toneMappingWhitePoint: {
                get: function () {
                    return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),
                    1
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")
                }
            }
        }),
        Object.defineProperties(ks.prototype, {
            cullFace: {
                get: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")
                }
            },
            renderReverseSided: {
                get: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")
                }
            },
            renderSingleSided: {
                get: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")
                },
                set: function () {
                    console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")
                }
            }
        }),
        Object.defineProperties(Ct.prototype, {
            wrapS: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),
                    this.texture.wrapS
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),
                    this.texture.wrapS = t
                }
            },
            wrapT: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),
                    this.texture.wrapT
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),
                    this.texture.wrapT = t
                }
            },
            magFilter: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),
                    this.texture.magFilter
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),
                    this.texture.magFilter = t
                }
            },
            minFilter: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),
                    this.texture.minFilter
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),
                    this.texture.minFilter = t
                }
            },
            anisotropy: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),
                    this.texture.anisotropy
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),
                    this.texture.anisotropy = t
                }
            },
            offset: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),
                    this.texture.offset
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),
                    this.texture.offset = t
                }
            },
            repeat: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),
                    this.texture.repeat
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),
                    this.texture.repeat = t
                }
            },
            format: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),
                    this.texture.format
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),
                    this.texture.format = t
                }
            },
            type: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),
                    this.texture.type
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),
                    this.texture.type = t
                }
            },
            generateMipmaps: {
                get: function () {
                    return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),
                    this.texture.generateMipmaps
                },
                set: function (t) {
                    console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),
                    this.texture.generateMipmaps = t
                }
            }
        }),
        eh.prototype.load = function (t) {
            console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");
            const e = this;
            return new Vc().load(t, function (t) {
                e.setBuffer(t)
            }),
            this
        },
        ah.prototype.getData = function () {
            return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),
            this.getFrequencyData()
        },
        $n.prototype.updateCubeMap = function (t, e) {
            return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),
            this.update(t, e)
        },
        $n.prototype.clear = function (t, e, n, i) {
            return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),
            this.renderTarget.clear(t, e, n, i)
        },
        Tt.crossOrigin = void 0,
        Tt.loadTexture = function (t, e, n, i) {
            console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");
            const r = new pc;
            r.setCrossOrigin(this.crossOrigin);
            const s = r.load(t, n, void 0, i);
            return e && (s.mapping = e),
            s
        },
        Tt.loadTextureCube = function (t, e, n, i) {
            console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");
            const r = new uc;
            r.setCrossOrigin(this.crossOrigin);
            const s = r.load(t, n, void 0, i);
            return e && (s.mapping = e),
            s
        },
        Tt.loadCompressedTexture = function () {
            console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")
        },
        Tt.loadCompressedTextureCube = function () {
            console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")
        };
        const nu = {
            createMultiMaterialObject: function () {
                console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")
            },
            detach: function () {
                console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")
            },
            attach: function () {
                console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")
            }
        };
        "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", {
                detail: {
                    revision: e
                }
            })),
        "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = e),
        t.ACESFilmicToneMapping = 4,
        t.AddEquation = n,
        t.AddOperation = 2,
        t.AdditiveAnimationBlendMode = q,
        t.AdditiveBlending = 2,
        t.AlphaFormat = 1021,
        t.AlwaysDepth = 1,
        t.AlwaysStencilFunc = 519,
        t.AmbientLight = Rc,
        t.AmbientLightProbe = jc,
        t.AnimationClip = nc,
        t.AnimationLoader = class extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = new cc(this.manager);
                s.setPath(this.path),
                s.setRequestHeader(this.requestHeader),
                s.setWithCredentials(this.withCredentials),
                s.load(t, function (n) {
                    try {
                        e(r.parse(JSON.parse(n)))
                    } catch (e) {
                        i ? i(e) : console.error(e),
                        r.manager.itemError(t)
                    }
                }, n, i)
            }
            parse(t) {
                const e = [];
                for (let n = 0; n < t.length; n++) {
                    const i = nc.parse(t[n]);
                    e.push(i)
                }
                return e
            }
        },
        t.AnimationMixer = Mh,
        t.AnimationObjectGroup = xh,
        t.AnimationUtils = Vl,
        t.ArcCurve = wo,
        t.ArrayCamera = qs,
        t.ArrowHelper = class extends Be {
            constructor(t = new Nt(0, 0, 1), e = new Nt(0, 0, 0), n = 1, i = 16776960, r = .2 * n, s = .2 * r) {
                super(),
                this.type = "ArrowHelper",
                void 0 === Qh && (Qh = new Tn, Qh.setAttribute("position", new gn([0, 0, 0, 0, 1, 0], 3)), Kh = new uo(0, .5, 1, 5, 1), Kh.translate(0,  - .5, 0)),
                this.position.copy(e),
                this.line = new Ya(Qh, new Va({
                            color: i,
                            toneMapped: !1
                        })),
                this.line.matrixAutoUpdate = !1,
                this.add(this.line),
                this.cone = new Vn(Kh, new rn({
                            color: i,
                            toneMapped: !1
                        })),
                this.cone.matrixAutoUpdate = !1,
                this.add(this.cone),
                this.setDirection(t),
                this.setLength(n, r, s)
            }
            setDirection(t) {
                if (t.y > .99999)
                    this.quaternion.set(0, 0, 0, 1);
                else if (t.y <  - .99999)
                    this.quaternion.set(1, 0, 0, 0);
                else {
                    Zh.set(t.z, 0, -t.x).normalize();
                    const e = Math.acos(t.y);
                    this.quaternion.setFromAxisAngle(Zh, e)
                }
            }
            setLength(t, e = .2 * t, n = .2 * e) {
                this.line.scale.set(1, Math.max(1e-4, t - e), 1),
                this.line.updateMatrix(),
                this.cone.scale.set(n, e, n),
                this.cone.position.y = t,
                this.cone.updateMatrix()
            }
            setColor(t) {
                this.line.material.color.set(t),
                this.cone.material.color.set(t)
            }
            copy(t) {
                return super.copy(t, !1),
                this.line.copy(t.line),
                this.cone.copy(t.cone),
                this
            }
        },
        t.Audio = eh,
        t.AudioAnalyser = ah,
        t.AudioContext = kc,
        t.AudioListener = class extends Be {
            constructor() {
                super(),
                this.type = "AudioListener",
                this.context = kc.getContext(),
                this.gain = this.context.createGain(),
                this.gain.connect(this.context.destination),
                this.filter = null,
                this.timeDelta = 0,
                this._clock = new Yc
            }
            getInput() {
                return this.gain
            }
            removeFilter() {
                return null !== this.filter && (this.gain.disconnect(this.filter), this.filter.disconnect(this.context.destination), this.gain.connect(this.context.destination), this.filter = null),
                this
            }
            getFilter() {
                return this.filter
            }
            setFilter(t) {
                return null !== this.filter ? (this.gain.disconnect(this.filter), this.filter.disconnect(this.context.destination)) : this.gain.disconnect(this.context.destination),
                this.filter = t,
                this.gain.connect(this.filter),
                this.filter.connect(this.context.destination),
                this
            }
            getMasterVolume() {
                return this.gain.gain.value
            }
            setMasterVolume(t) {
                return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01),
                this
            }
            updateMatrixWorld(t) {
                super.updateMatrixWorld(t);
                const e = this.context.listener,
                n = this.up;
                if (this.timeDelta = this._clock.getDelta(), this.matrixWorld.decompose(Qc, Kc, $c), th.set(0, 0, -1).applyQuaternion(Kc), e.positionX) {
                    const t = this.context.currentTime + this.timeDelta;
                    e.positionX.linearRampToValueAtTime(Qc.x, t),
                    e.positionY.linearRampToValueAtTime(Qc.y, t),
                    e.positionZ.linearRampToValueAtTime(Qc.z, t),
                    e.forwardX.linearRampToValueAtTime(th.x, t),
                    e.forwardY.linearRampToValueAtTime(th.y, t),
                    e.forwardZ.linearRampToValueAtTime(th.z, t),
                    e.upX.linearRampToValueAtTime(n.x, t),
                    e.upY.linearRampToValueAtTime(n.y, t),
                    e.upZ.linearRampToValueAtTime(n.z, t)
                } else
                    e.setPosition(Qc.x, Qc.y, Qc.z), e.setOrientation(th.x, th.y, th.z, n.x, n.y, n.z)
            }
        },
        t.AudioLoader = Vc,
        t.AxesHelper = $h,
        t.AxisHelper = function (t) {
            return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),
            new $h(t)
        },
        t.BackSide = 1,
        t.BasicDepthPacking = 3200,
        t.BasicShadowMap = 0,
        t.BinaryTextureLoader = function (t) {
            return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),
            new dc(t)
        },
        t.Bone = Da,
        t.BooleanKeyframeTrack = Yl,
        t.BoundingBoxHelper = function (t, e) {
            return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),
            new Yh(t, e)
        },
        t.Box2 = Lh,
        t.Box3 = Ft,
        t.Box3Helper = class extends Ka {
            constructor(t, e = 16776960) {
                const n = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]),
                i = new Tn;
                i.setIndex(new on(n, 1)),
                i.setAttribute("position", new gn([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1], 3)),
                super(i, new Va({
                        color: e,
                        toneMapped: !1
                    })),
                this.box = t,
                this.type = "Box3Helper",
                this.geometry.computeBoundingSphere()
            }
            updateMatrixWorld(t) {
                const e = this.box;
                e.isEmpty() || (e.getCenter(this.position), e.getSize(this.scale), this.scale.multiplyScalar(.5), super.updateMatrixWorld(t))
            }
        },
        t.BoxBufferGeometry = jn,
        t.BoxGeometry = jn,
        t.BoxHelper = Yh,
        t.BufferAttribute = on,
        t.BufferGeometry = Tn,
        t.BufferGeometryLoader = Bc,
        t.ByteType = 1010,
        t.Cache = rc,
        t.Camera = Zn,
        t.CameraHelper = class extends Ka {
            constructor(t) {
                const e = new Tn,
                n = new Va({
                    color: 16777215,
                    vertexColors: !0,
                    toneMapped: !1
                }),
                i = [],
                r = [],
                s = {},
                a = new nn(16755200),
                o = new nn(16711680),
                l = new nn(43775),
                c = new nn(16777215),
                h = new nn(3355443);
                function u(t, e, n) {
                    d(t, n),
                    d(e, n)
                }
                function d(t, e) {
                    i.push(0, 0, 0),
                    r.push(e.r, e.g, e.b),
                    void 0 === s[t] && (s[t] = []),
                    s[t].push(i.length / 3 - 1)
                }
                u("n1", "n2", a),
                u("n2", "n4", a),
                u("n4", "n3", a),
                u("n3", "n1", a),
                u("f1", "f2", a),
                u("f2", "f4", a),
                u("f4", "f3", a),
                u("f3", "f1", a),
                u("n1", "f1", a),
                u("n2", "f2", a),
                u("n3", "f3", a),
                u("n4", "f4", a),
                u("p", "n1", o),
                u("p", "n2", o),
                u("p", "n3", o),
                u("p", "n4", o),
                u("u1", "u2", l),
                u("u2", "u3", l),
                u("u3", "u1", l),
                u("c", "t", c),
                u("p", "c", h),
                u("cn1", "cn2", h),
                u("cn3", "cn4", h),
                u("cf1", "cf2", h),
                u("cf3", "cf4", h),
                e.setAttribute("position", new gn(i, 3)),
                e.setAttribute("color", new gn(r, 3)),
                super(e, n),
                this.type = "CameraHelper",
                this.camera = t,
                this.camera.updateProjectionMatrix && this.camera.updateProjectionMatrix(),
                this.matrix = t.matrixWorld,
                this.matrixAutoUpdate = !1,
                this.pointMap = s,
                this.update()
            }
            update() {
                const t = this.geometry,
                e = this.pointMap;
                qh.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),
                Xh("c", e, t, qh, 0, 0, -1),
                Xh("t", e, t, qh, 0, 0, 1),
                Xh("n1", e, t, qh, -1, -1, -1),
                Xh("n2", e, t, qh, 1, -1, -1),
                Xh("n3", e, t, qh, -1, 1, -1),
                Xh("n4", e, t, qh, 1, 1, -1),
                Xh("f1", e, t, qh, -1, -1, 1),
                Xh("f2", e, t, qh, 1, -1, 1),
                Xh("f3", e, t, qh, -1, 1, 1),
                Xh("f4", e, t, qh, 1, 1, 1),
                Xh("u1", e, t, qh, .7, 1.1, -1),
                Xh("u2", e, t, qh,  - .7, 1.1, -1),
                Xh("u3", e, t, qh, 0, 2, -1),
                Xh("cf1", e, t, qh, -1, 0, 1),
                Xh("cf2", e, t, qh, 1, 0, 1),
                Xh("cf3", e, t, qh, 0, -1, 1),
                Xh("cf4", e, t, qh, 0, 1, 1),
                Xh("cn1", e, t, qh, -1, 0, -1),
                Xh("cn2", e, t, qh, 1, 0, -1),
                Xh("cn3", e, t, qh, 0, -1, -1),
                Xh("cn4", e, t, qh, 0, 1, -1),
                t.getAttribute("position").needsUpdate = !0
            }
            dispose() {
                this.geometry.dispose(),
                this.material.dispose()
            }
        },
        t.CanvasRenderer = function () {
            console.error("THREE.CanvasRenderer has been removed")
        },
        t.CanvasTexture = co,
        t.CatmullRomCurve3 = Ro,
        t.CineonToneMapping = 3,
        t.CircleBufferGeometry = ho,
        t.CircleGeometry = ho,
        t.ClampToEdgeWrapping = u,
        t.Clock = Yc,
        t.Color = nn,
        t.ColorKeyframeTrack = Zl,
        t.CompressedTexture = lo,
        t.CompressedTextureLoader = class extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = [],
                a = new lo,
                o = new cc(this.manager);
                o.setPath(this.path),
                o.setResponseType("arraybuffer"),
                o.setRequestHeader(this.requestHeader),
                o.setWithCredentials(r.withCredentials);
                let l = 0;
                function c(c) {
                    o.load(t[c], function (t) {
                        const n = r.parse(t, !0);
                        s[c] = {
                            width: n.width,
                            height: n.height,
                            format: n.format,
                            mipmaps: n.mipmaps
                        },
                        l += 1,
                        6 === l && (1 === n.mipmapCount && (a.minFilter = g), a.image = s, a.format = n.format, a.needsUpdate = !0, e && e(a))
                    }, n, i)
                }
                if (Array.isArray(t))
                    for (let e = 0, n = t.length; e < n; ++e)
                        c(e);
                else
                    o.load(t, function (t) {
                        const n = r.parse(t, !0);
                        if (n.isCubemap) {
                            const t = n.mipmaps.length / n.mipmapCount;
                            for (let e = 0; e < t; e++) {
                                s[e] = {
                                    mipmaps: []
                                };
                                for (let t = 0; t < n.mipmapCount; t++)
                                    s[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), s[e].format = n.format, s[e].width = n.width, s[e].height = n.height
                            }
                            a.image = s
                        } else
                            a.image.width = n.width, a.image.height = n.height, a.mipmaps = n.mipmaps;
                        1 === n.mipmapCount && (a.minFilter = g),
                        a.format = n.format,
                        a.needsUpdate = !0,
                        e && e(a)
                    }, n, i);
                return a
            }
        },
        t.ConeBufferGeometry = po,
        t.ConeGeometry = po,
        t.CubeCamera = $n,
        t.CubeReflectionMapping = r,
        t.CubeRefractionMapping = s,
        t.CubeTexture = ti,
        t.CubeTextureLoader = uc,
        t.CubeUVReflectionMapping = l,
        t.CubeUVRefractionMapping = c,
        t.CubicBezierCurve = Io,
        t.CubicBezierCurve3 = No,
        t.CubicInterpolant = jl,
        t.CullFaceBack = 1,
        t.CullFaceFront = 2,
        t.CullFaceFrontBack = 3,
        t.CullFaceNone = 0,
        t.Curve = Mo,
        t.CurvePath = Go,
        t.CustomBlending = 5,
        t.CustomToneMapping = 5,
        t.CylinderBufferGeometry = uo,
        t.CylinderGeometry = uo,
        t.Cylindrical = class {
            constructor(t = 1, e = 0, n = 0) {
                return this.radius = t,
                this.theta = e,
                this.y = n,
                this
            }
            set(t, e, n) {
                return this.radius = t,
                this.theta = e,
                this.y = n,
                this
            }
            copy(t) {
                return this.radius = t.radius,
                this.theta = t.theta,
                this.y = t.y,
                this
            }
            setFromVector3(t) {
                return this.setFromCartesianCoords(t.x, t.y, t.z)
            }
            setFromCartesianCoords(t, e, n) {
                return this.radius = Math.sqrt(t * t + n * n),
                this.theta = Math.atan2(t, n),
                this.y = e,
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
        },
        t.DataTexture = Ia,
        t.DataTexture2DArray = Qi,
        t.DataTexture3D = ir,
        t.DataTextureLoader = dc,
        t.DataUtils = class {
            static toHalfFloat(t) {
                t > 65504 && (console.warn("THREE.DataUtils.toHalfFloat(): value exceeds 65504."), t = 65504),
                tu[0] = t;
                const e = eu[0];
                let n = e >> 16 & 32768,
                i = e >> 12 & 2047;
                const r = e >> 23 & 255;
                return r < 103 ? n : r > 142 ? (n |= 31744, n |= (255 == r ? 0 : 1) && 8388607 & e, n) : r < 113 ? (i |= 2048, n |= (i >> 114 - r) + (i >> 113 - r & 1), n) : (n |= r - 112 << 10 | i >> 1, n += 1 & i, n)
            }
        },
        t.DecrementStencilOp = 7683,
        t.DecrementWrapStencilOp = 34056,
        t.DefaultLoadingManager = ac,
        t.DepthFormat = A,
        t.DepthStencilFormat = L,
        t.DepthTexture = Zs,
        t.DirectionalLight = Lc,
        t.DirectionalLightHelper = class extends Be {
            constructor(t, e, n) {
                super(),
                this.light = t,
                this.light.updateMatrixWorld(),
                this.matrix = t.matrixWorld,
                this.matrixAutoUpdate = !1,
                this.color = n,
                void 0 === e && (e = 1);
                let i = new Tn;
                i.setAttribute("position", new gn([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0], 3));
                const r = new Va({
                    fog: !1,
                    toneMapped: !1
                });
                this.lightPlane = new Ya(i, r),
                this.add(this.lightPlane),
                i = new Tn,
                i.setAttribute("position", new gn([0, 0, 0, 0, 0, 1], 3)),
                this.targetLine = new Ya(i, r),
                this.add(this.targetLine),
                this.update()
            }
            dispose() {
                this.lightPlane.geometry.dispose(),
                this.lightPlane.material.dispose(),
                this.targetLine.geometry.dispose(),
                this.targetLine.material.dispose()
            }
            update() {
                kh.setFromMatrixPosition(this.light.matrixWorld),
                Vh.setFromMatrixPosition(this.light.target.matrixWorld),
                Wh.subVectors(Vh, kh),
                this.lightPlane.lookAt(Vh),
                void 0 !== this.color ? (this.lightPlane.material.color.set(this.color), this.targetLine.material.color.set(this.color)) : (this.lightPlane.material.color.copy(this.light.color), this.targetLine.material.color.copy(this.light.color)),
                this.targetLine.lookAt(Vh),
                this.targetLine.scale.z = Wh.length()
            }
        },
        t.DiscreteInterpolant = Xl,
        t.DodecahedronBufferGeometry = fo,
        t.DodecahedronGeometry = fo,
        t.DoubleSide = 2,
        t.DstAlphaFactor = 206,
        t.DstColorFactor = 208,
        t.DynamicBufferAttribute = function (t, e) {
            return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),
            new on(t, e).setUsage(nt)
        },
        t.DynamicCopyUsage = 35050,
        t.DynamicDrawUsage = nt,
        t.DynamicReadUsage = 35049,
        t.EdgesGeometry = _o,
        t.EdgesHelper = function (t, e) {
            return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),
            new Ka(new _o(t.geometry), new Va({
                    color: void 0 !== e ? e : 16777215
                }))
        },
        t.EllipseCurve = bo,
        t.EqualDepth = 4,
        t.EqualStencilFunc = 514,
        t.EquirectangularReflectionMapping = a,
        t.EquirectangularRefractionMapping = o,
        t.Euler = Me,
        t.EventDispatcher = rt,
        t.ExtrudeBufferGeometry = yl,
        t.ExtrudeGeometry = yl,
        t.FaceColors = 1,
        t.FileLoader = cc,
        t.FlatShading = 1,
        t.Float16BufferAttribute = fn,
        t.Float32Attribute = function (t, e) {
            return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),
            new gn(t, e)
        },
        t.Float32BufferAttribute = gn,
        t.Float64Attribute = function (t, e) {
            return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),
            new vn(t, e)
        },
        t.Float64BufferAttribute = vn,
        t.FloatType = b,
        t.Fog = na,
        t.FogExp2 = ea,
        t.Font = function () {
            console.error("THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js")
        },
        t.FontLoader = function () {
            console.error("THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js")
        },
        t.FrontSide = 0,
        t.Frustum = li,
        t.GLBufferAttribute = Sh,
        t.GLSL1 = "100",
        t.GLSL3 = it,
        t.GammaEncoding = Y,
        t.GreaterDepth = 6,
        t.GreaterEqualDepth = 5,
        t.GreaterEqualStencilFunc = 518,
        t.GreaterStencilFunc = 516,
        t.GridHelper = Gh,
        t.Group = Xs,
        t.HalfFloatType = w,
        t.HemisphereLight = fc,
        t.HemisphereLightHelper = class extends Be {
            constructor(t, e, n) {
                super(),
                this.light = t,
                this.light.updateMatrixWorld(),
                this.matrix = t.matrixWorld,
                this.matrixAutoUpdate = !1,
                this.color = n;
                const i = new bl(e);
                i.rotateY(.5 * Math.PI),
                this.material = new rn({
                    wireframe: !0,
                    fog: !1,
                    toneMapped: !1
                }),
                void 0 === this.color && (this.material.vertexColors = !0);
                const r = i.getAttribute("position"),
                s = new Float32Array(3 * r.count);
                i.setAttribute("color", new on(s, 3)),
                this.add(new Vn(i, this.material)),
                this.update()
            }
            dispose() {
                this.children[0].geometry.dispose(),
                this.children[0].material.dispose()
            }
            update() {
                const t = this.children[0];
                if (void 0 !== this.color)
                    this.material.color.set(this.color);
                else {
                    const e = t.geometry.getAttribute("color");
                    Uh.copy(this.light.color),
                    Hh.copy(this.light.groundColor);
                    for (let t = 0, n = e.count; t < n; t++) {
                        const i = t < n / 2 ? Uh : Hh;
                        e.setXYZ(t, i.r, i.g, i.b)
                    }
                    e.needsUpdate = !0
                }
                t.lookAt(Oh.setFromMatrixPosition(this.light.matrixWorld).negate())
            }
        },
        t.HemisphereLightProbe = Wc,
        t.IcosahedronBufferGeometry = _l,
        t.IcosahedronGeometry = _l,
        t.ImageBitmapLoader = Hc,
        t.ImageLoader = hc,
        t.ImageUtils = Tt,
        t.ImmediateRenderObject = function () {
            console.error("THREE.ImmediateRenderObject has been removed.")
        },
        t.IncrementStencilOp = 7682,
        t.IncrementWrapStencilOp = 34055,
        t.InstancedBufferAttribute = Fa,
        t.InstancedBufferGeometry = zc,
        t.InstancedInterleavedBuffer = wh,
        t.InstancedMesh = ka,
        t.Int16Attribute = function (t, e) {
            return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),
            new un(t, e)
        },
        t.Int16BufferAttribute = un,
        t.Int32Attribute = function (t, e) {
            return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),
            new pn(t, e)
        },
        t.Int32BufferAttribute = pn,
        t.Int8Attribute = function (t, e) {
            return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),
            new ln(t, e)
        },
        t.Int8BufferAttribute = ln,
        t.IntType = 1013,
        t.InterleavedBuffer = ra,
        t.InterleavedBufferAttribute = aa,
        t.Interpolant = Wl,
        t.InterpolateDiscrete = U,
        t.InterpolateLinear = H,
        t.InterpolateSmooth = G,
        t.InvertStencilOp = 5386,
        t.JSONLoader = function () {
            console.error("THREE.JSONLoader has been removed.")
        },
        t.KeepStencilOp = tt,
        t.KeyframeTrack = Jl,
        t.LOD = Ta,
        t.LatheBufferGeometry = Ml,
        t.LatheGeometry = Ml,
        t.Layers = be,
        t.LensFlare = function () {
            console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js")
        },
        t.LessDepth = 2,
        t.LessEqualDepth = 3,
        t.LessEqualStencilFunc = 515,
        t.LessStencilFunc = 513,
        t.Light = mc,
        t.LightProbe = Dc,
        t.Line = Ya,
        t.Line3 = Ph,
        t.LineBasicMaterial = Va,
        t.LineCurve = zo,
        t.LineCurve3 = Bo,
        t.LineDashedMaterial = Gl,
        t.LineLoop = $a,
        t.LinePieces = 1,
        t.LineSegments = Ka,
        t.LineStrip = 0,
        t.LinearEncoding = X,
        t.LinearFilter = g,
        t.LinearInterpolant = ql,
        t.LinearMipMapLinearFilter = 1008,
        t.LinearMipMapNearestFilter = 1007,
        t.LinearMipmapLinearFilter = y,
        t.LinearMipmapNearestFilter = v,
        t.LinearToneMapping = 1,
        t.Loader = oc,
        t.LoaderUtils = Nc,
        t.LoadingManager = sc,
        t.LoopOnce = 2200,
        t.LoopPingPong = 2202,
        t.LoopRepeat = 2201,
        t.LuminanceAlphaFormat = 1025,
        t.LuminanceFormat = 1024,
        t.MOUSE = {
            LEFT: 0,
            MIDDLE: 1,
            RIGHT: 2,
            ROTATE: 0,
            DOLLY: 1,
            PAN: 2
        },
        t.Material = Ye,
        t.MaterialLoader = Ic,
        t.Math = gt,
        t.MathUtils = gt,
        t.Matrix3 = yt,
        t.Matrix4 = ue,
        t.MaxEquation = 104,
        t.Mesh = Vn,
        t.MeshBasicMaterial = rn,
        t.MeshDepthMaterial = Hs,
        t.MeshDistanceMaterial = Gs,
        t.MeshFaceMaterial = function (t) {
            return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),
            t
        },
        t.MeshLambertMaterial = Ul,
        t.MeshMatcapMaterial = Hl,
        t.MeshNormalMaterial = Ol,
        t.MeshPhongMaterial = Bl,
        t.MeshPhysicalMaterial = zl,
        t.MeshStandardMaterial = Nl,
        t.MeshToonMaterial = Fl,
        t.MinEquation = 103,
        t.MirroredRepeatWrapping = d,
        t.MixOperation = 1,
        t.MultiMaterial = function (t = []) {
            return console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),
            t.isMultiMaterial = !0,
            t.materials = t,
            t.clone = function () {
                return t.slice()
            },
            t
        },
        t.MultiplyBlending = 4,
        t.MultiplyOperation = 0,
        t.NearestFilter = p,
        t.NearestMipMapLinearFilter = 1005,
        t.NearestMipMapNearestFilter = 1004,
        t.NearestMipmapLinearFilter = f,
        t.NearestMipmapNearestFilter = m,
        t.NeverDepth = 0,
        t.NeverStencilFunc = 512,
        t.NoBlending = 0,
        t.NoColors = 0,
        t.NoToneMapping = 0,
        t.NormalAnimationBlendMode = j,
        t.NormalBlending = 1,
        t.NotEqualDepth = 7,
        t.NotEqualStencilFunc = 517,
        t.NumberKeyframeTrack = Ql,
        t.Object3D = Be,
        t.ObjectLoader = class extends oc {
            constructor(t) {
                super(t)
            }
            load(t, e, n, i) {
                const r = this,
                s = "" === this.path ? Nc.extractUrlBase(t) : this.path;
                this.resourcePath = this.resourcePath || s;
                const a = new cc(this.manager);
                a.setPath(this.path),
                a.setRequestHeader(this.requestHeader),
                a.setWithCredentials(this.withCredentials),
                a.load(t, function (n) {
                    let s = null;
                    try {
                        s = JSON.parse(n)
                    } catch (e) {
                        return void 0 !== i && i(e),
                        void console.error("THREE:ObjectLoader: Can't parse " + t + ".", e.message)
                    }
                    const a = s.metadata;
                    void 0 !== a && void 0 !== a.type && "geometry" !== a.type.toLowerCase() ? r.parse(s, e) : console.error("THREE.ObjectLoader: Can't load " + t)
                }, n, i)
            }
            async loadAsync(t, e) {
                const n = "" === this.path ? Nc.extractUrlBase(t) : this.path;
                this.resourcePath = this.resourcePath || n;
                const i = new cc(this.manager);
                i.setPath(this.path),
                i.setRequestHeader(this.requestHeader),
                i.setWithCredentials(this.withCredentials);
                const r = await i.loadAsync(t, e),
                s = JSON.parse(r),
                a = s.metadata;
                if (void 0 === a || void 0 === a.type || "geometry" === a.type.toLowerCase())
                    throw new Error("THREE.ObjectLoader: Can't load " + t);
                return await this.parseAsync(s)
            }
            parse(t, e) {
                const n = this.parseAnimations(t.animations),
                i = this.parseShapes(t.shapes),
                r = this.parseGeometries(t.geometries, i),
                s = this.parseImages(t.images, function () {
                    void 0 !== e && e(l)
                }),
                a = this.parseTextures(t.textures, s),
                o = this.parseMaterials(t.materials, a),
                l = this.parseObject(t.object, r, o, a, n),
                c = this.parseSkeletons(t.skeletons, l);
                if (this.bindSkeletons(l, c), void 0 !== e) {
                    let t = !1;
                    for (const e in s)
                        if (s[e]instanceof HTMLImageElement) {
                            t = !0;
                            break
                        }
                    !1 === t && e(l)
                }
                return l
            }
            async parseAsync(t) {
                const e = this.parseAnimations(t.animations),
                n = this.parseShapes(t.shapes),
                i = this.parseGeometries(t.geometries, n),
                r = await this.parseImagesAsync(t.images),
                s = this.parseTextures(t.textures, r),
                a = this.parseMaterials(t.materials, s),
                o = this.parseObject(t.object, i, a, s, e),
                l = this.parseSkeletons(t.skeletons, o);
                return this.bindSkeletons(o, l),
                o
            }
            parseShapes(t) {
                const e = {};
                if (void 0 !== t)
                    for (let n = 0, i = t.length; n < i; n++) {
                        const i = new Vo().fromJSON(t[n]);
                        e[i.uuid] = i
                    }
                return e
            }
            parseSkeletons(t, e) {
                const n = {},
                i = {};
                if (e.traverse(function (t) {
                        t.isBone && (i[t.uuid] = t)
                    }), void 0 !== t)
                    for (let e = 0, r = t.length; e < r; e++) {
                        const r = new Ba().fromJSON(t[e], i);
                        n[r.uuid] = r
                    }
                return n
            }
            parseGeometries(t, e) {
                const n = {};
                if (void 0 !== t) {
                    const i = new Bc;
                    for (let r = 0, s = t.length; r < s; r++) {
                        let s;
                        const a = t[r];
                        switch (a.type) {
                        case "BufferGeometry":
                        case "InstancedBufferGeometry":
                            s = i.parse(a);
                            break;
                        case "Geometry":
                            console.error("THREE.ObjectLoader: The legacy Geometry type is no longer supported.");
                            break;
                        default:
                            a.type in Dl ? s = Dl[a.type].fromJSON(a, e) : console.warn(`THREE.ObjectLoader: Unsupported geometry type "${a.type}"`);
                        }
                        s.uuid = a.uuid,
                        void 0 !== a.name && (s.name = a.name),
                        !0 === s.isBufferGeometry && void 0 !== a.userData && (s.userData = a.userData),
                        n[a.uuid] = s
                    }
                }
                return n
            }
            parseMaterials(t, e) {
                const n = {},
                i = {};
                if (void 0 !== t) {
                    const r = new Ic;
                    r.setTextures(e);
                    for (let e = 0, s = t.length; e < s; e++) {
                        const s = t[e];
                        if ("MultiMaterial" === s.type) {
                            const t = [];
                            for (let e = 0; e < s.materials.length; e++) {
                                const i = s.materials[e];
                                void 0 === n[i.uuid] && (n[i.uuid] = r.parse(i)),
                                t.push(n[i.uuid])
                            }
                            i[s.uuid] = t
                        } else
                            void 0 === n[s.uuid] && (n[s.uuid] = r.parse(s)), i[s.uuid] = n[s.uuid]
                    }
                }
                return i
            }
            parseAnimations(t) {
                const e = {};
                if (void 0 !== t)
                    for (let n = 0; n < t.length; n++) {
                        const i = t[n],
                        r = nc.parse(i);
                        e[r.uuid] = r
                    }
                return e
            }
            parseImages(t, e) {
                const n = this,
                i = {};
                let r;
                function s(t) {
                    if ("string" == typeof t) {
                        const e = t;
                        return function (t) {
                            return n.manager.itemStart(t),
                            r.load(t, function () {
                                n.manager.itemEnd(t)
                            }, void 0, function () {
                                n.manager.itemError(t),
                                n.manager.itemEnd(t)
                            })
                        }
                        (/^(\/\/)|([a-z]+:(\/\/)?)/i.test(e) ? e : n.resourcePath + e)
                    }
                    return t.data ? {
                        data: Mt(t.type, t.data),
                        width: t.width,
                        height: t.height
                    }
                     : null
                }
                if (void 0 !== t && t.length > 0) {
                    const n = new sc(e);
                    r = new hc(n),
                    r.setCrossOrigin(this.crossOrigin);
                    for (let e = 0, n = t.length; e < n; e++) {
                        const n = t[e],
                        r = n.url;
                        if (Array.isArray(r)) {
                            i[n.uuid] = [];
                            for (let t = 0, e = r.length; t < e; t++) {
                                const e = s(r[t]);
                                null !== e && (e instanceof HTMLImageElement ? i[n.uuid].push(e) : i[n.uuid].push(new Ia(e.data, e.width, e.height)))
                            }
                        } else {
                            const t = s(n.url);
                            null !== t && (i[n.uuid] = t)
                        }
                    }
                }
                return i
            }
            async parseImagesAsync(t) {
                const e = this,
                n = {};
                let i;
                async function r(t) {
                    if ("string" == typeof t) {
                        const n = t,
                        r = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(n) ? n : e.resourcePath + n;
                        return await i.loadAsync(r)
                    }
                    return t.data ? {
                        data: Mt(t.type, t.data),
                        width: t.width,
                        height: t.height
                    }
                     : null
                }
                if (void 0 !== t && t.length > 0) {
                    i = new hc(this.manager),
                    i.setCrossOrigin(this.crossOrigin);
                    for (let e = 0, i = t.length; e < i; e++) {
                        const i = t[e],
                        s = i.url;
                        if (Array.isArray(s)) {
                            n[i.uuid] = [];
                            for (let t = 0, e = s.length; t < e; t++) {
                                const e = s[t],
                                a = await r(e);
                                null !== a && (a instanceof HTMLImageElement ? n[i.uuid].push(a) : n[i.uuid].push(new Ia(a.data, a.width, a.height)))
                            }
                        } else {
                            const t = await r(i.url);
                            null !== t && (n[i.uuid] = t)
                        }
                    }
                }
                return n
            }
            parseTextures(t, e) {
                function n(t, e) {
                    return "number" == typeof t ? t : (console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", t), e[t])
                }
                const i = {};
                if (void 0 !== t)
                    for (let r = 0, s = t.length; r < s; r++) {
                        const s = t[r];
                        let a;
                        void 0 === s.image && console.warn("THREE.ObjectLoader: No \"image\" specified for", s.uuid),
                        void 0 === e[s.image] && console.warn("THREE.ObjectLoader: Undefined image", s.image);
                        const o = e[s.image];
                        Array.isArray(o) ? (a = new ti(o), 6 === o.length && (a.needsUpdate = !0)) : (a = o && o.data ? new Ia(o.data, o.width, o.height) : new At(o), o && (a.needsUpdate = !0)),
                        a.uuid = s.uuid,
                        void 0 !== s.name && (a.name = s.name),
                        void 0 !== s.mapping && (a.mapping = n(s.mapping, Fc)),
                        void 0 !== s.offset && a.offset.fromArray(s.offset),
                        void 0 !== s.repeat && a.repeat.fromArray(s.repeat),
                        void 0 !== s.center && a.center.fromArray(s.center),
                        void 0 !== s.rotation && (a.rotation = s.rotation),
                        void 0 !== s.wrap && (a.wrapS = n(s.wrap[0], Oc), a.wrapT = n(s.wrap[1], Oc)),
                        void 0 !== s.format && (a.format = s.format),
                        void 0 !== s.type && (a.type = s.type),
                        void 0 !== s.encoding && (a.encoding = s.encoding),
                        void 0 !== s.minFilter && (a.minFilter = n(s.minFilter, Uc)),
                        void 0 !== s.magFilter && (a.magFilter = n(s.magFilter, Uc)),
                        void 0 !== s.anisotropy && (a.anisotropy = s.anisotropy),
                        void 0 !== s.flipY && (a.flipY = s.flipY),
                        void 0 !== s.premultiplyAlpha && (a.premultiplyAlpha = s.premultiplyAlpha),
                        void 0 !== s.unpackAlignment && (a.unpackAlignment = s.unpackAlignment),
                        void 0 !== s.userData && (a.userData = s.userData),
                        i[s.uuid] = a
                    }
                return i
            }
            parseObject(t, e, n, i, r) {
                let s,
                a,
                o;
                function l(t) {
                    return void 0 === e[t] && console.warn("THREE.ObjectLoader: Undefined geometry", t),
                    e[t]
                }
                function c(t) {
                    if (void 0 !== t) {
                        if (Array.isArray(t)) {
                            const e = [];
                            for (let i = 0, r = t.length; i < r; i++) {
                                const r = t[i];
                                void 0 === n[r] && console.warn("THREE.ObjectLoader: Undefined material", r),
                                e.push(n[r])
                            }
                            return e
                        }
                        return void 0 === n[t] && console.warn("THREE.ObjectLoader: Undefined material", t),
                        n[t]
                    }
                }
                function h(t) {
                    return void 0 === i[t] && console.warn("THREE.ObjectLoader: Undefined texture", t),
                    i[t]
                }
                switch (t.type) {
                case "Scene":
                    s = new ia,
                    void 0 !== t.background && (Number.isInteger(t.background) ? s.background = new nn(t.background) : s.background = h(t.background)),
                    void 0 !== t.environment && (s.environment = h(t.environment)),
                    void 0 !== t.fog && ("Fog" === t.fog.type ? s.fog = new na(t.fog.color, t.fog.near, t.fog.far) : "FogExp2" === t.fog.type && (s.fog = new ea(t.fog.color, t.fog.density)));
                    break;
                case "PerspectiveCamera":
                    s = new Qn(t.fov, t.aspect, t.near, t.far),
                    void 0 !== t.focus && (s.focus = t.focus),
                    void 0 !== t.zoom && (s.zoom = t.zoom),
                    void 0 !== t.filmGauge && (s.filmGauge = t.filmGauge),
                    void 0 !== t.filmOffset && (s.filmOffset = t.filmOffset),
                    void 0 !== t.view && (s.view = Object.assign({}, t.view));
                    break;
                case "OrthographicCamera":
                    s = new Mi(t.left, t.right, t.top, t.bottom, t.near, t.far),
                    void 0 !== t.zoom && (s.zoom = t.zoom),
                    void 0 !== t.view && (s.view = Object.assign({}, t.view));
                    break;
                case "AmbientLight":
                    s = new Rc(t.color, t.intensity);
                    break;
                case "DirectionalLight":
                    s = new Lc(t.color, t.intensity);
                    break;
                case "PointLight":
                    s = new Ec(t.color, t.intensity, t.distance, t.decay);
                    break;
                case "RectAreaLight":
                    s = new Cc(t.color, t.intensity, t.width, t.height);
                    break;
                case "SpotLight":
                    s = new Mc(t.color, t.intensity, t.distance, t.angle, t.penumbra, t.decay);
                    break;
                case "HemisphereLight":
                    s = new fc(t.color, t.groundColor, t.intensity);
                    break;
                case "LightProbe":
                    s = new Dc().fromJSON(t);
                    break;
                case "SkinnedMesh":
                    a = l(t.geometry),
                    o = c(t.material),
                    s = new Pa(a, o),
                    void 0 !== t.bindMode && (s.bindMode = t.bindMode),
                    void 0 !== t.bindMatrix && s.bindMatrix.fromArray(t.bindMatrix),
                    void 0 !== t.skeleton && (s.skeleton = t.skeleton);
                    break;
                case "Mesh":
                    a = l(t.geometry),
                    o = c(t.material),
                    s = new Vn(a, o);
                    break;
                case "InstancedMesh":
                    a = l(t.geometry),
                    o = c(t.material);
                    const e = t.count,
                    n = t.instanceMatrix,
                    i = t.instanceColor;
                    s = new ka(a, o, e),
                    s.instanceMatrix = new Fa(new Float32Array(n.array), 16),
                    void 0 !== i && (s.instanceColor = new Fa(new Float32Array(i.array), i.itemSize));
                    break;
                case "LOD":
                    s = new Ta;
                    break;
                case "Line":
                    s = new Ya(l(t.geometry), c(t.material));
                    break;
                case "LineLoop":
                    s = new $a(l(t.geometry), c(t.material));
                    break;
                case "LineSegments":
                    s = new Ka(l(t.geometry), c(t.material));
                    break;
                case "PointCloud":
                case "Points":
                    s = new so(l(t.geometry), c(t.material));
                    break;
                case "Sprite":
                    s = new Ma(c(t.material));
                    break;
                case "Group":
                    s = new Xs;
                    break;
                case "Bone":
                    s = new Da;
                    break;
                default:
                    s = new Be;
                }
                if (s.uuid = t.uuid, void 0 !== t.name && (s.name = t.name), void 0 !== t.matrix ? (s.matrix.fromArray(t.matrix), void 0 !== t.matrixAutoUpdate && (s.matrixAutoUpdate = t.matrixAutoUpdate), s.matrixAutoUpdate && s.matrix.decompose(s.position, s.quaternion, s.scale)) : (void 0 !== t.position && s.position.fromArray(t.position), void 0 !== t.rotation && s.rotation.fromArray(t.rotation), void 0 !== t.quaternion && s.quaternion.fromArray(t.quaternion), void 0 !== t.scale && s.scale.fromArray(t.scale)), void 0 !== t.castShadow && (s.castShadow = t.castShadow), void 0 !== t.receiveShadow && (s.receiveShadow = t.receiveShadow), t.shadow && (void 0 !== t.shadow.bias && (s.shadow.bias = t.shadow.bias), void 0 !== t.shadow.normalBias && (s.shadow.normalBias = t.shadow.normalBias), void 0 !== t.shadow.radius && (s.shadow.radius = t.shadow.radius), void 0 !== t.shadow.mapSize && s.shadow.mapSize.fromArray(t.shadow.mapSize), void 0 !== t.shadow.camera && (s.shadow.camera = this.parseObject(t.shadow.camera))), void 0 !== t.visible && (s.visible = t.visible), void 0 !== t.frustumCulled && (s.frustumCulled = t.frustumCulled), void 0 !== t.renderOrder && (s.renderOrder = t.renderOrder), void 0 !== t.userData && (s.userData = t.userData), void 0 !== t.layers && (s.layers.mask = t.layers), void 0 !== t.children) {
                    const a = t.children;
                    for (let t = 0; t < a.length; t++)
                        s.add(this.parseObject(a[t], e, n, i, r))
                }
                if (void 0 !== t.animations) {
                    const e = t.animations;
                    for (let t = 0; t < e.length; t++) {
                        const n = e[t];
                        s.animations.push(r[n])
                    }
                }
                if ("LOD" === t.type) {
                    void 0 !== t.autoUpdate && (s.autoUpdate = t.autoUpdate);
                    const e = t.levels;
                    for (let t = 0; t < e.length; t++) {
                        const n = e[t],
                        i = s.getObjectByProperty("uuid", n.object);
                        void 0 !== i && s.addLevel(i, n.distance)
                    }
                }
                return s
            }
            bindSkeletons(t, e) {
                0 !== Object.keys(e).length && t.traverse(function (t) {
                    if (!0 === t.isSkinnedMesh && void 0 !== t.skeleton) {
                        const n = e[t.skeleton];
                        void 0 === n ? console.warn("THREE.ObjectLoader: No skeleton found with UUID:", t.skeleton) : t.bind(n, t.bindMatrix)
                    }
                })
            }
            setTexturePath(t) {
                return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."),
                this.setResourcePath(t)
            }
        },
        t.ObjectSpaceNormalMap = 1,
        t.OctahedronBufferGeometry = bl,
        t.OctahedronGeometry = bl,
        t.OneFactor = 201,
        t.OneMinusDstAlphaFactor = 207,
        t.OneMinusDstColorFactor = 209,
        t.OneMinusSrcAlphaFactor = 205,
        t.OneMinusSrcColorFactor = 203,
        t.OrthographicCamera = Mi,
        t.PCFShadowMap = 1,
        t.PCFSoftShadowMap = 2,
        t.PMREMGenerator = Fi,
        t.ParametricGeometry = function () {
            return console.error("THREE.ParametricGeometry has been moved to /examples/jsm/geometries/ParametricGeometry.js"),
            new Tn
        },
        t.Particle = function (t) {
            return console.warn("THREE.Particle has been renamed to THREE.Sprite."),
            new Ma(t)
        },
        t.ParticleBasicMaterial = function (t) {
            return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),
            new to(t)
        },
        t.ParticleSystem = function (t, e) {
            return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),
            new so(t, e)
        },
        t.ParticleSystemMaterial = function (t) {
            return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),
            new to(t)
        },
        t.Path = ko,
        t.PerspectiveCamera = Qn,
        t.Plane = si,
        t.PlaneBufferGeometry = ui,
        t.PlaneGeometry = ui,
        t.PlaneHelper = class extends Ya {
            constructor(t, e = 1, n = 16776960) {
                const i = n,
                r = new Tn;
                r.setAttribute("position", new gn([1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0], 3)),
                r.computeBoundingSphere(),
                super(r, new Va({
                        color: i,
                        toneMapped: !1
                    })),
                this.type = "PlaneHelper",
                this.plane = t,
                this.size = e;
                const s = new Tn;
                s.setAttribute("position", new gn([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1], 3)),
                s.computeBoundingSphere(),
                this.add(new Vn(s, new rn({
                            color: i,
                            opacity: .2,
                            transparent: !0,
                            depthWrite: !1,
                            toneMapped: !1
                        })))
            }
            updateMatrixWorld(t) {
                let e = -this.plane.constant;
                Math.abs(e) < 1e-8 && (e = 1e-8),
                this.scale.set(.5 * this.size, .5 * this.size, e),
                this.children[0].material.side = e < 0 ? 1 : 0,
                this.lookAt(this.plane.normal),
                super.updateMatrixWorld(t)
            }
        },
        t.PointCloud = function (t, e) {
            return console.warn("THREE.PointCloud has been renamed to THREE.Points."),
            new so(t, e)
        },
        t.PointCloudMaterial = function (t) {
            return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),
            new to(t)
        },
        t.PointLight = Ec,
        t.PointLightHelper = class extends Vn {
            constructor(t, e, n) {
                super(new Tl(e, 4, 2), new rn({
                        wireframe: !0,
                        fog: !1,
                        toneMapped: !1
                    })),
                this.light = t,
                this.light.updateMatrixWorld(),
                this.color = n,
                this.type = "PointLightHelper",
                this.matrix = this.light.matrixWorld,
                this.matrixAutoUpdate = !1,
                this.update()
            }
            dispose() {
                this.geometry.dispose(),
                this.material.dispose()
            }
            update() {
                void 0 !== this.color ? this.material.color.set(this.color) : this.material.color.copy(this.light.color)
            }
        },
        t.Points = so,
        t.PointsMaterial = to,
        t.PolarGridHelper = class extends Ka {
            constructor(t = 10, e = 16, n = 8, i = 64, r = 4473924, s = 8947848) {
                r = new nn(r),
                s = new nn(s);
                const a = [],
                o = [];
                for (let n = 0; n <= e; n++) {
                    const i = n / e * (2 * Math.PI),
                    l = Math.sin(i) * t,
                    c = Math.cos(i) * t;
                    a.push(0, 0, 0),
                    a.push(l, 0, c);
                    const h = 1 & n ? r : s;
                    o.push(h.r, h.g, h.b),
                    o.push(h.r, h.g, h.b)
                }
                for (let e = 0; e <= n; e++) {
                    const l = 1 & e ? r : s,
                    c = t - t / n * e;
                    for (let t = 0; t < i; t++) {
                        let e = t / i * (2 * Math.PI),
                        n = Math.sin(e) * c,
                        r = Math.cos(e) * c;
                        a.push(n, 0, r),
                        o.push(l.r, l.g, l.b),
                        e = (t + 1) / i * (2 * Math.PI),
                        n = Math.sin(e) * c,
                        r = Math.cos(e) * c,
                        a.push(n, 0, r),
                        o.push(l.r, l.g, l.b)
                    }
                }
                const l = new Tn;
                l.setAttribute("position", new gn(a, 3)),
                l.setAttribute("color", new gn(o, 3));
                super(l, new Va({
                        vertexColors: !0,
                        toneMapped: !1
                    })),
                this.type = "PolarGridHelper"
            }
        },
        t.PolyhedronBufferGeometry = mo,
        t.PolyhedronGeometry = mo,
        t.PositionalAudio = class extends eh {
            constructor(t) {
                super(t),
                this.panner = this.context.createPanner(),
                this.panner.panningModel = "HRTF",
                this.panner.connect(this.gain)
            }
            getOutput() {
                return this.panner
            }
            getRefDistance() {
                return this.panner.refDistance
            }
            setRefDistance(t) {
                return this.panner.refDistance = t,
                this
            }
            getRolloffFactor() {
                return this.panner.rolloffFactor
            }
            setRolloffFactor(t) {
                return this.panner.rolloffFactor = t,
                this
            }
            getDistanceModel() {
                return this.panner.distanceModel
            }
            setDistanceModel(t) {
                return this.panner.distanceModel = t,
                this
            }
            getMaxDistance() {
                return this.panner.maxDistance
            }
            setMaxDistance(t) {
                return this.panner.maxDistance = t,
                this
            }
            setDirectionalCone(t, e, n) {
                return this.panner.coneInnerAngle = t,
                this.panner.coneOuterAngle = e,
                this.panner.coneOuterGain = n,
                this
            }
            updateMatrixWorld(t) {
                if (super.updateMatrixWorld(t), !0 === this.hasPlaybackControl && !1 === this.isPlaying)
                    return;
                this.matrixWorld.decompose(nh, ih, rh),
                sh.set(0, 0, 1).applyQuaternion(ih);
                const e = this.panner;
                if (e.positionX) {
                    const t = this.context.currentTime + this.listener.timeDelta;
                    e.positionX.linearRampToValueAtTime(nh.x, t),
                    e.positionY.linearRampToValueAtTime(nh.y, t),
                    e.positionZ.linearRampToValueAtTime(nh.z, t),
                    e.orientationX.linearRampToValueAtTime(sh.x, t),
                    e.orientationY.linearRampToValueAtTime(sh.y, t),
                    e.orientationZ.linearRampToValueAtTime(sh.z, t)
                } else
                    e.setPosition(nh.x, nh.y, nh.z), e.setOrientation(sh.x, sh.y, sh.z)
            }
        },
        t.PropertyBinding = yh,
        t.PropertyMixer = oh,
        t.QuadraticBezierCurve = Fo,
        t.QuadraticBezierCurve3 = Oo,
        t.Quaternion = It,
        t.QuaternionKeyframeTrack = $l,
        t.QuaternionLinearInterpolant = Kl,
        t.REVISION = e,
        t.RGBADepthPacking = 3201,
        t.RGBAFormat = E,
        t.RGBAIntegerFormat = 1033,
        t.RGBA_ASTC_10x10_Format = 37819,
        t.RGBA_ASTC_10x5_Format = 37816,
        t.RGBA_ASTC_10x6_Format = 37817,
        t.RGBA_ASTC_10x8_Format = 37818,
        t.RGBA_ASTC_12x10_Format = 37820,
        t.RGBA_ASTC_12x12_Format = 37821,
        t.RGBA_ASTC_4x4_Format = 37808,
        t.RGBA_ASTC_5x4_Format = 37809,
        t.RGBA_ASTC_5x5_Format = 37810,
        t.RGBA_ASTC_6x5_Format = 37811,
        t.RGBA_ASTC_6x6_Format = 37812,
        t.RGBA_ASTC_8x5_Format = 37813,
        t.RGBA_ASTC_8x6_Format = 37814,
        t.RGBA_ASTC_8x8_Format = 37815,
        t.RGBA_BPTC_Format = 36492,
        t.RGBA_ETC2_EAC_Format = O,
        t.RGBA_PVRTC_2BPPV1_Format = B,
        t.RGBA_PVRTC_4BPPV1_Format = z,
        t.RGBA_S3TC_DXT1_Format = C,
        t.RGBA_S3TC_DXT3_Format = P,
        t.RGBA_S3TC_DXT5_Format = D,
        t.RGBDEncoding = $,
        t.RGBEEncoding = Z,
        t.RGBEFormat = 1023,
        t.RGBFormat = T,
        t.RGBIntegerFormat = 1032,
        t.RGBM16Encoding = K,
        t.RGBM7Encoding = Q,
        t.RGB_ETC1_Format = 36196,
        t.RGB_ETC2_Format = F,
        t.RGB_PVRTC_2BPPV1_Format = N,
        t.RGB_PVRTC_4BPPV1_Format = I,
        t.RGB_S3TC_DXT1_Format = R,
        t.RGFormat = 1030,
        t.RGIntegerFormat = 1031,
        t.RawShaderMaterial = bi,
        t.Ray = he,
        t.Raycaster = class {
            constructor(t, e, n = 0, i = 1 / 0) {
                this.ray = new he(t, e),
                this.near = n,
                this.far = i,
                this.camera = null,
                this.layers = new be,
                this.params = {
                    Mesh: {},
                    Line: {
                        threshold: 1
                    },
                    LOD: {},
                    Points: {
                        threshold: 1
                    },
                    Sprite: {}
                }
            }
            set(t, e) {
                this.ray.set(t, e)
            }
            setFromCamera(t, e) {
                e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type)
            }
            intersectObject(t, e = !0, n = []) {
                return Eh(t, this, n, e),
                n.sort(Th),
                n
            }
            intersectObjects(t, e = !0, n = []) {
                for (let i = 0, r = t.length; i < r; i++)
                    Eh(t[i], this, n, e);
                return n.sort(Th),
                n
            }
        },
        t.RectAreaLight = Cc,
        t.RedFormat = 1028,
        t.RedIntegerFormat = 1029,
        t.ReinhardToneMapping = 2,
        t.RepeatWrapping = h,
        t.ReplaceStencilOp = 7681,
        t.ReverseSubtractEquation = 102,
        t.RingBufferGeometry = wl,
        t.RingGeometry = wl,
        t.SRGB8_ALPHA8_ASTC_10x10_Format = 37851,
        t.SRGB8_ALPHA8_ASTC_10x5_Format = 37848,
        t.SRGB8_ALPHA8_ASTC_10x6_Format = 37849,
        t.SRGB8_ALPHA8_ASTC_10x8_Format = 37850,
        t.SRGB8_ALPHA8_ASTC_12x10_Format = 37852,
        t.SRGB8_ALPHA8_ASTC_12x12_Format = 37853,
        t.SRGB8_ALPHA8_ASTC_4x4_Format = 37840,
        t.SRGB8_ALPHA8_ASTC_5x4_Format = 37841,
        t.SRGB8_ALPHA8_ASTC_5x5_Format = 37842,
        t.SRGB8_ALPHA8_ASTC_6x5_Format = 37843,
        t.SRGB8_ALPHA8_ASTC_6x6_Format = 37844,
        t.SRGB8_ALPHA8_ASTC_8x5_Format = 37845,
        t.SRGB8_ALPHA8_ASTC_8x6_Format = 37846,
        t.SRGB8_ALPHA8_ASTC_8x8_Format = 37847,
        t.Scene = ia,
        t.SceneUtils = nu,
        t.ShaderChunk = di,
        t.ShaderLib = mi,
        t.ShaderMaterial = Yn,
        t.ShadowMaterial = Il,
        t.Shape = Vo,
        t.ShapeBufferGeometry = Sl,
        t.ShapeGeometry = Sl,
        t.ShapePath = class {
            constructor() {
                this.type = "ShapePath",
                this.color = new nn,
                this.subPaths = [],
                this.currentPath = null
            }
            moveTo(t, e) {
                return this.currentPath = new ko,
                this.subPaths.push(this.currentPath),
                this.currentPath.moveTo(t, e),
                this
            }
            lineTo(t, e) {
                return this.currentPath.lineTo(t, e),
                this
            }
            quadraticCurveTo(t, e, n, i) {
                return this.currentPath.quadraticCurveTo(t, e, n, i),
                this
            }
            bezierCurveTo(t, e, n, i, r, s) {
                return this.currentPath.bezierCurveTo(t, e, n, i, r, s),
                this
            }
            splineThru(t) {
                return this.currentPath.splineThru(t),
                this
            }
            toShapes(t, e) {
                function n(t) {
                    const e = [];
                    for (let n = 0, i = t.length; n < i; n++) {
                        const i = t[n],
                        r = new Vo;
                        r.curves = i.curves,
                        e.push(r)
                    }
                    return e
                }
                function i(t, e) {
                    const n = e.length;
                    let i = !1;
                    for (let r = n - 1, s = 0; s < n; r = s++) {
                        let n = e[r],
                        a = e[s],
                        o = a.x - n.x,
                        l = a.y - n.y;
                        if (Math.abs(l) > Number.EPSILON) {
                            if (l < 0 && (n = e[s], o = -o, a = e[r], l = -l), t.y < n.y || t.y > a.y)
                                continue;
                            if (t.y === n.y) {
                                if (t.x === n.x)
                                    return !0
                            } else {
                                const e = l * (t.x - n.x) - o * (t.y - n.y);
                                if (0 === e)
                                    return !0;
                                if (e < 0)
                                    continue;
                                i = !i
                            }
                        } else {
                            if (t.y !== n.y)
                                continue;
                            if (a.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= a.x)
                                return !0
                        }
                    }
                    return i
                }
                const r = fl.isClockWise,
                s = this.subPaths;
                if (0 === s.length)
                    return [];
                if (!0 === e)
                    return n(s);
                let a,
                o,
                l;
                const c = [];
                if (1 === s.length)
                    return o = s[0], l = new Vo, l.curves = o.curves, c.push(l), c;
                let h = !r(s[0].getPoints());
                h = t ? !h : h;
                const u = [],
                d = [];
                let p,
                m,
                f = [],
                g = 0;
                d[g] = void 0,
                f[g] = [];
                for (let e = 0, n = s.length; e < n; e++)
                    o = s[e], p = o.getPoints(), a = r(p), a = t ? !a : a, a ? (!h && d[g] && g++, d[g] = {
                            s: new Vo,
                            p: p
                        }, d[g].s.curves = o.curves, h && g++, f[g] = []) : f[g].push({
                        h: o,
                        p: p[0]
                    });
                if (!d[0])
                    return n(s);
                if (d.length > 1) {
                    let t = !1;
                    const e = [];
                    for (let t = 0, e = d.length; t < e; t++)
                        u[t] = [];
                    for (let n = 0, r = d.length; n < r; n++) {
                        const r = f[n];
                        for (let s = 0; s < r.length; s++) {
                            const a = r[s];
                            let o = !0;
                            for (let r = 0; r < d.length; r++)
                                i(a.p, d[r].p) && (n !== r && e.push({
                                        froms: n,
                                        tos: r,
                                        hole: s
                                    }), o ? (o = !1, u[r].push(a)) : t = !0);
                            o && u[n].push(a)
                        }
                    }
                    e.length > 0 && (t || (f = u))
                }
                for (let t = 0, e = d.length; t < e; t++) {
                    l = d[t].s,
                    c.push(l),
                    m = f[t];
                    for (let t = 0, e = m.length; t < e; t++)
                        l.holes.push(m[t].h)
                }
                return c
            }
        },
        t.ShapeUtils = fl,
        t.ShortType = 1011,
        t.Skeleton = Ba,
        t.SkeletonHelper = Bh,
        t.SkinnedMesh = Pa,
        t.SmoothShading = 2,
        t.Sphere = ne,
        t.SphereBufferGeometry = Tl,
        t.SphereGeometry = Tl,
        t.Spherical = class {
            constructor(t = 1, e = 0, n = 0) {
                return this.radius = t,
                this.phi = e,
                this.theta = n,
                this
            }
            set(t, e, n) {
                return this.radius = t,
                this.phi = e,
                this.theta = n,
                this
            }
            copy(t) {
                return this.radius = t.radius,
                this.phi = t.phi,
                this.theta = t.theta,
                this
            }
            makeSafe() {
                const t = 1e-6;
                return this.phi = Math.max(t, Math.min(Math.PI - t, this.phi)),
                this
            }
            setFromVector3(t) {
                return this.setFromCartesianCoords(t.x, t.y, t.z)
            }
            setFromCartesianCoords(t, e, n) {
                return this.radius = Math.sqrt(t * t + e * e + n * n),
                0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(ht(e / this.radius, -1, 1))),
                this
            }
            clone() {
                return new this.constructor().copy(this)
            }
        },
        t.SphericalHarmonics3 = Pc,
        t.SplineCurve = Uo,
        t.SpotLight = Mc,
        t.SpotLightHelper = class extends Be {
            constructor(t, e) {
                super(),
                this.light = t,
                this.light.updateMatrixWorld(),
                this.matrix = t.matrixWorld,
                this.matrixAutoUpdate = !1,
                this.color = e;
                const n = new Tn,
                i = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1];
                for (let t = 0, e = 1, n = 32; t < n; t++, e++) {
                    const r = t / n * Math.PI * 2,
                    s = e / n * Math.PI * 2;
                    i.push(Math.cos(r), Math.sin(r), 1, Math.cos(s), Math.sin(s), 1)
                }
                n.setAttribute("position", new gn(i, 3));
                const r = new Va({
                    fog: !1,
                    toneMapped: !1
                });
                this.cone = new Ka(n, r),
                this.add(this.cone),
                this.update()
            }
            dispose() {
                this.cone.geometry.dispose(),
                this.cone.material.dispose()
            }
            update() {
                this.light.updateMatrixWorld();
                const t = this.light.distance ? this.light.distance : 1e3,
                e = t * Math.tan(this.light.angle);
                this.cone.scale.set(e, e, t),
                Dh.setFromMatrixPosition(this.light.target.matrixWorld),
                this.cone.lookAt(Dh),
                void 0 !== this.color ? this.cone.material.color.set(this.color) : this.cone.material.color.copy(this.light.color)
            }
        },
        t.Sprite = Ma,
        t.SpriteMaterial = oa,
        t.SrcAlphaFactor = 204,
        t.SrcAlphaSaturateFactor = 210,
        t.SrcColorFactor = 202,
        t.StaticCopyUsage = 35046,
        t.StaticDrawUsage = et,
        t.StaticReadUsage = 35045,
        t.StereoCamera = class {
            constructor() {
                this.type = "StereoCamera",
                this.aspect = 1,
                this.eyeSep = .064,
                this.cameraL = new Qn,
                this.cameraL.layers.enable(1),
                this.cameraL.matrixAutoUpdate = !1,
                this.cameraR = new Qn,
                this.cameraR.layers.enable(2),
                this.cameraR.matrixAutoUpdate = !1,
                this._cache = {
                    focus: null,
                    fov: null,
                    aspect: null,
                    near: null,
                    far: null,
                    zoom: null,
                    eyeSep: null
                }
            }
            update(t) {
                const e = this._cache;
                if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) {
                    e.focus = t.focus,
                    e.fov = t.fov,
                    e.aspect = t.aspect * this.aspect,
                    e.near = t.near,
                    e.far = t.far,
                    e.zoom = t.zoom,
                    e.eyeSep = this.eyeSep,
                    Jc.copy(t.projectionMatrix);
                    const n = e.eyeSep / 2,
                    i = n * e.near / e.focus,
                    r = e.near * Math.tan(ot * e.fov * .5) / e.zoom;
                    let s,
                    a;
                    Xc.elements[12] = -n,
                    qc.elements[12] = n,
                    s = -r * e.aspect + i,
                    a = r * e.aspect + i,
                    Jc.elements[0] = 2 * e.near / (a - s),
                    Jc.elements[8] = (a + s) / (a - s),
                    this.cameraL.projectionMatrix.copy(Jc),
                    s = -r * e.aspect - i,
                    a = r * e.aspect - i,
                    Jc.elements[0] = 2 * e.near / (a - s),
                    Jc.elements[8] = (a + s) / (a - s),
                    this.cameraR.projectionMatrix.copy(Jc)
                }
                this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Xc),
                this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(qc)
            }
        },
        t.StreamCopyUsage = 35042,
        t.StreamDrawUsage = 35040,
        t.StreamReadUsage = 35041,
        t.StringKeyframeTrack = tc,
        t.SubtractEquation = 101,
        t.SubtractiveBlending = 3,
        t.TOUCH = {
            ROTATE: 0,
            PAN: 1,
            DOLLY_PAN: 2,
            DOLLY_ROTATE: 3
        },
        t.TangentSpaceNormalMap = 0,
        t.TetrahedronBufferGeometry = El,
        t.TetrahedronGeometry = El,
        t.TextGeometry = function () {
            return console.error("THREE.TextGeometry has been moved to /examples/jsm/geometries/TextGeometry.js"),
            new Tn
        },
        t.Texture = At,
        t.TextureLoader = pc,
        t.TorusBufferGeometry = Al,
        t.TorusGeometry = Al,
        t.TorusKnotBufferGeometry = Ll,
        t.TorusKnotGeometry = Ll,
        t.Triangle = Xe,
        t.TriangleFanDrawMode = 2,
        t.TriangleStripDrawMode = 1,
        t.TrianglesDrawMode = 0,
        t.TubeBufferGeometry = Rl,
        t.TubeGeometry = Rl,
        t.UVMapping = i,
        t.Uint16Attribute = function (t, e) {
            return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),
            new dn(t, e)
        },
        t.Uint16BufferAttribute = dn,
        t.Uint32Attribute = function (t, e) {
            return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),
            new mn(t, e)
        },
        t.Uint32BufferAttribute = mn,
        t.Uint8Attribute = function (t, e) {
            return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),
            new cn(t, e)
        },
        t.Uint8BufferAttribute = cn,
        t.Uint8ClampedAttribute = function (t, e) {
            return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),
            new hn(t, e)
        },
        t.Uint8ClampedBufferAttribute = hn,
        t.Uniform = bh,
        t.UniformsLib = pi,
        t.UniformsUtils = Jn,
        t.UnsignedByteType = x,
        t.UnsignedInt248Type = S,
        t.UnsignedIntType = M,
        t.UnsignedShort4444Type = 1017,
        t.UnsignedShort5551Type = 1018,
        t.UnsignedShort565Type = 1019,
        t.UnsignedShortType = _,
        t.VSMShadowMap = 3,
        t.Vector2 = vt,
        t.Vector3 = Nt,
        t.Vector4 = Rt,
        t.VectorKeyframeTrack = ec,
        t.Vertex = function (t, e, n) {
            return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),
            new Nt(t, e, n)
        },
        t.VertexColors = 2,
        t.VideoTexture = oo,
        t.WebGL1Renderer = ta,
        t.WebGLCubeRenderTarget = ei,
        t.WebGLMultipleRenderTargets = Pt,
        t.WebGLMultisampleRenderTarget = Dt,
        t.WebGLRenderTarget = Ct,
        t.WebGLRenderTargetCube = function (t, e, n) {
            return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."),
            new ei(t, n)
        },
        t.WebGLRenderer = $s,
        t.WebGLUtils = js,
        t.WireframeGeometry = Cl,
        t.WireframeHelper = function (t, e) {
            return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),
            new Ka(new Cl(t.geometry), new Va({
                    color: void 0 !== e ? e : 16777215
                }))
        },
        t.WrapAroundEnding = W,
        t.XHRLoader = function (t) {
            return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),
            new cc(t)
        },
        t.ZeroCurvatureEnding = k,
        t.ZeroFactor = 200,
        t.ZeroSlopeEnding = V,
        t.ZeroStencilOp = 0,
        t.sRGBEncoding = J,
        Object.defineProperty(t, "__esModule", {
            value: !0
        })
    });
    (function (t, e) {
        e(t.THREE = t.THREE || {})
    })(this, function (THREE) {
        var Color = THREE.Color,
        Vector3 = THREE.Vector3;
        class Face3 {
            constructor(a, b, c, normal, color, materialIndex = 0) {
                this.a = a;
                this.b = b;
                this.c = c;
                this.normal = normal && normal.isVector3 ? normal : new Vector3;
                this.vertexNormals = Array.isArray(normal) ? normal : [];
                this.color = color && color.isColor ? color : new Color;
                this.vertexColors = Array.isArray(color) ? color : [];
                this.materialIndex = materialIndex
            }
            clone() {
                return new this.constructor().copy(this)
            }
            copy(source) {
                this.a = source.a;
                this.b = source.b;
                this.c = source.c;
                this.normal.copy(source.normal);
                this.color.copy(source.color);
                this.materialIndex = source.materialIndex;
                for (let i = 0, il = source.vertexNormals.length; i < il; i++) {
                    this.vertexNormals[i] = source.vertexNormals[i].clone()
                }
                for (let i = 0, il = source.vertexColors.length; i < il; i++) {
                    this.vertexColors[i] = source.vertexColors[i].clone()
                }
                return this
            }
        }
        THREE.Face3 = Face3
    });
    (function (t, e) {
        e(t.THREE = t.THREE || {})
    })(this, function (THREE) {
        var Box3 = THREE.Box3,
        BufferAttribute = THREE.BufferAttribute,
        BufferGeometry = THREE.BufferGeometry,
        Color = THREE.Color,
        EventDispatcher = THREE.EventDispatcher,
        Float32BufferAttribute = THREE.Float32BufferAttribute,
        Matrix3 = THREE.Matrix3,
        Matrix4 = THREE.Matrix4,
        MathUtils = THREE.MathUtils,
        Object3D = THREE.Object3D,
        Sphere = THREE.Sphere,
        Vector2 = THREE.Vector2,
        Vector3 = THREE.Vector3;
        const _m1 = new Matrix4;
        const _obj = new Object3D;
        const _offset = new Vector3;
        class Geometry extends EventDispatcher {
            constructor() {
                super();
                this.uuid = MathUtils.generateUUID();
                this.name = "";
                this.type = "Geometry";
                this.vertices = [];
                this.colors = [];
                this.faces = [];
                this.faceVertexUvs = [[]];
                this.morphTargets = [];
                this.morphNormals = [];
                this.skinWeights = [];
                this.skinIndices = [];
                this.lineDistances = [];
                this.boundingBox = null;
                this.boundingSphere = null;
                this.elementsNeedUpdate = false;
                this.verticesNeedUpdate = false;
                this.uvsNeedUpdate = false;
                this.normalsNeedUpdate = false;
                this.colorsNeedUpdate = false;
                this.lineDistancesNeedUpdate = false;
                this.groupsNeedUpdate = false
            }
            applyMatrix4(matrix) {
                const normalMatrix = new Matrix3().getNormalMatrix(matrix);
                for (let i = 0, il = this.vertices.length; i < il; i++) {
                    const vertex = this.vertices[i];
                    vertex.applyMatrix4(matrix)
                }
                for (let i = 0, il = this.faces.length; i < il; i++) {
                    const face = this.faces[i];
                    face.normal.applyMatrix3(normalMatrix).normalize();
                    for (let j = 0, jl = face.vertexNormals.length; j < jl; j++) {
                        face.vertexNormals[j].applyMatrix3(normalMatrix).normalize()
                    }
                }
                if (this.boundingBox !== null) {
                    this.computeBoundingBox()
                }
                if (this.boundingSphere !== null) {
                    this.computeBoundingSphere()
                }
                this.verticesNeedUpdate = true;
                this.normalsNeedUpdate = true;
                return this
            }
            rotateX(angle) {
                _m1.makeRotationX(angle);
                this.applyMatrix4(_m1);
                return this
            }
            rotateY(angle) {
                _m1.makeRotationY(angle);
                this.applyMatrix4(_m1);
                return this
            }
            rotateZ(angle) {
                _m1.makeRotationZ(angle);
                this.applyMatrix4(_m1);
                return this
            }
            translate(x, y, z) {
                _m1.makeTranslation(x, y, z);
                this.applyMatrix4(_m1);
                return this
            }
            scale(x, y, z) {
                _m1.makeScale(x, y, z);
                this.applyMatrix4(_m1);
                return this
            }
            lookAt(vector) {
                _obj.lookAt(vector);
                _obj.updateMatrix();
                this.applyMatrix4(_obj.matrix);
                return this
            }
            fromBufferGeometry(geometry) {
                const scope = this;
                const index = geometry.index !== null ? geometry.index : undefined;
                const attributes = geometry.attributes;
                if (attributes.position === undefined) {
                    console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.");
                    return this
                }
                const position = attributes.position;
                const normal = attributes.normal;
                const color = attributes.color;
                const uv = attributes.uv;
                const uv2 = attributes.uv2;
                if (uv2 !== undefined)
                    this.faceVertexUvs[1] = [];
                for (let i = 0; i < position.count; i++) {
                    scope.vertices.push(new Vector3().fromBufferAttribute(position, i));
                    if (color !== undefined) {
                        scope.colors.push(new Color().fromBufferAttribute(color, i))
                    }
                }
                function addFace(a, b, c, materialIndex) {
                    const vertexColors = color === undefined ? [] : [scope.colors[a].clone(), scope.colors[b].clone(), scope.colors[c].clone()];
                    const vertexNormals = normal === undefined ? [] : [new Vector3().fromBufferAttribute(normal, a), new Vector3().fromBufferAttribute(normal, b), new Vector3().fromBufferAttribute(normal, c)];
                    const face = new Face3(a, b, c, vertexNormals, vertexColors, materialIndex);
                    scope.faces.push(face);
                    if (uv !== undefined) {
                        scope.faceVertexUvs[0].push([new Vector2().fromBufferAttribute(uv, a), new Vector2().fromBufferAttribute(uv, b), new Vector2().fromBufferAttribute(uv, c)])
                    }
                    if (uv2 !== undefined) {
                        scope.faceVertexUvs[1].push([new Vector2().fromBufferAttribute(uv2, a), new Vector2().fromBufferAttribute(uv2, b), new Vector2().fromBufferAttribute(uv2, c)])
                    }
                }
                const groups = geometry.groups;
                if (groups.length > 0) {
                    for (let i = 0; i < groups.length; i++) {
                        const group = groups[i];
                        const start = group.start;
                        const count = group.count;
                        for (let j = start, jl = start + count; j < jl; j += 3) {
                            if (index !== undefined) {
                                addFace(index.getX(j), index.getX(j + 1), index.getX(j + 2), group.materialIndex)
                            } else {
                                addFace(j, j + 1, j + 2, group.materialIndex)
                            }
                        }
                    }
                } else {
                    if (index !== undefined) {
                        for (let i = 0; i < index.count; i += 3) {
                            addFace(index.getX(i), index.getX(i + 1), index.getX(i + 2))
                        }
                    } else {
                        for (let i = 0; i < position.count; i += 3) {
                            addFace(i, i + 1, i + 2)
                        }
                    }
                }
                this.computeFaceNormals();
                if (geometry.boundingBox !== null) {
                    this.boundingBox = geometry.boundingBox.clone()
                }
                if (geometry.boundingSphere !== null) {
                    this.boundingSphere = geometry.boundingSphere.clone()
                }
                return this
            }
            center() {
                this.computeBoundingBox();
                this.boundingBox.getCenter(_offset).negate();
                this.translate(_offset.x, _offset.y, _offset.z);
                return this
            }
            normalize() {
                this.computeBoundingSphere();
                const center = this.boundingSphere.center;
                const radius = this.boundingSphere.radius;
                const s = radius === 0 ? 1 : 1 / radius;
                const matrix = new Matrix4;
                matrix.set(s, 0, 0, -s * center.x, 0, s, 0, -s * center.y, 0, 0, s, -s * center.z, 0, 0, 0, 1);
                this.applyMatrix4(matrix);
                return this
            }
            computeFaceNormals() {
                const cb = new Vector3,
                ab = new Vector3;
                for (let f = 0, fl = this.faces.length; f < fl; f++) {
                    const face = this.faces[f];
                    const vA = this.vertices[face.a];
                    const vB = this.vertices[face.b];
                    const vC = this.vertices[face.c];
                    cb.subVectors(vC, vB);
                    ab.subVectors(vA, vB);
                    cb.cross(ab);
                    cb.normalize();
                    face.normal.copy(cb)
                }
            }
            computeVertexNormals(areaWeighted = true) {
                const vertices = new Array(this.vertices.length);
                for (let v = 0, vl = this.vertices.length; v < vl; v++) {
                    vertices[v] = new Vector3
                }
                if (areaWeighted) {
                    const cb = new Vector3,
                    ab = new Vector3;
                    for (let f = 0, fl = this.faces.length; f < fl; f++) {
                        const face = this.faces[f];
                        const vA = this.vertices[face.a];
                        const vB = this.vertices[face.b];
                        const vC = this.vertices[face.c];
                        cb.subVectors(vC, vB);
                        ab.subVectors(vA, vB);
                        cb.cross(ab);
                        vertices[face.a].add(cb);
                        vertices[face.b].add(cb);
                        vertices[face.c].add(cb)
                    }
                } else {
                    this.computeFaceNormals();
                    for (let f = 0, fl = this.faces.length; f < fl; f++) {
                        const face = this.faces[f];
                        vertices[face.a].add(face.normal);
                        vertices[face.b].add(face.normal);
                        vertices[face.c].add(face.normal)
                    }
                }
                for (let v = 0, vl = this.vertices.length; v < vl; v++) {
                    vertices[v].normalize()
                }
                for (let f = 0, fl = this.faces.length; f < fl; f++) {
                    const face = this.faces[f];
                    const vertexNormals = face.vertexNormals;
                    if (vertexNormals.length === 3) {
                        vertexNormals[0].copy(vertices[face.a]);
                        vertexNormals[1].copy(vertices[face.b]);
                        vertexNormals[2].copy(vertices[face.c])
                    } else {
                        vertexNormals[0] = vertices[face.a].clone();
                        vertexNormals[1] = vertices[face.b].clone();
                        vertexNormals[2] = vertices[face.c].clone()
                    }
                }
                if (this.faces.length > 0) {
                    this.normalsNeedUpdate = true
                }
            }
            computeFlatVertexNormals() {
                this.computeFaceNormals();
                for (let f = 0, fl = this.faces.length; f < fl; f++) {
                    const face = this.faces[f];
                    const vertexNormals = face.vertexNormals;
                    if (vertexNormals.length === 3) {
                        vertexNormals[0].copy(face.normal);
                        vertexNormals[1].copy(face.normal);
                        vertexNormals[2].copy(face.normal)
                    } else {
                        vertexNormals[0] = face.normal.clone();
                        vertexNormals[1] = face.normal.clone();
                        vertexNormals[2] = face.normal.clone()
                    }
                }
                if (this.faces.length > 0) {
                    this.normalsNeedUpdate = true
                }
            }
            computeMorphNormals() {
                for (let f = 0, fl = this.faces.length; f < fl; f++) {
                    const face = this.faces[f];
                    if (!face.__originalFaceNormal) {
                        face.__originalFaceNormal = face.normal.clone()
                    } else {
                        face.__originalFaceNormal.copy(face.normal)
                    }
                    if (!face.__originalVertexNormals)
                        face.__originalVertexNormals = [];
                    for (let i = 0, il = face.vertexNormals.length; i < il; i++) {
                        if (!face.__originalVertexNormals[i]) {
                            face.__originalVertexNormals[i] = face.vertexNormals[i].clone()
                        } else {
                            face.__originalVertexNormals[i].copy(face.vertexNormals[i])
                        }
                    }
                }
                const tmpGeo = new Geometry;
                tmpGeo.faces = this.faces;
                for (let i = 0, il = this.morphTargets.length; i < il; i++) {
                    if (!this.morphNormals[i]) {
                        this.morphNormals[i] = {};
                        this.morphNormals[i].faceNormals = [];
                        this.morphNormals[i].vertexNormals = [];
                        const dstNormalsFace = this.morphNormals[i].faceNormals;
                        const dstNormalsVertex = this.morphNormals[i].vertexNormals;
                        for (let f = 0, fl = this.faces.length; f < fl; f++) {
                            const faceNormal = new Vector3;
                            const vertexNormals = {
                                a: new Vector3,
                                b: new Vector3,
                                c: new Vector3
                            };
                            dstNormalsFace.push(faceNormal);
                            dstNormalsVertex.push(vertexNormals)
                        }
                    }
                    const morphNormals = this.morphNormals[i];
                    tmpGeo.vertices = this.morphTargets[i].vertices;
                    tmpGeo.computeFaceNormals();
                    tmpGeo.computeVertexNormals();
                    for (let f = 0, fl = this.faces.length; f < fl; f++) {
                        const face = this.faces[f];
                        const faceNormal = morphNormals.faceNormals[f];
                        const vertexNormals = morphNormals.vertexNormals[f];
                        faceNormal.copy(face.normal);
                        vertexNormals.a.copy(face.vertexNormals[0]);
                        vertexNormals.b.copy(face.vertexNormals[1]);
                        vertexNormals.c.copy(face.vertexNormals[2])
                    }
                }
                for (let f = 0, fl = this.faces.length; f < fl; f++) {
                    const face = this.faces[f];
                    face.normal = face.__originalFaceNormal;
                    face.vertexNormals = face.__originalVertexNormals
                }
            }
            computeBoundingBox() {
                if (this.boundingBox === null) {
                    this.boundingBox = new Box3
                }
                this.boundingBox.setFromPoints(this.vertices)
            }
            computeBoundingSphere() {
                if (this.boundingSphere === null) {
                    this.boundingSphere = new Sphere
                }
                this.boundingSphere.setFromPoints(this.vertices)
            }
            merge(geometry, matrix, materialIndexOffset = 0) {
                if (!(geometry && geometry.isGeometry)) {
                    console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", geometry);
                    return
                }
                let normalMatrix;
                const vertexOffset = this.vertices.length,
                vertices1 = this.vertices,
                vertices2 = geometry.vertices,
                faces1 = this.faces,
                faces2 = geometry.faces,
                colors1 = this.colors,
                colors2 = geometry.colors;
                if (matrix !== undefined) {
                    normalMatrix = new Matrix3().getNormalMatrix(matrix)
                }
                for (let i = 0, il = vertices2.length; i < il; i++) {
                    const vertex = vertices2[i];
                    const vertexCopy = vertex.clone();
                    if (matrix !== undefined)
                        vertexCopy.applyMatrix4(matrix);
                    vertices1.push(vertexCopy)
                }
                for (let i = 0, il = colors2.length; i < il; i++) {
                    colors1.push(colors2[i].clone())
                }
                for (let i = 0, il = faces2.length; i < il; i++) {
                    const face = faces2[i];
                    let normal,
                    color;
                    const faceVertexNormals = face.vertexNormals,
                    faceVertexColors = face.vertexColors;
                    const faceCopy = new Face3(face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset);
                    faceCopy.normal.copy(face.normal);
                    if (normalMatrix !== undefined) {
                        faceCopy.normal.applyMatrix3(normalMatrix).normalize()
                    }
                    for (let j = 0, jl = faceVertexNormals.length; j < jl; j++) {
                        normal = faceVertexNormals[j].clone();
                        if (normalMatrix !== undefined) {
                            normal.applyMatrix3(normalMatrix).normalize()
                        }
                        faceCopy.vertexNormals.push(normal)
                    }
                    faceCopy.color.copy(face.color);
                    for (let j = 0, jl = faceVertexColors.length; j < jl; j++) {
                        color = faceVertexColors[j];
                        faceCopy.vertexColors.push(color.clone())
                    }
                    faceCopy.materialIndex = face.materialIndex + materialIndexOffset;
                    faces1.push(faceCopy)
                }
                for (let i = 0, il = geometry.faceVertexUvs.length; i < il; i++) {
                    const faceVertexUvs2 = geometry.faceVertexUvs[i];
                    if (this.faceVertexUvs[i] === undefined)
                        this.faceVertexUvs[i] = [];
                    for (let j = 0, jl = faceVertexUvs2.length; j < jl; j++) {
                        const uvs2 = faceVertexUvs2[j],
                        uvsCopy = [];
                        for (let k = 0, kl = uvs2.length; k < kl; k++) {
                            uvsCopy.push(uvs2[k].clone())
                        }
                        this.faceVertexUvs[i].push(uvsCopy)
                    }
                }
            }
            mergeMesh(mesh) {
                if (!(mesh && mesh.isMesh)) {
                    console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", mesh);
                    return
                }
                if (mesh.matrixAutoUpdate)
                    mesh.updateMatrix();
                this.merge(mesh.geometry, mesh.matrix)
            }
            mergeVertices(precisionPoints = 4) {
                const verticesMap = {};
                const unique = [],
                changes = [];
                const precision = Math.pow(10, precisionPoints);
                for (let i = 0, il = this.vertices.length; i < il; i++) {
                    const v = this.vertices[i];
                    const key = Math.round(v.x * precision) + "_" + Math.round(v.y * precision) + "_" + Math.round(v.z * precision);
                    if (verticesMap[key] === undefined) {
                        verticesMap[key] = i;
                        unique.push(this.vertices[i]);
                        changes[i] = unique.length - 1
                    } else {
                        changes[i] = changes[verticesMap[key]]
                    }
                }
                const faceIndicesToRemove = [];
                for (let i = 0, il = this.faces.length; i < il; i++) {
                    const face = this.faces[i];
                    face.a = changes[face.a];
                    face.b = changes[face.b];
                    face.c = changes[face.c];
                    const indices = [face.a, face.b, face.c];
                    for (let n = 0; n < 3; n++) {
                        if (indices[n] === indices[(n + 1) % 3]) {
                            faceIndicesToRemove.push(i);
                            break
                        }
                    }
                }
                for (let i = faceIndicesToRemove.length - 1; i >= 0; i--) {
                    const idx = faceIndicesToRemove[i];
                    this.faces.splice(idx, 1);
                    for (let j = 0, jl = this.faceVertexUvs.length; j < jl; j++) {
                        this.faceVertexUvs[j].splice(idx, 1)
                    }
                }
                const diff = this.vertices.length - unique.length;
                this.vertices = unique;
                return diff
            }
            setFromPoints(points) {
                this.vertices = [];
                for (let i = 0, l = points.length; i < l; i++) {
                    const point = points[i];
                    this.vertices.push(new Vector3(point.x, point.y, point.z || 0))
                }
                return this
            }
            sortFacesByMaterialIndex() {
                const faces = this.faces;
                const length = faces.length;
                for (let i = 0; i < length; i++) {
                    faces[i]._id = i
                }
                function materialIndexSort(a, b) {
                    return a.materialIndex - b.materialIndex
                }
                faces.sort(materialIndexSort);
                const uvs1 = this.faceVertexUvs[0];
                const uvs2 = this.faceVertexUvs[1];
                let newUvs1,
                newUvs2;
                if (uvs1 && uvs1.length === length)
                    newUvs1 = [];
                if (uvs2 && uvs2.length === length)
                    newUvs2 = [];
                for (let i = 0; i < length; i++) {
                    const id = faces[i]._id;
                    if (newUvs1)
                        newUvs1.push(uvs1[id]);
                    if (newUvs2)
                        newUvs2.push(uvs2[id])
                }
                if (newUvs1)
                    this.faceVertexUvs[0] = newUvs1;
                if (newUvs2)
                    this.faceVertexUvs[1] = newUvs2
            }
            toJSON() {
                const data = {
                    metadata: {
                        version: 4.5,
                        type: "Geometry",
                        generator: "Geometry.toJSON"
                    }
                };
                data.uuid = this.uuid;
                data.type = this.type;
                if (this.name !== "")
                    data.name = this.name;
                if (this.parameters !== undefined) {
                    const parameters = this.parameters;
                    for (const key in parameters) {
                        if (parameters[key] !== undefined)
                            data[key] = parameters[key]
                    }
                    return data
                }
                const vertices = [];
                for (let i = 0; i < this.vertices.length; i++) {
                    const vertex = this.vertices[i];
                    vertices.push(vertex.x, vertex.y, vertex.z)
                }
                const faces = [];
                const normals = [];
                const normalsHash = {};
                const colors = [];
                const colorsHash = {};
                const uvs = [];
                const uvsHash = {};
                for (let i = 0; i < this.faces.length; i++) {
                    const face = this.faces[i];
                    const hasMaterial = true;
                    const hasFaceUv = false;
                    const hasFaceVertexUv = this.faceVertexUvs[0][i] !== undefined;
                    const hasFaceNormal = face.normal.length() > 0;
                    const hasFaceVertexNormal = face.vertexNormals.length > 0;
                    const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;
                    const hasFaceVertexColor = face.vertexColors.length > 0;
                    let faceType = 0;
                    faceType = setBit(faceType, 0, 0);
                    faceType = setBit(faceType, 1, hasMaterial);
                    faceType = setBit(faceType, 2, hasFaceUv);
                    faceType = setBit(faceType, 3, hasFaceVertexUv);
                    faceType = setBit(faceType, 4, hasFaceNormal);
                    faceType = setBit(faceType, 5, hasFaceVertexNormal);
                    faceType = setBit(faceType, 6, hasFaceColor);
                    faceType = setBit(faceType, 7, hasFaceVertexColor);
                    faces.push(faceType);
                    faces.push(face.a, face.b, face.c);
                    faces.push(face.materialIndex);
                    if (hasFaceVertexUv) {
                        const faceVertexUvs = this.faceVertexUvs[0][i];
                        faces.push(getUvIndex(faceVertexUvs[0]), getUvIndex(faceVertexUvs[1]), getUvIndex(faceVertexUvs[2]))
                    }
                    if (hasFaceNormal) {
                        faces.push(getNormalIndex(face.normal))
                    }
                    if (hasFaceVertexNormal) {
                        const vertexNormals = face.vertexNormals;
                        faces.push(getNormalIndex(vertexNormals[0]), getNormalIndex(vertexNormals[1]), getNormalIndex(vertexNormals[2]))
                    }
                    if (hasFaceColor) {
                        faces.push(getColorIndex(face.color))
                    }
                    if (hasFaceVertexColor) {
                        const vertexColors = face.vertexColors;
                        faces.push(getColorIndex(vertexColors[0]), getColorIndex(vertexColors[1]), getColorIndex(vertexColors[2]))
                    }
                }
                function setBit(value, position, enabled) {
                    return enabled ? value | 1 << position : value & ~(1 << position)
                }
                function getNormalIndex(normal) {
                    const hash = normal.x.toString() + normal.y.toString() + normal.z.toString();
                    if (normalsHash[hash] !== undefined) {
                        return normalsHash[hash]
                    }
                    normalsHash[hash] = normals.length / 3;
                    normals.push(normal.x, normal.y, normal.z);
                    return normalsHash[hash]
                }
                function getColorIndex(color) {
                    const hash = color.r.toString() + color.g.toString() + color.b.toString();
                    if (colorsHash[hash] !== undefined) {
                        return colorsHash[hash]
                    }
                    colorsHash[hash] = colors.length;
                    colors.push(color.getHex());
                    return colorsHash[hash]
                }
                function getUvIndex(uv) {
                    const hash = uv.x.toString() + uv.y.toString();
                    if (uvsHash[hash] !== undefined) {
                        return uvsHash[hash]
                    }
                    uvsHash[hash] = uvs.length / 2;
                    uvs.push(uv.x, uv.y);
                    return uvsHash[hash]
                }
                data.data = {};
                data.data.vertices = vertices;
                data.data.normals = normals;
                if (colors.length > 0)
                    data.data.colors = colors;
                if (uvs.length > 0)
                    data.data.uvs = [uvs];
                data.data.faces = faces;
                return data
            }
            clone() {
                return new Geometry().copy(this)
            }
            copy(source) {
                this.vertices = [];
                this.colors = [];
                this.faces = [];
                this.faceVertexUvs = [[]];
                this.morphTargets = [];
                this.morphNormals = [];
                this.skinWeights = [];
                this.skinIndices = [];
                this.lineDistances = [];
                this.boundingBox = null;
                this.boundingSphere = null;
                this.name = source.name;
                const vertices = source.vertices;
                for (let i = 0, il = vertices.length; i < il; i++) {
                    this.vertices.push(vertices[i].clone())
                }
                const colors = source.colors;
                for (let i = 0, il = colors.length; i < il; i++) {
                    this.colors.push(colors[i].clone())
                }
                const faces = source.faces;
                for (let i = 0, il = faces.length; i < il; i++) {
                    this.faces.push(faces[i].clone())
                }
                for (let i = 0, il = source.faceVertexUvs.length; i < il; i++) {
                    const faceVertexUvs = source.faceVertexUvs[i];
                    if (this.faceVertexUvs[i] === undefined) {
                        this.faceVertexUvs[i] = []
                    }
                    for (let j = 0, jl = faceVertexUvs.length; j < jl; j++) {
                        const uvs = faceVertexUvs[j],
                        uvsCopy = [];
                        for (let k = 0, kl = uvs.length; k < kl; k++) {
                            const uv = uvs[k];
                            uvsCopy.push(uv.clone())
                        }
                        this.faceVertexUvs[i].push(uvsCopy)
                    }
                }
                const morphTargets = source.morphTargets;
                for (let i = 0, il = morphTargets.length; i < il; i++) {
                    const morphTarget = {};
                    morphTarget.name = morphTargets[i].name;
                    if (morphTargets[i].vertices !== undefined) {
                        morphTarget.vertices = [];
                        for (let j = 0, jl = morphTargets[i].vertices.length; j < jl; j++) {
                            morphTarget.vertices.push(morphTargets[i].vertices[j].clone())
                        }
                    }
                    if (morphTargets[i].normals !== undefined) {
                        morphTarget.normals = [];
                        for (let j = 0, jl = morphTargets[i].normals.length; j < jl; j++) {
                            morphTarget.normals.push(morphTargets[i].normals[j].clone())
                        }
                    }
                    this.morphTargets.push(morphTarget)
                }
                const morphNormals = source.morphNormals;
                for (let i = 0, il = morphNormals.length; i < il; i++) {
                    const morphNormal = {};
                    if (morphNormals[i].vertexNormals !== undefined) {
                        morphNormal.vertexNormals = [];
                        for (let j = 0, jl = morphNormals[i].vertexNormals.length; j < jl; j++) {
                            const srcVertexNormal = morphNormals[i].vertexNormals[j];
                            const destVertexNormal = {};
                            destVertexNormal.a = srcVertexNormal.a.clone();
                            destVertexNormal.b = srcVertexNormal.b.clone();
                            destVertexNormal.c = srcVertexNormal.c.clone();
                            morphNormal.vertexNormals.push(destVertexNormal)
                        }
                    }
                    if (morphNormals[i].faceNormals !== undefined) {
                        morphNormal.faceNormals = [];
                        for (let j = 0, jl = morphNormals[i].faceNormals.length; j < jl; j++) {
                            morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone())
                        }
                    }
                    this.morphNormals.push(morphNormal)
                }
                const skinWeights = source.skinWeights;
                for (let i = 0, il = skinWeights.length; i < il; i++) {
                    this.skinWeights.push(skinWeights[i].clone())
                }
                const skinIndices = source.skinIndices;
                for (let i = 0, il = skinIndices.length; i < il; i++) {
                    this.skinIndices.push(skinIndices[i].clone())
                }
                const lineDistances = source.lineDistances;
                for (let i = 0, il = lineDistances.length; i < il; i++) {
                    this.lineDistances.push(lineDistances[i])
                }
                const boundingBox = source.boundingBox;
                if (boundingBox !== null) {
                    this.boundingBox = boundingBox.clone()
                }
                const boundingSphere = source.boundingSphere;
                if (boundingSphere !== null) {
                    this.boundingSphere = boundingSphere.clone()
                }
                this.elementsNeedUpdate = source.elementsNeedUpdate;
                this.verticesNeedUpdate = source.verticesNeedUpdate;
                this.uvsNeedUpdate = source.uvsNeedUpdate;
                this.normalsNeedUpdate = source.normalsNeedUpdate;
                this.colorsNeedUpdate = source.colorsNeedUpdate;
                this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;
                this.groupsNeedUpdate = source.groupsNeedUpdate;
                return this
            }
            toBufferGeometry() {
                const geometry = new DirectGeometry().fromGeometry(this);
                const buffergeometry = new BufferGeometry;
                const positions = new Float32Array(geometry.vertices.length * 3);
                buffergeometry.setAttribute("position", new BufferAttribute(positions, 3).copyVector3sArray(geometry.vertices));
                if (geometry.normals.length > 0) {
                    const normals = new Float32Array(geometry.normals.length * 3);
                    buffergeometry.setAttribute("normal", new BufferAttribute(normals, 3).copyVector3sArray(geometry.normals))
                }
                if (geometry.colors.length > 0) {
                    const colors = new Float32Array(geometry.colors.length * 3);
                    buffergeometry.setAttribute("color", new BufferAttribute(colors, 3).copyColorsArray(geometry.colors))
                }
                if (geometry.uvs.length > 0) {
                    const uvs = new Float32Array(geometry.uvs.length * 2);
                    buffergeometry.setAttribute("uv", new BufferAttribute(uvs, 2).copyVector2sArray(geometry.uvs))
                }
                if (geometry.uvs2.length > 0) {
                    const uvs2 = new Float32Array(geometry.uvs2.length * 2);
                    buffergeometry.setAttribute("uv2", new BufferAttribute(uvs2, 2).copyVector2sArray(geometry.uvs2))
                }
                buffergeometry.groups = geometry.groups;
                for (const name in geometry.morphTargets) {
                    const array = [];
                    const morphTargets = geometry.morphTargets[name];
                    for (let i = 0, l = morphTargets.length; i < l; i++) {
                        const morphTarget = morphTargets[i];
                        const attribute = new Float32BufferAttribute(morphTarget.data.length * 3, 3);
                        attribute.name = morphTarget.name;
                        array.push(attribute.copyVector3sArray(morphTarget.data))
                    }
                    buffergeometry.morphAttributes[name] = array
                }
                if (geometry.skinIndices.length > 0) {
                    const skinIndices = new Float32BufferAttribute(geometry.skinIndices.length * 4, 4);
                    buffergeometry.setAttribute("skinIndex", skinIndices.copyVector4sArray(geometry.skinIndices))
                }
                if (geometry.skinWeights.length > 0) {
                    const skinWeights = new Float32BufferAttribute(geometry.skinWeights.length * 4, 4);
                    buffergeometry.setAttribute("skinWeight", skinWeights.copyVector4sArray(geometry.skinWeights))
                }
                if (geometry.boundingSphere !== null) {
                    buffergeometry.boundingSphere = geometry.boundingSphere.clone()
                }
                if (geometry.boundingBox !== null) {
                    buffergeometry.boundingBox = geometry.boundingBox.clone()
                }
                return buffergeometry
            }
            computeTangents() {
                console.error("THREE.Geometry: .computeTangents() has been removed.")
            }
            computeLineDistances() {
                console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")
            }
            applyMatrix(matrix) {
                console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().");
                return this.applyMatrix4(matrix)
            }
            dispose() {
                this.dispatchEvent({
                    type: "dispose"
                })
            }
            static createBufferGeometryFromObject(object) {
                let buffergeometry = new BufferGeometry;
                const geometry = object.geometry;
                if (object.isPoints || object.isLine) {
                    const positions = new Float32BufferAttribute(geometry.vertices.length * 3, 3);
                    const colors = new Float32BufferAttribute(geometry.colors.length * 3, 3);
                    buffergeometry.setAttribute("position", positions.copyVector3sArray(geometry.vertices));
                    buffergeometry.setAttribute("color", colors.copyColorsArray(geometry.colors));
                    if (geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length) {
                        const lineDistances = new Float32BufferAttribute(geometry.lineDistances.length, 1);
                        buffergeometry.setAttribute("lineDistance", lineDistances.copyArray(geometry.lineDistances))
                    }
                    if (geometry.boundingSphere !== null) {
                        buffergeometry.boundingSphere = geometry.boundingSphere.clone()
                    }
                    if (geometry.boundingBox !== null) {
                        buffergeometry.boundingBox = geometry.boundingBox.clone()
                    }
                } else if (object.isMesh) {
                    buffergeometry = geometry.toBufferGeometry()
                }
                return buffergeometry
            }
        }
        Geometry.prototype.isGeometry = true;
        class DirectGeometry {
            constructor() {
                this.vertices = [];
                this.normals = [];
                this.colors = [];
                this.uvs = [];
                this.uvs2 = [];
                this.groups = [];
                this.morphTargets = {};
                this.skinWeights = [];
                this.skinIndices = [];
                this.boundingBox = null;
                this.boundingSphere = null;
                this.verticesNeedUpdate = false;
                this.normalsNeedUpdate = false;
                this.colorsNeedUpdate = false;
                this.uvsNeedUpdate = false;
                this.groupsNeedUpdate = false
            }
            computeGroups(geometry) {
                const groups = [];
                let group,
                i;
                let materialIndex = undefined;
                const faces = geometry.faces;
                for (i = 0; i < faces.length; i++) {
                    const face = faces[i];
                    if (face.materialIndex !== materialIndex) {
                        materialIndex = face.materialIndex;
                        if (group !== undefined) {
                            group.count = i * 3 - group.start;
                            groups.push(group)
                        }
                        group = {
                            start: i * 3,
                            materialIndex: materialIndex
                        }
                    }
                }
                if (group !== undefined) {
                    group.count = i * 3 - group.start;
                    groups.push(group)
                }
                this.groups = groups
            }
            fromGeometry(geometry) {
                const faces = geometry.faces;
                const vertices = geometry.vertices;
                const faceVertexUvs = geometry.faceVertexUvs;
                const hasFaceVertexUv = faceVertexUvs[0] && faceVertexUvs[0].length > 0;
                const hasFaceVertexUv2 = faceVertexUvs[1] && faceVertexUvs[1].length > 0;
                const morphTargets = geometry.morphTargets;
                const morphTargetsLength = morphTargets.length;
                let morphTargetsPosition;
                if (morphTargetsLength > 0) {
                    morphTargetsPosition = [];
                    for (let i = 0; i < morphTargetsLength; i++) {
                        morphTargetsPosition[i] = {
                            name: morphTargets[i].name,
                            data: []
                        }
                    }
                    this.morphTargets.position = morphTargetsPosition
                }
                const morphNormals = geometry.morphNormals;
                const morphNormalsLength = morphNormals.length;
                let morphTargetsNormal;
                if (morphNormalsLength > 0) {
                    morphTargetsNormal = [];
                    for (let i = 0; i < morphNormalsLength; i++) {
                        morphTargetsNormal[i] = {
                            name: morphNormals[i].name,
                            data: []
                        }
                    }
                    this.morphTargets.normal = morphTargetsNormal
                }
                const skinIndices = geometry.skinIndices;
                const skinWeights = geometry.skinWeights;
                const hasSkinIndices = skinIndices.length === vertices.length;
                const hasSkinWeights = skinWeights.length === vertices.length;
                if (vertices.length > 0 && faces.length === 0) {
                    console.error("THREE.DirectGeometry: Faceless geometries are not supported.")
                }
                for (let i = 0; i < faces.length; i++) {
                    const face = faces[i];
                    this.vertices.push(vertices[face.a], vertices[face.b], vertices[face.c]);
                    const vertexNormals = face.vertexNormals;
                    if (vertexNormals.length === 3) {
                        this.normals.push(vertexNormals[0], vertexNormals[1], vertexNormals[2])
                    } else {
                        const normal = face.normal;
                        this.normals.push(normal, normal, normal)
                    }
                    const vertexColors = face.vertexColors;
                    if (vertexColors.length === 3) {
                        this.colors.push(vertexColors[0], vertexColors[1], vertexColors[2])
                    } else {
                        const color = face.color;
                        this.colors.push(color, color, color)
                    }
                    if (hasFaceVertexUv === true) {
                        const vertexUvs = faceVertexUvs[0][i];
                        if (vertexUvs !== undefined) {
                            this.uvs.push(vertexUvs[0], vertexUvs[1], vertexUvs[2])
                        } else {
                            console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", i);
                            this.uvs.push(new Vector2, new Vector2, new Vector2)
                        }
                    }
                    if (hasFaceVertexUv2 === true) {
                        const vertexUvs = faceVertexUvs[1][i];
                        if (vertexUvs !== undefined) {
                            this.uvs2.push(vertexUvs[0], vertexUvs[1], vertexUvs[2])
                        } else {
                            console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", i);
                            this.uvs2.push(new Vector2, new Vector2, new Vector2)
                        }
                    }
                    for (let j = 0; j < morphTargetsLength; j++) {
                        const morphTarget = morphTargets[j].vertices;
                        morphTargetsPosition[j].data.push(morphTarget[face.a], morphTarget[face.b], morphTarget[face.c])
                    }
                    for (let j = 0; j < morphNormalsLength; j++) {
                        const morphNormal = morphNormals[j].vertexNormals[i];
                        morphTargetsNormal[j].data.push(morphNormal.a, morphNormal.b, morphNormal.c)
                    }
                    if (hasSkinIndices) {
                        this.skinIndices.push(skinIndices[face.a], skinIndices[face.b], skinIndices[face.c])
                    }
                    if (hasSkinWeights) {
                        this.skinWeights.push(skinWeights[face.a], skinWeights[face.b], skinWeights[face.c])
                    }
                }
                this.computeGroups(geometry);
                this.verticesNeedUpdate = geometry.verticesNeedUpdate;
                this.normalsNeedUpdate = geometry.normalsNeedUpdate;
                this.colorsNeedUpdate = geometry.colorsNeedUpdate;
                this.uvsNeedUpdate = geometry.uvsNeedUpdate;
                this.groupsNeedUpdate = geometry.groupsNeedUpdate;
                if (geometry.boundingSphere !== null) {
                    this.boundingSphere = geometry.boundingSphere.clone()
                }
                if (geometry.boundingBox !== null) {
                    this.boundingBox = geometry.boundingBox.clone()
                }
                return this
            }
        }
        THREE.Geometry = Geometry
    });
    (function (t, e) {
        e(t.THREE = t.THREE || {})
    })(this, function (THREE) {
        var AnimationClip = THREE.AnimationClip,
        Bone = THREE.Bone,
        Box3 = THREE.Box3,
        BufferAttribute = THREE.BufferAttribute,
        BufferGeometry = THREE.BufferGeometry,
        ClampToEdgeWrapping = THREE.ClampToEdgeWrapping,
        Color = THREE.Color,
        DirectionalLight = THREE.DirectionalLight,
        DoubleSide = THREE.DoubleSide,
        FileLoader = THREE.FileLoader,
        FrontSide = THREE.FrontSide,
        Group = THREE.Group,
        ImageBitmapLoader = THREE.ImageBitmapLoader,
        InterleavedBuffer = THREE.InterleavedBuffer,
        InterleavedBufferAttribute = THREE.InterleavedBufferAttribute,
        Interpolant = THREE.Interpolant,
        InterpolateDiscrete = THREE.InterpolateDiscrete,
        InterpolateLinear = THREE.InterpolateLinear,
        Line = THREE.Line,
        LineBasicMaterial = THREE.LineBasicMaterial,
        LineLoop = THREE.LineLoop,
        LineSegments = THREE.LineSegments,
        LinearFilter = THREE.LinearFilter,
        LinearMipmapLinearFilter = THREE.LinearMipmapLinearFilter,
        LinearMipmapNearestFilter = THREE.LinearMipmapNearestFilter,
        Loader = THREE.Loader,
        LoaderUtils = THREE.LoaderUtils,
        Material = THREE.Material,
        MathUtils = THREE.MathUtils,
        Matrix4 = THREE.Matrix4,
        Mesh = THREE.Mesh,
        MeshBasicMaterial = THREE.MeshBasicMaterial,
        MeshPhysicalMaterial = THREE.MeshPhysicalMaterial,
        MeshStandardMaterial = THREE.MeshStandardMaterial,
        MirroredRepeatWrapping = THREE.MirroredRepeatWrapping,
        NearestFilter = THREE.NearestFilter,
        NearestMipmapLinearFilter = THREE.NearestMipmapLinearFilter,
        NearestMipmapNearestFilter = THREE.NearestMipmapNearestFilter,
        NumberKeyframeTrack = THREE.NumberKeyframeTrack,
        Object3D = THREE.Object3D,
        OrthographicCamera = THREE.OrthographicCamera,
        PerspectiveCamera = THREE.PerspectiveCamera,
        PointLight = THREE.PointLight,
        Points = THREE.Points,
        PointsMaterial = THREE.PointsMaterial,
        PropertyBinding = THREE.PropertyBinding,
        Quaternion = THREE.Quaternion,
        QuaternionKeyframeTrack = THREE.QuaternionKeyframeTrack,
        RGBFormat = THREE.RGBFormat,
        RepeatWrapping = THREE.RepeatWrapping,
        Skeleton = THREE.Skeleton,
        SkinnedMesh = THREE.SkinnedMesh,
        Sphere = THREE.Sphere,
        SpotLight = THREE.SpotLight,
        TangentSpaceNormalMap = THREE.TangentSpaceNormalMap,
        Texture = THREE.Texture,
        TextureLoader = THREE.TextureLoader,
        TriangleFanDrawMode = THREE.TriangleFanDrawMode,
        TriangleStripDrawMode = THREE.TriangleStripDrawMode,
        Vector2 = THREE.Vector2,
        Vector3 = THREE.Vector3,
        VectorKeyframeTrack = THREE.VectorKeyframeTrack,
        sRGBEncoding = THREE.sRGBEncoding;
        class GLTFLoader extends Loader {
            constructor(manager) {
                super(manager);
                this.dracoLoader = null;
                this.ktx2Loader = null;
                this.meshoptDecoder = null;
                this.pluginCallbacks = [];
                this.register(function (parser) {
                    return new GLTFMaterialsClearcoatExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFTextureBasisUExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFTextureWebPExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMaterialsSheenExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMaterialsTransmissionExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMaterialsVolumeExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMaterialsIorExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMaterialsSpecularExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFLightsExtension(parser)
                });
                this.register(function (parser) {
                    return new GLTFMeshoptCompression(parser)
                })
            }
            load(url, onLoad, onProgress, onError) {
                const scope = this;
                let resourcePath;
                if (this.resourcePath !== "") {
                    resourcePath = this.resourcePath
                } else if (this.path !== "") {
                    resourcePath = this.path
                } else {
                    resourcePath = LoaderUtils.extractUrlBase(url)
                }
                this.manager.itemStart(url);
                const _onError = function (e) {
                    if (onError) {
                        onError(e)
                    } else {
                        console.error(e)
                    }
                    scope.manager.itemError(url);
                    scope.manager.itemEnd(url)
                };
                const loader = new FileLoader(this.manager);
                loader.setPath(this.path);
                loader.setResponseType("arraybuffer");
                loader.setRequestHeader(this.requestHeader);
                loader.setWithCredentials(this.withCredentials);
                loader.load(url, function (data) {
                    try {
                        scope.parse(data, resourcePath, function (gltf) {
                            onLoad(gltf);
                            scope.manager.itemEnd(url)
                        }, _onError)
                    } catch (e) {
                        _onError(e)
                    }
                }, onProgress, _onError)
            }
            setDRACOLoader(dracoLoader) {
                this.dracoLoader = dracoLoader;
                return this
            }
            setDDSLoader() {
                throw new Error("THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".")
            }
            setKTX2Loader(ktx2Loader) {
                this.ktx2Loader = ktx2Loader;
                return this
            }
            setMeshoptDecoder(meshoptDecoder) {
                this.meshoptDecoder = meshoptDecoder;
                return this
            }
            register(callback) {
                if (this.pluginCallbacks.indexOf(callback) === -1) {
                    this.pluginCallbacks.push(callback)
                }
                return this
            }
            unregister(callback) {
                if (this.pluginCallbacks.indexOf(callback) !== -1) {
                    this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1)
                }
                return this
            }
            parse(data, path, onLoad, onError) {
                let content;
                const extensions = {};
                const plugins = {};
                if (typeof data === "string") {
                    content = data
                } else {
                    const magic = LoaderUtils.decodeText(new Uint8Array(data, 0, 4));
                    if (magic === BINARY_EXTENSION_HEADER_MAGIC) {
                        try {
                            extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data)
                        } catch (error) {
                            if (onError)
                                onError(error);
                            return
                        }
                        content = extensions[EXTENSIONS.KHR_BINARY_GLTF].content
                    } else {
                        content = LoaderUtils.decodeText(new Uint8Array(data))
                    }
                }
                const json = JSON.parse(content);
                if (json.asset === undefined || json.asset.version[0] < 2) {
                    if (onError)
                        onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
                    return
                }
                const parser = new GLTFParser(json, {
                    path: path || this.resourcePath || "",
                    crossOrigin: this.crossOrigin,
                    requestHeader: this.requestHeader,
                    manager: this.manager,
                    ktx2Loader: this.ktx2Loader,
                    meshoptDecoder: this.meshoptDecoder
                });
                parser.fileLoader.setRequestHeader(this.requestHeader);
                for (let i = 0; i < this.pluginCallbacks.length; i++) {
                    const plugin = this.pluginCallbacks[i](parser);
                    plugins[plugin.name] = plugin;
                    extensions[plugin.name] = true
                }
                if (json.extensionsUsed) {
                    for (let i = 0; i < json.extensionsUsed.length; ++i) {
                        const extensionName = json.extensionsUsed[i];
                        const extensionsRequired = json.extensionsRequired || [];
                        switch (extensionName) {
                        case EXTENSIONS.KHR_MATERIALS_UNLIT:
                            extensions[extensionName] = new GLTFMaterialsUnlitExtension;
                            break;
                        case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:
                            extensions[extensionName] = new GLTFMaterialsPbrSpecularGlossinessExtension;
                            break;
                        case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:
                            extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);
                            break;
                        case EXTENSIONS.KHR_TEXTURE_TRANSFORM:
                            extensions[extensionName] = new GLTFTextureTransformExtension;
                            break;
                        case EXTENSIONS.KHR_MESH_QUANTIZATION:
                            extensions[extensionName] = new GLTFMeshQuantizationExtension;
                            break;
                        default:
                            if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === undefined) {
                                console.warn("THREE.GLTFLoader: Unknown extension \"" + extensionName + "\".")
                            }
                        }
                    }
                }
                parser.setExtensions(extensions);
                parser.setPlugins(plugins);
                parser.parse(onLoad, onError)
            }
        }
        function GLTFRegistry() {
            let objects = {};
            return {
                get: function (key) {
                    return objects[key]
                },
                add: function (key, object) {
                    objects[key] = object
                },
                remove: function (key) {
                    delete objects[key]
                },
                removeAll: function () {
                    objects = {}
                }
            }
        }
        const EXTENSIONS = {
            KHR_BINARY_GLTF: "KHR_binary_glTF",
            KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression",
            KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual",
            KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat",
            KHR_MATERIALS_IOR: "KHR_materials_ior",
            KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: "KHR_materials_pbrSpecularGlossiness",
            KHR_MATERIALS_SHEEN: "KHR_materials_sheen",
            KHR_MATERIALS_SPECULAR: "KHR_materials_specular",
            KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission",
            KHR_MATERIALS_UNLIT: "KHR_materials_unlit",
            KHR_MATERIALS_VOLUME: "KHR_materials_volume",
            KHR_TEXTURE_BASISU: "KHR_texture_basisu",
            KHR_TEXTURE_TRANSFORM: "KHR_texture_transform",
            KHR_MESH_QUANTIZATION: "KHR_mesh_quantization",
            EXT_TEXTURE_WEBP: "EXT_texture_webp",
            EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression"
        };
        class GLTFLightsExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
                this.cache = {
                    refs: {},
                    uses: {}
                }
            }
            _markDefs() {
                const parser = this.parser;
                const nodeDefs = this.parser.json.nodes || [];
                for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
                    const nodeDef = nodeDefs[nodeIndex];
                    if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== undefined) {
                        parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light)
                    }
                }
            }
            _loadLight(lightIndex) {
                const parser = this.parser;
                const cacheKey = "light:" + lightIndex;
                let dependency = parser.cache.get(cacheKey);
                if (dependency)
                    return dependency;
                const json = parser.json;
                const extensions = json.extensions && json.extensions[this.name] || {};
                const lightDefs = extensions.lights || [];
                const lightDef = lightDefs[lightIndex];
                let lightNode;
                const color = new Color(16777215);
                if (lightDef.color !== undefined)
                    color.fromArray(lightDef.color);
                const range = lightDef.range !== undefined ? lightDef.range : 0;
                switch (lightDef.type) {
                case "directional":
                    lightNode = new DirectionalLight(color);
                    lightNode.target.position.set(0, 0, -1);
                    lightNode.add(lightNode.target);
                    break;
                case "point":
                    lightNode = new PointLight(color);
                    lightNode.distance = range;
                    break;
                case "spot":
                    lightNode = new SpotLight(color);
                    lightNode.distance = range;
                    lightDef.spot = lightDef.spot || {};
                    lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;
                    lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4;
                    lightNode.angle = lightDef.spot.outerConeAngle;
                    lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;
                    lightNode.target.position.set(0, 0, -1);
                    lightNode.add(lightNode.target);
                    break;
                default:
                    throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type);
                }
                lightNode.position.set(0, 0, 0);
                lightNode.decay = 2;
                if (lightDef.intensity !== undefined)
                    lightNode.intensity = lightDef.intensity;
                lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex);
                dependency = Promise.resolve(lightNode);
                parser.cache.add(cacheKey, dependency);
                return dependency
            }
            createNodeAttachment(nodeIndex) {
                const self = this;
                const parser = this.parser;
                const json = parser.json;
                const nodeDef = json.nodes[nodeIndex];
                const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};
                const lightIndex = lightDef.light;
                if (lightIndex === undefined)
                    return null;
                return this._loadLight(lightIndex).then(function (light) {
                    return parser._getNodeRef(self.cache, lightIndex, light)
                })
            }
        }
        class GLTFMaterialsUnlitExtension {
            constructor() {
                this.name = EXTENSIONS.KHR_MATERIALS_UNLIT
            }
            getMaterialType() {
                return MeshBasicMaterial
            }
            extendParams(materialParams, materialDef, parser) {
                const pending = [];
                materialParams.color = new Color(1, 1, 1);
                materialParams.opacity = 1;
                const metallicRoughness = materialDef.pbrMetallicRoughness;
                if (metallicRoughness) {
                    if (Array.isArray(metallicRoughness.baseColorFactor)) {
                        const array = metallicRoughness.baseColorFactor;
                        materialParams.color.fromArray(array);
                        materialParams.opacity = array[3]
                    }
                    if (metallicRoughness.baseColorTexture !== undefined) {
                        pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture))
                    }
                }
                return Promise.all(pending)
            }
        }
        class GLTFMaterialsClearcoatExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const pending = [];
                const extension = materialDef.extensions[this.name];
                if (extension.clearcoatFactor !== undefined) {
                    materialParams.clearcoat = extension.clearcoatFactor
                }
                if (extension.clearcoatTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture))
                }
                if (extension.clearcoatRoughnessFactor !== undefined) {
                    materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor
                }
                if (extension.clearcoatRoughnessTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture))
                }
                if (extension.clearcoatNormalTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture));
                    if (extension.clearcoatNormalTexture.scale !== undefined) {
                        const scale = extension.clearcoatNormalTexture.scale;
                        materialParams.clearcoatNormalScale = new Vector2(scale, scale)
                    }
                }
                return Promise.all(pending)
            }
        }
        class GLTFMaterialsSheenExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_SHEEN
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const pending = [];
                materialParams.sheenColor = new Color(0, 0, 0);
                materialParams.sheenRoughness = 0;
                materialParams.sheen = 1;
                const extension = materialDef.extensions[this.name];
                if (extension.sheenColorFactor !== undefined) {
                    materialParams.sheenColor.fromArray(extension.sheenColorFactor)
                }
                if (extension.sheenRoughnessFactor !== undefined) {
                    materialParams.sheenRoughness = extension.sheenRoughnessFactor
                }
                if (extension.sheenColorTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture))
                }
                if (extension.sheenRoughnessTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture))
                }
                return Promise.all(pending)
            }
        }
        class GLTFMaterialsTransmissionExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const pending = [];
                const extension = materialDef.extensions[this.name];
                if (extension.transmissionFactor !== undefined) {
                    materialParams.transmission = extension.transmissionFactor
                }
                if (extension.transmissionTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture))
                }
                return Promise.all(pending)
            }
        }
        class GLTFMaterialsVolumeExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_VOLUME
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const pending = [];
                const extension = materialDef.extensions[this.name];
                materialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;
                if (extension.thicknessTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture))
                }
                materialParams.attenuationDistance = extension.attenuationDistance || 0;
                const colorArray = extension.attenuationColor || [1, 1, 1];
                materialParams.attenuationColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
                return Promise.all(pending)
            }
        }
        class GLTFMaterialsIorExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_IOR
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const extension = materialDef.extensions[this.name];
                materialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;
                return Promise.resolve()
            }
        }
        class GLTFMaterialsSpecularExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR
            }
            getMaterialType(materialIndex) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name])
                    return null;
                return MeshPhysicalMaterial
            }
            extendMaterialParams(materialIndex, materialParams) {
                const parser = this.parser;
                const materialDef = parser.json.materials[materialIndex];
                if (!materialDef.extensions || !materialDef.extensions[this.name]) {
                    return Promise.resolve()
                }
                const pending = [];
                const extension = materialDef.extensions[this.name];
                materialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1;
                if (extension.specularTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture))
                }
                const colorArray = extension.specularColorFactor || [1, 1, 1];
                materialParams.specularColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
                if (extension.specularColorTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture).then(function (texture) {
                            texture.encoding = sRGBEncoding
                        }))
                }
                return Promise.all(pending)
            }
        }
        class GLTFTextureBasisUExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.KHR_TEXTURE_BASISU
            }
            loadTexture(textureIndex) {
                const parser = this.parser;
                const json = parser.json;
                const textureDef = json.textures[textureIndex];
                if (!textureDef.extensions || !textureDef.extensions[this.name]) {
                    return null
                }
                const extension = textureDef.extensions[this.name];
                const source = json.images[extension.source];
                const loader = parser.options.ktx2Loader;
                if (!loader) {
                    if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
                        throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures")
                    } else {
                        return null
                    }
                }
                return parser.loadTextureImage(textureIndex, source, loader)
            }
        }
        class GLTFTextureWebPExtension {
            constructor(parser) {
                this.parser = parser;
                this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
                this.isSupported = null
            }
            loadTexture(textureIndex) {
                const name = this.name;
                const parser = this.parser;
                const json = parser.json;
                const textureDef = json.textures[textureIndex];
                if (!textureDef.extensions || !textureDef.extensions[name]) {
                    return null
                }
                const extension = textureDef.extensions[name];
                const source = json.images[extension.source];
                let loader = parser.textureLoader;
                if (source.uri) {
                    const handler = parser.options.manager.getHandler(source.uri);
                    if (handler !== null)
                        loader = handler
                }
                return this.detectSupport().then(function (isSupported) {
                    if (isSupported)
                        return parser.loadTextureImage(textureIndex, source, loader);
                    if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
                        throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.")
                    }
                    return parser.loadTexture(textureIndex)
                })
            }
            detectSupport() {
                if (!this.isSupported) {
                    this.isSupported = new Promise(function (resolve) {
                        const image = new Image;
                        image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA";
                        image.onload = image.onerror = function () {
                            resolve(image.height === 1)
                        }
                    })
                }
                return this.isSupported
            }
        }
        class GLTFMeshoptCompression {
            constructor(parser) {
                this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;
                this.parser = parser
            }
            loadBufferView(index) {
                const json = this.parser.json;
                const bufferView = json.bufferViews[index];
                if (bufferView.extensions && bufferView.extensions[this.name]) {
                    const extensionDef = bufferView.extensions[this.name];
                    const buffer = this.parser.getDependency("buffer", extensionDef.buffer);
                    const decoder = this.parser.options.meshoptDecoder;
                    if (!decoder || !decoder.supported) {
                        if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
                            throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files")
                        } else {
                            return null
                        }
                    }
                    return Promise.all([buffer, decoder.ready]).then(function (res) {
                        const byteOffset = extensionDef.byteOffset || 0;
                        const byteLength = extensionDef.byteLength || 0;
                        const count = extensionDef.count;
                        const stride = extensionDef.byteStride;
                        const result = new ArrayBuffer(count * stride);
                        const source = new Uint8Array(res[0], byteOffset, byteLength);
                        decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter);
                        return result
                    })
                } else {
                    return null
                }
            }
        }
        const BINARY_EXTENSION_HEADER_MAGIC = "glTF";
        const BINARY_EXTENSION_HEADER_LENGTH = 12;
        const BINARY_EXTENSION_CHUNK_TYPES = {
            JSON: 1313821514,
            BIN: 5130562
        };
        class GLTFBinaryExtension {
            constructor(data) {
                this.name = EXTENSIONS.KHR_BINARY_GLTF;
                this.content = null;
                this.body = null;
                const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);
                this.header = {
                    magic: LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),
                    version: headerView.getUint32(4, true),
                    length: headerView.getUint32(8, true)
                };
                if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {
                    throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.")
                } else if (this.header.version < 2) {
                    throw new Error("THREE.GLTFLoader: Legacy binary file detected.")
                }
                const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;
                const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);
                let chunkIndex = 0;
                while (chunkIndex < chunkContentsLength) {
                    const chunkLength = chunkView.getUint32(chunkIndex, true);
                    chunkIndex += 4;
                    const chunkType = chunkView.getUint32(chunkIndex, true);
                    chunkIndex += 4;
                    if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {
                        const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);
                        this.content = LoaderUtils.decodeText(contentArray)
                    } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {
                        const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
                        this.body = data.slice(byteOffset, byteOffset + chunkLength)
                    }
                    chunkIndex += chunkLength
                }
                if (this.content === null) {
                    throw new Error("THREE.GLTFLoader: JSON content not found.")
                }
            }
        }
        class GLTFDracoMeshCompressionExtension {
            constructor(json, dracoLoader) {
                if (!dracoLoader) {
                    throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.")
                }
                this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;
                this.json = json;
                this.dracoLoader = dracoLoader;
                this.dracoLoader.preload()
            }
            decodePrimitive(primitive, parser) {
                const json = this.json;
                const dracoLoader = this.dracoLoader;
                const bufferViewIndex = primitive.extensions[this.name].bufferView;
                const gltfAttributeMap = primitive.extensions[this.name].attributes;
                const threeAttributeMap = {};
                const attributeNormalizedMap = {};
                const attributeTypeMap = {};
                for (const attributeName in gltfAttributeMap) {
                    const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
                    threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]
                }
                for (const attributeName in primitive.attributes) {
                    const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
                    if (gltfAttributeMap[attributeName] !== undefined) {
                        const accessorDef = json.accessors[primitive.attributes[attributeName]];
                        const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
                        attributeTypeMap[threeAttributeName] = componentType;
                        attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true
                    }
                }
                return parser.getDependency("bufferView", bufferViewIndex).then(function (bufferView) {
                    return new Promise(function (resolve) {
                        dracoLoader.decodeDracoFile(bufferView, function (geometry) {
                            for (const attributeName in geometry.attributes) {
                                const attribute = geometry.attributes[attributeName];
                                const normalized = attributeNormalizedMap[attributeName];
                                if (normalized !== undefined)
                                    attribute.normalized = normalized
                            }
                            resolve(geometry)
                        }, threeAttributeMap, attributeTypeMap)
                    })
                })
            }
        }
        class GLTFTextureTransformExtension {
            constructor() {
                this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM
            }
            extendTexture(texture, transform) {
                if (transform.texCoord !== undefined) {
                    console.warn("THREE.GLTFLoader: Custom UV sets in \"" + this.name + "\" extension not yet supported.")
                }
                if (transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {
                    return texture
                }
                texture = texture.clone();
                if (transform.offset !== undefined) {
                    texture.offset.fromArray(transform.offset)
                }
                if (transform.rotation !== undefined) {
                    texture.rotation = transform.rotation
                }
                if (transform.scale !== undefined) {
                    texture.repeat.fromArray(transform.scale)
                }
                texture.needsUpdate = true;
                return texture
            }
        }
        class GLTFMeshStandardSGMaterial extends MeshStandardMaterial {
            constructor(params) {
                super();
                this.isGLTFSpecularGlossinessMaterial = true;
                const specularMapParsFragmentChunk = ["#ifdef USE_SPECULARMAP", "\tuniform sampler2D specularMap;", "#endif"].join("\n");
                const glossinessMapParsFragmentChunk = ["#ifdef USE_GLOSSINESSMAP", "\tuniform sampler2D glossinessMap;", "#endif"].join("\n");
                const specularMapFragmentChunk = ["vec3 specularFactor = specular;", "#ifdef USE_SPECULARMAP", "\tvec4 texelSpecular = texture2D( specularMap, vUv );", "\ttexelSpecular = sRGBToLinear( texelSpecular );", "\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tspecularFactor *= texelSpecular.rgb;", "#endif"].join("\n");
                const glossinessMapFragmentChunk = ["float glossinessFactor = glossiness;", "#ifdef USE_GLOSSINESSMAP", "\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );", "\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tglossinessFactor *= texelGlossiness.a;", "#endif"].join("\n");
                const lightPhysicalFragmentChunk = ["PhysicalMaterial material;", "material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );", "vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );", "float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );", "material.roughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.", "material.roughness += geometryRoughness;", "material.roughness = min( material.roughness, 1.0 );", "material.specularColor = specularFactor;"].join("\n");
                const uniforms = {
                    specular: {
                        value: new Color().setHex(16777215)
                    },
                    glossiness: {
                        value: 1
                    },
                    specularMap: {
                        value: null
                    },
                    glossinessMap: {
                        value: null
                    }
                };
                this._extraUniforms = uniforms;
                this.onBeforeCompile = function (shader) {
                    for (const uniformName in uniforms) {
                        shader.uniforms[uniformName] = uniforms[uniformName]
                    }
                    shader.fragmentShader = shader.fragmentShader.replace("uniform float roughness;", "uniform vec3 specular;").replace("uniform float metalness;", "uniform float glossiness;").replace("#include <roughnessmap_pars_fragment>", specularMapParsFragmentChunk).replace("#include <metalnessmap_pars_fragment>", glossinessMapParsFragmentChunk).replace("#include <roughnessmap_fragment>", specularMapFragmentChunk).replace("#include <metalnessmap_fragment>", glossinessMapFragmentChunk).replace("#include <lights_physical_fragment>", lightPhysicalFragmentChunk)
                };
                Object.defineProperties(this, {
                    specular: {
                        get: function () {
                            return uniforms.specular.value
                        },
                        set: function (v) {
                            uniforms.specular.value = v
                        }
                    },
                    specularMap: {
                        get: function () {
                            return uniforms.specularMap.value
                        },
                        set: function (v) {
                            uniforms.specularMap.value = v;
                            if (v) {
                                this.defines.USE_SPECULARMAP = ""
                            } else {
                                delete this.defines.USE_SPECULARMAP
                            }
                        }
                    },
                    glossiness: {
                        get: function () {
                            return uniforms.glossiness.value
                        },
                        set: function (v) {
                            uniforms.glossiness.value = v
                        }
                    },
                    glossinessMap: {
                        get: function () {
                            return uniforms.glossinessMap.value
                        },
                        set: function (v) {
                            uniforms.glossinessMap.value = v;
                            if (v) {
                                this.defines.USE_GLOSSINESSMAP = "";
                                this.defines.USE_UV = ""
                            } else {
                                delete this.defines.USE_GLOSSINESSMAP;
                                delete this.defines.USE_UV
                            }
                        }
                    }
                });
                delete this.metalness;
                delete this.roughness;
                delete this.metalnessMap;
                delete this.roughnessMap;
                this.setValues(params)
            }
            copy(source) {
                super.copy(source);
                this.specularMap = source.specularMap;
                this.specular.copy(source.specular);
                this.glossinessMap = source.glossinessMap;
                this.glossiness = source.glossiness;
                delete this.metalness;
                delete this.roughness;
                delete this.metalnessMap;
                delete this.roughnessMap;
                return this
            }
        }
        class GLTFMaterialsPbrSpecularGlossinessExtension {
            constructor() {
                this.name = EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;
                this.specularGlossinessParams = ["color", "map", "lightMap", "lightMapIntensity", "aoMap", "aoMapIntensity", "emissive", "emissiveIntensity", "emissiveMap", "bumpMap", "bumpScale", "normalMap", "normalMapType", "displacementMap", "displacementScale", "displacementBias", "specularMap", "specular", "glossinessMap", "glossiness", "alphaMap", "envMap", "envMapIntensity", "refractionRatio"]
            }
            getMaterialType() {
                return GLTFMeshStandardSGMaterial
            }
            extendParams(materialParams, materialDef, parser) {
                const pbrSpecularGlossiness = materialDef.extensions[this.name];
                materialParams.color = new Color(1, 1, 1);
                materialParams.opacity = 1;
                const pending = [];
                if (Array.isArray(pbrSpecularGlossiness.diffuseFactor)) {
                    const array = pbrSpecularGlossiness.diffuseFactor;
                    materialParams.color.fromArray(array);
                    materialParams.opacity = array[3]
                }
                if (pbrSpecularGlossiness.diffuseTexture !== undefined) {
                    pending.push(parser.assignTexture(materialParams, "map", pbrSpecularGlossiness.diffuseTexture))
                }
                materialParams.emissive = new Color(0, 0, 0);
                materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1;
                materialParams.specular = new Color(1, 1, 1);
                if (Array.isArray(pbrSpecularGlossiness.specularFactor)) {
                    materialParams.specular.fromArray(pbrSpecularGlossiness.specularFactor)
                }
                if (pbrSpecularGlossiness.specularGlossinessTexture !== undefined) {
                    const specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;
                    pending.push(parser.assignTexture(materialParams, "glossinessMap", specGlossMapDef));
                    pending.push(parser.assignTexture(materialParams, "specularMap", specGlossMapDef))
                }
                return Promise.all(pending)
            }
            createMaterial(materialParams) {
                const material = new GLTFMeshStandardSGMaterial(materialParams);
                material.fog = true;
                material.color = materialParams.color;
                material.map = materialParams.map === undefined ? null : materialParams.map;
                material.lightMap = null;
                material.lightMapIntensity = 1;
                material.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;
                material.aoMapIntensity = 1;
                material.emissive = materialParams.emissive;
                material.emissiveIntensity = 1;
                material.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;
                material.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;
                material.bumpScale = 1;
                material.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;
                material.normalMapType = TangentSpaceNormalMap;
                if (materialParams.normalScale)
                    material.normalScale = materialParams.normalScale;
                material.displacementMap = null;
                material.displacementScale = 1;
                material.displacementBias = 0;
                material.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;
                material.specular = materialParams.specular;
                material.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;
                material.glossiness = materialParams.glossiness;
                material.alphaMap = null;
                material.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;
                material.envMapIntensity = 1;
                material.refractionRatio = 0.98;
                return material
            }
        }
        class GLTFMeshQuantizationExtension {
            constructor() {
                this.name = EXTENSIONS.KHR_MESH_QUANTIZATION
            }
        }
        class GLTFCubicSplineInterpolant extends Interpolant {
            constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
                super(parameterPositions, sampleValues, sampleSize, resultBuffer)
            }
            copySampleValue_(index) {
                const result = this.resultBuffer,
                values = this.sampleValues,
                valueSize = this.valueSize,
                offset = index * valueSize * 3 + valueSize;
                for (let i = 0; i !== valueSize; i++) {
                    result[i] = values[offset + i]
                }
                return result
            }
        }
        GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
        GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
        GLTFCubicSplineInterpolant.prototype.interpolate_ = function (i1, t0, t, t1) {
            const result = this.resultBuffer;
            const values = this.sampleValues;
            const stride = this.valueSize;
            const stride2 = stride * 2;
            const stride3 = stride * 3;
            const td = t1 - t0;
            const p = (t - t0) / td;
            const pp = p * p;
            const ppp = pp * p;
            const offset1 = i1 * stride3;
            const offset0 = offset1 - stride3;
            const s2 = -2 * ppp + 3 * pp;
            const s3 = ppp - pp;
            const s0 = 1 - s2;
            const s1 = s3 - pp + p;
            for (let i = 0; i !== stride; i++) {
                const p0 = values[offset0 + i + stride];
                const m0 = values[offset0 + i + stride2] * td;
                const p1 = values[offset1 + i + stride];
                const m1 = values[offset1 + i] * td;
                result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1
            }
            return result
        };
        const _q = new Quaternion;
        class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
            interpolate_(i1, t0, t, t1) {
                const result = super.interpolate_(i1, t0, t, t1);
                _q.fromArray(result).normalize().toArray(result);
                return result
            }
        }
        const WEBGL_CONSTANTS = {
            FLOAT: 5126,
            FLOAT_MAT3: 35675,
            FLOAT_MAT4: 35676,
            FLOAT_VEC2: 35664,
            FLOAT_VEC3: 35665,
            FLOAT_VEC4: 35666,
            LINEAR: 9729,
            REPEAT: 10497,
            SAMPLER_2D: 35678,
            POINTS: 0,
            LINES: 1,
            LINE_LOOP: 2,
            LINE_STRIP: 3,
            TRIANGLES: 4,
            TRIANGLE_STRIP: 5,
            TRIANGLE_FAN: 6,
            UNSIGNED_BYTE: 5121,
            UNSIGNED_SHORT: 5123
        };
        const WEBGL_COMPONENT_TYPES = {
            5120: Int8Array,
            5121: Uint8Array,
            5122: Int16Array,
            5123: Uint16Array,
            5125: Uint32Array,
            5126: Float32Array
        };
        const WEBGL_FILTERS = {
            9728: NearestFilter,
            9729: LinearFilter,
            9984: NearestMipmapNearestFilter,
            9985: LinearMipmapNearestFilter,
            9986: NearestMipmapLinearFilter,
            9987: LinearMipmapLinearFilter
        };
        const WEBGL_WRAPPINGS = {
            33071: ClampToEdgeWrapping,
            33648: MirroredRepeatWrapping,
            10497: RepeatWrapping
        };
        const WEBGL_TYPE_SIZES = {
            "SCALAR": 1,
            "VEC2": 2,
            "VEC3": 3,
            "VEC4": 4,
            "MAT2": 4,
            "MAT3": 9,
            "MAT4": 16
        };
        const ATTRIBUTES = {
            POSITION: "position",
            NORMAL: "normal",
            TANGENT: "tangent",
            TEXCOORD_0: "uv",
            TEXCOORD_1: "uv2",
            COLOR_0: "color",
            WEIGHTS_0: "skinWeight",
            JOINTS_0: "skinIndex"
        };
        const PATH_PROPERTIES = {
            scale: "scale",
            translation: "position",
            rotation: "quaternion",
            weights: "morphTargetInfluences"
        };
        const INTERPOLATION = {
            CUBICSPLINE: undefined,
            LINEAR: InterpolateLinear,
            STEP: InterpolateDiscrete
        };
        const ALPHA_MODES = {
            OPAQUE: "OPAQUE",
            MASK: "MASK",
            BLEND: "BLEND"
        };
        function createDefaultMaterial(cache) {
            if (cache["DefaultMaterial"] === undefined) {
                cache["DefaultMaterial"] = new MeshStandardMaterial({
                    color: 16777215,
                    emissive: 0,
                    metalness: 1,
                    roughness: 1,
                    transparent: false,
                    depthTest: true,
                    side: FrontSide
                })
            }
            return cache["DefaultMaterial"]
        }
        function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {
            for (const name in objectDef.extensions) {
                if (knownExtensions[name] === undefined) {
                    object.userData.gltfExtensions = object.userData.gltfExtensions || {};
                    object.userData.gltfExtensions[name] = objectDef.extensions[name]
                }
            }
        }
        function assignExtrasToUserData(object, gltfDef) {
            if (gltfDef.extras !== undefined) {
                if (typeof gltfDef.extras === "object") {
                    Object.assign(object.userData, gltfDef.extras)
                } else {
                    console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras)
                }
            }
        }
        function addMorphTargets(geometry, targets, parser) {
            let hasMorphPosition = false;
            let hasMorphNormal = false;
            for (let i = 0, il = targets.length; i < il; i++) {
                const target = targets[i];
                if (target.POSITION !== undefined)
                    hasMorphPosition = true;
                if (target.NORMAL !== undefined)
                    hasMorphNormal = true;
                if (hasMorphPosition && hasMorphNormal)
                    break
            }
            if (!hasMorphPosition && !hasMorphNormal)
                return Promise.resolve(geometry);
            const pendingPositionAccessors = [];
            const pendingNormalAccessors = [];
            for (let i = 0, il = targets.length; i < il; i++) {
                const target = targets[i];
                if (hasMorphPosition) {
                    const pendingAccessor = target.POSITION !== undefined ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position;
                    pendingPositionAccessors.push(pendingAccessor)
                }
                if (hasMorphNormal) {
                    const pendingAccessor = target.NORMAL !== undefined ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal;
                    pendingNormalAccessors.push(pendingAccessor)
                }
            }
            return Promise.all([Promise.all(pendingPositionAccessors), Promise.all(pendingNormalAccessors)]).then(function (accessors) {
                const morphPositions = accessors[0];
                const morphNormals = accessors[1];
                if (hasMorphPosition)
                    geometry.morphAttributes.position = morphPositions;
                if (hasMorphNormal)
                    geometry.morphAttributes.normal = morphNormals;
                geometry.morphTargetsRelative = true;
                return geometry
            })
        }
        function updateMorphTargets(mesh, meshDef) {
            mesh.updateMorphTargets();
            if (meshDef.weights !== undefined) {
                for (let i = 0, il = meshDef.weights.length; i < il; i++) {
                    mesh.morphTargetInfluences[i] = meshDef.weights[i]
                }
            }
            if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {
                const targetNames = meshDef.extras.targetNames;
                if (mesh.morphTargetInfluences.length === targetNames.length) {
                    mesh.morphTargetDictionary = {};
                    for (let i = 0, il = targetNames.length; i < il; i++) {
                        mesh.morphTargetDictionary[targetNames[i]] = i
                    }
                } else {
                    console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")
                }
            }
        }
        function createPrimitiveKey(primitiveDef) {
            const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
            let geometryKey;
            if (dracoExtension) {
                geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes)
            } else {
                geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode
            }
            return geometryKey
        }
        function createAttributesKey(attributes) {
            let attributesKey = "";
            const keys = Object.keys(attributes).sort();
            for (let i = 0, il = keys.length; i < il; i++) {
                attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"
            }
            return attributesKey
        }
        function getNormalizedComponentScale(constructor) {
            switch (constructor) {
            case Int8Array:
                return 1 / 127;
            case Uint8Array:
                return 1 / 255;
            case Int16Array:
                return 1 / 32767;
            case Uint16Array:
                return 1 / 65535;
            default:
                throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
            }
        }
        class GLTFParser {
            constructor(json = {}, options = {}) {
                this.json = json;
                this.extensions = {};
                this.plugins = {};
                this.options = options;
                this.cache = new GLTFRegistry;
                this.associations = new Map;
                this.primitiveCache = {};
                this.meshCache = {
                    refs: {},
                    uses: {}
                };
                this.cameraCache = {
                    refs: {},
                    uses: {}
                };
                this.lightCache = {
                    refs: {},
                    uses: {}
                };
                this.textureCache = {};
                this.nodeNamesUsed = {};
                if (typeof createImageBitmap !== "undefined" && /Firefox/.test(navigator.userAgent) === false) {
                    this.textureLoader = new ImageBitmapLoader(this.options.manager)
                } else {
                    this.textureLoader = new TextureLoader(this.options.manager)
                }
                this.textureLoader.setCrossOrigin(this.options.crossOrigin);
                this.textureLoader.setRequestHeader(this.options.requestHeader);
                this.fileLoader = new FileLoader(this.options.manager);
                this.fileLoader.setResponseType("arraybuffer");
                if (this.options.crossOrigin === "use-credentials") {
                    this.fileLoader.setWithCredentials(true)
                }
            }
            setExtensions(extensions) {
                this.extensions = extensions
            }
            setPlugins(plugins) {
                this.plugins = plugins
            }
            parse(onLoad, onError) {
                const parser = this;
                const json = this.json;
                const extensions = this.extensions;
                this.cache.removeAll();
                this._invokeAll(function (ext) {
                    return ext._markDefs && ext._markDefs()
                });
                Promise.all(this._invokeAll(function (ext) {
                        return ext.beforeRoot && ext.beforeRoot()
                    })).then(function () {
                    return Promise.all([parser.getDependencies("scene"), parser.getDependencies("animation"), parser.getDependencies("camera")])
                }).then(function (dependencies) {
                    const result = {
                        scene: dependencies[0][json.scene || 0],
                        scenes: dependencies[0],
                        animations: dependencies[1],
                        cameras: dependencies[2],
                        asset: json.asset,
                        parser: parser,
                        userData: {}
                    };
                    addUnknownExtensionsToUserData(extensions, result, json);
                    assignExtrasToUserData(result, json);
                    Promise.all(parser._invokeAll(function (ext) {
                            return ext.afterRoot && ext.afterRoot(result)
                        })).then(function () {
                        onLoad(result)
                    })
                }).catch(onError)
            }
            _markDefs() {
                const nodeDefs = this.json.nodes || [];
                const skinDefs = this.json.skins || [];
                const meshDefs = this.json.meshes || [];
                for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {
                    const joints = skinDefs[skinIndex].joints;
                    for (let i = 0, il = joints.length; i < il; i++) {
                        nodeDefs[joints[i]].isBone = true
                    }
                }
                for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
                    const nodeDef = nodeDefs[nodeIndex];
                    if (nodeDef.mesh !== undefined) {
                        this._addNodeRef(this.meshCache, nodeDef.mesh);
                        if (nodeDef.skin !== undefined) {
                            meshDefs[nodeDef.mesh].isSkinnedMesh = true
                        }
                    }
                    if (nodeDef.camera !== undefined) {
                        this._addNodeRef(this.cameraCache, nodeDef.camera)
                    }
                }
            }
            _addNodeRef(cache, index) {
                if (index === undefined)
                    return;
                if (cache.refs[index] === undefined) {
                    cache.refs[index] = cache.uses[index] = 0
                }
                cache.refs[index]++
            }
            _getNodeRef(cache, index, object) {
                if (cache.refs[index] <= 1)
                    return object;
                const ref = object.clone();
                const updateMappings = (original, clone) => {
                    const mappings = this.associations.get(original);
                    if (mappings != null) {
                        this.associations.set(clone, mappings)
                    }
                    for (const[i, child]of original.children.entries()) {
                        updateMappings(child, clone.children[i])
                    }
                };
                updateMappings(object, ref);
                ref.name += "_instance_" + cache.uses[index]++;
                return ref
            }
            _invokeOne(func) {
                const extensions = Object.values(this.plugins);
                extensions.push(this);
                for (let i = 0; i < extensions.length; i++) {
                    const result = func(extensions[i]);
                    if (result)
                        return result
                }
                return null
            }
            _invokeAll(func) {
                const extensions = Object.values(this.plugins);
                extensions.unshift(this);
                const pending = [];
                for (let i = 0; i < extensions.length; i++) {
                    const result = func(extensions[i]);
                    if (result)
                        pending.push(result)
                }
                return pending
            }
            getDependency(type, index) {
                const cacheKey = type + ":" + index;
                let dependency = this.cache.get(cacheKey);
                if (!dependency) {
                    switch (type) {
                    case "scene":
                        dependency = this.loadScene(index);
                        break;
                    case "node":
                        dependency = this.loadNode(index);
                        break;
                    case "mesh":
                        dependency = this._invokeOne(function (ext) {
                            return ext.loadMesh && ext.loadMesh(index)
                        });
                        break;
                    case "accessor":
                        dependency = this.loadAccessor(index);
                        break;
                    case "bufferView":
                        dependency = this._invokeOne(function (ext) {
                            return ext.loadBufferView && ext.loadBufferView(index)
                        });
                        break;
                    case "buffer":
                        dependency = this.loadBuffer(index);
                        break;
                    case "material":
                        dependency = this._invokeOne(function (ext) {
                            return ext.loadMaterial && ext.loadMaterial(index)
                        });
                        break;
                    case "texture":
                        dependency = this._invokeOne(function (ext) {
                            return ext.loadTexture && ext.loadTexture(index)
                        });
                        break;
                    case "skin":
                        dependency = this.loadSkin(index);
                        break;
                    case "animation":
                        dependency = this.loadAnimation(index);
                        break;
                    case "camera":
                        dependency = this.loadCamera(index);
                        break;
                    default:
                        throw new Error("Unknown type: " + type);
                    }
                    this.cache.add(cacheKey, dependency)
                }
                return dependency
            }
            getDependencies(type) {
                let dependencies = this.cache.get(type);
                if (!dependencies) {
                    const parser = this;
                    const defs = this.json[type + (type === "mesh" ? "es" : "s")] || [];
                    dependencies = Promise.all(defs.map(function (def, index) {
                                return parser.getDependency(type, index)
                            }));
                    this.cache.add(type, dependencies)
                }
                return dependencies
            }
            loadBuffer(bufferIndex) {
                const bufferDef = this.json.buffers[bufferIndex];
                const loader = this.fileLoader;
                if (bufferDef.type && bufferDef.type !== "arraybuffer") {
                    throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported.")
                }
                if (bufferDef.uri === undefined && bufferIndex === 0) {
                    return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body)
                }
                const options = this.options;
                return new Promise(function (resolve, reject) {
                    loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, undefined, function () {
                        reject(new Error("THREE.GLTFLoader: Failed to load buffer \"" + bufferDef.uri + "\"."))
                    })
                })
            }
            loadBufferView(bufferViewIndex) {
                const bufferViewDef = this.json.bufferViews[bufferViewIndex];
                return this.getDependency("buffer", bufferViewDef.buffer).then(function (buffer) {
                    const byteLength = bufferViewDef.byteLength || 0;
                    const byteOffset = bufferViewDef.byteOffset || 0;
                    return buffer.slice(byteOffset, byteOffset + byteLength)
                })
            }
            loadAccessor(accessorIndex) {
                const parser = this;
                const json = this.json;
                const accessorDef = this.json.accessors[accessorIndex];
                if (accessorDef.bufferView === undefined && accessorDef.sparse === undefined) {
                    return Promise.resolve(null)
                }
                const pendingBufferViews = [];
                if (accessorDef.bufferView !== undefined) {
                    pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView))
                } else {
                    pendingBufferViews.push(null)
                }
                if (accessorDef.sparse !== undefined) {
                    pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView));
                    pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView))
                }
                return Promise.all(pendingBufferViews).then(function (bufferViews) {
                    const bufferView = bufferViews[0];
                    const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
                    const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
                    const elementBytes = TypedArray.BYTES_PER_ELEMENT;
                    const itemBytes = elementBytes * itemSize;
                    const byteOffset = accessorDef.byteOffset || 0;
                    const byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[accessorDef.bufferView].byteStride : undefined;
                    const normalized = accessorDef.normalized === true;
                    let array,
                    bufferAttribute;
                    if (byteStride && byteStride !== itemBytes) {
                        const ibSlice = Math.floor(byteOffset / byteStride);
                        const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count;
                        let ib = parser.cache.get(ibCacheKey);
                        if (!ib) {
                            array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);
                            ib = new InterleavedBuffer(array, byteStride / elementBytes);
                            parser.cache.add(ibCacheKey, ib)
                        }
                        bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized)
                    } else {
                        if (bufferView === null) {
                            array = new TypedArray(accessorDef.count * itemSize)
                        } else {
                            array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize)
                        }
                        bufferAttribute = new BufferAttribute(array, itemSize, normalized)
                    }
                    if (accessorDef.sparse !== undefined) {
                        const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;
                        const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];
                        const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;
                        const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;
                        const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices);
                        const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);
                        if (bufferView !== null) {
                            bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized)
                        }
                        for (let i = 0, il = sparseIndices.length; i < il; i++) {
                            const index = sparseIndices[i];
                            bufferAttribute.setX(index, sparseValues[i * itemSize]);
                            if (itemSize >= 2)
                                bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);
                            if (itemSize >= 3)
                                bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);
                            if (itemSize >= 4)
                                bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);
                            if (itemSize >= 5)
                                throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")
                        }
                    }
                    return bufferAttribute
                })
            }
            loadTexture(textureIndex) {
                const json = this.json;
                const options = this.options;
                const textureDef = json.textures[textureIndex];
                const source = json.images[textureDef.source];
                let loader = this.textureLoader;
                if (source.uri) {
                    const handler = options.manager.getHandler(source.uri);
                    if (handler !== null)
                        loader = handler
                }
                return this.loadTextureImage(textureIndex, source, loader)
            }
            loadTextureImage(textureIndex, source, loader) {
                const parser = this;
                const json = this.json;
                const options = this.options;
                const textureDef = json.textures[textureIndex];
                const cacheKey = (source.uri || source.bufferView) + ":" + textureDef.sampler;
                if (this.textureCache[cacheKey]) {
                    return this.textureCache[cacheKey]
                }
                const URL = self.URL || self.webkitURL;
                let sourceURI = source.uri || "";
                let isObjectURL = false;
                if (source.bufferView !== undefined) {
                    sourceURI = parser.getDependency("bufferView", source.bufferView).then(function (bufferView) {
                        isObjectURL = true;
                        const blob = new Blob([bufferView], {
                            type: source.mimeType
                        });
                        sourceURI = URL.createObjectURL(blob);
                        return sourceURI
                    })
                } else if (source.uri === undefined) {
                    throw new Error("THREE.GLTFLoader: Image " + textureIndex + " is missing URI and bufferView")
                }
                const promise = Promise.resolve(sourceURI).then(function (sourceURI) {
                    return new Promise(function (resolve, reject) {
                        let onLoad = resolve;
                        if (loader.isImageBitmapLoader === true) {
                            onLoad = function (imageBitmap) {
                                const texture = new Texture(imageBitmap);
                                texture.needsUpdate = true;
                                resolve(texture)
                            }
                        }
                        loader.load(LoaderUtils.resolveURL(sourceURI, options.path), onLoad, undefined, reject)
                    })
                }).then(function (texture) {
                    if (isObjectURL === true) {
                        URL.revokeObjectURL(sourceURI)
                    }
                    texture.flipY = false;
                    if (textureDef.name)
                        texture.name = textureDef.name;
                    const samplers = json.samplers || {};
                    const sampler = samplers[textureDef.sampler] || {};
                    texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;
                    texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;
                    texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;
                    texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;
                    parser.associations.set(texture, {
                        textures: textureIndex
                    });
                    return texture
                }).catch(function (e) {
                    console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI, e);
                    return null
                });
                this.textureCache[cacheKey] = promise;
                return promise
            }
            assignTexture(materialParams, mapName, mapDef) {
                const parser = this;
                return this.getDependency("texture", mapDef.index).then(function (texture) {
                    if (mapDef.texCoord !== undefined && mapDef.texCoord != 0 && !(mapName === "aoMap" && mapDef.texCoord == 1)) {
                        console.warn("THREE.GLTFLoader: Custom UV set " + mapDef.texCoord + " for texture " + mapName + " not yet supported.")
                    }
                    if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {
                        const transform = mapDef.extensions !== undefined ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : undefined;
                        if (transform) {
                            const gltfReference = parser.associations.get(texture);
                            texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);
                            parser.associations.set(texture, gltfReference)
                        }
                    }
                    materialParams[mapName] = texture;
                    return texture
                })
            }
            assignFinalMaterial(mesh) {
                const geometry = mesh.geometry;
                let material = mesh.material;
                const useDerivativeTangents = geometry.attributes.tangent === undefined;
                const useVertexColors = geometry.attributes.color !== undefined;
                const useFlatShading = geometry.attributes.normal === undefined;
                if (mesh.isPoints) {
                    const cacheKey = "PointsMaterial:" + material.uuid;
                    let pointsMaterial = this.cache.get(cacheKey);
                    if (!pointsMaterial) {
                        pointsMaterial = new PointsMaterial;
                        Material.prototype.copy.call(pointsMaterial, material);
                        pointsMaterial.color.copy(material.color);
                        pointsMaterial.map = material.map;
                        pointsMaterial.sizeAttenuation = false;
                        this.cache.add(cacheKey, pointsMaterial)
                    }
                    material = pointsMaterial
                } else if (mesh.isLine) {
                    const cacheKey = "LineBasicMaterial:" + material.uuid;
                    let lineMaterial = this.cache.get(cacheKey);
                    if (!lineMaterial) {
                        lineMaterial = new LineBasicMaterial;
                        Material.prototype.copy.call(lineMaterial, material);
                        lineMaterial.color.copy(material.color);
                        this.cache.add(cacheKey, lineMaterial)
                    }
                    material = lineMaterial
                }
                if (useDerivativeTangents || useVertexColors || useFlatShading) {
                    let cacheKey = "ClonedMaterial:" + material.uuid + ":";
                    if (material.isGLTFSpecularGlossinessMaterial)
                        cacheKey += "specular-glossiness:";
                    if (useDerivativeTangents)
                        cacheKey += "derivative-tangents:";
                    if (useVertexColors)
                        cacheKey += "vertex-colors:";
                    if (useFlatShading)
                        cacheKey += "flat-shading:";
                    let cachedMaterial = this.cache.get(cacheKey);
                    if (!cachedMaterial) {
                        cachedMaterial = material.clone();
                        if (useVertexColors)
                            cachedMaterial.vertexColors = true;
                        if (useFlatShading)
                            cachedMaterial.flatShading = true;
                        if (useDerivativeTangents) {
                            if (cachedMaterial.normalScale)
                                cachedMaterial.normalScale.y *= -1;
                            if (cachedMaterial.clearcoatNormalScale)
                                cachedMaterial.clearcoatNormalScale.y *= -1
                        }
                        this.cache.add(cacheKey, cachedMaterial);
                        this.associations.set(cachedMaterial, this.associations.get(material))
                    }
                    material = cachedMaterial
                }
                if (material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined) {
                    geometry.setAttribute("uv2", geometry.attributes.uv)
                }
                mesh.material = material
            }
            getMaterialType() {
                return MeshStandardMaterial
            }
            loadMaterial(materialIndex) {
                const parser = this;
                const json = this.json;
                const extensions = this.extensions;
                const materialDef = json.materials[materialIndex];
                let materialType;
                const materialParams = {};
                const materialExtensions = materialDef.extensions || {};
                const pending = [];
                if (materialExtensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) {
                    const sgExtension = extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];
                    materialType = sgExtension.getMaterialType();
                    pending.push(sgExtension.extendParams(materialParams, materialDef, parser))
                } else if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {
                    const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];
                    materialType = kmuExtension.getMaterialType();
                    pending.push(kmuExtension.extendParams(materialParams, materialDef, parser))
                } else {
                    const metallicRoughness = materialDef.pbrMetallicRoughness || {};
                    materialParams.color = new Color(1, 1, 1);
                    materialParams.opacity = 1;
                    if (Array.isArray(metallicRoughness.baseColorFactor)) {
                        const array = metallicRoughness.baseColorFactor;
                        materialParams.color.fromArray(array);
                        materialParams.opacity = array[3]
                    }
                    if (metallicRoughness.baseColorTexture !== undefined) {
                        pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture))
                    }
                    materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1;
                    materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1;
                    if (metallicRoughness.metallicRoughnessTexture !== undefined) {
                        pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture));
                        pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture))
                    }
                    materialType = this._invokeOne(function (ext) {
                        return ext.getMaterialType && ext.getMaterialType(materialIndex)
                    });
                    pending.push(Promise.all(this._invokeAll(function (ext) {
                                return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams)
                            })))
                }
                if (materialDef.doubleSided === true) {
                    materialParams.side = DoubleSide
                }
                const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;
                if (alphaMode === ALPHA_MODES.BLEND) {
                    materialParams.transparent = true;
                    materialParams.depthWrite = false
                } else {
                    materialParams.format = RGBFormat;
                    materialParams.transparent = false;
                    if (alphaMode === ALPHA_MODES.MASK) {
                        materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5
                    }
                }
                if (materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial) {
                    pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture));
                    materialParams.normalScale = new Vector2(1, 1);
                    if (materialDef.normalTexture.scale !== undefined) {
                        const scale = materialDef.normalTexture.scale;
                        materialParams.normalScale.set(scale, scale)
                    }
                }
                if (materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial) {
                    pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture));
                    if (materialDef.occlusionTexture.strength !== undefined) {
                        materialParams.aoMapIntensity = materialDef.occlusionTexture.strength
                    }
                }
                if (materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial) {
                    materialParams.emissive = new Color().fromArray(materialDef.emissiveFactor)
                }
                if (materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial) {
                    pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture))
                }
                return Promise.all(pending).then(function () {
                    let material;
                    if (materialType === GLTFMeshStandardSGMaterial) {
                        material = extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(materialParams)
                    } else {
                        material = new materialType(materialParams)
                    }
                    if (materialDef.name)
                        material.name = materialDef.name;
                    if (material.map)
                        material.map.encoding = sRGBEncoding;
                    if (material.emissiveMap)
                        material.emissiveMap.encoding = sRGBEncoding;
                    assignExtrasToUserData(material, materialDef);
                    parser.associations.set(material, {
                        materials: materialIndex
                    });
                    if (materialDef.extensions)
                        addUnknownExtensionsToUserData(extensions, material, materialDef);
                    return material
                })
            }
            createUniqueName(originalName) {
                const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || "");
                let name = sanitizedName;
                for (let i = 1; this.nodeNamesUsed[name]; ++i) {
                    name = sanitizedName + "_" + i
                }
                this.nodeNamesUsed[name] = true;
                return name
            }
            loadGeometries(primitives) {
                const parser = this;
                const extensions = this.extensions;
                const cache = this.primitiveCache;
                function createDracoPrimitive(primitive) {
                    return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function (geometry) {
                        return addPrimitiveAttributes(geometry, primitive, parser)
                    })
                }
                const pending = [];
                for (let i = 0, il = primitives.length; i < il; i++) {
                    const primitive = primitives[i];
                    const cacheKey = createPrimitiveKey(primitive);
                    const cached = cache[cacheKey];
                    if (cached) {
                        pending.push(cached.promise)
                    } else {
                        let geometryPromise;
                        if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {
                            geometryPromise = createDracoPrimitive(primitive)
                        } else {
                            geometryPromise = addPrimitiveAttributes(new BufferGeometry, primitive, parser)
                        }
                        cache[cacheKey] = {
                            primitive: primitive,
                            promise: geometryPromise
                        };
                        pending.push(geometryPromise)
                    }
                }
                return Promise.all(pending)
            }
            loadMesh(meshIndex) {
                const parser = this;
                const json = this.json;
                const extensions = this.extensions;
                const meshDef = json.meshes[meshIndex];
                const primitives = meshDef.primitives;
                const pending = [];
                for (let i = 0, il = primitives.length; i < il; i++) {
                    const material = primitives[i].material === undefined ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material);
                    pending.push(material)
                }
                pending.push(parser.loadGeometries(primitives));
                return Promise.all(pending).then(function (results) {
                    const materials = results.slice(0, results.length - 1);
                    const geometries = results[results.length - 1];
                    const meshes = [];
                    for (let i = 0, il = geometries.length; i < il; i++) {
                        const geometry = geometries[i];
                        const primitive = primitives[i];
                        let mesh;
                        const material = materials[i];
                        if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === undefined) {
                            mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);
                            if (mesh.isSkinnedMesh === true && !mesh.geometry.attributes.skinWeight.normalized) {
                                mesh.normalizeSkinWeights()
                            }
                            if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {
                                mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode)
                            } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {
                                mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode)
                            }
                        } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {
                            mesh = new LineSegments(geometry, material)
                        } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {
                            mesh = new Line(geometry, material)
                        } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {
                            mesh = new LineLoop(geometry, material)
                        } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {
                            mesh = new Points(geometry, material)
                        } else {
                            throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode)
                        }
                        if (Object.keys(mesh.geometry.morphAttributes).length > 0) {
                            updateMorphTargets(mesh, meshDef)
                        }
                        mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex);
                        assignExtrasToUserData(mesh, meshDef);
                        if (primitive.extensions)
                            addUnknownExtensionsToUserData(extensions, mesh, primitive);
                        parser.assignFinalMaterial(mesh);
                        meshes.push(mesh)
                    }
                    for (let i = 0, il = meshes.length; i < il; i++) {
                        parser.associations.set(meshes[i], {
                            meshes: meshIndex,
                            primitives: i
                        })
                    }
                    if (meshes.length === 1) {
                        return meshes[0]
                    }
                    const group = new Group;
                    parser.associations.set(group, {
                        meshes: meshIndex
                    });
                    for (let i = 0, il = meshes.length; i < il; i++) {
                        group.add(meshes[i])
                    }
                    return group
                })
            }
            loadCamera(cameraIndex) {
                let camera;
                const cameraDef = this.json.cameras[cameraIndex];
                const params = cameraDef[cameraDef.type];
                if (!params) {
                    console.warn("THREE.GLTFLoader: Missing camera parameters.");
                    return
                }
                if (cameraDef.type === "perspective") {
                    camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6)
                } else if (cameraDef.type === "orthographic") {
                    camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar)
                }
                if (cameraDef.name)
                    camera.name = this.createUniqueName(cameraDef.name);
                assignExtrasToUserData(camera, cameraDef);
                return Promise.resolve(camera)
            }
            loadSkin(skinIndex) {
                const skinDef = this.json.skins[skinIndex];
                const skinEntry = {
                    joints: skinDef.joints
                };
                if (skinDef.inverseBindMatrices === undefined) {
                    return Promise.resolve(skinEntry)
                }
                return this.getDependency("accessor", skinDef.inverseBindMatrices).then(function (accessor) {
                    skinEntry.inverseBindMatrices = accessor;
                    return skinEntry
                })
            }
            loadAnimation(animationIndex) {
                const json = this.json;
                const animationDef = json.animations[animationIndex];
                const pendingNodes = [];
                const pendingInputAccessors = [];
                const pendingOutputAccessors = [];
                const pendingSamplers = [];
                const pendingTargets = [];
                for (let i = 0, il = animationDef.channels.length; i < il; i++) {
                    const channel = animationDef.channels[i];
                    const sampler = animationDef.samplers[channel.sampler];
                    const target = channel.target;
                    const name = target.node !== undefined ? target.node : target.id;
                    const input = animationDef.parameters !== undefined ? animationDef.parameters[sampler.input] : sampler.input;
                    const output = animationDef.parameters !== undefined ? animationDef.parameters[sampler.output] : sampler.output;
                    pendingNodes.push(this.getDependency("node", name));
                    pendingInputAccessors.push(this.getDependency("accessor", input));
                    pendingOutputAccessors.push(this.getDependency("accessor", output));
                    pendingSamplers.push(sampler);
                    pendingTargets.push(target)
                }
                return Promise.all([Promise.all(pendingNodes), Promise.all(pendingInputAccessors), Promise.all(pendingOutputAccessors), Promise.all(pendingSamplers), Promise.all(pendingTargets)]).then(function (dependencies) {
                    const nodes = dependencies[0];
                    const inputAccessors = dependencies[1];
                    const outputAccessors = dependencies[2];
                    const samplers = dependencies[3];
                    const targets = dependencies[4];
                    const tracks = [];
                    for (let i = 0, il = nodes.length; i < il; i++) {
                        const node = nodes[i];
                        const inputAccessor = inputAccessors[i];
                        const outputAccessor = outputAccessors[i];
                        const sampler = samplers[i];
                        const target = targets[i];
                        if (node === undefined)
                            continue;
                        node.updateMatrix();
                        node.matrixAutoUpdate = true;
                        let TypedKeyframeTrack;
                        switch (PATH_PROPERTIES[target.path]) {
                        case PATH_PROPERTIES.weights:
                            TypedKeyframeTrack = NumberKeyframeTrack;
                            break;
                        case PATH_PROPERTIES.rotation:
                            TypedKeyframeTrack = QuaternionKeyframeTrack;
                            break;
                        case PATH_PROPERTIES.position:
                        case PATH_PROPERTIES.scale:
                        default:
                            TypedKeyframeTrack = VectorKeyframeTrack;
                            break;
                        }
                        const targetName = node.name ? node.name : node.uuid;
                        const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[sampler.interpolation] : InterpolateLinear;
                        const targetNames = [];
                        if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {
                            node.traverse(function (object) {
                                if (object.isMesh === true && object.morphTargetInfluences) {
                                    targetNames.push(object.name ? object.name : object.uuid)
                                }
                            })
                        } else {
                            targetNames.push(targetName)
                        }
                        let outputArray = outputAccessor.array;
                        if (outputAccessor.normalized) {
                            const scale = getNormalizedComponentScale(outputArray.constructor);
                            const scaled = new Float32Array(outputArray.length);
                            for (let j = 0, jl = outputArray.length; j < jl; j++) {
                                scaled[j] = outputArray[j] * scale
                            }
                            outputArray = scaled
                        }
                        for (let j = 0, jl = targetNames.length; j < jl; j++) {
                            const track = new TypedKeyframeTrack(targetNames[j] + "." + PATH_PROPERTIES[target.path], inputAccessor.array, outputArray, interpolation);
                            if (sampler.interpolation === "CUBICSPLINE") {
                                track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {
                                    const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
                                    return new interpolantType(this.times, this.values, this.getValueSize() / 3, result)
                                };
                                track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true
                            }
                            tracks.push(track)
                        }
                    }
                    const name = animationDef.name ? animationDef.name : "animation_" + animationIndex;
                    return new AnimationClip(name, undefined, tracks)
                })
            }
            createNodeMesh(nodeIndex) {
                const json = this.json;
                const parser = this;
                const nodeDef = json.nodes[nodeIndex];
                if (nodeDef.mesh === undefined)
                    return null;
                return parser.getDependency("mesh", nodeDef.mesh).then(function (mesh) {
                    const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);
                    if (nodeDef.weights !== undefined) {
                        node.traverse(function (o) {
                            if (!o.isMesh)
                                return;
                            for (let i = 0, il = nodeDef.weights.length; i < il; i++) {
                                o.morphTargetInfluences[i] = nodeDef.weights[i]
                            }
                        })
                    }
                    return node
                })
            }
            loadNode(nodeIndex) {
                const json = this.json;
                const extensions = this.extensions;
                const parser = this;
                const nodeDef = json.nodes[nodeIndex];
                const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : "";
                return function () {
                    const pending = [];
                    const meshPromise = parser._invokeOne(function (ext) {
                        return ext.createNodeMesh && ext.createNodeMesh(nodeIndex)
                    });
                    if (meshPromise) {
                        pending.push(meshPromise)
                    }
                    if (nodeDef.camera !== undefined) {
                        pending.push(parser.getDependency("camera", nodeDef.camera).then(function (camera) {
                                return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera)
                            }))
                    }
                    parser._invokeAll(function (ext) {
                        return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex)
                    }).forEach(function (promise) {
                        pending.push(promise)
                    });
                    return Promise.all(pending)
                }
                ().then(function (objects) {
                    let node;
                    if (nodeDef.isBone === true) {
                        node = new Bone
                    } else if (objects.length > 1) {
                        node = new Group
                    } else if (objects.length === 1) {
                        node = objects[0]
                    } else {
                        node = new Object3D
                    }
                    if (node !== objects[0]) {
                        for (let i = 0, il = objects.length; i < il; i++) {
                            node.add(objects[i])
                        }
                    }
                    if (nodeDef.name) {
                        node.userData.name = nodeDef.name;
                        node.name = nodeName
                    }
                    assignExtrasToUserData(node, nodeDef);
                    if (nodeDef.extensions)
                        addUnknownExtensionsToUserData(extensions, node, nodeDef);
                    if (nodeDef.matrix !== undefined) {
                        const matrix = new Matrix4;
                        matrix.fromArray(nodeDef.matrix);
                        node.applyMatrix4(matrix)
                    } else {
                        if (nodeDef.translation !== undefined) {
                            node.position.fromArray(nodeDef.translation)
                        }
                        if (nodeDef.rotation !== undefined) {
                            node.quaternion.fromArray(nodeDef.rotation)
                        }
                        if (nodeDef.scale !== undefined) {
                            node.scale.fromArray(nodeDef.scale)
                        }
                    }
                    if (!parser.associations.has(node)) {
                        parser.associations.set(node, {})
                    }
                    parser.associations.get(node).nodes = nodeIndex;
                    return node
                })
            }
            loadScene(sceneIndex) {
                const json = this.json;
                const extensions = this.extensions;
                const sceneDef = this.json.scenes[sceneIndex];
                const parser = this;
                const scene = new Group;
                if (sceneDef.name)
                    scene.name = parser.createUniqueName(sceneDef.name);
                assignExtrasToUserData(scene, sceneDef);
                if (sceneDef.extensions)
                    addUnknownExtensionsToUserData(extensions, scene, sceneDef);
                const nodeIds = sceneDef.nodes || [];
                const pending = [];
                for (let i = 0, il = nodeIds.length; i < il; i++) {
                    pending.push(buildNodeHierarchy(nodeIds[i], scene, json, parser))
                }
                return Promise.all(pending).then(function () {
                    const reduceAssociations = node => {
                        const reducedAssociations = new Map;
                        for (const[key, value]of parser.associations) {
                            if (key instanceof Material || key instanceof Texture) {
                                reducedAssociations.set(key, value)
                            }
                        }
                        node.traverse(node => {
                            const mappings = parser.associations.get(node);
                            if (mappings != null) {
                                reducedAssociations.set(node, mappings)
                            }
                        });
                        return reducedAssociations
                    };
                    parser.associations = reduceAssociations(scene);
                    return scene
                })
            }
        }
        function buildNodeHierarchy(nodeId, parentObject, json, parser) {
            const nodeDef = json.nodes[nodeId];
            return parser.getDependency("node", nodeId).then(function (node) {
                if (nodeDef.skin === undefined)
                    return node;
                let skinEntry;
                return parser.getDependency("skin", nodeDef.skin).then(function (skin) {
                    skinEntry = skin;
                    const pendingJoints = [];
                    for (let i = 0, il = skinEntry.joints.length; i < il; i++) {
                        pendingJoints.push(parser.getDependency("node", skinEntry.joints[i]))
                    }
                    return Promise.all(pendingJoints)
                }).then(function (jointNodes) {
                    node.traverse(function (mesh) {
                        if (!mesh.isMesh)
                            return;
                        const bones = [];
                        const boneInverses = [];
                        for (let j = 0, jl = jointNodes.length; j < jl; j++) {
                            const jointNode = jointNodes[j];
                            if (jointNode) {
                                bones.push(jointNode);
                                const mat = new Matrix4;
                                if (skinEntry.inverseBindMatrices !== undefined) {
                                    mat.fromArray(skinEntry.inverseBindMatrices.array, j * 16)
                                }
                                boneInverses.push(mat)
                            } else {
                                console.warn("THREE.GLTFLoader: Joint \"%s\" could not be found.", skinEntry.joints[j])
                            }
                        }
                        mesh.bind(new Skeleton(bones, boneInverses), mesh.matrixWorld)
                    });
                    return node
                })
            }).then(function (node) {
                parentObject.add(node);
                const pending = [];
                if (nodeDef.children) {
                    const children = nodeDef.children;
                    for (let i = 0, il = children.length; i < il; i++) {
                        const child = children[i];
                        pending.push(buildNodeHierarchy(child, node, json, parser))
                    }
                }
                return Promise.all(pending)
            })
        }
        function computeBounds(geometry, primitiveDef, parser) {
            const attributes = primitiveDef.attributes;
            const box = new Box3;
            if (attributes.POSITION !== undefined) {
                const accessor = parser.json.accessors[attributes.POSITION];
                const min = accessor.min;
                const max = accessor.max;
                if (min !== undefined && max !== undefined) {
                    box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2]));
                    if (accessor.normalized) {
                        const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
                        box.min.multiplyScalar(boxScale);
                        box.max.multiplyScalar(boxScale)
                    }
                } else {
                    console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
                    return
                }
            } else {
                return
            }
            const targets = primitiveDef.targets;
            if (targets !== undefined) {
                const maxDisplacement = new Vector3;
                const vector = new Vector3;
                for (let i = 0, il = targets.length; i < il; i++) {
                    const target = targets[i];
                    if (target.POSITION !== undefined) {
                        const accessor = parser.json.accessors[target.POSITION];
                        const min = accessor.min;
                        const max = accessor.max;
                        if (min !== undefined && max !== undefined) {
                            vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));
                            vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));
                            vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));
                            if (accessor.normalized) {
                                const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
                                vector.multiplyScalar(boxScale)
                            }
                            maxDisplacement.max(vector)
                        } else {
                            console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")
                        }
                    }
                }
                box.expandByVector(maxDisplacement)
            }
            geometry.boundingBox = box;
            const sphere = new Sphere;
            box.getCenter(sphere.center);
            sphere.radius = box.min.distanceTo(box.max) / 2;
            geometry.boundingSphere = sphere
        }
        function addPrimitiveAttributes(geometry, primitiveDef, parser) {
            const attributes = primitiveDef.attributes;
            const pending = [];
            function assignAttributeAccessor(accessorIndex, attributeName) {
                return parser.getDependency("accessor", accessorIndex).then(function (accessor) {
                    geometry.setAttribute(attributeName, accessor)
                })
            }
            for (const gltfAttributeName in attributes) {
                const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();
                if (threeAttributeName in geometry.attributes)
                    continue;
                pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName))
            }
            if (primitiveDef.indices !== undefined && !geometry.index) {
                const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function (accessor) {
                    geometry.setIndex(accessor)
                });
                pending.push(accessor)
            }
            assignExtrasToUserData(geometry, primitiveDef);
            computeBounds(geometry, primitiveDef, parser);
            return Promise.all(pending).then(function () {
                return primitiveDef.targets !== undefined ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry
            })
        }
        function toTrianglesDrawMode(geometry, drawMode) {
            let index = geometry.getIndex();
            if (index === null) {
                const indices = [];
                const position = geometry.getAttribute("position");
                if (position !== undefined) {
                    for (let i = 0; i < position.count; i++) {
                        indices.push(i)
                    }
                    geometry.setIndex(indices);
                    index = geometry.getIndex()
                } else {
                    console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.");
                    return geometry
                }
            }
            const numberOfTriangles = index.count - 2;
            const newIndices = [];
            if (drawMode === TriangleFanDrawMode) {
                for (let i = 1; i <= numberOfTriangles; i++) {
                    newIndices.push(index.getX(0));
                    newIndices.push(index.getX(i));
                    newIndices.push(index.getX(i + 1))
                }
            } else {
                for (let i = 0; i < numberOfTriangles; i++) {
                    if (i % 2 === 0) {
                        newIndices.push(index.getX(i));
                        newIndices.push(index.getX(i + 1));
                        newIndices.push(index.getX(i + 2))
                    } else {
                        newIndices.push(index.getX(i + 2));
                        newIndices.push(index.getX(i + 1));
                        newIndices.push(index.getX(i))
                    }
                }
            }
            if (newIndices.length / 3 !== numberOfTriangles) {
                console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.")
            }
            const newGeometry = geometry.clone();
            newGeometry.setIndex(newIndices);
            return newGeometry
        }
        THREE.GLTFLoader = GLTFLoader
    });
    (function (t, e) {
        e(t.THREE = t.THREE || {})
    })(this, function (THREE) {
        var Object3D = THREE.Object3D;
        var deviceMax = Number.POSITIVE_INFINITY;
        var deviceMin = Number.NEGATIVE_INFINITY;
        class CSS3DObject extends Object3D {
            constructor(element) {
                super();
                this.containerElement = document.createElement("div");
                this.containerElement.style.position = "absolute";
                this.containerElement.style.pointerEvents = "none";
                this.containerElement.style.overflow = "hidden";
                this.cameraElement = document.createElement("div");
                this.containerElement.appendChild(this.cameraElement);
                this.cameraElement.style.transformStyle = "preserve-3d";
                this.cameraElement.style.position = "absolute";
                this.cameraElement.style.pointerEvents = "none";
                this.element = element || document.createElement("div");
                this.cameraElement.appendChild(this.element);
                this.element.style.position = "absolute";
                this.element.style.pointerEvents = "none";
                this.contentWidth = 100;
                this.contentHeight = 100;
                this.vertices = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
                this.projectedVertices = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
                this.addEventListener("removed", function () {
                    this.traverse(function (object) {
                        if (object.containerElement instanceof Element && object.containerElement.parentNode !== null)
                            object.containerElement.parentNode.removeChild(object.containerElement)
                    })
                })
            }
            copy(source, recursive) {
                super.copy(source, recursive);
                this.element = source.element.cloneNode(true);
                return this
            }
            updateVertices() {
                this.vertices[0].set(-this.contentWidth * 0.5, +this.contentHeight * 0.5, 0);
                this.vertices[1].set(+this.contentWidth * 0.5, +this.contentHeight * 0.5, 0);
                this.vertices[2].set(+this.contentWidth * 0.5, -this.contentHeight * 0.5, 0);
                this.vertices[3].set(-this.contentWidth * 0.5, -this.contentHeight * 0.5, 0)
            }
            projectVertices(camera) {
                if (this.matrixWorldNeedsUpdate)
                    this.updateMatrixWorld();
                projectVertices(this, camera);
                var pv = this.projectedVertices;
                this.isDrawable = true;
                pv = pv.filter(function (p) {
                    return p.z < 0
                });
                var x = 0,
                y = 0;
                var max = 0,
                min = 0;
                pv.forEach(function (p) {
                    if (p.x < -1)
                        x -= 1;
                    else if (p.x > 1)
                        x += 1;
                    if (p.y < -1)
                        y -= 1;
                    else if (p.y > 1)
                        y += 1;
                    max = Math.max(p.x * camera.aspect, p.y, max);
                    min = Math.min(p.x * camera.aspect, p.y, min)
                });
                this.isVisible = this.isDrawable && Math.abs(x) < pv.length && Math.abs(y) < pv.length && max < deviceMax && min > deviceMin
            }
        }
        CSS3DObject.prototype.isCSS3DObject = true;
        THREE.CSS3DObject = CSS3DObject;
        class CSS3DQuad extends Object3D {
            constructor(element) {
                super();
                this.contentWidth = 100;
                this.contentHeight = 100;
                this.vertices = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
                this.projectedVertices = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3];
                this.containerElement = document.createElement("div");
                this.containerElement.style.position = "absolute";
                this.containerElement.style.pointerEvents = "none";
                this.containerElement.style.overflow = "hidden";
                this.element = element || document.createElement("div");
                this.containerElement.appendChild(this.element);
                this.element.style.position = "absolute";
                this.element.style.pointerEvents = "none"
            }
            copy(source, recursive) {
                super.copy(source, recursive);
                for (var i = 0; i < 4; i++)
                    this.vertices[i].copy(source.vertices[i]);
                return this
            }
            projectVertices(camera) {
                if (this.matrixWorldNeedsUpdate)
                    this.updateMatrixWorld();
                projectVertices(this, camera);
                var pv = this.projectedVertices;
                this.isDrawable = pv[0].z < 0 && pv[1].z < 0 && pv[2].z < 0 && pv[3].z < 0;
                var x = 0,
                y = 0;
                var max = 0,
                min = 0;
                pv.forEach(function (p) {
                    if (p.x < -1)
                        x -= 1;
                    else if (p.x > 1)
                        x += 1;
                    if (p.y < -1)
                        y -= 1;
                    else if (p.y > 1)
                        y += 1;
                    max = Math.max(p.x * camera.aspect, p.y, max);
                    min = Math.min(p.x * camera.aspect, p.y, min)
                });
                this.isVisible = this.isDrawable && Math.abs(x) < pv.length && Math.abs(y) < pv.length && max < deviceMax && min > deviceMin
            }
        }
        CSS3DQuad.prototype.isCSS3DQuad = true;
        THREE.CSS3DQuad = CSS3DQuad;
        class CSS3DRectangle extends CSS3DQuad {
            constructor(element) {
                super(element)
            }
            updateVertices() {
                this.vertices[0].set(-this.contentWidth * 0.5, +this.contentHeight * 0.5, 0);
                this.vertices[1].set(+this.contentWidth * 0.5, +this.contentHeight * 0.5, 0);
                this.vertices[2].set(+this.contentWidth * 0.5, -this.contentHeight * 0.5, 0);
                this.vertices[3].set(-this.contentWidth * 0.5, -this.contentHeight * 0.5, 0)
            }
        }
        CSS3DRectangle.prototype.isCSS3DRectangle = true;
        THREE.CSS3DRectangle = CSS3DRectangle;
        var _matrix = new THREE.Matrix4;
        class CSS3DRenderer {
            constructor() {
                var _this = this;
                var _width,
                _height;
                var _widthHalf,
                _heightHalf;
                var _fov;
                var _cameraStyle;
                var cache = {
                    objects: new WeakMap
                };
                var domElement = document.createElement("div");
                domElement.style.overflow = "hidden";
                this.domElement = domElement;
                this.getSize = function () {
                    return {
                        width: _width,
                        height: _height
                    }
                };
                this.render = function (scene, camera) {
                    _fov = camera.projectionMatrix.elements[5] * _heightHalf;
                    if (scene.autoUpdate === true)
                        scene.updateMatrixWorld();
                    _cameraStyle = "translateZ(" + _fov + "px)" + getCameraCSSMatrix(camera.matrixWorldInverse) + "translate(" + _widthHalf + "px," + _heightHalf + "px)";
                    renderObject(scene, scene, camera)
                };
                this.setSize = function (width, height) {
                    _width = width;
                    _height = height;
                    _widthHalf = _width / 2;
                    _heightHalf = _height / 2;
                    domElement.style.width = _width + "px";
                    domElement.style.height = _height + "px"
                };
                function renderObject(object, scene, camera) {
                    if (object.isCSS3DObject || object.isCSS3DQuad) {
                        object.onBeforeRender(_this, scene, camera);
                        var cachedObject = cache.objects.get(object) || {};
                        var cacheChanged = false;
                        if (object.isVisible) {
                            if (object.isCSS3DQuad) {
                                var pv = object.projectedVertices;
                                var x0 = (1 + pv[0].x) * 0.5 * _width,
                                y0 = (1 - pv[0].y) * 0.5 * _height,
                                x1 = (1 + pv[1].x) * 0.5 * _width,
                                y1 = (1 - pv[1].y) * 0.5 * _height,
                                x2 = (1 + pv[2].x) * 0.5 * _width,
                                y2 = (1 - pv[2].y) * 0.5 * _height,
                                x3 = (1 + pv[3].x) * 0.5 * _width,
                                y3 = (1 - pv[3].y) * 0.5 * _height;
                                createQuadMatrix(object.contentWidth, object.contentHeight, x0, y0, x1, y1, x3, y3, x2, y2, _matrix.elements);
                                var elementStyle = getQuadCSSMatrix(_matrix);
                                if (cachedObject.elementStyle != elementStyle) {
                                    cachedObject.elementStyle = object.element.style.transform = elementStyle;
                                    cacheChanged = true
                                }
                                if (cachedObject.width !== _width || cachedObject.height !== _height) {
                                    object.containerElement.style.width = (cachedObject.width = _width) + "px";
                                    object.containerElement.style.height = (cachedObject.height = _height) + "px";
                                    cacheChanged = true
                                }
                            } else {
                                var elementStyle = getObjectCSSMatrix(object.matrixWorld);
                                if (cachedObject.cameraFov !== _fov) {
                                    object.containerElement.style.perspective = (cachedObject.cameraFov = _fov) + "px";
                                    cacheChanged = true
                                }
                                if (cachedObject.width !== _width || cachedObject.height !== _height) {
                                    object.cameraElement.style.width = object.containerElement.style.width = (cachedObject.width = _width) + "px";
                                    object.cameraElement.style.height = object.containerElement.style.height = (cachedObject.height = _height) + "px";
                                    cacheChanged = true
                                }
                                if (cachedObject.cameraStyle !== _cameraStyle) {
                                    cachedObject.cameraStyle = object.cameraElement.style.transform = _cameraStyle;
                                    cacheChanged = true
                                }
                                if (cachedObject.elementStyle !== elementStyle) {
                                    cachedObject.elementStyle = object.element.style.transform = elementStyle;
                                    cacheChanged = true
                                }
                            }
                            object.containerElement.style.left = "0"
                        } else {
                            object.containerElement.style.left = _width + "px"
                        }
                        if (cacheChanged)
                            cache.objects.set(object, cachedObject);
                        object.containerElement.style.display = object.visible ? "" : "none";
                        if (object.containerElement.parentNode !== domElement)
                            domElement.appendChild(object.containerElement);
                        object.onAfterRender(_this, scene, camera)
                    }
                    for (var i = 0, l = object.children.length; i < l; i++)
                        renderObject(object.children[i], scene, camera)
                }
                function epsilon(value) {
                    return value < 1e-10 && value > -1e-10 ? 0 : value
                }
                function getCameraCSSMatrix(matrix) {
                    var elements = matrix.elements;
                    return "matrix3d(" + epsilon(elements[0]) + "," + epsilon(-elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(elements[6]) + "," + epsilon(elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(-elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(-elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")"
                }
                function getObjectCSSMatrix(matrix) {
                    var elements = matrix.elements;
                    var matrix3d = "matrix3d(" + epsilon(elements[0]) + "," + epsilon(elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(-elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(-elements[6]) + "," + epsilon(-elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")";
                    return "translate(-50%,-50%)" + matrix3d
                }
                function getQuadCSSMatrix(matrix) {
                    var elements = matrix.elements;
                    var matrix3d = "matrix3d(" + epsilon(elements[0]) + "," + epsilon(elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(elements[4]) + "," + epsilon(elements[5]) + "," + epsilon(elements[6]) + "," + epsilon(elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")";
                    return matrix3d
                }
            }
        };
        THREE.CSS3DRenderer = CSS3DRenderer;
        function projectVertices(object, camera) {
            for (var index = 0; index < object.vertices.length; index++) {
                var vertex = object.vertices[index];
                var projectedVertex = object.projectedVertices[index];
                projectedVertex.copy(vertex);
                projectedVertex.applyMatrix4(object.matrixWorld);
                projectedVertex.applyMatrix4(camera.matrixWorldInverse);
                var z = projectedVertex.z;
                projectedVertex.applyMatrix4(camera.projectionMatrix);
                projectedVertex.z = z
            }
        }
        function setArray() {
            var a = arguments[0];
            for (var i = 1; i < arguments.length; i++)
                a[i - 1] = arguments[i];
            return a
        }
        function copyArray(t, s) {
            for (var i = 0; i < s.length; i++)
                t[i] = s[i];
            return t
        }
        function adjugate(m, out) {
            setArray(out, m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3])
        }
        function multmm(a, b, out) {
            for (var i = 0; i != 3; ++i) {
                for (var j = 0; j != 3; ++j) {
                    var cij = 0;
                    for (var k = 0; k != 3; ++k) {
                        cij += a[3 * i + k] * b[3 * k + j]
                    }
                    out[3 * i + j] = cij
                }
            }
        }
        function multmv(m, v, out) {
            return setArray(out, m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2])
        }
        var m = new Array(9);
        var m2 = new Array(9);
        var mAdj = new Array(9);
        var p = new Array(3);
        var v = new Array(3);
        var s = new Array(9);
        var d = new Array(9);
        var sAdj = new Array(9);
        var t = new Array(9);
        function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4, out) {
            setArray(m, x1, x2, x3, y1, y2, y3, 1, 1, 1);
            adjugate(m, mAdj);
            setArray(p, x4, y4, 1);
            multmv(mAdj, p, v);
            setArray(m2, v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]);
            return multmm(m, m2, out)
        }
        function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d, out) {
            basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s, s);
            basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d, d);
            adjugate(s, sAdj);
            return multmm(d, sAdj, out)
        }
        function createQuadMatrix(w, h, x1, y1, x2, y2, x3, y3, x4, y4, out) {
            general2DProjection(0, 0, x1, y1, w, 0, x2, y2, 0, h, x3, y3, w, h, x4, y4, t);
            setArray(out, t[0] / t[8], t[3] / t[8], 0, t[6] / t[8], t[1] / t[8], t[4] / t[8], 0, t[7] / t[8], 0, 0, 1, 0, t[2] / t[8], t[5] / t[8], 0, 1)
        }
    });

})();
