;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([
  [446],
  {
    5569: function (t, n, r) {
      t.exports = (function () {
        var t
        return (function () {
          function e(t, n, r) {
            function i(a, s) {
              if (!n[a]) {
                if (!t[a]) {
                  if (o) return o(a, !0)
                  var l = new Error("Cannot find module '" + a + "'")
                  throw ((l.code = 'MODULE_NOT_FOUND'), l)
                }
                var c = (n[a] = { exports: {} })
                t[a][0].call(
                  c.exports,
                  function (e) {
                    return i(t[a][1][e] || e)
                  },
                  c,
                  c.exports,
                  e,
                  t,
                  n,
                  r,
                )
              }
              return n[a].exports
            }
            for (var o = void 0, a = 0; a < r.length; a++) i(r[a])
            return i
          }
          return e
        })()(
          {
            1: [
              function (e, t, n) {
                var r = Object.prototype.toString
                function i(e) {
                  return (
                    (e.BYTES_PER_ELEMENT && '[object ArrayBuffer]' === r.call(e.buffer)) ||
                    Array.isArray(e)
                  )
                }
                t.exports = i
              },
              {},
            ],
            2: [
              function (e, t, n) {
                t.exports = function (e, t) {
                  return 'number' === typeof e ? e : 'number' === typeof t ? t : 0
                }
              },
              {},
            ],
            3: [
              function (e, t, n) {
                'use strict'
                ;(n.byteLength = u), (n.toByteArray = d), (n.fromByteArray = m)
                for (
                  var r = [],
                    i = [],
                    o = 'undefined' !== typeof Uint8Array ? Uint8Array : Array,
                    a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
                    s = 0,
                    l = a.length;
                  s < l;
                  ++s
                )
                  (r[s] = a[s]), (i[a.charCodeAt(s)] = s)
                function c(e) {
                  var t = e.length
                  if (t % 4 > 0) throw new Error('Invalid string. Length must be a multiple of 4')
                  var n = e.indexOf('=')
                  return -1 === n && (n = t), [n, n === t ? 0 : 4 - (n % 4)]
                }
                function u(e) {
                  var t = c(e),
                    n = t[0],
                    r = t[1]
                  return (3 * (n + r)) / 4 - r
                }
                function h(e, t, n) {
                  return (3 * (t + n)) / 4 - n
                }
                function d(e) {
                  for (
                    var t,
                      n = c(e),
                      r = n[0],
                      a = n[1],
                      s = new o(h(e, r, a)),
                      l = 0,
                      u = a > 0 ? r - 4 : r,
                      d = 0;
                    d < u;
                    d += 4
                  )
                    (t =
                      (i[e.charCodeAt(d)] << 18) |
                      (i[e.charCodeAt(d + 1)] << 12) |
                      (i[e.charCodeAt(d + 2)] << 6) |
                      i[e.charCodeAt(d + 3)]),
                      (s[l++] = (t >> 16) & 255),
                      (s[l++] = (t >> 8) & 255),
                      (s[l++] = 255 & t)
                  return (
                    2 === a &&
                      ((t = (i[e.charCodeAt(d)] << 2) | (i[e.charCodeAt(d + 1)] >> 4)),
                      (s[l++] = 255 & t)),
                    1 === a &&
                      ((t =
                        (i[e.charCodeAt(d)] << 10) |
                        (i[e.charCodeAt(d + 1)] << 4) |
                        (i[e.charCodeAt(d + 2)] >> 2)),
                      (s[l++] = (t >> 8) & 255),
                      (s[l++] = 255 & t)),
                    s
                  )
                }
                function p(e) {
                  return r[(e >> 18) & 63] + r[(e >> 12) & 63] + r[(e >> 6) & 63] + r[63 & e]
                }
                function f(e, t, n) {
                  for (var r, i = [], o = t; o < n; o += 3)
                    (r = ((e[o] << 16) & 16711680) + ((e[o + 1] << 8) & 65280) + (255 & e[o + 2])),
                      i.push(p(r))
                  return i.join('')
                }
                function m(e) {
                  for (
                    var t, n = e.length, i = n % 3, o = [], a = 16383, s = 0, l = n - i;
                    s < l;
                    s += a
                  )
                    o.push(f(e, s, s + a > l ? l : s + a))
                  return (
                    1 === i
                      ? ((t = e[n - 1]), o.push(r[t >> 2] + r[(t << 4) & 63] + '=='))
                      : 2 === i &&
                        ((t = (e[n - 2] << 8) + e[n - 1]),
                        o.push(r[t >> 10] + r[(t >> 4) & 63] + r[(t << 2) & 63] + '=')),
                    o.join('')
                  )
                }
                ;(i['-'.charCodeAt(0)] = 62), (i['_'.charCodeAt(0)] = 63)
              },
              {},
            ],
            4: [
              function (e, t, n) {
                'use strict'
                t.exports = {
                  createLink: function (e, t) {
                    var n = document.head || document.getElementsByTagName('head')[0],
                      r = document.createElement('link')
                    for (var i in ((r.href = e), (r.rel = 'stylesheet'), t))
                      if (t.hasOwnProperty(i)) {
                        var o = t[i]
                        r.setAttribute('data-' + i, o)
                      }
                    n.appendChild(r)
                  },
                  createStyle: function (e, t) {
                    var n = document.head || document.getElementsByTagName('head')[0],
                      r = document.createElement('style')
                    for (var i in ((r.type = 'text/css'), t))
                      if (t.hasOwnProperty(i)) {
                        var o = t[i]
                        r.setAttribute('data-' + i, o)
                      }
                    r.sheet
                      ? ((r.innerHTML = e), (r.sheet.cssText = e), n.appendChild(r))
                      : r.styleSheet
                      ? (n.appendChild(r), (r.styleSheet.cssText = e))
                      : (r.appendChild(document.createTextNode(e)), n.appendChild(r))
                  },
                }
              },
              {},
            ],
            5: [
              function (e, t, n) {
                var r = e('buffer').Buffer
                t.exports = function (e, t) {
                  if (r.isBuffer(e) && r.isBuffer(t)) {
                    if ('function' === typeof e.equals) return e.equals(t)
                    if (e.length !== t.length) return !1
                    for (var n = 0; n < e.length; n++) if (e[n] !== t[n]) return !1
                    return !0
                  }
                }
              },
              { buffer: 6 },
            ],
            6: [
              function (t, n, i) {
                ;(function (n, r) {
                  'use strict'
                  var o = t('base64-js'),
                    a = t('ieee754'),
                    s = t('isarray')
                  function l() {
                    try {
                      var t = new Uint8Array(1)
                      return (
                        (t.__proto__ = {
                          __proto__: Uint8Array.prototype,
                          foo: function () {
                            return 42
                          },
                        }),
                        42 === t.foo() &&
                          'function' === typeof t.subarray &&
                          0 === t.subarray(1, 1).byteLength
                      )
                    } catch (e) {
                      return !1
                    }
                  }
                  function c() {
                    return r.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823
                  }
                  function u(e, t) {
                    if (c() < t) throw new RangeError('Invalid typed array length')
                    return (
                      r.TYPED_ARRAY_SUPPORT
                        ? ((e = new Uint8Array(t)).__proto__ = r.prototype)
                        : (null === e && (e = new r(t)), (e.length = t)),
                      e
                    )
                  }
                  function r(e, t, n) {
                    if (!r.TYPED_ARRAY_SUPPORT && !(this instanceof r)) return new r(e, t, n)
                    if ('number' === typeof e) {
                      if ('string' === typeof t)
                        throw new Error(
                          'If encoding is specified then the first argument must be a string',
                        )
                      return f(this, e)
                    }
                    return h(this, e, t, n)
                  }
                  function h(e, t, n, r) {
                    if ('number' === typeof t)
                      throw new TypeError('"value" argument must not be a number')
                    return 'undefined' !== typeof ArrayBuffer && t instanceof ArrayBuffer
                      ? g(e, t, n, r)
                      : 'string' === typeof t
                      ? m(e, t, n)
                      : y(e, t)
                  }
                  function d(e) {
                    if ('number' !== typeof e)
                      throw new TypeError('"size" argument must be a number')
                    if (e < 0) throw new RangeError('"size" argument must not be negative')
                  }
                  function p(e, t, n, r) {
                    return (
                      d(t),
                      t <= 0
                        ? u(e, t)
                        : void 0 !== n
                        ? 'string' === typeof r
                          ? u(e, t).fill(n, r)
                          : u(e, t).fill(n)
                        : u(e, t)
                    )
                  }
                  function f(e, t) {
                    if ((d(t), (e = u(e, t < 0 ? 0 : 0 | b(t))), !r.TYPED_ARRAY_SUPPORT))
                      for (var n = 0; n < t; ++n) e[n] = 0
                    return e
                  }
                  function m(e, t, n) {
                    if ((('string' === typeof n && '' !== n) || (n = 'utf8'), !r.isEncoding(n)))
                      throw new TypeError('"encoding" must be a valid string encoding')
                    var i = 0 | w(t, n),
                      o = (e = u(e, i)).write(t, n)
                    return o !== i && (e = e.slice(0, o)), e
                  }
                  function v(e, t) {
                    var n = t.length < 0 ? 0 : 0 | b(t.length)
                    e = u(e, n)
                    for (var r = 0; r < n; r += 1) e[r] = 255 & t[r]
                    return e
                  }
                  function g(e, t, n, i) {
                    if ((t.byteLength, n < 0 || t.byteLength < n))
                      throw new RangeError("'offset' is out of bounds")
                    if (t.byteLength < n + (i || 0))
                      throw new RangeError("'length' is out of bounds")
                    return (
                      (t =
                        void 0 === n && void 0 === i
                          ? new Uint8Array(t)
                          : void 0 === i
                          ? new Uint8Array(t, n)
                          : new Uint8Array(t, n, i)),
                      r.TYPED_ARRAY_SUPPORT ? ((e = t).__proto__ = r.prototype) : (e = v(e, t)),
                      e
                    )
                  }
                  function y(e, t) {
                    if (r.isBuffer(t)) {
                      var n = 0 | b(t.length)
                      return 0 === (e = u(e, n)).length || t.copy(e, 0, 0, n), e
                    }
                    if (t) {
                      if (
                        ('undefined' !== typeof ArrayBuffer && t.buffer instanceof ArrayBuffer) ||
                        'length' in t
                      )
                        return 'number' !== typeof t.length || ne(t.length) ? u(e, 0) : v(e, t)
                      if ('Buffer' === t.type && s(t.data)) return v(e, t.data)
                    }
                    throw new TypeError(
                      'First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.',
                    )
                  }
                  function b(e) {
                    if (e >= c())
                      throw new RangeError(
                        'Attempt to allocate Buffer larger than maximum size: 0x' +
                          c().toString(16) +
                          ' bytes',
                      )
                    return 0 | e
                  }
                  function A(e) {
                    return +e != e && (e = 0), r.alloc(+e)
                  }
                  function w(e, t) {
                    if (r.isBuffer(e)) return e.length
                    if (
                      'undefined' !== typeof ArrayBuffer &&
                      'function' === typeof ArrayBuffer.isView &&
                      (ArrayBuffer.isView(e) || e instanceof ArrayBuffer)
                    )
                      return e.byteLength
                    'string' !== typeof e && (e = '' + e)
                    var n = e.length
                    if (0 === n) return 0
                    for (var i = !1; ; )
                      switch (t) {
                        case 'ascii':
                        case 'latin1':
                        case 'binary':
                          return n
                        case 'utf8':
                        case 'utf-8':
                        case void 0:
                          return K(e).length
                        case 'ucs2':
                        case 'ucs-2':
                        case 'utf16le':
                        case 'utf-16le':
                          return 2 * n
                        case 'hex':
                          return n >>> 1
                        case 'base64':
                          return ee(e).length
                        default:
                          if (i) return K(e).length
                          ;(t = ('' + t).toLowerCase()), (i = !0)
                      }
                  }
                  function x(e, t, n) {
                    var r = !1
                    if (((void 0 === t || t < 0) && (t = 0), t > this.length)) return ''
                    if (((void 0 === n || n > this.length) && (n = this.length), n <= 0)) return ''
                    if ((n >>>= 0) <= (t >>>= 0)) return ''
                    for (e || (e = 'utf8'); ; )
                      switch (e) {
                        case 'hex':
                          return N(this, t, n)
                        case 'utf8':
                        case 'utf-8':
                          return O(this, t, n)
                        case 'ascii':
                          return F(this, t, n)
                        case 'latin1':
                        case 'binary':
                          return k(this, t, n)
                        case 'base64':
                          return D(this, t, n)
                        case 'ucs2':
                        case 'ucs-2':
                        case 'utf16le':
                        case 'utf-16le':
                          return U(this, t, n)
                        default:
                          if (r) throw new TypeError('Unknown encoding: ' + e)
                          ;(e = (e + '').toLowerCase()), (r = !0)
                      }
                  }
                  function E(e, t, n) {
                    var r = e[t]
                    ;(e[t] = e[n]), (e[n] = r)
                  }
                  function M(e, t, n, i, o) {
                    if (0 === e.length) return -1
                    if (
                      ('string' === typeof n
                        ? ((i = n), (n = 0))
                        : n > 2147483647
                        ? (n = 2147483647)
                        : n < -2147483648 && (n = -2147483648),
                      (n = +n),
                      isNaN(n) && (n = o ? 0 : e.length - 1),
                      n < 0 && (n = e.length + n),
                      n >= e.length)
                    ) {
                      if (o) return -1
                      n = e.length - 1
                    } else if (n < 0) {
                      if (!o) return -1
                      n = 0
                    }
                    if (('string' === typeof t && (t = r.from(t, i)), r.isBuffer(t)))
                      return 0 === t.length ? -1 : _(e, t, n, i, o)
                    if ('number' === typeof t)
                      return (
                        (t &= 255),
                        r.TYPED_ARRAY_SUPPORT && 'function' === typeof Uint8Array.prototype.indexOf
                          ? o
                            ? Uint8Array.prototype.indexOf.call(e, t, n)
                            : Uint8Array.prototype.lastIndexOf.call(e, t, n)
                          : _(e, [t], n, i, o)
                      )
                    throw new TypeError('val must be string, number or Buffer')
                  }
                  function _(e, t, n, r, i) {
                    var o,
                      a = 1,
                      s = e.length,
                      l = t.length
                    if (
                      void 0 !== r &&
                      ('ucs2' === (r = String(r).toLowerCase()) ||
                        'ucs-2' === r ||
                        'utf16le' === r ||
                        'utf-16le' === r)
                    ) {
                      if (e.length < 2 || t.length < 2) return -1
                      ;(a = 2), (s /= 2), (l /= 2), (n /= 2)
                    }
                    function c(e, t) {
                      return 1 === a ? e[t] : e.readUInt16BE(t * a)
                    }
                    if (i) {
                      var u = -1
                      for (o = n; o < s; o++)
                        if (c(e, o) === c(t, -1 === u ? 0 : o - u)) {
                          if ((-1 === u && (u = o), o - u + 1 === l)) return u * a
                        } else -1 !== u && (o -= o - u), (u = -1)
                    } else
                      for (n + l > s && (n = s - l), o = n; o >= 0; o--) {
                        for (var h = !0, d = 0; d < l; d++)
                          if (c(e, o + d) !== c(t, d)) {
                            h = !1
                            break
                          }
                        if (h) return o
                      }
                    return -1
                  }
                  function T(e, t, n, r) {
                    n = Number(n) || 0
                    var i = e.length - n
                    r ? (r = Number(r)) > i && (r = i) : (r = i)
                    var o = t.length
                    if (o % 2 !== 0) throw new TypeError('Invalid hex string')
                    r > o / 2 && (r = o / 2)
                    for (var a = 0; a < r; ++a) {
                      var s = parseInt(t.substr(2 * a, 2), 16)
                      if (isNaN(s)) return a
                      e[n + a] = s
                    }
                    return a
                  }
                  function S(e, t, n, r) {
                    return te(K(t, e.length - n), e, n, r)
                  }
                  function C(e, t, n, r) {
                    return te(J(t), e, n, r)
                  }
                  function L(e, t, n, r) {
                    return C(e, t, n, r)
                  }
                  function R(e, t, n, r) {
                    return te(ee(t), e, n, r)
                  }
                  function P(e, t, n, r) {
                    return te($(t, e.length - n), e, n, r)
                  }
                  function D(e, t, n) {
                    return 0 === t && n === e.length
                      ? o.fromByteArray(e)
                      : o.fromByteArray(e.slice(t, n))
                  }
                  function O(e, t, n) {
                    n = Math.min(e.length, n)
                    for (var r = [], i = t; i < n; ) {
                      var o,
                        a,
                        s,
                        l,
                        c = e[i],
                        u = null,
                        h = c > 239 ? 4 : c > 223 ? 3 : c > 191 ? 2 : 1
                      if (i + h <= n)
                        switch (h) {
                          case 1:
                            c < 128 && (u = c)
                            break
                          case 2:
                            128 === (192 & (o = e[i + 1])) &&
                              (l = ((31 & c) << 6) | (63 & o)) > 127 &&
                              (u = l)
                            break
                          case 3:
                            ;(o = e[i + 1]),
                              (a = e[i + 2]),
                              128 === (192 & o) &&
                                128 === (192 & a) &&
                                (l = ((15 & c) << 12) | ((63 & o) << 6) | (63 & a)) > 2047 &&
                                (l < 55296 || l > 57343) &&
                                (u = l)
                            break
                          case 4:
                            ;(o = e[i + 1]),
                              (a = e[i + 2]),
                              (s = e[i + 3]),
                              128 === (192 & o) &&
                                128 === (192 & a) &&
                                128 === (192 & s) &&
                                (l =
                                  ((15 & c) << 18) |
                                  ((63 & o) << 12) |
                                  ((63 & a) << 6) |
                                  (63 & s)) > 65535 &&
                                l < 1114112 &&
                                (u = l)
                        }
                      null === u
                        ? ((u = 65533), (h = 1))
                        : u > 65535 &&
                          ((u -= 65536),
                          r.push(((u >>> 10) & 1023) | 55296),
                          (u = 56320 | (1023 & u))),
                        r.push(u),
                        (i += h)
                    }
                    return B(r)
                  }
                  ;(i.Buffer = r),
                    (i.SlowBuffer = A),
                    (i.INSPECT_MAX_BYTES = 50),
                    (r.TYPED_ARRAY_SUPPORT =
                      void 0 !== n.TYPED_ARRAY_SUPPORT ? n.TYPED_ARRAY_SUPPORT : l()),
                    (i.kMaxLength = c()),
                    (r.poolSize = 8192),
                    (r._augment = function (e) {
                      return (e.__proto__ = r.prototype), e
                    }),
                    (r.from = function (e, t, n) {
                      return h(null, e, t, n)
                    }),
                    r.TYPED_ARRAY_SUPPORT &&
                      ((r.prototype.__proto__ = Uint8Array.prototype),
                      (r.__proto__ = Uint8Array),
                      'undefined' !== typeof Symbol &&
                        Symbol.species &&
                        r[Symbol.species] === r &&
                        Object.defineProperty(r, Symbol.species, {
                          value: null,
                          configurable: !0,
                        })),
                    (r.alloc = function (e, t, n) {
                      return p(null, e, t, n)
                    }),
                    (r.allocUnsafe = function (e) {
                      return f(null, e)
                    }),
                    (r.allocUnsafeSlow = function (e) {
                      return f(null, e)
                    }),
                    (r.isBuffer = function (e) {
                      return !(null == e || !e._isBuffer)
                    }),
                    (r.compare = function (e, t) {
                      if (!r.isBuffer(e) || !r.isBuffer(t))
                        throw new TypeError('Arguments must be Buffers')
                      if (e === t) return 0
                      for (var n = e.length, i = t.length, o = 0, a = Math.min(n, i); o < a; ++o)
                        if (e[o] !== t[o]) {
                          ;(n = e[o]), (i = t[o])
                          break
                        }
                      return n < i ? -1 : i < n ? 1 : 0
                    }),
                    (r.isEncoding = function (e) {
                      switch (String(e).toLowerCase()) {
                        case 'hex':
                        case 'utf8':
                        case 'utf-8':
                        case 'ascii':
                        case 'latin1':
                        case 'binary':
                        case 'base64':
                        case 'ucs2':
                        case 'ucs-2':
                        case 'utf16le':
                        case 'utf-16le':
                          return !0
                        default:
                          return !1
                      }
                    }),
                    (r.concat = function (e, t) {
                      if (!s(e)) throw new TypeError('"list" argument must be an Array of Buffers')
                      if (0 === e.length) return r.alloc(0)
                      var n
                      if (void 0 === t) for (t = 0, n = 0; n < e.length; ++n) t += e[n].length
                      var i = r.allocUnsafe(t),
                        o = 0
                      for (n = 0; n < e.length; ++n) {
                        var a = e[n]
                        if (!r.isBuffer(a))
                          throw new TypeError('"list" argument must be an Array of Buffers')
                        a.copy(i, o), (o += a.length)
                      }
                      return i
                    }),
                    (r.byteLength = w),
                    (r.prototype._isBuffer = !0),
                    (r.prototype.swap16 = function () {
                      var e = this.length
                      if (e % 2 !== 0)
                        throw new RangeError('Buffer size must be a multiple of 16-bits')
                      for (var t = 0; t < e; t += 2) E(this, t, t + 1)
                      return this
                    }),
                    (r.prototype.swap32 = function () {
                      var e = this.length
                      if (e % 4 !== 0)
                        throw new RangeError('Buffer size must be a multiple of 32-bits')
                      for (var t = 0; t < e; t += 4) E(this, t, t + 3), E(this, t + 1, t + 2)
                      return this
                    }),
                    (r.prototype.swap64 = function () {
                      var e = this.length
                      if (e % 8 !== 0)
                        throw new RangeError('Buffer size must be a multiple of 64-bits')
                      for (var t = 0; t < e; t += 8)
                        E(this, t, t + 7),
                          E(this, t + 1, t + 6),
                          E(this, t + 2, t + 5),
                          E(this, t + 3, t + 4)
                      return this
                    }),
                    (r.prototype.toString = function () {
                      var e = 0 | this.length
                      return 0 === e
                        ? ''
                        : 0 === arguments.length
                        ? O(this, 0, e)
                        : x.apply(this, arguments)
                    }),
                    (r.prototype.equals = function (e) {
                      if (!r.isBuffer(e)) throw new TypeError('Argument must be a Buffer')
                      return this === e || 0 === r.compare(this, e)
                    }),
                    (r.prototype.inspect = function () {
                      var e = '',
                        t = i.INSPECT_MAX_BYTES
                      return (
                        this.length > 0 &&
                          ((e = this.toString('hex', 0, t).match(/.{2}/g).join(' ')),
                          this.length > t && (e += ' ... ')),
                        '<Buffer ' + e + '>'
                      )
                    }),
                    (r.prototype.compare = function (e, t, n, i, o) {
                      if (!r.isBuffer(e)) throw new TypeError('Argument must be a Buffer')
                      if (
                        (void 0 === t && (t = 0),
                        void 0 === n && (n = e ? e.length : 0),
                        void 0 === i && (i = 0),
                        void 0 === o && (o = this.length),
                        t < 0 || n > e.length || i < 0 || o > this.length)
                      )
                        throw new RangeError('out of range index')
                      if (i >= o && t >= n) return 0
                      if (i >= o) return -1
                      if (t >= n) return 1
                      if (this === e) return 0
                      for (
                        var a = (o >>>= 0) - (i >>>= 0),
                          s = (n >>>= 0) - (t >>>= 0),
                          l = Math.min(a, s),
                          c = this.slice(i, o),
                          u = e.slice(t, n),
                          h = 0;
                        h < l;
                        ++h
                      )
                        if (c[h] !== u[h]) {
                          ;(a = c[h]), (s = u[h])
                          break
                        }
                      return a < s ? -1 : s < a ? 1 : 0
                    }),
                    (r.prototype.includes = function (e, t, n) {
                      return -1 !== this.indexOf(e, t, n)
                    }),
                    (r.prototype.indexOf = function (e, t, n) {
                      return M(this, e, t, n, !0)
                    }),
                    (r.prototype.lastIndexOf = function (e, t, n) {
                      return M(this, e, t, n, !1)
                    }),
                    (r.prototype.write = function (e, t, n, r) {
                      if (void 0 === t) (r = 'utf8'), (n = this.length), (t = 0)
                      else if (void 0 === n && 'string' === typeof t)
                        (r = t), (n = this.length), (t = 0)
                      else {
                        if (!isFinite(t))
                          throw new Error(
                            'Buffer.write(string, encoding, offset[, length]) is no longer supported',
                          )
                        ;(t |= 0),
                          isFinite(n)
                            ? ((n |= 0), void 0 === r && (r = 'utf8'))
                            : ((r = n), (n = void 0))
                      }
                      var i = this.length - t
                      if (
                        ((void 0 === n || n > i) && (n = i),
                        (e.length > 0 && (n < 0 || t < 0)) || t > this.length)
                      )
                        throw new RangeError('Attempt to write outside buffer bounds')
                      r || (r = 'utf8')
                      for (var o = !1; ; )
                        switch (r) {
                          case 'hex':
                            return T(this, e, t, n)
                          case 'utf8':
                          case 'utf-8':
                            return S(this, e, t, n)
                          case 'ascii':
                            return C(this, e, t, n)
                          case 'latin1':
                          case 'binary':
                            return L(this, e, t, n)
                          case 'base64':
                            return R(this, e, t, n)
                          case 'ucs2':
                          case 'ucs-2':
                          case 'utf16le':
                          case 'utf-16le':
                            return P(this, e, t, n)
                          default:
                            if (o) throw new TypeError('Unknown encoding: ' + r)
                            ;(r = ('' + r).toLowerCase()), (o = !0)
                        }
                    }),
                    (r.prototype.toJSON = function () {
                      return {
                        type: 'Buffer',
                        data: Array.prototype.slice.call(this._arr || this, 0),
                      }
                    })
                  var I = 4096
                  function B(e) {
                    var t = e.length
                    if (t <= I) return String.fromCharCode.apply(String, e)
                    for (var n = '', r = 0; r < t; )
                      n += String.fromCharCode.apply(String, e.slice(r, (r += I)))
                    return n
                  }
                  function F(e, t, n) {
                    var r = ''
                    n = Math.min(e.length, n)
                    for (var i = t; i < n; ++i) r += String.fromCharCode(127 & e[i])
                    return r
                  }
                  function k(e, t, n) {
                    var r = ''
                    n = Math.min(e.length, n)
                    for (var i = t; i < n; ++i) r += String.fromCharCode(e[i])
                    return r
                  }
                  function N(e, t, n) {
                    var r = e.length
                    ;(!t || t < 0) && (t = 0), (!n || n < 0 || n > r) && (n = r)
                    for (var i = '', o = t; o < n; ++o) i += Z(e[o])
                    return i
                  }
                  function U(e, t, n) {
                    for (var r = e.slice(t, n), i = '', o = 0; o < r.length; o += 2)
                      i += String.fromCharCode(r[o] + 256 * r[o + 1])
                    return i
                  }
                  function H(e, t, n) {
                    if (e % 1 !== 0 || e < 0) throw new RangeError('offset is not uint')
                    if (e + t > n) throw new RangeError('Trying to access beyond buffer length')
                  }
                  function G(e, t, n, i, o, a) {
                    if (!r.isBuffer(e))
                      throw new TypeError('"buffer" argument must be a Buffer instance')
                    if (t > o || t < a) throw new RangeError('"value" argument is out of bounds')
                    if (n + i > e.length) throw new RangeError('Index out of range')
                  }
                  function z(e, t, n, r) {
                    t < 0 && (t = 65535 + t + 1)
                    for (var i = 0, o = Math.min(e.length - n, 2); i < o; ++i)
                      e[n + i] = (t & (255 << (8 * (r ? i : 1 - i)))) >>> (8 * (r ? i : 1 - i))
                  }
                  function j(e, t, n, r) {
                    t < 0 && (t = 4294967295 + t + 1)
                    for (var i = 0, o = Math.min(e.length - n, 4); i < o; ++i)
                      e[n + i] = (t >>> (8 * (r ? i : 3 - i))) & 255
                  }
                  function V(e, t, n, r, i, o) {
                    if (n + r > e.length) throw new RangeError('Index out of range')
                    if (n < 0) throw new RangeError('Index out of range')
                  }
                  function W(e, t, n, r, i) {
                    return (
                      i || V(e, t, n, 4, 34028234663852886e22, -34028234663852886e22),
                      a.write(e, t, n, r, 23, 4),
                      n + 4
                    )
                  }
                  function q(e, t, n, r, i) {
                    return (
                      i || V(e, t, n, 8, 17976931348623157e292, -17976931348623157e292),
                      a.write(e, t, n, r, 52, 8),
                      n + 8
                    )
                  }
                  ;(r.prototype.slice = function (e, t) {
                    var n,
                      i = this.length
                    if (
                      ((e = ~~e) < 0 ? (e += i) < 0 && (e = 0) : e > i && (e = i),
                      (t = void 0 === t ? i : ~~t) < 0 ? (t += i) < 0 && (t = 0) : t > i && (t = i),
                      t < e && (t = e),
                      r.TYPED_ARRAY_SUPPORT)
                    )
                      (n = this.subarray(e, t)).__proto__ = r.prototype
                    else {
                      var o = t - e
                      n = new r(o, void 0)
                      for (var a = 0; a < o; ++a) n[a] = this[a + e]
                    }
                    return n
                  }),
                    (r.prototype.readUIntLE = function (e, t, n) {
                      ;(e |= 0), (t |= 0), n || H(e, t, this.length)
                      for (var r = this[e], i = 1, o = 0; ++o < t && (i *= 256); )
                        r += this[e + o] * i
                      return r
                    }),
                    (r.prototype.readUIntBE = function (e, t, n) {
                      ;(e |= 0), (t |= 0), n || H(e, t, this.length)
                      for (var r = this[e + --t], i = 1; t > 0 && (i *= 256); )
                        r += this[e + --t] * i
                      return r
                    }),
                    (r.prototype.readUInt8 = function (e, t) {
                      return t || H(e, 1, this.length), this[e]
                    }),
                    (r.prototype.readUInt16LE = function (e, t) {
                      return t || H(e, 2, this.length), this[e] | (this[e + 1] << 8)
                    }),
                    (r.prototype.readUInt16BE = function (e, t) {
                      return t || H(e, 2, this.length), (this[e] << 8) | this[e + 1]
                    }),
                    (r.prototype.readUInt32LE = function (e, t) {
                      return (
                        t || H(e, 4, this.length),
                        (this[e] | (this[e + 1] << 8) | (this[e + 2] << 16)) +
                          16777216 * this[e + 3]
                      )
                    }),
                    (r.prototype.readUInt32BE = function (e, t) {
                      return (
                        t || H(e, 4, this.length),
                        16777216 * this[e] +
                          ((this[e + 1] << 16) | (this[e + 2] << 8) | this[e + 3])
                      )
                    }),
                    (r.prototype.readIntLE = function (e, t, n) {
                      ;(e |= 0), (t |= 0), n || H(e, t, this.length)
                      for (var r = this[e], i = 1, o = 0; ++o < t && (i *= 256); )
                        r += this[e + o] * i
                      return r >= (i *= 128) && (r -= Math.pow(2, 8 * t)), r
                    }),
                    (r.prototype.readIntBE = function (e, t, n) {
                      ;(e |= 0), (t |= 0), n || H(e, t, this.length)
                      for (var r = t, i = 1, o = this[e + --r]; r > 0 && (i *= 256); )
                        o += this[e + --r] * i
                      return o >= (i *= 128) && (o -= Math.pow(2, 8 * t)), o
                    }),
                    (r.prototype.readInt8 = function (e, t) {
                      return (
                        t || H(e, 1, this.length),
                        128 & this[e] ? -1 * (255 - this[e] + 1) : this[e]
                      )
                    }),
                    (r.prototype.readInt16LE = function (e, t) {
                      t || H(e, 2, this.length)
                      var n = this[e] | (this[e + 1] << 8)
                      return 32768 & n ? 4294901760 | n : n
                    }),
                    (r.prototype.readInt16BE = function (e, t) {
                      t || H(e, 2, this.length)
                      var n = this[e + 1] | (this[e] << 8)
                      return 32768 & n ? 4294901760 | n : n
                    }),
                    (r.prototype.readInt32LE = function (e, t) {
                      return (
                        t || H(e, 4, this.length),
                        this[e] | (this[e + 1] << 8) | (this[e + 2] << 16) | (this[e + 3] << 24)
                      )
                    }),
                    (r.prototype.readInt32BE = function (e, t) {
                      return (
                        t || H(e, 4, this.length),
                        (this[e] << 24) | (this[e + 1] << 16) | (this[e + 2] << 8) | this[e + 3]
                      )
                    }),
                    (r.prototype.readFloatLE = function (e, t) {
                      return t || H(e, 4, this.length), a.read(this, e, !0, 23, 4)
                    }),
                    (r.prototype.readFloatBE = function (e, t) {
                      return t || H(e, 4, this.length), a.read(this, e, !1, 23, 4)
                    }),
                    (r.prototype.readDoubleLE = function (e, t) {
                      return t || H(e, 8, this.length), a.read(this, e, !0, 52, 8)
                    }),
                    (r.prototype.readDoubleBE = function (e, t) {
                      return t || H(e, 8, this.length), a.read(this, e, !1, 52, 8)
                    }),
                    (r.prototype.writeUIntLE = function (e, t, n, r) {
                      ;(e = +e),
                        (t |= 0),
                        (n |= 0),
                        r || G(this, e, t, n, Math.pow(2, 8 * n) - 1, 0)
                      var i = 1,
                        o = 0
                      for (this[t] = 255 & e; ++o < n && (i *= 256); ) this[t + o] = (e / i) & 255
                      return t + n
                    }),
                    (r.prototype.writeUIntBE = function (e, t, n, r) {
                      ;(e = +e),
                        (t |= 0),
                        (n |= 0),
                        r || G(this, e, t, n, Math.pow(2, 8 * n) - 1, 0)
                      var i = n - 1,
                        o = 1
                      for (this[t + i] = 255 & e; --i >= 0 && (o *= 256); )
                        this[t + i] = (e / o) & 255
                      return t + n
                    }),
                    (r.prototype.writeUInt8 = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 1, 255, 0),
                        r.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)),
                        (this[t] = 255 & e),
                        t + 1
                      )
                    }),
                    (r.prototype.writeUInt16LE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 2, 65535, 0),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = 255 & e), (this[t + 1] = e >>> 8))
                          : z(this, e, t, !0),
                        t + 2
                      )
                    }),
                    (r.prototype.writeUInt16BE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 2, 65535, 0),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = e >>> 8), (this[t + 1] = 255 & e))
                          : z(this, e, t, !1),
                        t + 2
                      )
                    }),
                    (r.prototype.writeUInt32LE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 4, 4294967295, 0),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t + 3] = e >>> 24),
                            (this[t + 2] = e >>> 16),
                            (this[t + 1] = e >>> 8),
                            (this[t] = 255 & e))
                          : j(this, e, t, !0),
                        t + 4
                      )
                    }),
                    (r.prototype.writeUInt32BE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 4, 4294967295, 0),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = e >>> 24),
                            (this[t + 1] = e >>> 16),
                            (this[t + 2] = e >>> 8),
                            (this[t + 3] = 255 & e))
                          : j(this, e, t, !1),
                        t + 4
                      )
                    }),
                    (r.prototype.writeIntLE = function (e, t, n, r) {
                      if (((e = +e), (t |= 0), !r)) {
                        var i = Math.pow(2, 8 * n - 1)
                        G(this, e, t, n, i - 1, -i)
                      }
                      var o = 0,
                        a = 1,
                        s = 0
                      for (this[t] = 255 & e; ++o < n && (a *= 256); )
                        e < 0 && 0 === s && 0 !== this[t + o - 1] && (s = 1),
                          (this[t + o] = (((e / a) >> 0) - s) & 255)
                      return t + n
                    }),
                    (r.prototype.writeIntBE = function (e, t, n, r) {
                      if (((e = +e), (t |= 0), !r)) {
                        var i = Math.pow(2, 8 * n - 1)
                        G(this, e, t, n, i - 1, -i)
                      }
                      var o = n - 1,
                        a = 1,
                        s = 0
                      for (this[t + o] = 255 & e; --o >= 0 && (a *= 256); )
                        e < 0 && 0 === s && 0 !== this[t + o + 1] && (s = 1),
                          (this[t + o] = (((e / a) >> 0) - s) & 255)
                      return t + n
                    }),
                    (r.prototype.writeInt8 = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 1, 127, -128),
                        r.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)),
                        e < 0 && (e = 255 + e + 1),
                        (this[t] = 255 & e),
                        t + 1
                      )
                    }),
                    (r.prototype.writeInt16LE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 2, 32767, -32768),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = 255 & e), (this[t + 1] = e >>> 8))
                          : z(this, e, t, !0),
                        t + 2
                      )
                    }),
                    (r.prototype.writeInt16BE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 2, 32767, -32768),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = e >>> 8), (this[t + 1] = 255 & e))
                          : z(this, e, t, !1),
                        t + 2
                      )
                    }),
                    (r.prototype.writeInt32LE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 4, 2147483647, -2147483648),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = 255 & e),
                            (this[t + 1] = e >>> 8),
                            (this[t + 2] = e >>> 16),
                            (this[t + 3] = e >>> 24))
                          : j(this, e, t, !0),
                        t + 4
                      )
                    }),
                    (r.prototype.writeInt32BE = function (e, t, n) {
                      return (
                        (e = +e),
                        (t |= 0),
                        n || G(this, e, t, 4, 2147483647, -2147483648),
                        e < 0 && (e = 4294967295 + e + 1),
                        r.TYPED_ARRAY_SUPPORT
                          ? ((this[t] = e >>> 24),
                            (this[t + 1] = e >>> 16),
                            (this[t + 2] = e >>> 8),
                            (this[t + 3] = 255 & e))
                          : j(this, e, t, !1),
                        t + 4
                      )
                    }),
                    (r.prototype.writeFloatLE = function (e, t, n) {
                      return W(this, e, t, !0, n)
                    }),
                    (r.prototype.writeFloatBE = function (e, t, n) {
                      return W(this, e, t, !1, n)
                    }),
                    (r.prototype.writeDoubleLE = function (e, t, n) {
                      return q(this, e, t, !0, n)
                    }),
                    (r.prototype.writeDoubleBE = function (e, t, n) {
                      return q(this, e, t, !1, n)
                    }),
                    (r.prototype.copy = function (e, t, n, i) {
                      if (
                        (n || (n = 0),
                        i || 0 === i || (i = this.length),
                        t >= e.length && (t = e.length),
                        t || (t = 0),
                        i > 0 && i < n && (i = n),
                        i === n)
                      )
                        return 0
                      if (0 === e.length || 0 === this.length) return 0
                      if (t < 0) throw new RangeError('targetStart out of bounds')
                      if (n < 0 || n >= this.length)
                        throw new RangeError('sourceStart out of bounds')
                      if (i < 0) throw new RangeError('sourceEnd out of bounds')
                      i > this.length && (i = this.length),
                        e.length - t < i - n && (i = e.length - t + n)
                      var o,
                        a = i - n
                      if (this === e && n < t && t < i)
                        for (o = a - 1; o >= 0; --o) e[o + t] = this[o + n]
                      else if (a < 1e3 || !r.TYPED_ARRAY_SUPPORT)
                        for (o = 0; o < a; ++o) e[o + t] = this[o + n]
                      else Uint8Array.prototype.set.call(e, this.subarray(n, n + a), t)
                      return a
                    }),
                    (r.prototype.fill = function (e, t, n, i) {
                      if ('string' === typeof e) {
                        if (
                          ('string' === typeof t
                            ? ((i = t), (t = 0), (n = this.length))
                            : 'string' === typeof n && ((i = n), (n = this.length)),
                          1 === e.length)
                        ) {
                          var o = e.charCodeAt(0)
                          o < 256 && (e = o)
                        }
                        if (void 0 !== i && 'string' !== typeof i)
                          throw new TypeError('encoding must be a string')
                        if ('string' === typeof i && !r.isEncoding(i))
                          throw new TypeError('Unknown encoding: ' + i)
                      } else 'number' === typeof e && (e &= 255)
                      if (t < 0 || this.length < t || this.length < n)
                        throw new RangeError('Out of range index')
                      if (n <= t) return this
                      var a
                      if (
                        ((t >>>= 0),
                        (n = void 0 === n ? this.length : n >>> 0),
                        e || (e = 0),
                        'number' === typeof e)
                      )
                        for (a = t; a < n; ++a) this[a] = e
                      else {
                        var s = r.isBuffer(e) ? e : K(new r(e, i).toString()),
                          l = s.length
                        for (a = 0; a < n - t; ++a) this[a + t] = s[a % l]
                      }
                      return this
                    })
                  var X = /[^+\/0-9A-Za-z-_]/g
                  function Y(e) {
                    if ((e = Q(e).replace(X, '')).length < 2) return ''
                    for (; e.length % 4 !== 0; ) e += '='
                    return e
                  }
                  function Q(e) {
                    return e.trim ? e.trim() : e.replace(/^\s+|\s+$/g, '')
                  }
                  function Z(e) {
                    return e < 16 ? '0' + e.toString(16) : e.toString(16)
                  }
                  function K(e, t) {
                    var n
                    t = t || 1 / 0
                    for (var r = e.length, i = null, o = [], a = 0; a < r; ++a) {
                      if ((n = e.charCodeAt(a)) > 55295 && n < 57344) {
                        if (!i) {
                          if (n > 56319) {
                            ;(t -= 3) > -1 && o.push(239, 191, 189)
                            continue
                          }
                          if (a + 1 === r) {
                            ;(t -= 3) > -1 && o.push(239, 191, 189)
                            continue
                          }
                          i = n
                          continue
                        }
                        if (n < 56320) {
                          ;(t -= 3) > -1 && o.push(239, 191, 189), (i = n)
                          continue
                        }
                        n = 65536 + (((i - 55296) << 10) | (n - 56320))
                      } else i && (t -= 3) > -1 && o.push(239, 191, 189)
                      if (((i = null), n < 128)) {
                        if ((t -= 1) < 0) break
                        o.push(n)
                      } else if (n < 2048) {
                        if ((t -= 2) < 0) break
                        o.push((n >> 6) | 192, (63 & n) | 128)
                      } else if (n < 65536) {
                        if ((t -= 3) < 0) break
                        o.push((n >> 12) | 224, ((n >> 6) & 63) | 128, (63 & n) | 128)
                      } else {
                        if (!(n < 1114112)) throw new Error('Invalid code point')
                        if ((t -= 4) < 0) break
                        o.push(
                          (n >> 18) | 240,
                          ((n >> 12) & 63) | 128,
                          ((n >> 6) & 63) | 128,
                          (63 & n) | 128,
                        )
                      }
                    }
                    return o
                  }
                  function J(e) {
                    for (var t = [], n = 0; n < e.length; ++n) t.push(255 & e.charCodeAt(n))
                    return t
                  }
                  function $(e, t) {
                    for (var n, r, i, o = [], a = 0; a < e.length && !((t -= 2) < 0); ++a)
                      (r = (n = e.charCodeAt(a)) >> 8), (i = n % 256), o.push(i), o.push(r)
                    return o
                  }
                  function ee(e) {
                    return o.toByteArray(Y(e))
                  }
                  function te(e, t, n, r) {
                    for (var i = 0; i < r && !(i + n >= t.length || i >= e.length); ++i)
                      t[i + n] = e[i]
                    return i
                  }
                  function ne(e) {
                    return e !== e
                  }
                }.call(
                  this,
                  'undefined' !== typeof r.g
                    ? r.g
                    : 'undefined' !== typeof self
                    ? self
                    : 'undefined' !== typeof window
                    ? window
                    : {},
                  t('buffer').Buffer,
                ))
              },
              { 'base64-js': 3, buffer: 6, ieee754: 29, isarray: 35 },
            ],
            7: [
              function (t, n, r) {
                !(function () {
                  if ('undefined' !== typeof window)
                    try {
                      var t = new window.CustomEvent('test', { cancelable: !0 })
                      if ((t.preventDefault(), !0 !== t.defaultPrevented))
                        throw new Error('Could not prevent default')
                    } catch (e) {
                      var n = function (e, n) {
                        var r, i
                        return (
                          ((n = n || {}).bubbles = !!n.bubbles),
                          (n.cancelable = !!n.cancelable),
                          (r = document.createEvent('CustomEvent')).initCustomEvent(
                            e,
                            n.bubbles,
                            n.cancelable,
                            n.detail,
                          ),
                          (i = r.preventDefault),
                          (r.preventDefault = function () {
                            i.call(this)
                            try {
                              Object.defineProperty(this, 'defaultPrevented', {
                                get: function () {
                                  return !0
                                },
                              })
                            } catch (t) {
                              this.defaultPrevented = !0
                            }
                          }),
                          r
                        )
                      }
                      ;(n.prototype = window.Event.prototype), (window.CustomEvent = n)
                    }
                })()
              },
              {},
            ],
            8: [
              function (t, n, r) {
                function i() {
                  return (
                    'WebkitAppearance' in document.documentElement.style ||
                    (window.console && (console.firebug || (console.exception && console.table))) ||
                    (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) &&
                      parseInt(RegExp.$1, 10) >= 31)
                  )
                }
                function o() {
                  var e = arguments,
                    t = this.useColors
                  if (
                    ((e[0] =
                      (t ? '%c' : '') +
                      this.namespace +
                      (t ? ' %c' : ' ') +
                      e[0] +
                      (t ? '%c ' : ' ')),
                    !t)
                  )
                    return e
                  var n = 'color: ' + this.color
                  e = [e[0], n, 'color: inherit'].concat(Array.prototype.slice.call(e, 1))
                  var r = 0,
                    i = 0
                  return (
                    e[0].replace(/%[a-z%]/g, function (e) {
                      '%%' !== e && (r++, '%c' === e && (i = r))
                    }),
                    e.splice(i, 0, n),
                    e
                  )
                }
                function a() {
                  return (
                    'object' === typeof console &&
                    console.log &&
                    Function.prototype.apply.call(console.log, console, arguments)
                  )
                }
                function s(t) {
                  try {
                    null == t ? r.storage.removeItem('debug') : (r.storage.debug = t)
                  } catch (e) {}
                }
                function l() {
                  var t
                  try {
                    t = r.storage.debug
                  } catch (e) {}
                  return t
                }
                function c() {
                  try {
                    return window.localStorage
                  } catch (e) {}
                }
                ;((r = n.exports = t('./debug')).log = a),
                  (r.formatArgs = o),
                  (r.save = s),
                  (r.load = l),
                  (r.useColors = i),
                  (r.storage =
                    'undefined' != typeof chrome && 'undefined' != typeof chrome.storage
                      ? chrome.storage.local
                      : c()),
                  (r.colors = [
                    'lightseagreen',
                    'forestgreen',
                    'goldenrod',
                    'dodgerblue',
                    'darkorchid',
                    'crimson',
                  ]),
                  (r.formatters.j = function (e) {
                    return JSON.stringify(e)
                  }),
                  r.enable(l())
              },
              { './debug': 9 },
            ],
            9: [
              function (e, t, n) {
                ;((n = t.exports = o).coerce = c),
                  (n.disable = s),
                  (n.enable = a),
                  (n.enabled = l),
                  (n.names = []),
                  (n.skips = []),
                  (n.formatters = {})
                var r = 0
                function i() {
                  return n.colors[r++ % n.colors.length]
                }
                function o(e) {
                  function t() {}
                  function r() {
                    var e = r
                    null == e.useColors && (e.useColors = n.useColors()),
                      null == e.color && e.useColors && (e.color = i())
                    var t = Array.prototype.slice.call(arguments)
                    ;(t[0] = n.coerce(t[0])), 'string' !== typeof t[0] && (t = ['%o'].concat(t))
                    var o = 0
                    ;(t[0] = t[0].replace(/%([a-z%])/g, function (r, i) {
                      if ('%%' === r) return r
                      o++
                      var a = n.formatters[i]
                      if ('function' === typeof a) {
                        var s = t[o]
                        ;(r = a.call(e, s)), t.splice(o, 1), o--
                      }
                      return r
                    })),
                      'function' === typeof n.formatArgs && (t = n.formatArgs.apply(e, t)),
                      (r.log || n.log || console.log.bind(console)).apply(e, t)
                  }
                  ;(t.enabled = !1), (r.enabled = !0)
                  var o = n.enabled(e) ? r : t
                  return (o.namespace = e), o
                }
                function a(e) {
                  n.save(e)
                  for (var t = (e || '').split(/[\s,]+/), r = t.length, i = 0; i < r; i++)
                    t[i] &&
                      ('-' === (e = t[i].replace(/\*/g, '.*?'))[0]
                        ? n.skips.push(new RegExp('^' + e.substr(1) + '$'))
                        : n.names.push(new RegExp('^' + e + '$')))
                }
                function s() {
                  n.enable('')
                }
                function l(e) {
                  var t, r
                  for (t = 0, r = n.skips.length; t < r; t++) if (n.skips[t].test(e)) return !1
                  for (t = 0, r = n.names.length; t < r; t++) if (n.names[t].test(e)) return !0
                  return !1
                }
                function c(e) {
                  return e instanceof Error ? e.stack || e.message : e
                }
              },
              {},
            ],
            10: [
              function (e, t, n) {
                'use strict'
                var r = e('is-obj'),
                  i = Object.prototype.hasOwnProperty,
                  o = Object.prototype.propertyIsEnumerable
                function a(e) {
                  if (null === e || void 0 === e)
                    throw new TypeError('Sources cannot be null or undefined')
                  return Object(e)
                }
                function s(e, t, n) {
                  var o = t[n]
                  if (void 0 !== o && null !== o) {
                    if (i.call(e, n) && (void 0 === e[n] || null === e[n]))
                      throw new TypeError('Cannot convert undefined or null to object (' + n + ')')
                    i.call(e, n) && r(o) ? (e[n] = l(Object(e[n]), t[n])) : (e[n] = o)
                  }
                }
                function l(e, t) {
                  if (e === t) return e
                  for (var n in (t = Object(t))) i.call(t, n) && s(e, t, n)
                  if (Object.getOwnPropertySymbols)
                    for (var r = Object.getOwnPropertySymbols(t), a = 0; a < r.length; a++)
                      o.call(t, r[a]) && s(e, t, r[a])
                  return e
                }
                t.exports = function (e) {
                  e = a(e)
                  for (var t = 1; t < arguments.length; t++) l(e, arguments[t])
                  return e
                }
              },
              { 'is-obj': 34 },
            ],
            11: [
              function (t, n, r) {
                'use strict'
                var i = t('object-keys'),
                  o = 'function' === typeof Symbol && 'symbol' === typeof Symbol('foo'),
                  a = Object.prototype.toString,
                  s = Array.prototype.concat,
                  l = Object.defineProperty,
                  c = function (e) {
                    return 'function' === typeof e && '[object Function]' === a.call(e)
                  },
                  u = function () {
                    var t = {}
                    try {
                      for (var n in (l(t, 'x', { enumerable: !1, value: t }), t)) return !1
                      return t.x === t
                    } catch (e) {
                      return !1
                    }
                  },
                  h = l && u(),
                  d = function (e, t, n, r) {
                    ;(!(t in e) || (c(r) && r())) &&
                      (h
                        ? l(e, t, { configurable: !0, enumerable: !1, value: n, writable: !0 })
                        : (e[t] = n))
                  },
                  p = function (e, t) {
                    var n = arguments.length > 2 ? arguments[2] : {},
                      r = i(t)
                    o && (r = s.call(r, Object.getOwnPropertySymbols(t)))
                    for (var a = 0; a < r.length; a += 1) d(e, r[a], t[r[a]], n[r[a]])
                  }
                ;(p.supportsDescriptors = !!h), (n.exports = p)
              },
              { 'object-keys': 41 },
            ],
            12: [
              function (t, n, r) {
                !(function (t, n, r, i) {
                  'use strict'
                  function o(e, t) {
                    for (var n = 0, r = e.length; n < r; n++) g(e[n], t)
                  }
                  function a(e) {
                    for (var t, n = 0, r = e.length; n < r; n++) (t = e[n]), M(t, H[l(t)])
                  }
                  function s(e) {
                    return function (t) {
                      ie(t) && (g(t, e), o(t.querySelectorAll(G), e))
                    }
                  }
                  function l(e) {
                    var t = se.call(e, 'is'),
                      n = e.nodeName.toUpperCase(),
                      r = j.call(U, t ? F + t.toUpperCase() : B + n)
                    return t && -1 < r && !c(n, t) ? -1 : r
                  }
                  function c(e, t) {
                    return -1 < G.indexOf(e + '[is="' + t + '"]')
                  }
                  function u(e) {
                    var t = e.currentTarget,
                      n = e.attrChange,
                      r = e.attrName,
                      i = e.target
                    ge &&
                      (!i || i === t) &&
                      t.attributeChangedCallback &&
                      'style' !== r &&
                      e.prevValue !== e.newValue &&
                      t.attributeChangedCallback(
                        r,
                        n === e[L] ? null : e.prevValue,
                        n === e[P] ? null : e.newValue,
                      )
                  }
                  function h(e) {
                    var t = s(e)
                    return function (e) {
                      y.push(t, e.target)
                    }
                  }
                  function d(e) {
                    ve && ((ve = !1), e.currentTarget.removeEventListener(O, d)),
                      o((e.target || n).querySelectorAll(G), e.detail === S ? S : T),
                      re && m()
                  }
                  function p(e, t) {
                    var n = this
                    le.call(n, e, t), b.call(n, { target: n })
                  }
                  function f(e, t) {
                    ee(e, t),
                      x
                        ? x.observe(e, he)
                        : (me && ((e.setAttribute = p), (e[_] = w(e)), e.addEventListener(I, b)),
                          e.addEventListener(D, u)),
                      e.createdCallback &&
                        ge &&
                        ((e.created = !0), e.createdCallback(), (e.created = !1))
                  }
                  function m() {
                    for (var e, t = 0, n = oe.length; t < n; t++)
                      (e = oe[t]), z.contains(e) || (n--, oe.splice(t--, 1), g(e, S))
                  }
                  function v(e) {
                    throw new Error('A ' + e + ' type is already registered')
                  }
                  function g(e, t) {
                    var n,
                      r = l(e)
                    ;-1 < r &&
                      (E(e, H[r]),
                      (r = 0),
                      t !== T || e[T]
                        ? t === S && !e[S] && ((e[T] = !1), (e[S] = !0), (r = 1))
                        : ((e[S] = !1),
                          (e[T] = !0),
                          (r = 1),
                          re && j.call(oe, e) < 0 && oe.push(e)),
                      r && (n = e[t + 'Callback']) && n.call(e))
                  }
                  if (!(i in n)) {
                    var y,
                      b,
                      A,
                      w,
                      x,
                      E,
                      M,
                      _ = '__' + i + ((1e5 * Math.random()) >> 0),
                      T = 'attached',
                      S = 'detached',
                      C = 'extends',
                      L = 'ADDITION',
                      R = 'MODIFICATION',
                      P = 'REMOVAL',
                      D = 'DOMAttrModified',
                      O = 'DOMContentLoaded',
                      I = 'DOMSubtreeModified',
                      B = '<',
                      F = '=',
                      k = /^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,
                      N = [
                        'ANNOTATION-XML',
                        'COLOR-PROFILE',
                        'FONT-FACE',
                        'FONT-FACE-SRC',
                        'FONT-FACE-URI',
                        'FONT-FACE-FORMAT',
                        'FONT-FACE-NAME',
                        'MISSING-GLYPH',
                      ],
                      U = [],
                      H = [],
                      G = '',
                      z = n.documentElement,
                      j =
                        U.indexOf ||
                        function (e) {
                          for (var t = this.length; t-- && this[t] !== e; );
                          return t
                        },
                      V = r.prototype,
                      W = V.hasOwnProperty,
                      q = V.isPrototypeOf,
                      X = r.defineProperty,
                      Y = r.getOwnPropertyDescriptor,
                      Q = r.getOwnPropertyNames,
                      Z = r.getPrototypeOf,
                      K = r.setPrototypeOf,
                      J = !!r.__proto__,
                      $ =
                        r.create ||
                        function e(t) {
                          return t ? ((e.prototype = t), new e()) : this
                        },
                      ee =
                        K ||
                        (J
                          ? function (e, t) {
                              return (e.__proto__ = t), e
                            }
                          : Q && Y
                          ? (function () {
                              function e(e, t) {
                                for (var n, r = Q(t), i = 0, o = r.length; i < o; i++)
                                  (n = r[i]), W.call(e, n) || X(e, n, Y(t, n))
                              }
                              return function (t, n) {
                                do {
                                  e(t, n)
                                } while ((n = Z(n)) && !q.call(n, t))
                                return t
                              }
                            })()
                          : function (e, t) {
                              for (var n in t) e[n] = t[n]
                              return e
                            }),
                      te = t.MutationObserver || t.WebKitMutationObserver,
                      ne = (t.HTMLElement || t.Element || t.Node).prototype,
                      re = !q.call(ne, z),
                      ie = re
                        ? function (e) {
                            return 1 === e.nodeType
                          }
                        : function (e) {
                            return q.call(ne, e)
                          },
                      oe = re && [],
                      ae = ne.cloneNode,
                      se = ne.getAttribute,
                      le = ne.setAttribute,
                      ce = ne.removeAttribute,
                      ue = n.createElement,
                      he = te && { attributes: !0, characterData: !0, attributeOldValue: !0 },
                      de =
                        te ||
                        function (e) {
                          ;(me = !1), z.removeEventListener(D, de)
                        },
                      pe =
                        t.requestAnimationFrame ||
                        t.webkitRequestAnimationFrame ||
                        t.mozRequestAnimationFrame ||
                        t.msRequestAnimationFrame ||
                        function (e) {
                          setTimeout(e, 10)
                        },
                      fe = !1,
                      me = !0,
                      ve = !0,
                      ge = !0
                    K || J
                      ? ((E = function (e, t) {
                          q.call(t, e) || f(e, t)
                        }),
                        (M = f))
                      : (M = E =
                          function (e, t) {
                            e[_] || ((e[_] = r(!0)), f(e, t))
                          }),
                      re
                        ? ((me = !1),
                          (function () {
                            var t = Y(ne, 'addEventListener'),
                              n = t.value,
                              r = function (e) {
                                var t = new CustomEvent(D, { bubbles: !0 })
                                ;(t.attrName = e),
                                  (t.prevValue = se.call(this, e)),
                                  (t.newValue = null),
                                  (t[P] = t.attrChange = 2),
                                  ce.call(this, e),
                                  this.dispatchEvent(t)
                              },
                              i = function (t, n) {
                                var r = this.hasAttribute(t),
                                  i = r && se.call(this, t)
                                ;(e = new CustomEvent(D, { bubbles: !0 })),
                                  le.call(this, t, n),
                                  (e.attrName = t),
                                  (e.prevValue = r ? i : null),
                                  (e.newValue = n),
                                  r ? (e[R] = e.attrChange = 1) : (e[L] = e.attrChange = 0),
                                  this.dispatchEvent(e)
                              },
                              o = function (e) {
                                var t,
                                  n = e.currentTarget,
                                  r = n[_],
                                  i = e.propertyName
                                r.hasOwnProperty(i) &&
                                  ((r = r[i]),
                                  ((t = new CustomEvent(D, { bubbles: !0 })).attrName = r.name),
                                  (t.prevValue = r.value || null),
                                  (t.newValue = r.value = n[i] || null),
                                  null == t.prevValue
                                    ? (t[L] = t.attrChange = 0)
                                    : (t[R] = t.attrChange = 1),
                                  n.dispatchEvent(t))
                              }
                            ;(t.value = function (e, t, a) {
                              e === D &&
                                this.attributeChangedCallback &&
                                this.setAttribute !== i &&
                                ((this[_] = {
                                  className: { name: 'class', value: this.className },
                                }),
                                (this.setAttribute = i),
                                (this.removeAttribute = r),
                                n.call(this, 'propertychange', o)),
                                n.call(this, e, t, a)
                            }),
                              X(ne, 'addEventListener', t)
                          })())
                        : te ||
                          (z.addEventListener(D, de),
                          z.setAttribute(_, 1),
                          z.removeAttribute(_),
                          me &&
                            ((b = function (e) {
                              var t,
                                n,
                                r,
                                i = this
                              if (i === e.target) {
                                for (r in ((t = i[_]), (i[_] = n = w(i)), n)) {
                                  if (!(r in t)) return A(0, i, r, t[r], n[r], L)
                                  if (n[r] !== t[r]) return A(1, i, r, t[r], n[r], R)
                                }
                                for (r in t) if (!(r in n)) return A(2, i, r, t[r], n[r], P)
                              }
                            }),
                            (A = function (e, t, n, r, i, o) {
                              var a = {
                                attrChange: e,
                                currentTarget: t,
                                attrName: n,
                                prevValue: r,
                                newValue: i,
                              }
                              ;(a[o] = e), u(a)
                            }),
                            (w = function (e) {
                              for (
                                var t, n, r = {}, i = e.attributes, o = 0, a = i.length;
                                o < a;
                                o++
                              )
                                'setAttribute' !== (n = (t = i[o]).name) && (r[n] = t.value)
                              return r
                            }))),
                      (n[i] = function (e, t) {
                        if (
                          ((r = e.toUpperCase()),
                          fe ||
                            ((fe = !0),
                            te
                              ? (x = (function (e, t) {
                                  function n(e, t) {
                                    for (var n = 0, r = e.length; n < r; t(e[n++]));
                                  }
                                  return new te(function (r) {
                                    for (var i, o, a, s = 0, l = r.length; s < l; s++)
                                      'childList' === (i = r[s]).type
                                        ? (n(i.addedNodes, e), n(i.removedNodes, t))
                                        : ((o = i.target),
                                          ge &&
                                            o.attributeChangedCallback &&
                                            'style' !== i.attributeName &&
                                            (a = se.call(o, i.attributeName)) !== i.oldValue &&
                                            o.attributeChangedCallback(
                                              i.attributeName,
                                              i.oldValue,
                                              a,
                                            ))
                                  })
                                })(s(T), s(S))).observe(n, { childList: !0, subtree: !0 })
                              : ((y = []),
                                pe(function e() {
                                  for (; y.length; ) y.shift().call(null, y.shift())
                                  pe(e)
                                }),
                                n.addEventListener('DOMNodeInserted', h(T)),
                                n.addEventListener('DOMNodeRemoved', h(S))),
                            n.addEventListener(O, d),
                            n.addEventListener('readystatechange', d),
                            (n.createElement = function (e, t) {
                              var r = ue.apply(n, arguments),
                                i = '' + e,
                                o = j.call(U, (t ? F : B) + (t || i).toUpperCase()),
                                a = -1 < o
                              return (
                                t &&
                                  (r.setAttribute('is', (t = t.toLowerCase())),
                                  a && (a = c(i.toUpperCase(), t))),
                                (ge = !n.createElement.innerHTMLHelper),
                                a && M(r, H[o]),
                                r
                              )
                            }),
                            (ne.cloneNode = function (e) {
                              var t = ae.call(this, !!e),
                                n = l(t)
                              return -1 < n && M(t, H[n]), e && a(t.querySelectorAll(G)), t
                            })),
                          -2 < j.call(U, F + r) + j.call(U, B + r) && v(e),
                          !k.test(r) || -1 < j.call(N, r))
                        )
                          throw new Error('The type ' + e + ' is invalid')
                        var r,
                          i,
                          u = function () {
                            return f ? n.createElement(m, r) : n.createElement(m)
                          },
                          p = t || V,
                          f = W.call(p, C),
                          m = f ? t[C].toUpperCase() : r
                        return (
                          f && -1 < j.call(U, B + m) && v(m),
                          (i = U.push((f ? F : B) + r) - 1),
                          (G = G.concat(
                            G.length ? ',' : '',
                            f ? m + '[is="' + e.toLowerCase() + '"]' : m,
                          )),
                          (u.prototype = H[i] = W.call(p, 'prototype') ? p.prototype : $(ne)),
                          o(n.querySelectorAll(G), T),
                          u
                        )
                      })
                  }
                })(window, document, Object, 'registerElement')
              },
              {},
            ],
            13: [
              function (e, t, n) {
                t.exports = function (e) {
                  switch (e) {
                    case 'int8':
                      return Int8Array
                    case 'int16':
                      return Int16Array
                    case 'int32':
                      return Int32Array
                    case 'uint8':
                      return Uint8Array
                    case 'uint16':
                      return Uint16Array
                    case 'uint32':
                      return Uint32Array
                    case 'float32':
                      return Float32Array
                    case 'float64':
                      return Float64Array
                    case 'array':
                      return Array
                    case 'uint8_clamped':
                      return Uint8ClampedArray
                  }
                }
              },
              {},
            ],
            14: [
              function (e, t, n) {
                'use strict'
                var r,
                  i,
                  o,
                  a,
                  s = Object.getOwnPropertyDescriptor
                    ? (function () {
                        return Object.getOwnPropertyDescriptor(arguments, 'callee').get
                      })()
                    : function () {
                        throw new TypeError()
                      },
                  l = 'function' === typeof Symbol && 'symbol' === typeof Symbol.iterator,
                  c =
                    Object.getPrototypeOf ||
                    function (e) {
                      return e.__proto__
                    },
                  u = i ? c(i) : r,
                  h = o ? o.constructor : r,
                  d = a ? c(a) : r,
                  p = a ? a() : r,
                  f = 'undefined' === typeof Uint8Array ? r : c(Uint8Array),
                  m = {
                    '$ %Array%': Array,
                    '$ %ArrayBuffer%': 'undefined' === typeof ArrayBuffer ? r : ArrayBuffer,
                    '$ %ArrayBufferPrototype%':
                      'undefined' === typeof ArrayBuffer ? r : ArrayBuffer.prototype,
                    '$ %ArrayIteratorPrototype%': l ? c([][Symbol.iterator]()) : r,
                    '$ %ArrayPrototype%': Array.prototype,
                    '$ %ArrayProto_entries%': Array.prototype.entries,
                    '$ %ArrayProto_forEach%': Array.prototype.forEach,
                    '$ %ArrayProto_keys%': Array.prototype.keys,
                    '$ %ArrayProto_values%': Array.prototype.values,
                    '$ %AsyncFromSyncIteratorPrototype%': r,
                    '$ %AsyncFunction%': h,
                    '$ %AsyncFunctionPrototype%': h ? h.prototype : r,
                    '$ %AsyncGenerator%': a ? c(p) : r,
                    '$ %AsyncGeneratorFunction%': d,
                    '$ %AsyncGeneratorPrototype%': d ? d.prototype : r,
                    '$ %AsyncIteratorPrototype%':
                      p && l && Symbol.asyncIterator ? p[Symbol.asyncIterator]() : r,
                    '$ %Atomics%': 'undefined' === typeof Atomics ? r : Atomics,
                    '$ %Boolean%': Boolean,
                    '$ %BooleanPrototype%': Boolean.prototype,
                    '$ %DataView%': 'undefined' === typeof DataView ? r : DataView,
                    '$ %DataViewPrototype%':
                      'undefined' === typeof DataView ? r : DataView.prototype,
                    '$ %Date%': Date,
                    '$ %DatePrototype%': Date.prototype,
                    '$ %decodeURI%': decodeURI,
                    '$ %decodeURIComponent%': decodeURIComponent,
                    '$ %encodeURI%': encodeURI,
                    '$ %encodeURIComponent%': encodeURIComponent,
                    '$ %Error%': Error,
                    '$ %ErrorPrototype%': Error.prototype,
                    '$ %eval%': eval,
                    '$ %EvalError%': EvalError,
                    '$ %EvalErrorPrototype%': EvalError.prototype,
                    '$ %Float32Array%': 'undefined' === typeof Float32Array ? r : Float32Array,
                    '$ %Float32ArrayPrototype%':
                      'undefined' === typeof Float32Array ? r : Float32Array.prototype,
                    '$ %Float64Array%': 'undefined' === typeof Float64Array ? r : Float64Array,
                    '$ %Float64ArrayPrototype%':
                      'undefined' === typeof Float64Array ? r : Float64Array.prototype,
                    '$ %Function%': Function,
                    '$ %FunctionPrototype%': Function.prototype,
                    '$ %Generator%': i ? c(i()) : r,
                    '$ %GeneratorFunction%': u,
                    '$ %GeneratorPrototype%': u ? u.prototype : r,
                    '$ %Int8Array%': 'undefined' === typeof Int8Array ? r : Int8Array,
                    '$ %Int8ArrayPrototype%':
                      'undefined' === typeof Int8Array ? r : Int8Array.prototype,
                    '$ %Int16Array%': 'undefined' === typeof Int16Array ? r : Int16Array,
                    '$ %Int16ArrayPrototype%':
                      'undefined' === typeof Int16Array ? r : Int8Array.prototype,
                    '$ %Int32Array%': 'undefined' === typeof Int32Array ? r : Int32Array,
                    '$ %Int32ArrayPrototype%':
                      'undefined' === typeof Int32Array ? r : Int32Array.prototype,
                    '$ %isFinite%': isFinite,
                    '$ %isNaN%': isNaN,
                    '$ %IteratorPrototype%': l ? c(c([][Symbol.iterator]())) : r,
                    '$ %JSON%': JSON,
                    '$ %JSONParse%': JSON.parse,
                    '$ %Map%': 'undefined' === typeof Map ? r : Map,
                    '$ %MapIteratorPrototype%':
                      'undefined' !== typeof Map && l ? c(new Map()[Symbol.iterator]()) : r,
                    '$ %MapPrototype%': 'undefined' === typeof Map ? r : Map.prototype,
                    '$ %Math%': Math,
                    '$ %Number%': Number,
                    '$ %NumberPrototype%': Number.prototype,
                    '$ %Object%': Object,
                    '$ %ObjectPrototype%': Object.prototype,
                    '$ %ObjProto_toString%': Object.prototype.toString,
                    '$ %ObjProto_valueOf%': Object.prototype.valueOf,
                    '$ %parseFloat%': parseFloat,
                    '$ %parseInt%': parseInt,
                    '$ %Promise%': 'undefined' === typeof Promise ? r : Promise,
                    '$ %PromisePrototype%': 'undefined' === typeof Promise ? r : Promise.prototype,
                    '$ %PromiseProto_then%':
                      'undefined' === typeof Promise ? r : Promise.prototype.then,
                    '$ %Promise_all%': 'undefined' === typeof Promise ? r : Promise.all,
                    '$ %Promise_reject%': 'undefined' === typeof Promise ? r : Promise.reject,
                    '$ %Promise_resolve%': 'undefined' === typeof Promise ? r : Promise.resolve,
                    '$ %Proxy%': 'undefined' === typeof Proxy ? r : Proxy,
                    '$ %RangeError%': RangeError,
                    '$ %RangeErrorPrototype%': RangeError.prototype,
                    '$ %ReferenceError%': ReferenceError,
                    '$ %ReferenceErrorPrototype%': ReferenceError.prototype,
                    '$ %Reflect%': 'undefined' === typeof Reflect ? r : Reflect,
                    '$ %RegExp%': RegExp,
                    '$ %RegExpPrototype%': RegExp.prototype,
                    '$ %Set%': 'undefined' === typeof Set ? r : Set,
                    '$ %SetIteratorPrototype%':
                      'undefined' !== typeof Set && l ? c(new Set()[Symbol.iterator]()) : r,
                    '$ %SetPrototype%': 'undefined' === typeof Set ? r : Set.prototype,
                    '$ %SharedArrayBuffer%':
                      'undefined' === typeof SharedArrayBuffer ? r : SharedArrayBuffer,
                    '$ %SharedArrayBufferPrototype%':
                      'undefined' === typeof SharedArrayBuffer ? r : SharedArrayBuffer.prototype,
                    '$ %String%': String,
                    '$ %StringIteratorPrototype%': l ? c(''[Symbol.iterator]()) : r,
                    '$ %StringPrototype%': String.prototype,
                    '$ %Symbol%': l ? Symbol : r,
                    '$ %SymbolPrototype%': l ? Symbol.prototype : r,
                    '$ %SyntaxError%': SyntaxError,
                    '$ %SyntaxErrorPrototype%': SyntaxError.prototype,
                    '$ %ThrowTypeError%': s,
                    '$ %TypedArray%': f,
                    '$ %TypedArrayPrototype%': f ? f.prototype : r,
                    '$ %TypeError%': TypeError,
                    '$ %TypeErrorPrototype%': TypeError.prototype,
                    '$ %Uint8Array%': 'undefined' === typeof Uint8Array ? r : Uint8Array,
                    '$ %Uint8ArrayPrototype%':
                      'undefined' === typeof Uint8Array ? r : Uint8Array.prototype,
                    '$ %Uint8ClampedArray%':
                      'undefined' === typeof Uint8ClampedArray ? r : Uint8ClampedArray,
                    '$ %Uint8ClampedArrayPrototype%':
                      'undefined' === typeof Uint8ClampedArray ? r : Uint8ClampedArray.prototype,
                    '$ %Uint16Array%': 'undefined' === typeof Uint16Array ? r : Uint16Array,
                    '$ %Uint16ArrayPrototype%':
                      'undefined' === typeof Uint16Array ? r : Uint16Array.prototype,
                    '$ %Uint32Array%': 'undefined' === typeof Uint32Array ? r : Uint32Array,
                    '$ %Uint32ArrayPrototype%':
                      'undefined' === typeof Uint32Array ? r : Uint32Array.prototype,
                    '$ %URIError%': URIError,
                    '$ %URIErrorPrototype%': URIError.prototype,
                    '$ %WeakMap%': 'undefined' === typeof WeakMap ? r : WeakMap,
                    '$ %WeakMapPrototype%': 'undefined' === typeof WeakMap ? r : WeakMap.prototype,
                    '$ %WeakSet%': 'undefined' === typeof WeakSet ? r : WeakSet,
                    '$ %WeakSetPrototype%': 'undefined' === typeof WeakSet ? r : WeakSet.prototype,
                  }
                t.exports = function (e, t) {
                  if (arguments.length > 1 && 'boolean' !== typeof t)
                    throw new TypeError('"allowMissing" argument must be a boolean')
                  var n = '$ ' + e
                  if (!(n in m)) throw new SyntaxError('intrinsic ' + e + ' does not exist!')
                  if ('undefined' === typeof m[n] && !t)
                    throw new TypeError(
                      'intrinsic ' + e + ' exists, but is not available. Please file an issue!',
                    )
                  return m[n]
                }
              },
              {},
            ],
            15: [
              function (e, t, n) {
                'use strict'
                var r = e('./GetIntrinsic'),
                  i = r('%Object%'),
                  o = r('%TypeError%'),
                  a = r('%String%'),
                  s = e('./helpers/assertRecord'),
                  l = e('./helpers/isNaN'),
                  c = e('./helpers/isFinite'),
                  u = e('./helpers/sign'),
                  h = e('./helpers/mod'),
                  d = e('is-callable'),
                  p = e('es-to-primitive/es5'),
                  f = e('has'),
                  m = {
                    ToPrimitive: p,
                    ToBoolean: function (e) {
                      return !!e
                    },
                    ToNumber: function (e) {
                      return +e
                    },
                    ToInteger: function (e) {
                      var t = this.ToNumber(e)
                      return l(t) ? 0 : 0 !== t && c(t) ? u(t) * Math.floor(Math.abs(t)) : t
                    },
                    ToInt32: function (e) {
                      return this.ToNumber(e) >> 0
                    },
                    ToUint32: function (e) {
                      return this.ToNumber(e) >>> 0
                    },
                    ToUint16: function (e) {
                      var t = this.ToNumber(e)
                      if (l(t) || 0 === t || !c(t)) return 0
                      var n = u(t) * Math.floor(Math.abs(t))
                      return h(n, 65536)
                    },
                    ToString: function (e) {
                      return a(e)
                    },
                    ToObject: function (e) {
                      return this.CheckObjectCoercible(e), i(e)
                    },
                    CheckObjectCoercible: function (e, t) {
                      if (null == e) throw new o(t || 'Cannot call method on ' + e)
                      return e
                    },
                    IsCallable: d,
                    SameValue: function (e, t) {
                      return e === t ? 0 !== e || 1 / e === 1 / t : l(e) && l(t)
                    },
                    Type: function (e) {
                      return null === e
                        ? 'Null'
                        : 'undefined' === typeof e
                        ? 'Undefined'
                        : 'function' === typeof e || 'object' === typeof e
                        ? 'Object'
                        : 'number' === typeof e
                        ? 'Number'
                        : 'boolean' === typeof e
                        ? 'Boolean'
                        : 'string' === typeof e
                        ? 'String'
                        : void 0
                    },
                    IsPropertyDescriptor: function (e) {
                      if ('Object' !== this.Type(e)) return !1
                      var t = {
                        '[[Configurable]]': !0,
                        '[[Enumerable]]': !0,
                        '[[Get]]': !0,
                        '[[Set]]': !0,
                        '[[Value]]': !0,
                        '[[Writable]]': !0,
                      }
                      for (var n in e) if (f(e, n) && !t[n]) return !1
                      var r = f(e, '[[Value]]'),
                        i = f(e, '[[Get]]') || f(e, '[[Set]]')
                      if (r && i)
                        throw new o(
                          'Property Descriptors may not be both accessor and data descriptors',
                        )
                      return !0
                    },
                    IsAccessorDescriptor: function (e) {
                      return (
                        'undefined' !== typeof e &&
                        (s(this, 'Property Descriptor', 'Desc', e),
                        !(!f(e, '[[Get]]') && !f(e, '[[Set]]')))
                      )
                    },
                    IsDataDescriptor: function (e) {
                      return (
                        'undefined' !== typeof e &&
                        (s(this, 'Property Descriptor', 'Desc', e),
                        !(!f(e, '[[Value]]') && !f(e, '[[Writable]]')))
                      )
                    },
                    IsGenericDescriptor: function (e) {
                      return (
                        'undefined' !== typeof e &&
                        (s(this, 'Property Descriptor', 'Desc', e),
                        !this.IsAccessorDescriptor(e) && !this.IsDataDescriptor(e))
                      )
                    },
                    FromPropertyDescriptor: function (e) {
                      if ('undefined' === typeof e) return e
                      if ((s(this, 'Property Descriptor', 'Desc', e), this.IsDataDescriptor(e)))
                        return {
                          value: e['[[Value]]'],
                          writable: !!e['[[Writable]]'],
                          enumerable: !!e['[[Enumerable]]'],
                          configurable: !!e['[[Configurable]]'],
                        }
                      if (this.IsAccessorDescriptor(e))
                        return {
                          get: e['[[Get]]'],
                          set: e['[[Set]]'],
                          enumerable: !!e['[[Enumerable]]'],
                          configurable: !!e['[[Configurable]]'],
                        }
                      throw new o(
                        'FromPropertyDescriptor must be called with a fully populated Property Descriptor',
                      )
                    },
                    ToPropertyDescriptor: function (e) {
                      if ('Object' !== this.Type(e))
                        throw new o('ToPropertyDescriptor requires an object')
                      var t = {}
                      if (
                        (f(e, 'enumerable') && (t['[[Enumerable]]'] = this.ToBoolean(e.enumerable)),
                        f(e, 'configurable') &&
                          (t['[[Configurable]]'] = this.ToBoolean(e.configurable)),
                        f(e, 'value') && (t['[[Value]]'] = e.value),
                        f(e, 'writable') && (t['[[Writable]]'] = this.ToBoolean(e.writable)),
                        f(e, 'get'))
                      ) {
                        var n = e.get
                        if ('undefined' !== typeof n && !this.IsCallable(n))
                          throw new TypeError('getter must be a function')
                        t['[[Get]]'] = n
                      }
                      if (f(e, 'set')) {
                        var r = e.set
                        if ('undefined' !== typeof r && !this.IsCallable(r))
                          throw new o('setter must be a function')
                        t['[[Set]]'] = r
                      }
                      if (
                        (f(t, '[[Get]]') || f(t, '[[Set]]')) &&
                        (f(t, '[[Value]]') || f(t, '[[Writable]]'))
                      )
                        throw new o(
                          'Invalid property descriptor. Cannot both specify accessors and a value or writable attribute',
                        )
                      return t
                    },
                  }
                t.exports = m
              },
              {
                './GetIntrinsic': 14,
                './helpers/assertRecord': 16,
                './helpers/isFinite': 17,
                './helpers/isNaN': 18,
                './helpers/mod': 19,
                './helpers/sign': 20,
                'es-to-primitive/es5': 21,
                has: 28,
                'is-callable': 32,
              },
            ],
            16: [
              function (e, t, n) {
                'use strict'
                var r = e('../GetIntrinsic'),
                  i = r('%TypeError%'),
                  o = r('%SyntaxError%'),
                  a = e('has'),
                  s = {
                    'Property Descriptor': function (e, t) {
                      if ('Object' !== e.Type(t)) return !1
                      var n = {
                        '[[Configurable]]': !0,
                        '[[Enumerable]]': !0,
                        '[[Get]]': !0,
                        '[[Set]]': !0,
                        '[[Value]]': !0,
                        '[[Writable]]': !0,
                      }
                      for (var r in t) if (a(t, r) && !n[r]) return !1
                      var o = a(t, '[[Value]]'),
                        s = a(t, '[[Get]]') || a(t, '[[Set]]')
                      if (o && s)
                        throw new i(
                          'Property Descriptors may not be both accessor and data descriptors',
                        )
                      return !0
                    },
                  }
                t.exports = function (e, t, n, r) {
                  var a = s[t]
                  if ('function' !== typeof a) throw new o('unknown record type: ' + t)
                  if (!a(e, r)) throw new i(n + ' must be a ' + t)
                  console.log(a(e, r), r)
                }
              },
              { '../GetIntrinsic': 14, has: 28 },
            ],
            17: [
              function (e, t, n) {
                var r =
                  Number.isNaN ||
                  function (e) {
                    return e !== e
                  }
                t.exports =
                  Number.isFinite ||
                  function (e) {
                    return 'number' === typeof e && !r(e) && e !== 1 / 0 && e !== -1 / 0
                  }
              },
              {},
            ],
            18: [
              function (e, t, n) {
                t.exports =
                  Number.isNaN ||
                  function (e) {
                    return e !== e
                  }
              },
              {},
            ],
            19: [
              function (e, t, n) {
                t.exports = function (e, t) {
                  var n = e % t
                  return Math.floor(n >= 0 ? n : n + t)
                }
              },
              {},
            ],
            20: [
              function (e, t, n) {
                t.exports = function (e) {
                  return e >= 0 ? 1 : -1
                }
              },
              {},
            ],
            21: [
              function (e, t, n) {
                'use strict'
                var r = Object.prototype.toString,
                  i = e('./helpers/isPrimitive'),
                  o = e('is-callable'),
                  a = {
                    '[[DefaultValue]]': function (e) {
                      var t
                      if (
                        (t =
                          arguments.length > 1
                            ? arguments[1]
                            : '[object Date]' === r.call(e)
                            ? String
                            : Number) === String ||
                        t === Number
                      ) {
                        var n,
                          a,
                          s = t === String ? ['toString', 'valueOf'] : ['valueOf', 'toString']
                        for (a = 0; a < s.length; ++a)
                          if (o(e[s[a]]) && ((n = e[s[a]]()), i(n))) return n
                        throw new TypeError('No default value')
                      }
                      throw new TypeError('invalid [[DefaultValue]] hint supplied')
                    },
                  }
                t.exports = function (e) {
                  return i(e)
                    ? e
                    : arguments.length > 1
                    ? a['[[DefaultValue]]'](e, arguments[1])
                    : a['[[DefaultValue]]'](e)
                }
              },
              { './helpers/isPrimitive': 22, 'is-callable': 32 },
            ],
            22: [
              function (e, t, n) {
                t.exports = function (e) {
                  return null === e || ('function' !== typeof e && 'object' !== typeof e)
                }
              },
              {},
            ],
            23: [
              function (e, t, n) {
                var r = e('dtype')
                function i(e, t, n) {
                  if (!e) throw new TypeError('must specify data as first parameter')
                  if (
                    ((n = 0 | +(n || 0)), Array.isArray(e) && e[0] && 'number' === typeof e[0][0])
                  ) {
                    var i,
                      o,
                      a,
                      s,
                      l = e[0].length,
                      c = e.length * l
                    ;(t && 'string' !== typeof t) || (t = new (r(t || 'float32'))(c + n))
                    var u = t.length - n
                    if (c !== u)
                      throw new Error(
                        'source length ' +
                          c +
                          ' (' +
                          l +
                          'x' +
                          e.length +
                          ') does not match destination length ' +
                          u,
                      )
                    for (i = 0, a = n; i < e.length; i++)
                      for (o = 0; o < l; o++) t[a++] = null === e[i][o] ? NaN : e[i][o]
                  } else if (t && 'string' !== typeof t) t.set(e, n)
                  else {
                    var h = r(t || 'float32')
                    if (Array.isArray(e) || 'array' === t)
                      for (i = 0, a = n, s = (t = new h(e.length + n)).length; a < s; a++, i++)
                        t[a] = null === e[i] ? NaN : e[i]
                    else 0 === n ? (t = new h(e)) : (t = new h(e.length + n)).set(e, n)
                  }
                  return t
                }
                t.exports = i
              },
              { dtype: 13 },
            ],
            24: [
              function (e, t, n) {
                'use strict'
                var r = e('is-callable'),
                  i = Object.prototype.toString,
                  o = Object.prototype.hasOwnProperty,
                  a = function (e, t, n) {
                    for (var r = 0, i = e.length; r < i; r++)
                      o.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e))
                  },
                  s = function (e, t, n) {
                    for (var r = 0, i = e.length; r < i; r++)
                      null == n ? t(e.charAt(r), r, e) : t.call(n, e.charAt(r), r, e)
                  },
                  l = function (e, t, n) {
                    for (var r in e)
                      o.call(e, r) && (null == n ? t(e[r], r, e) : t.call(n, e[r], r, e))
                  },
                  c = function (e, t, n) {
                    if (!r(t)) throw new TypeError('iterator must be a function')
                    var o
                    arguments.length >= 3 && (o = n),
                      '[object Array]' === i.call(e)
                        ? a(e, t, o)
                        : 'string' === typeof e
                        ? s(e, t, o)
                        : l(e, t, o)
                  }
                t.exports = c
              },
              { 'is-callable': 32 },
            ],
            25: [
              function (e, t, n) {
                'use strict'
                var r = 'Function.prototype.bind called on incompatible ',
                  i = Array.prototype.slice,
                  o = Object.prototype.toString,
                  a = '[object Function]'
                t.exports = function (e) {
                  var t = this
                  if ('function' !== typeof t || o.call(t) !== a) throw new TypeError(r + t)
                  for (
                    var n,
                      s = i.call(arguments, 1),
                      l = function () {
                        if (this instanceof n) {
                          var r = t.apply(this, s.concat(i.call(arguments)))
                          return Object(r) === r ? r : this
                        }
                        return t.apply(e, s.concat(i.call(arguments)))
                      },
                      c = Math.max(0, t.length - s.length),
                      u = [],
                      h = 0;
                    h < c;
                    h++
                  )
                    u.push('$' + h)
                  if (
                    ((n = Function(
                      'binder',
                      'return function (' +
                        u.join(',') +
                        '){ return binder.apply(this,arguments); }',
                    )(l)),
                    t.prototype)
                  ) {
                    var d = function () {}
                    ;(d.prototype = t.prototype), (n.prototype = new d()), (d.prototype = null)
                  }
                  return n
                }
              },
              {},
            ],
            26: [
              function (e, t, n) {
                'use strict'
                var r = e('./implementation')
                t.exports = Function.prototype.bind || r
              },
              { './implementation': 25 },
            ],
            27: [
              function (e, t, n) {
                ;(function (e) {
                  var n
                  ;(n =
                    'undefined' !== typeof window
                      ? window
                      : 'undefined' !== typeof e
                      ? e
                      : 'undefined' !== typeof self
                      ? self
                      : {}),
                    (t.exports = n)
                }.call(
                  this,
                  'undefined' !== typeof r.g
                    ? r.g
                    : 'undefined' !== typeof self
                    ? self
                    : 'undefined' !== typeof window
                    ? window
                    : {},
                ))
              },
              {},
            ],
            28: [
              function (e, t, n) {
                'use strict'
                var r = e('function-bind')
                t.exports = r.call(Function.call, Object.prototype.hasOwnProperty)
              },
              { 'function-bind': 26 },
            ],
            29: [
              function (e, t, n) {
                ;(n.read = function (e, t, n, r, i) {
                  var o,
                    a,
                    s = 8 * i - r - 1,
                    l = (1 << s) - 1,
                    c = l >> 1,
                    u = -7,
                    h = n ? i - 1 : 0,
                    d = n ? -1 : 1,
                    p = e[t + h]
                  for (
                    h += d, o = p & ((1 << -u) - 1), p >>= -u, u += s;
                    u > 0;
                    o = 256 * o + e[t + h], h += d, u -= 8
                  );
                  for (
                    a = o & ((1 << -u) - 1), o >>= -u, u += r;
                    u > 0;
                    a = 256 * a + e[t + h], h += d, u -= 8
                  );
                  if (0 === o) o = 1 - c
                  else {
                    if (o === l) return a ? NaN : (1 / 0) * (p ? -1 : 1)
                    ;(a += Math.pow(2, r)), (o -= c)
                  }
                  return (p ? -1 : 1) * a * Math.pow(2, o - r)
                }),
                  (n.write = function (e, t, n, r, i, o) {
                    var a,
                      s,
                      l,
                      c = 8 * o - i - 1,
                      u = (1 << c) - 1,
                      h = u >> 1,
                      d = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
                      p = r ? 0 : o - 1,
                      f = r ? 1 : -1,
                      m = t < 0 || (0 === t && 1 / t < 0) ? 1 : 0
                    for (
                      t = Math.abs(t),
                        isNaN(t) || t === 1 / 0
                          ? ((s = isNaN(t) ? 1 : 0), (a = u))
                          : ((a = Math.floor(Math.log(t) / Math.LN2)),
                            t * (l = Math.pow(2, -a)) < 1 && (a--, (l *= 2)),
                            (t += a + h >= 1 ? d / l : d * Math.pow(2, 1 - h)) * l >= 2 &&
                              (a++, (l /= 2)),
                            a + h >= u
                              ? ((s = 0), (a = u))
                              : a + h >= 1
                              ? ((s = (t * l - 1) * Math.pow(2, i)), (a += h))
                              : ((s = t * Math.pow(2, h - 1) * Math.pow(2, i)), (a = 0)));
                      i >= 8;
                      e[n + p] = 255 & s, p += f, s /= 256, i -= 8
                    );
                    for (
                      a = (a << i) | s, c += i;
                      c > 0;
                      e[n + p] = 255 & a, p += f, a /= 256, c -= 8
                    );
                    e[n + p - f] |= 128 * m
                  })
              },
              {},
            ],
            30: [
              function (e, t, n) {
                'function' === typeof Object.create
                  ? (t.exports = function (e, t) {
                      t &&
                        ((e.super_ = t),
                        (e.prototype = Object.create(t.prototype, {
                          constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 },
                        })))
                    })
                  : (t.exports = function (e, t) {
                      if (t) {
                        e.super_ = t
                        var n = function () {}
                        ;(n.prototype = t.prototype),
                          (e.prototype = new n()),
                          (e.prototype.constructor = e)
                      }
                    })
              },
              {},
            ],
            31: [
              function (e, t, n) {
                function r(e) {
                  return (
                    !!e.constructor &&
                    'function' === typeof e.constructor.isBuffer &&
                    e.constructor.isBuffer(e)
                  )
                }
                function i(e) {
                  return (
                    'function' === typeof e.readFloatLE &&
                    'function' === typeof e.slice &&
                    r(e.slice(0, 0))
                  )
                }
                t.exports = function (e) {
                  return null != e && (r(e) || i(e) || !!e._isBuffer)
                }
              },
              {},
            ],
            32: [
              function (t, n, r) {
                'use strict'
                var i = Function.prototype.toString,
                  o = /^\s*class\b/,
                  a = function (t) {
                    try {
                      var n = i.call(t)
                      return o.test(n)
                    } catch (e) {
                      return !1
                    }
                  },
                  s = function (t) {
                    try {
                      return !a(t) && (i.call(t), !0)
                    } catch (e) {
                      return !1
                    }
                  },
                  l = Object.prototype.toString,
                  c = '[object Function]',
                  u = '[object GeneratorFunction]',
                  h = 'function' === typeof Symbol && 'symbol' === typeof Symbol.toStringTag
                n.exports = function (e) {
                  if (!e) return !1
                  if ('function' !== typeof e && 'object' !== typeof e) return !1
                  if ('function' === typeof e && !e.prototype) return !0
                  if (h) return s(e)
                  if (a(e)) return !1
                  var t = l.call(e)
                  return t === c || t === u
                }
              },
              {},
            ],
            33: [
              function (e, t, n) {
                t.exports = i
                var r = Object.prototype.toString
                function i(e) {
                  var t = r.call(e)
                  return (
                    '[object Function]' === t ||
                    ('function' === typeof e && '[object RegExp]' !== t) ||
                    ('undefined' !== typeof window &&
                      (e === window.setTimeout ||
                        e === window.alert ||
                        e === window.confirm ||
                        e === window.prompt))
                  )
                }
              },
              {},
            ],
            34: [
              function (e, t, n) {
                'use strict'
                t.exports = function (e) {
                  var t = typeof e
                  return null !== e && ('object' === t || 'function' === t)
                }
              },
              {},
            ],
            35: [
              function (e, t, n) {
                var r = {}.toString
                t.exports =
                  Array.isArray ||
                  function (e) {
                    return '[object Array]' == r.call(e)
                  }
              },
              {},
            ],
            36: [
              function (e, t, n) {
                var r = e('word-wrapper'),
                  i = e('xtend'),
                  o = e('as-number'),
                  a = ['x', 'e', 'a', 'o', 'n', 's', 'r', 'c', 'u', 'm', 'v', 'w', 'z'],
                  s = ['m', 'w'],
                  l = ['H', 'I', 'N', 'E', 'F', 'K', 'L', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
                  c = '\t'.charCodeAt(0),
                  u = ' '.charCodeAt(0),
                  h = 0,
                  d = 1,
                  p = 2
                function f(e) {
                  ;(this.glyphs = []),
                    (this._measure = this.computeMetrics.bind(this)),
                    this.update(e)
                }
                function m(e) {
                  Object.defineProperty(f.prototype, e, { get: v(e), configurable: !0 })
                }
                function v(e) {
                  return new Function(
                    ['return function ' + e + '() {', '  return this._' + e, '}'].join('\n'),
                  )()
                }
                function g(e, t) {
                  if (!e.chars || 0 === e.chars.length) return null
                  var n = E(e.chars, t)
                  return n >= 0 ? e.chars[n] : null
                }
                function y(e) {
                  for (var t = 0; t < a.length; t++) {
                    var n = a[t].charCodeAt(0),
                      r = E(e.chars, n)
                    if (r >= 0) return e.chars[r].height
                  }
                  return 0
                }
                function b(e) {
                  for (var t = 0; t < s.length; t++) {
                    var n = s[t].charCodeAt(0),
                      r = E(e.chars, n)
                    if (r >= 0) return e.chars[r]
                  }
                  return 0
                }
                function A(e) {
                  for (var t = 0; t < l.length; t++) {
                    var n = l[t].charCodeAt(0),
                      r = E(e.chars, n)
                    if (r >= 0) return e.chars[r].height
                  }
                  return 0
                }
                function w(e, t, n) {
                  if (!e.kernings || 0 === e.kernings.length) return 0
                  for (var r = e.kernings, i = 0; i < r.length; i++) {
                    var o = r[i]
                    if (o.first === t && o.second === n) return o.amount
                  }
                  return 0
                }
                function x(e) {
                  return 'center' === e ? d : 'right' === e ? p : h
                }
                function E(e, t, n) {
                  for (var r = (n = n || 0); r < e.length; r++) if (e[r].id === t) return r
                  return -1
                }
                ;(t.exports = function (e) {
                  return new f(e)
                }),
                  (f.prototype.update = function (e) {
                    if (
                      ((e = i({ measure: this._measure }, e)),
                      (this._opt = e),
                      (this._opt.tabSize = o(this._opt.tabSize, 4)),
                      !e.font)
                    )
                      throw new Error('must provide a valid bitmap font')
                    var t = this.glyphs,
                      n = e.text || '',
                      a = e.font
                    this._setupSpaceGlyphs(a)
                    var s = r.lines(n, e),
                      l = e.width || 0
                    t.length = 0
                    var c = s.reduce(function (e, t) {
                        return Math.max(e, t.width, l)
                      }, 0),
                      u = 0,
                      h = 0,
                      f = o(e.lineHeight, a.common.lineHeight),
                      m = a.common.base,
                      v = f - m,
                      g = e.letterSpacing || 0,
                      b = f * s.length - v,
                      E = x(this._opt.align)
                    ;(h -= b),
                      (this._width = c),
                      (this._height = b),
                      (this._descender = f - m),
                      (this._baseline = m),
                      (this._xHeight = y(a)),
                      (this._capHeight = A(a)),
                      (this._lineHeight = f),
                      (this._ascender = f - v - this._xHeight)
                    var M = this
                    s.forEach(function (e, r) {
                      for (var i, o = e.start, s = e.end, l = e.width, m = o; m < s; m++) {
                        var v = n.charCodeAt(m),
                          y = M.getGlyph(a, v)
                        if (y) {
                          i && (u += w(a, i.id, y.id))
                          var b = u
                          E === d ? (b += (c - l) / 2) : E === p && (b += c - l),
                            t.push({ position: [b, h], data: y, index: m, line: r }),
                            (u += y.xadvance + g),
                            (i = y)
                        }
                      }
                      ;(h += f), (u = 0)
                    }),
                      (this._linesTotal = s.length)
                  }),
                  (f.prototype._setupSpaceGlyphs = function (e) {
                    if (
                      ((this._fallbackSpaceGlyph = null),
                      (this._fallbackTabGlyph = null),
                      e.chars && 0 !== e.chars.length)
                    ) {
                      var t = g(e, u) || b(e) || e.chars[0],
                        n = this._opt.tabSize * t.xadvance
                      ;(this._fallbackSpaceGlyph = t),
                        (this._fallbackTabGlyph = i(t, {
                          x: 0,
                          y: 0,
                          xadvance: n,
                          id: c,
                          xoffset: 0,
                          yoffset: 0,
                          width: 0,
                          height: 0,
                        }))
                    }
                  }),
                  (f.prototype.getGlyph = function (e, t) {
                    var n = g(e, t)
                    return (
                      n ||
                      (t === c ? this._fallbackTabGlyph : t === u ? this._fallbackSpaceGlyph : null)
                    )
                  }),
                  (f.prototype.computeMetrics = function (e, t, n, r) {
                    var i,
                      o = this._opt.letterSpacing || 0,
                      a = this._opt.font,
                      s = 0,
                      l = 0,
                      c = 0
                    if (!a.chars || 0 === a.chars.length) return { start: t, end: t, width: 0 }
                    n = Math.min(e.length, n)
                    for (var u = t; u < n; u++) {
                      var h,
                        d = e.charCodeAt(u)
                      if ((h = this.getGlyph(a, d))) {
                        h.xoffset
                        var p = (s += i ? w(a, i.id, h.id) : 0) + h.xadvance + o,
                          f = s + h.width
                        if (f >= r || p >= r) break
                        ;(s = p), (l = f), (i = h)
                      }
                      c++
                    }
                    return i && (l += i.xoffset), { start: t, end: t + c, width: l }
                  }),
                  [
                    'width',
                    'height',
                    'descender',
                    'ascender',
                    'xHeight',
                    'baseline',
                    'capHeight',
                    'lineHeight',
                  ].forEach(m)
              },
              { 'as-number': 2, 'word-wrapper': 69, xtend: 72 },
            ],
            37: [
              function (t, n, r) {
                ;(function (r) {
                  var i = t('xhr'),
                    o = function () {},
                    a = t('parse-bmfont-ascii'),
                    s = t('parse-bmfont-xml'),
                    l = t('parse-bmfont-binary'),
                    c = t('./lib/is-binary'),
                    u = t('xtend'),
                    h = self.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()
                  function d(e) {
                    return '[object ArrayBuffer]' === Object.prototype.toString.call(e)
                  }
                  function p(e) {
                    if (h) return u(e, { responseType: 'arraybuffer' })
                    if ('undefined' === typeof self.XMLHttpRequest)
                      throw new Error('your browser does not support XHR loading')
                    var t = new self.XMLHttpRequest()
                    return (
                      t.overrideMimeType('text/plain; charset=x-user-defined'), u({ xhr: t }, e)
                    )
                  }
                  n.exports = function (t, n) {
                    ;(n = 'function' === typeof n ? n : o),
                      'string' === typeof t ? (t = { uri: t }) : t || (t = {}),
                      t.binary && (t = p(t)),
                      i(t, function (i, u, h) {
                        if (i) return n(i)
                        if (!/^2/.test(u.statusCode))
                          return n(new Error('http status code: ' + u.statusCode))
                        if (!h) return n(new Error('no body result'))
                        var p,
                          f = !1
                        if (d(h)) {
                          var m = new Uint8Array(h)
                          h = new r(m, 'binary')
                        }
                        c(h) && ((f = !0), 'string' === typeof h && (h = new r(h, 'binary'))),
                          f || (r.isBuffer(h) && (h = h.toString(t.encoding)), (h = h.trim()))
                        try {
                          var v = u.headers['content-type']
                          p = f
                            ? l(h)
                            : /json/.test(v) || '{' === h.charAt(0)
                            ? JSON.parse(h)
                            : /xml/.test(v) || '<' === h.charAt(0)
                            ? s(h)
                            : a(h)
                        } catch (e) {
                          n(new Error('error parsing font ' + e.message)), (n = o)
                        }
                        n(null, p)
                      })
                  }
                }.call(this, t('buffer').Buffer))
              },
              {
                './lib/is-binary': 38,
                buffer: 6,
                'parse-bmfont-ascii': 43,
                'parse-bmfont-binary': 44,
                'parse-bmfont-xml': 45,
                xhr: 70,
                xtend: 72,
              },
            ],
            38: [
              function (e, t, n) {
                ;(function (n) {
                  var r = e('buffer-equal'),
                    i = new n([66, 77, 70, 3])
                  t.exports = function (e) {
                    return 'string' === typeof e
                      ? 'BMF' === e.substring(0, 3)
                      : e.length > 4 && r(e.slice(0, 4), i)
                  }
                }.call(this, e('buffer').Buffer))
              },
              { buffer: 6, 'buffer-equal': 5 },
            ],
            39: [
              function (e, t, n) {
                'use strict'
                var r = Object.getOwnPropertySymbols,
                  i = Object.prototype.hasOwnProperty,
                  o = Object.prototype.propertyIsEnumerable
                function a(e) {
                  if (null === e || void 0 === e)
                    throw new TypeError('Object.assign cannot be called with null or undefined')
                  return Object(e)
                }
                function s() {
                  try {
                    if (!Object.assign) return !1
                    var e = new String('abc')
                    if (((e[5] = 'de'), '5' === Object.getOwnPropertyNames(e)[0])) return !1
                    for (var t = {}, n = 0; n < 10; n++) t['_' + String.fromCharCode(n)] = n
                    if (
                      '0123456789' !==
                      Object.getOwnPropertyNames(t)
                        .map(function (e) {
                          return t[e]
                        })
                        .join('')
                    )
                      return !1
                    var r = {}
                    return (
                      'abcdefghijklmnopqrst'.split('').forEach(function (e) {
                        r[e] = e
                      }),
                      'abcdefghijklmnopqrst' === Object.keys(Object.assign({}, r)).join('')
                    )
                  } catch (i) {
                    return !1
                  }
                }
                t.exports = s()
                  ? Object.assign
                  : function (e, t) {
                      for (var n, s, l = a(e), c = 1; c < arguments.length; c++) {
                        for (var u in (n = Object(arguments[c]))) i.call(n, u) && (l[u] = n[u])
                        if (r) {
                          s = r(n)
                          for (var h = 0; h < s.length; h++) o.call(n, s[h]) && (l[s[h]] = n[s[h]])
                        }
                      }
                      return l
                    }
              },
              {},
            ],
            40: [
              function (t, n, r) {
                'use strict'
                var i
                if (!Object.keys) {
                  var o = Object.prototype.hasOwnProperty,
                    a = Object.prototype.toString,
                    s = t('./isArguments'),
                    l = Object.prototype.propertyIsEnumerable,
                    c = !l.call({ toString: null }, 'toString'),
                    u = l.call(function () {}, 'prototype'),
                    h = [
                      'toString',
                      'toLocaleString',
                      'valueOf',
                      'hasOwnProperty',
                      'isPrototypeOf',
                      'propertyIsEnumerable',
                      'constructor',
                    ],
                    d = function (e) {
                      var t = e.constructor
                      return t && t.prototype === e
                    },
                    p = {
                      $applicationCache: !0,
                      $console: !0,
                      $external: !0,
                      $frame: !0,
                      $frameElement: !0,
                      $frames: !0,
                      $innerHeight: !0,
                      $innerWidth: !0,
                      $onmozfullscreenchange: !0,
                      $onmozfullscreenerror: !0,
                      $outerHeight: !0,
                      $outerWidth: !0,
                      $pageXOffset: !0,
                      $pageYOffset: !0,
                      $parent: !0,
                      $scrollLeft: !0,
                      $scrollTop: !0,
                      $scrollX: !0,
                      $scrollY: !0,
                      $self: !0,
                      $webkitIndexedDB: !0,
                      $webkitStorageInfo: !0,
                      $window: !0,
                    },
                    f = (function () {
                      if ('undefined' === typeof window) return !1
                      for (var t in window)
                        try {
                          if (
                            !p['$' + t] &&
                            o.call(window, t) &&
                            null !== window[t] &&
                            'object' === typeof window[t]
                          )
                            try {
                              d(window[t])
                            } catch (e) {
                              return !0
                            }
                        } catch (e) {
                          return !0
                        }
                      return !1
                    })(),
                    m = function (t) {
                      if ('undefined' === typeof window || !f) return d(t)
                      try {
                        return d(t)
                      } catch (e) {
                        return !1
                      }
                    }
                  i = function (e) {
                    var t = null !== e && 'object' === typeof e,
                      n = '[object Function]' === a.call(e),
                      r = s(e),
                      i = t && '[object String]' === a.call(e),
                      l = []
                    if (!t && !n && !r) throw new TypeError('Object.keys called on a non-object')
                    var d = u && n
                    if (i && e.length > 0 && !o.call(e, 0))
                      for (var p = 0; p < e.length; ++p) l.push(String(p))
                    if (r && e.length > 0) for (var f = 0; f < e.length; ++f) l.push(String(f))
                    else
                      for (var v in e)
                        (d && 'prototype' === v) || !o.call(e, v) || l.push(String(v))
                    if (c)
                      for (var g = m(e), y = 0; y < h.length; ++y)
                        (g && 'constructor' === h[y]) || !o.call(e, h[y]) || l.push(h[y])
                    return l
                  }
                }
                n.exports = i
              },
              { './isArguments': 42 },
            ],
            41: [
              function (e, t, n) {
                'use strict'
                var r = Array.prototype.slice,
                  i = e('./isArguments'),
                  o = Object.keys,
                  a = o
                    ? function (e) {
                        return o(e)
                      }
                    : e('./implementation'),
                  s = Object.keys
                ;(a.shim = function () {
                  return (
                    Object.keys
                      ? (function () {
                          var e = Object.keys(arguments)
                          return e && e.length === arguments.length
                        })(1, 2) ||
                        (Object.keys = function (e) {
                          return i(e) ? s(r.call(e)) : s(e)
                        })
                      : (Object.keys = a),
                    Object.keys || a
                  )
                }),
                  (t.exports = a)
              },
              { './implementation': 40, './isArguments': 42 },
            ],
            42: [
              function (e, t, n) {
                'use strict'
                var r = Object.prototype.toString
                t.exports = function (e) {
                  var t = r.call(e),
                    n = '[object Arguments]' === t
                  return (
                    n ||
                      (n =
                        '[object Array]' !== t &&
                        null !== e &&
                        'object' === typeof e &&
                        'number' === typeof e.length &&
                        e.length >= 0 &&
                        '[object Function]' === r.call(e.callee)),
                    n
                  )
                }
              },
              {},
            ],
            43: [
              function (e, t, n) {
                function r(e, t) {
                  if (!(e = e.replace(/\t+/g, ' ').trim())) return null
                  var n = e.indexOf(' ')
                  if (-1 === n) throw new Error('no named row at line ' + t)
                  var r = e.substring(0, n)
                  e = (e = (e = (e = e.substring(n + 1)).replace(
                    /letter=[\'\"]\S+[\'\"]/gi,
                    '',
                  )).split('=')).map(function (e) {
                    return e.trim().match(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g)
                  })
                  for (var o = [], a = 0; a < e.length; a++) {
                    var s = e[a]
                    0 === a
                      ? o.push({ key: s[0], data: '' })
                      : a === e.length - 1
                      ? (o[o.length - 1].data = i(s[0]))
                      : ((o[o.length - 1].data = i(s[0])), o.push({ key: s[1], data: '' }))
                  }
                  var l = { key: r, data: {} }
                  return (
                    o.forEach(function (e) {
                      l.data[e.key] = e.data
                    }),
                    l
                  )
                }
                function i(e) {
                  return e && 0 !== e.length
                    ? 0 === e.indexOf('"') || 0 === e.indexOf("'")
                      ? e.substring(1, e.length - 1)
                      : -1 !== e.indexOf(',')
                      ? o(e)
                      : parseInt(e, 10)
                    : ''
                }
                function o(e) {
                  return e.split(',').map(function (e) {
                    return parseInt(e, 10)
                  })
                }
                t.exports = function (e) {
                  if (!e) throw new Error('no data provided')
                  var t = { pages: [], chars: [], kernings: [] },
                    n = (e = e.toString().trim()).split(/\r\n?|\n/g)
                  if (0 === n.length) throw new Error('no data in BMFont file')
                  for (var i = 0; i < n.length; i++) {
                    var o = r(n[i], i)
                    if (o)
                      if ('page' === o.key) {
                        if ('number' !== typeof o.data.id)
                          throw new Error('malformed file at line ' + i + ' -- needs page id=N')
                        if ('string' !== typeof o.data.file)
                          throw new Error(
                            'malformed file at line ' + i + ' -- needs page file="path"',
                          )
                        t.pages[o.data.id] = o.data.file
                      } else
                        'chars' === o.key ||
                          'kernings' === o.key ||
                          ('char' === o.key
                            ? t.chars.push(o.data)
                            : 'kerning' === o.key
                            ? t.kernings.push(o.data)
                            : (t[o.key] = o.data))
                  }
                  return t
                }
              },
              {},
            ],
            44: [
              function (e, t, n) {
                var r = [66, 77, 70]
                function i(e, t, n) {
                  if (n > t.length - 1) return 0
                  var r = t.readUInt8(n++),
                    i = t.readInt32LE(n)
                  switch (((n += 4), r)) {
                    case 1:
                      e.info = o(t, n)
                      break
                    case 2:
                      e.common = a(t, n)
                      break
                    case 3:
                      e.pages = s(t, n, i)
                      break
                    case 4:
                      e.chars = l(t, n, i)
                      break
                    case 5:
                      e.kernings = c(t, n, i)
                  }
                  return 5 + i
                }
                function o(e, t) {
                  var n = {}
                  n.size = e.readInt16LE(t)
                  var r = e.readUInt8(t + 2)
                  return (
                    (n.smooth = (r >> 7) & 1),
                    (n.unicode = (r >> 6) & 1),
                    (n.italic = (r >> 5) & 1),
                    (n.bold = (r >> 4) & 1),
                    (r >> 3) & 1 && (n.fixedHeight = 1),
                    (n.charset = e.readUInt8(t + 3) || ''),
                    (n.stretchH = e.readUInt16LE(t + 4)),
                    (n.aa = e.readUInt8(t + 6)),
                    (n.padding = [
                      e.readInt8(t + 7),
                      e.readInt8(t + 8),
                      e.readInt8(t + 9),
                      e.readInt8(t + 10),
                    ]),
                    (n.spacing = [e.readInt8(t + 11), e.readInt8(t + 12)]),
                    (n.outline = e.readUInt8(t + 13)),
                    (n.face = h(e, t + 14)),
                    n
                  )
                }
                function a(e, t) {
                  var n = {}
                  return (
                    (n.lineHeight = e.readUInt16LE(t)),
                    (n.base = e.readUInt16LE(t + 2)),
                    (n.scaleW = e.readUInt16LE(t + 4)),
                    (n.scaleH = e.readUInt16LE(t + 6)),
                    (n.pages = e.readUInt16LE(t + 8)),
                    e.readUInt8(t + 10),
                    (n.packed = 0),
                    (n.alphaChnl = e.readUInt8(t + 11)),
                    (n.redChnl = e.readUInt8(t + 12)),
                    (n.greenChnl = e.readUInt8(t + 13)),
                    (n.blueChnl = e.readUInt8(t + 14)),
                    n
                  )
                }
                function s(e, t, n) {
                  for (var r = [], i = u(e, t), o = i.length + 1, a = n / o, s = 0; s < a; s++)
                    (r[s] = e.slice(t, t + i.length).toString('utf8')), (t += o)
                  return r
                }
                function l(e, t, n) {
                  for (var r = [], i = n / 20, o = 0; o < i; o++) {
                    var a = {},
                      s = 20 * o
                    ;(a.id = e.readUInt32LE(t + 0 + s)),
                      (a.x = e.readUInt16LE(t + 4 + s)),
                      (a.y = e.readUInt16LE(t + 6 + s)),
                      (a.width = e.readUInt16LE(t + 8 + s)),
                      (a.height = e.readUInt16LE(t + 10 + s)),
                      (a.xoffset = e.readInt16LE(t + 12 + s)),
                      (a.yoffset = e.readInt16LE(t + 14 + s)),
                      (a.xadvance = e.readInt16LE(t + 16 + s)),
                      (a.page = e.readUInt8(t + 18 + s)),
                      (a.chnl = e.readUInt8(t + 19 + s)),
                      (r[o] = a)
                  }
                  return r
                }
                function c(e, t, n) {
                  for (var r = [], i = n / 10, o = 0; o < i; o++) {
                    var a = {},
                      s = 10 * o
                    ;(a.first = e.readUInt32LE(t + 0 + s)),
                      (a.second = e.readUInt32LE(t + 4 + s)),
                      (a.amount = e.readInt16LE(t + 8 + s)),
                      (r[o] = a)
                  }
                  return r
                }
                function u(e, t) {
                  for (var n = t; n < e.length && 0 !== e[n]; n++);
                  return e.slice(t, n)
                }
                function h(e, t) {
                  return u(e, t).toString('utf8')
                }
                t.exports = function (e) {
                  if (e.length < 6) throw new Error('invalid buffer length for BMFont')
                  if (
                    !r.every(function (t, n) {
                      return e.readUInt8(n) === t
                    })
                  )
                    throw new Error('BMFont missing BMF byte header')
                  var t = 3
                  if (e.readUInt8(t++) > 3)
                    throw new Error('Only supports BMFont Binary v3 (BMFont App v1.10)')
                  for (var n = { kernings: [], chars: [] }, o = 0; o < 5; o++) t += i(n, e, t)
                  return n
                }
              },
              {},
            ],
            45: [
              function (e, t, n) {
                var r = e('./parse-attribs'),
                  i = e('xml-parse-from-string'),
                  o = {
                    scaleh: 'scaleH',
                    scalew: 'scaleW',
                    stretchh: 'stretchH',
                    lineheight: 'lineHeight',
                    alphachnl: 'alphaChnl',
                    redchnl: 'redChnl',
                    greenchnl: 'greenChnl',
                    bluechnl: 'blueChnl',
                  }
                function a(e) {
                  return s(e).reduce(function (e, t) {
                    return (e[l(t.nodeName)] = t.nodeValue), e
                  }, {})
                }
                function s(e) {
                  for (var t = [], n = 0; n < e.attributes.length; n++) t.push(e.attributes[n])
                  return t
                }
                function l(e) {
                  return o[e.toLowerCase()] || e
                }
                t.exports = function (e) {
                  e = e.toString()
                  var t = i(e),
                    n = { pages: [], chars: [], kernings: [] }
                  ;['info', 'common'].forEach(function (e) {
                    var i = t.getElementsByTagName(e)[0]
                    i && (n[e] = r(a(i)))
                  })
                  var o = t.getElementsByTagName('pages')[0]
                  if (!o) throw new Error('malformed file -- no <pages> element')
                  for (var s = o.getElementsByTagName('page'), l = 0; l < s.length; l++) {
                    var c = s[l],
                      u = parseInt(c.getAttribute('id'), 10),
                      h = c.getAttribute('file')
                    if (isNaN(u)) throw new Error('malformed file -- page "id" attribute is NaN')
                    if (!h) throw new Error('malformed file -- needs page "file" attribute')
                    n.pages[parseInt(u, 10)] = h
                  }
                  return (
                    ['chars', 'kernings'].forEach(function (e) {
                      var i = t.getElementsByTagName(e)[0]
                      if (i)
                        for (
                          var o = e.substring(0, e.length - 1),
                            s = i.getElementsByTagName(o),
                            l = 0;
                          l < s.length;
                          l++
                        ) {
                          var c = s[l]
                          n[e].push(r(a(c)))
                        }
                    }),
                    n
                  )
                }
              },
              { './parse-attribs': 46, 'xml-parse-from-string': 71 },
            ],
            46: [
              function (e, t, n) {
                var r = 'chasrset'
                function i(e) {
                  return e.split(',').map(function (e) {
                    return parseInt(e, 10)
                  })
                }
                t.exports = function (e) {
                  for (var t in (r in e && ((e.charset = e[r]), delete e[r]), e))
                    'face' !== t &&
                      'charset' !== t &&
                      (e[t] = 'padding' === t || 'spacing' === t ? i(e[t]) : parseInt(e[t], 10))
                  return e
                }
              },
              {},
            ],
            47: [
              function (e, t, n) {
                var r = e('string.prototype.trim'),
                  i = e('for-each'),
                  o = function (e) {
                    return '[object Array]' === Object.prototype.toString.call(e)
                  }
                t.exports = function (e) {
                  if (!e) return {}
                  var t = {}
                  return (
                    i(r(e).split('\n'), function (e) {
                      var n = e.indexOf(':'),
                        i = r(e.slice(0, n)).toLowerCase(),
                        a = r(e.slice(n + 1))
                      'undefined' === typeof t[i]
                        ? (t[i] = a)
                        : o(t[i])
                        ? t[i].push(a)
                        : (t[i] = [t[i], a])
                    }),
                    t
                  )
                }
              },
              { 'for-each': 24, 'string.prototype.trim': 53 },
            ],
            48: [
              function (e, t, n) {
                ;(function (e) {
                  var n = e.performance || {},
                    r = (function () {
                      for (var e = ['now', 'webkitNow', 'msNow', 'mozNow', 'oNow']; e.length; ) {
                        var t = e.shift()
                        if (t in n) return n[t].bind(n)
                      }
                      var r =
                          Date.now ||
                          function () {
                            return new Date().getTime()
                          },
                        i = (n.timing || {}).navigationStart || r()
                      return function () {
                        return r() - i
                      }
                    })()
                  ;(r.performanceNow = n.now),
                    (r.noConflict = function () {
                      n.now = r.performanceNow
                    }),
                    (r.conflict = function () {
                      n.now = r
                    }),
                    r.conflict(),
                    (t.exports = r)
                }.call(
                  this,
                  'undefined' !== typeof r.g
                    ? r.g
                    : 'undefined' !== typeof self
                    ? self
                    : 'undefined' !== typeof window
                    ? window
                    : {},
                ))
              },
              {},
            ],
            49: [
              function (t, n, r) {
                var i,
                  o,
                  a = (n.exports = {})
                function s() {
                  throw new Error('setTimeout has not been defined')
                }
                function l() {
                  throw new Error('clearTimeout has not been defined')
                }
                function c(t) {
                  if (i === setTimeout) return setTimeout(t, 0)
                  if ((i === s || !i) && setTimeout) return (i = setTimeout), setTimeout(t, 0)
                  try {
                    return i(t, 0)
                  } catch (e) {
                    try {
                      return i.call(null, t, 0)
                    } catch (e) {
                      return i.call(this, t, 0)
                    }
                  }
                }
                function u(t) {
                  if (o === clearTimeout) return clearTimeout(t)
                  if ((o === l || !o) && clearTimeout) return (o = clearTimeout), clearTimeout(t)
                  try {
                    return o(t)
                  } catch (e) {
                    try {
                      return o.call(null, t)
                    } catch (e) {
                      return o.call(this, t)
                    }
                  }
                }
                !(function () {
                  try {
                    i = 'function' === typeof setTimeout ? setTimeout : s
                  } catch (e) {
                    i = s
                  }
                  try {
                    o = 'function' === typeof clearTimeout ? clearTimeout : l
                  } catch (e) {
                    o = l
                  }
                })()
                var h,
                  d = [],
                  p = !1,
                  f = -1
                function m() {
                  p && h && ((p = !1), h.length ? (d = h.concat(d)) : (f = -1), d.length && v())
                }
                function v() {
                  if (!p) {
                    var e = c(m)
                    p = !0
                    for (var t = d.length; t; ) {
                      for (h = d, d = []; ++f < t; ) h && h[f].run()
                      ;(f = -1), (t = d.length)
                    }
                    ;(h = null), (p = !1), u(e)
                  }
                }
                function g(e, t) {
                  ;(this.fun = e), (this.array = t)
                }
                function y() {}
                ;(a.nextTick = function (e) {
                  var t = new Array(arguments.length - 1)
                  if (arguments.length > 1)
                    for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]
                  d.push(new g(e, t)), 1 !== d.length || p || c(v)
                }),
                  (g.prototype.run = function () {
                    this.fun.apply(null, this.array)
                  }),
                  (a.title = 'browser'),
                  (a.browser = !0),
                  (a.env = {}),
                  (a.argv = []),
                  (a.version = ''),
                  (a.versions = {}),
                  (a.on = y),
                  (a.addListener = y),
                  (a.once = y),
                  (a.off = y),
                  (a.removeListener = y),
                  (a.removeAllListeners = y),
                  (a.emit = y),
                  (a.prependListener = y),
                  (a.prependOnceListener = y),
                  (a.listeners = function (e) {
                    return []
                  }),
                  (a.binding = function (e) {
                    throw new Error('process.binding is not supported')
                  }),
                  (a.cwd = function () {
                    return '/'
                  }),
                  (a.chdir = function (e) {
                    throw new Error('process.chdir is not supported')
                  }),
                  (a.umask = function () {
                    return 0
                  })
              },
              {},
            ],
            50: [
              function (t, n, r) {
                ;(function (t) {
                  !(function (r) {
                    var i = setTimeout,
                      o =
                        ('function' === typeof t && t) ||
                        function (e) {
                          i(e, 1)
                        }
                    function a(e, t) {
                      return function () {
                        e.apply(t, arguments)
                      }
                    }
                    var s =
                      Array.isArray ||
                      function (e) {
                        return '[object Array]' === Object.prototype.toString.call(e)
                      }
                    function l(e) {
                      if ('object' !== typeof this)
                        throw new TypeError('Promises must be constructed via new')
                      if ('function' !== typeof e) throw new TypeError('not a function')
                      ;(this._state = null),
                        (this._value = null),
                        (this._deferreds = []),
                        f(e, a(u, this), a(h, this))
                    }
                    function c(t) {
                      var n = this
                      null !== this._state
                        ? o(function () {
                            var r = n._state ? t.onFulfilled : t.onRejected
                            if (null !== r) {
                              var i
                              try {
                                i = r(n._value)
                              } catch (e) {
                                return void t.reject(e)
                              }
                              t.resolve(i)
                            } else (n._state ? t.resolve : t.reject)(n._value)
                          })
                        : this._deferreds.push(t)
                    }
                    function u(t) {
                      try {
                        if (t === this)
                          throw new TypeError('A promise cannot be resolved with itself.')
                        if (t && ('object' === typeof t || 'function' === typeof t)) {
                          var n = t.then
                          if ('function' === typeof n)
                            return void f(a(n, t), a(u, this), a(h, this))
                        }
                        ;(this._state = !0), (this._value = t), d.call(this)
                      } catch (e) {
                        h.call(this, e)
                      }
                    }
                    function h(e) {
                      ;(this._state = !1), (this._value = e), d.call(this)
                    }
                    function d() {
                      for (var e = 0, t = this._deferreds.length; e < t; e++)
                        c.call(this, this._deferreds[e])
                      this._deferreds = null
                    }
                    function p(e, t, n, r) {
                      ;(this.onFulfilled = 'function' === typeof e ? e : null),
                        (this.onRejected = 'function' === typeof t ? t : null),
                        (this.resolve = n),
                        (this.reject = r)
                    }
                    function f(e, t, n) {
                      var r = !1
                      try {
                        e(
                          function (e) {
                            r || ((r = !0), t(e))
                          },
                          function (e) {
                            r || ((r = !0), n(e))
                          },
                        )
                      } catch (i) {
                        if (r) return
                        ;(r = !0), n(i)
                      }
                    }
                    ;(l.prototype.catch = function (e) {
                      return this.then(null, e)
                    }),
                      (l.prototype.then = function (e, t) {
                        var n = this
                        return new l(function (r, i) {
                          c.call(n, new p(e, t, r, i))
                        })
                      }),
                      (l.all = function () {
                        var e = Array.prototype.slice.call(
                          1 === arguments.length && s(arguments[0]) ? arguments[0] : arguments,
                        )
                        return new l(function (t, n) {
                          if (0 === e.length) return t([])
                          var r = e.length
                          function i(o, a) {
                            try {
                              if (a && ('object' === typeof a || 'function' === typeof a)) {
                                var s = a.then
                                if ('function' === typeof s)
                                  return void s.call(
                                    a,
                                    function (e) {
                                      i(o, e)
                                    },
                                    n,
                                  )
                              }
                              ;(e[o] = a), 0 === --r && t(e)
                            } catch (l) {
                              n(l)
                            }
                          }
                          for (var o = 0; o < e.length; o++) i(o, e[o])
                        })
                      }),
                      (l.resolve = function (e) {
                        return e && 'object' === typeof e && e.constructor === l
                          ? e
                          : new l(function (t) {
                              t(e)
                            })
                      }),
                      (l.reject = function (e) {
                        return new l(function (t, n) {
                          n(e)
                        })
                      }),
                      (l.race = function (e) {
                        return new l(function (t, n) {
                          for (var r = 0, i = e.length; r < i; r++) e[r].then(t, n)
                        })
                      }),
                      (l._setImmediateFn = function (e) {
                        o = e
                      }),
                      'undefined' !== typeof n && n.exports
                        ? (n.exports = l)
                        : r.Promise || (r.Promise = l)
                  })(this)
                }.call(this, t('timers').setImmediate))
              },
              { timers: 67 },
            ],
            51: [
              function (e, t, n) {
                var r = e('dtype'),
                  i = e('an-array'),
                  o = e('is-buffer'),
                  a = [0, 2, 3],
                  s = [2, 1, 3]
                t.exports = function (e, t) {
                  ;(e && (i(e) || o(e))) || ((t = e || {}), (e = null))
                  for (
                    var n =
                        'string' ===
                        typeof (t = 'number' === typeof t ? { count: t } : t || {}).type
                          ? t.type
                          : 'uint16',
                      l = 'number' === typeof t.count ? t.count : 1,
                      c = t.start || 0,
                      u = !1 !== t.clockwise ? a : s,
                      h = u[0],
                      d = u[1],
                      p = u[2],
                      f = 6 * l,
                      m = e || new (r(n))(f),
                      v = 0,
                      g = 0;
                    v < f;
                    v += 6, g += 4
                  ) {
                    var y = v + c
                    ;(m[y + 0] = g + 0),
                      (m[y + 1] = g + 1),
                      (m[y + 2] = g + 2),
                      (m[y + 3] = g + h),
                      (m[y + 4] = g + d),
                      (m[y + 5] = g + p)
                  }
                  return m
                }
              },
              { 'an-array': 1, dtype: 13, 'is-buffer': 31 },
            ],
            52: [
              function (e, t, n) {
                'use strict'
                var r = e('function-bind'),
                  i = e('es-abstract/es5'),
                  o = r.call(Function.call, String.prototype.replace),
                  a =
                    /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,
                  s =
                    /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/
                t.exports = function () {
                  var e = i.ToString(i.CheckObjectCoercible(this))
                  return o(o(e, a, ''), s, '')
                }
              },
              { 'es-abstract/es5': 15, 'function-bind': 26 },
            ],
            53: [
              function (e, t, n) {
                'use strict'
                var r = e('function-bind'),
                  i = e('define-properties'),
                  o = e('./implementation'),
                  a = e('./polyfill'),
                  s = e('./shim'),
                  l = r.call(Function.call, a())
                i(l, { getPolyfill: a, implementation: o, shim: s }), (t.exports = l)
              },
              {
                './implementation': 52,
                './polyfill': 54,
                './shim': 55,
                'define-properties': 11,
                'function-bind': 26,
              },
            ],
            54: [
              function (e, t, n) {
                'use strict'
                var r = e('./implementation'),
                  i = '\u200b'
                t.exports = function () {
                  return String.prototype.trim && i.trim() === i ? String.prototype.trim : r
                }
              },
              { './implementation': 52 },
            ],
            55: [
              function (e, t, n) {
                'use strict'
                var r = e('define-properties'),
                  i = e('./polyfill')
                t.exports = function () {
                  var e = i()
                  return (
                    r(
                      String.prototype,
                      { trim: e },
                      {
                        trim: function () {
                          return String.prototype.trim !== e
                        },
                      },
                    ),
                    e
                  )
                }
              },
              { './polyfill': 54, 'define-properties': 11 },
            ],
            56: [
              function (t, n, r) {
                'use strict'
                var i = {
                    update: null,
                    begin: null,
                    loopBegin: null,
                    changeBegin: null,
                    change: null,
                    changeComplete: null,
                    loopComplete: null,
                    complete: null,
                    loop: 1,
                    direction: 'normal',
                    autoplay: !0,
                    timelineOffset: 0,
                  },
                  o = {
                    duration: 1e3,
                    delay: 0,
                    endDelay: 0,
                    easing: 'easeOutElastic(1, .5)',
                    round: 0,
                  },
                  a = [
                    'translateX',
                    'translateY',
                    'translateZ',
                    'rotate',
                    'rotateX',
                    'rotateY',
                    'rotateZ',
                    'scale',
                    'scaleX',
                    'scaleY',
                    'scaleZ',
                    'skew',
                    'skewX',
                    'skewY',
                    'perspective',
                  ],
                  s = { CSS: {}, springs: {} }
                function l(e, t, n) {
                  return Math.min(Math.max(e, t), n)
                }
                function c(e, t) {
                  return e.indexOf(t) > -1
                }
                function u(e, t) {
                  return e.apply(null, t)
                }
                var h = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i,
                  d = /^rgb/,
                  p = /^hsl/,
                  f = {
                    arr: function (e) {
                      return Array.isArray(e)
                    },
                    obj: function (e) {
                      return c(Object.prototype.toString.call(e), 'Object')
                    },
                    pth: function (e) {
                      return f.obj(e) && e.hasOwnProperty('totalLength')
                    },
                    svg: function (e) {
                      return e instanceof SVGElement
                    },
                    inp: function (e) {
                      return e instanceof HTMLInputElement
                    },
                    dom: function (e) {
                      return e.nodeType || f.svg(e)
                    },
                    str: function (e) {
                      return 'string' === typeof e
                    },
                    fnc: function (e) {
                      return 'function' === typeof e
                    },
                    und: function (e) {
                      return 'undefined' === typeof e
                    },
                    hex: function (e) {
                      return h.test(e)
                    },
                    rgb: function (e) {
                      return d.test(e)
                    },
                    hsl: function (e) {
                      return p.test(e)
                    },
                    col: function (e) {
                      return f.hex(e) || f.rgb(e) || f.hsl(e)
                    },
                    key: function (e) {
                      return (
                        !i.hasOwnProperty(e) &&
                        !o.hasOwnProperty(e) &&
                        'targets' !== e &&
                        'keyframes' !== e
                      )
                    },
                  },
                  m = /\(([^)]+)\)/
                function v(e) {
                  var t = m.exec(e)
                  return t
                    ? t[1].split(',').map(function (e) {
                        return parseFloat(e)
                      })
                    : []
                }
                function g(e, t) {
                  var n = v(e),
                    r = l(f.und(n[0]) ? 1 : n[0], 0.1, 100),
                    i = l(f.und(n[1]) ? 100 : n[1], 0.1, 100),
                    o = l(f.und(n[2]) ? 10 : n[2], 0.1, 100),
                    a = l(f.und(n[3]) ? 0 : n[3], 0.1, 100),
                    c = Math.sqrt(i / r),
                    u = o / (2 * Math.sqrt(i * r)),
                    h = u < 1 ? c * Math.sqrt(1 - u * u) : 0,
                    d = 1,
                    p = u < 1 ? (u * c - a) / h : -a + c
                  function m(e) {
                    var n = t ? (t * e) / 1e3 : e
                    return (
                      (n =
                        u < 1
                          ? Math.exp(-n * u * c) * (d * Math.cos(h * n) + p * Math.sin(h * n))
                          : (d + p * n) * Math.exp(-n * c)),
                      0 === e || 1 === e ? e : 1 - n
                    )
                  }
                  function g() {
                    var t = s.springs[e]
                    if (t) return t
                    for (var n = 1 / 6, r = 0, i = 0; ; )
                      if (1 === m((r += n))) {
                        if (++i >= 16) break
                      } else i = 0
                    var o = r * n * 1e3
                    return (s.springs[e] = o), o
                  }
                  return t ? m : g
                }
                function y(e, t) {
                  void 0 === e && (e = 1), void 0 === t && (t = 0.5)
                  var n = l(e, 1, 10),
                    r = l(t, 0.1, 2)
                  return function (e) {
                    return 0 === e || 1 === e
                      ? e
                      : -n *
                          Math.pow(2, 10 * (e - 1)) *
                          Math.sin(
                            ((e - 1 - (r / (2 * Math.PI)) * Math.asin(1 / n)) * (2 * Math.PI)) / r,
                          )
                  }
                }
                function b(e) {
                  return (
                    void 0 === e && (e = 10),
                    function (t) {
                      return Math.round(t * e) * (1 / e)
                    }
                  )
                }
                var A = (function () {
                    var e = 11,
                      t = 1 / (e - 1)
                    function n(e, t) {
                      return 1 - 3 * t + 3 * e
                    }
                    function r(e, t) {
                      return 3 * t - 6 * e
                    }
                    function i(e) {
                      return 3 * e
                    }
                    function o(e, t, o) {
                      return ((n(t, o) * e + r(t, o)) * e + i(t)) * e
                    }
                    function a(e, t, o) {
                      return 3 * n(t, o) * e * e + 2 * r(t, o) * e + i(t)
                    }
                    function s(e, t, n, r, i) {
                      var a,
                        s,
                        l = 0
                      do {
                        ;(a = o((s = t + (n - t) / 2), r, i) - e) > 0 ? (n = s) : (t = s)
                      } while (Math.abs(a) > 1e-7 && ++l < 10)
                      return s
                    }
                    function l(e, t, n, r) {
                      for (var i = 0; i < 4; ++i) {
                        var s = a(t, n, r)
                        if (0 === s) return t
                        t -= (o(t, n, r) - e) / s
                      }
                      return t
                    }
                    function c(n, r, i, c) {
                      if (0 <= n && n <= 1 && 0 <= i && i <= 1) {
                        var u = new Float32Array(e)
                        if (n !== r || i !== c) for (var h = 0; h < e; ++h) u[h] = o(h * t, n, i)
                        return function (e) {
                          return (n === r && i === c) || 0 === e || 1 === e ? e : o(d(e), r, c)
                        }
                      }
                      function d(r) {
                        for (var o = 0, c = 1, h = e - 1; c !== h && u[c] <= r; ++c) o += t
                        --c
                        var d = o + ((r - u[c]) / (u[c + 1] - u[c])) * t,
                          p = a(d, n, i)
                        return p >= 0.001 ? l(r, d, n, i) : 0 === p ? d : s(r, o, o + t, n, i)
                      }
                    }
                    return c
                  })(),
                  w = (function () {
                    var e = [
                        'Quad',
                        'Cubic',
                        'Quart',
                        'Quint',
                        'Sine',
                        'Expo',
                        'Circ',
                        'Back',
                        'Elastic',
                      ],
                      t = {
                        In: [
                          [0.55, 0.085, 0.68, 0.53],
                          [0.55, 0.055, 0.675, 0.19],
                          [0.895, 0.03, 0.685, 0.22],
                          [0.755, 0.05, 0.855, 0.06],
                          [0.47, 0, 0.745, 0.715],
                          [0.95, 0.05, 0.795, 0.035],
                          [0.6, 0.04, 0.98, 0.335],
                          [0.6, -0.28, 0.735, 0.045],
                          y,
                        ],
                        Out: [
                          [0.25, 0.46, 0.45, 0.94],
                          [0.215, 0.61, 0.355, 1],
                          [0.165, 0.84, 0.44, 1],
                          [0.23, 1, 0.32, 1],
                          [0.39, 0.575, 0.565, 1],
                          [0.19, 1, 0.22, 1],
                          [0.075, 0.82, 0.165, 1],
                          [0.175, 0.885, 0.32, 1.275],
                          function (e, t) {
                            return function (n) {
                              return 1 - y(e, t)(1 - n)
                            }
                          },
                        ],
                        InOut: [
                          [0.455, 0.03, 0.515, 0.955],
                          [0.645, 0.045, 0.355, 1],
                          [0.77, 0, 0.175, 1],
                          [0.86, 0, 0.07, 1],
                          [0.445, 0.05, 0.55, 0.95],
                          [1, 0, 0, 1],
                          [0.785, 0.135, 0.15, 0.86],
                          [0.68, -0.55, 0.265, 1.55],
                          function (e, t) {
                            return function (n) {
                              return n < 0.5 ? y(e, t)(2 * n) / 2 : 1 - y(e, t)(-2 * n + 2) / 2
                            }
                          },
                        ],
                      },
                      n = { linear: [0.25, 0.25, 0.75, 0.75] }
                    for (var r in t)
                      for (var i = 0, o = t[r].length; i < o; i++) n['ease' + r + e[i]] = t[r][i]
                    return n
                  })()
                function x(e, t) {
                  if (f.fnc(e)) return e
                  var n = e.split('(')[0],
                    r = w[n],
                    i = v(e)
                  switch (n) {
                    case 'spring':
                      return g(e, t)
                    case 'cubicBezier':
                      return u(A, i)
                    case 'steps':
                      return u(b, i)
                    default:
                      return f.fnc(r) ? u(r, i) : u(A, r)
                  }
                }
                function E(t) {
                  try {
                    return document.querySelectorAll(t)
                  } catch (e) {
                    return
                  }
                }
                var M = []
                function _(e, t) {
                  for (
                    var n = M,
                      r = e.length,
                      i = arguments.length >= 2 ? arguments[1] : void 0,
                      o = 0;
                    o < r;
                    o++
                  )
                    if (o in e) {
                      var a = e[o]
                      t.call(i, a, o, e) && n.push(a)
                    }
                  return ((M = e).length = 0), n
                }
                function T(e, t) {
                  t || (t = [])
                  for (var n = 0, r = e.length; n < r; n++) {
                    var i = e[n]
                    Array.isArray(i) ? T(i, t) : t.push(i)
                  }
                  return t
                }
                function S(e) {
                  return f.arr(e)
                    ? e
                    : (f.str(e) && (e = E(e) || e),
                      e instanceof NodeList || e instanceof HTMLCollection ? [].slice.call(e) : [e])
                }
                function C(e, t) {
                  return e.some(function (e) {
                    return e === t
                  })
                }
                function L(e) {
                  var t = {}
                  for (var n in e) t[n] = e[n]
                  return t
                }
                function R(e, t) {
                  var n = L(e)
                  for (var r in e) n[r] = t.hasOwnProperty(r) ? t[r] : e[r]
                  return n
                }
                function P(e, t) {
                  var n = L(e)
                  for (var r in t) n[r] = f.und(e[r]) ? t[r] : e[r]
                  return n
                }
                var D = /rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g
                function O(e) {
                  var t = D.exec(e)
                  return t ? 'rgba(' + t[1] + ',1)' : e
                }
                var I = /^#?([a-f\d])([a-f\d])([a-f\d])$/i,
                  B = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i
                function F(e) {
                  var t = e.replace(I, function (e, t, n, r) {
                      return t + t + n + n + r + r
                    }),
                    n = B.exec(t)
                  return (
                    'rgba(' +
                    parseInt(n[1], 16) +
                    ',' +
                    parseInt(n[2], 16) +
                    ',' +
                    parseInt(n[3], 16) +
                    ',1)'
                  )
                }
                var k = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g,
                  N = /hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g
                function U(e) {
                  var t,
                    n,
                    r,
                    i = k.exec(e) || N.exec(e),
                    o = parseInt(i[1], 10) / 360,
                    a = parseInt(i[2], 10) / 100,
                    s = parseInt(i[3], 10) / 100,
                    l = i[4] || 1
                  function c(e, t, n) {
                    return (
                      n < 0 && (n += 1),
                      n > 1 && (n -= 1),
                      n < 1 / 6
                        ? e + 6 * (t - e) * n
                        : n < 0.5
                        ? t
                        : n < 2 / 3
                        ? e + (t - e) * (2 / 3 - n) * 6
                        : e
                    )
                  }
                  if (0 == a) t = n = r = s
                  else {
                    var u = s < 0.5 ? s * (1 + a) : s + a - s * a,
                      h = 2 * s - u
                    ;(t = c(h, u, o + 1 / 3)), (n = c(h, u, o)), (r = c(h, u, o - 1 / 3))
                  }
                  return 'rgba(' + 255 * t + ',' + 255 * n + ',' + 255 * r + ',' + l + ')'
                }
                function H(e) {
                  return f.rgb(e) ? O(e) : f.hex(e) ? F(e) : f.hsl(e) ? U(e) : void 0
                }
                var G =
                  /([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/
                function z(e) {
                  var t = G.exec(e)
                  if (t) return t[2]
                }
                function j(e) {
                  return c(e, 'translate') || 'perspective' === e
                    ? 'px'
                    : c(e, 'rotate') || c(e, 'skew')
                    ? 'deg'
                    : void 0
                }
                function V(e, t) {
                  return f.fnc(e) ? e(t.target, t.id, t.total) : e
                }
                function W(e, t) {
                  return e.getAttribute(t)
                }
                function q(e, t, n) {
                  if (C([n, 'deg', 'rad', 'turn'], z(t))) return t
                  var r = s.CSS[t + n]
                  if (!f.und(r)) return r
                  var i = 100,
                    o = document.createElement(e.tagName),
                    a = e.parentNode && e.parentNode !== document ? e.parentNode : document.body
                  a.appendChild(o), (o.style.position = 'absolute'), (o.style.width = i + n)
                  var l = i / o.offsetWidth
                  a.removeChild(o)
                  var c = l * parseFloat(t)
                  return (s.CSS[t + n] = c), c
                }
                function X(e, t, n) {
                  if (t in e.style) {
                    var r = t.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(),
                      i = e.style[t] || getComputedStyle(e).getPropertyValue(r) || '0'
                    return n ? q(e, i, n) : i
                  }
                }
                function Y(e, t) {
                  return f.dom(e) && !f.inp(e) && (W(e, t) || (f.svg(e) && e[t]))
                    ? 'attribute'
                    : f.dom(e) && C(a, t)
                    ? 'transform'
                    : f.dom(e) && 'transform' !== t && X(e, t)
                    ? 'css'
                    : null != e[t]
                    ? 'object'
                    : void 0
                }
                var Q = /(\w+)\(([^)]*)\)/g
                function Z(e) {
                  if (f.dom(e)) {
                    for (var t, n = e.style.transform || '', r = new Map(); (t = Q.exec(n)); )
                      r.set(t[1], t[2])
                    return r
                  }
                }
                function K(e, t, n, r) {
                  var i = c(t, 'scale') ? 1 : 0 + j(t),
                    o = Z(e).get(t) || i
                  return (
                    n && (n.transforms.list.set(t, o), (n.transforms.last = t)), r ? q(e, o, r) : o
                  )
                }
                function J(e, t, n, r) {
                  switch (Y(e, t)) {
                    case 'transform':
                      return K(e, t, r, n)
                    case 'css':
                      return X(e, t, n)
                    case 'attribute':
                      return W(e, t)
                    default:
                      return e[t] || 0
                  }
                }
                var $ = /^(\*=|\+=|-=)/
                function ee(e, t) {
                  var n = $.exec(e)
                  if (!n) return e
                  var r = z(e) || 0,
                    i = parseFloat(t),
                    o = parseFloat(e.replace(n[0], ''))
                  switch (n[0][0]) {
                    case '+':
                      return i + o + r
                    case '-':
                      return i - o + r
                    case '*':
                      return i * o + r
                  }
                }
                var te = /\s/g
                function ne(e, t) {
                  if (f.col(e)) return H(e)
                  var n = z(e),
                    r = n ? e.substr(0, e.length - n.length) : e
                  return t && !te.test(e) ? r + t : r
                }
                function re(e, t) {
                  return Math.sqrt(Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2))
                }
                function ie(e) {
                  return 2 * Math.PI * W(e, 'r')
                }
                function oe(e) {
                  return 2 * W(e, 'width') + 2 * W(e, 'height')
                }
                function ae(e) {
                  return re({ x: W(e, 'x1'), y: W(e, 'y1') }, { x: W(e, 'x2'), y: W(e, 'y2') })
                }
                function se(e) {
                  for (var t, n = e.points, r = 0, i = 0; i < n.numberOfItems; i++) {
                    var o = n.getItem(i)
                    i > 0 && (r += re(t, o)), (t = o)
                  }
                  return r
                }
                function le(e) {
                  var t = e.points
                  return se(e) + re(t.getItem(t.numberOfItems - 1), t.getItem(0))
                }
                function ce(e) {
                  if (e.getTotalLength) return e.getTotalLength()
                  switch (e.tagName.toLowerCase()) {
                    case 'circle':
                      return ie(e)
                    case 'rect':
                      return oe(e)
                    case 'line':
                      return ae(e)
                    case 'polyline':
                      return se(e)
                    case 'polygon':
                      return le(e)
                  }
                }
                function ue(e) {
                  var t = ce(e)
                  return e.setAttribute('stroke-dasharray', t), t
                }
                function he(e) {
                  for (
                    var t = e.parentNode;
                    f.svg(t) && ((t = t.parentNode), f.svg(t.parentNode));

                  );
                  return t
                }
                function de(e, t) {
                  var n = t || {},
                    r = n.el || he(e),
                    i = r.getBoundingClientRect(),
                    o = W(r, 'viewBox'),
                    a = i.width,
                    s = i.height,
                    l = n.viewBox || (o ? o.split(' ') : [0, 0, a, s])
                  return { el: r, viewBox: l, x: l[0] / 1, y: l[1] / 1, w: a / l[2], h: s / l[3] }
                }
                function pe(e, t) {
                  var n = f.str(e) ? E(e)[0] : e,
                    r = t || 100
                  return function (e) {
                    return { property: e, el: n, svg: de(n), totalLength: ce(n) * (r / 100) }
                  }
                }
                function fe(e, t) {
                  function n(n) {
                    void 0 === n && (n = 0)
                    var r = t + n >= 1 ? t + n : 0
                    return e.el.getPointAtLength(r)
                  }
                  var r = de(e.el, e.svg),
                    i = n(),
                    o = n(-1),
                    a = n(1)
                  switch (e.property) {
                    case 'x':
                      return (i.x - r.x) * r.w
                    case 'y':
                      return (i.y - r.y) * r.h
                    case 'angle':
                      return (180 * Math.atan2(a.y - o.y, a.x - o.x)) / Math.PI
                  }
                }
                var me = /-?\d*\.?\d+/g
                function ve(e, t) {
                  var n = ne(f.pth(e) ? e.totalLength : e, t) + ''
                  return {
                    original: n,
                    numbers: n.match(me) ? n.match(me).map(Number) : [0],
                    strings: f.str(e) || t ? n.split(me) : [],
                  }
                }
                function ge(e) {
                  return _(e ? T(f.arr(e) ? e.map(S) : S(e)) : [], function (e, t, n) {
                    return n.indexOf(e) === t
                  })
                }
                function ye(e) {
                  var t = ge(e)
                  return t.map(function (e, n) {
                    return { target: e, id: n, total: t.length, transforms: { list: Z(e) } }
                  })
                }
                var be = /^spring/
                function Ae(e, t) {
                  var n = L(t)
                  if ((be.test(n.easing) && (n.duration = g(n.easing)), f.arr(e))) {
                    var r = e.length
                    2 !== r || f.obj(e[0])
                      ? f.fnc(t.duration) || (n.duration = t.duration / r)
                      : (e = { value: e })
                  }
                  var i = f.arr(e) ? e : [e]
                  return i
                    .map(function (e, n) {
                      var r = f.obj(e) && !f.pth(e) ? e : { value: e }
                      return (
                        f.und(r.delay) && (r.delay = n ? 0 : t.delay),
                        f.und(r.endDelay) && (r.endDelay = n === i.length - 1 ? t.endDelay : 0),
                        r
                      )
                    })
                    .map(function (e) {
                      return P(e, n)
                    })
                }
                function we(e) {
                  for (
                    var t = _(
                        T(
                          e.map(function (e) {
                            return Object.keys(e)
                          }),
                        ),
                        function (e) {
                          return f.key(e)
                        },
                      ).reduce(function (e, t) {
                        return e.indexOf(t) < 0 && e.push(t), e
                      }, []),
                      n = {},
                      r = function (r) {
                        var i = t[r]
                        n[i] = e.map(function (e) {
                          var t = {}
                          for (var n in e) f.key(n) ? n == i && (t.value = e[n]) : (t[n] = e[n])
                          return t
                        })
                      },
                      i = 0;
                    i < t.length;
                    i++
                  )
                    r(i)
                  return n
                }
                function xe(e, t) {
                  var n = [],
                    r = t.keyframes
                  for (var i in (r && (t = P(we(r), t)), t))
                    f.key(i) && n.push({ name: i, tweens: Ae(t[i], e) })
                  return n
                }
                function Ee(e, t) {
                  var n = {}
                  for (var r in e) {
                    var i = V(e[r], t)
                    f.arr(i) &&
                      1 ===
                        (i = i.map(function (e) {
                          return V(e, t)
                        })).length &&
                      (i = i[0]),
                      (n[r] = i)
                  }
                  return (n.duration = parseFloat(n.duration)), (n.delay = parseFloat(n.delay)), n
                }
                function Me(e, t) {
                  var n
                  return e.tweens.map(function (r) {
                    var i = Ee(r, t),
                      o = i.value,
                      a = f.arr(o) ? o[1] : o,
                      s = z(a),
                      l = J(t.target, e.name, s, t),
                      c = n ? n.to.original : l,
                      u = f.arr(o) ? o[0] : c,
                      h = z(u) || z(l),
                      d = s || h
                    return (
                      f.und(a) && (a = c),
                      (i.from = ve(u, d)),
                      (i.to = ve(ee(a, u), d)),
                      (i.start = n ? n.end : 0),
                      (i.end = i.start + i.delay + i.duration + i.endDelay),
                      (i.easing = x(i.easing, i.duration)),
                      (i.isPath = f.pth(o)),
                      (i.isColor = f.col(i.from.original)),
                      i.isColor && (i.round = 1),
                      (n = i),
                      i
                    )
                  })
                }
                var _e = {
                  css: function (e, t, n) {
                    return (e.style[t] = n)
                  },
                  attribute: function (e, t, n) {
                    return e.setAttribute(t, n)
                  },
                  object: function (e, t, n) {
                    return (e[t] = n)
                  },
                  transform: function (e, t, n, r, i) {
                    if ((r.list.set(t, n), t === r.last || i)) {
                      var o = ''
                      r.list.forEach(function (e, t) {
                        o += t + '(' + e + ') '
                      }),
                        (e.style.transform = o)
                    }
                  },
                }
                function Te(e, t) {
                  for (var n = ye(e), r = 0, i = n.length; r < i; r++) {
                    var o = n[r]
                    for (var a in t) {
                      var s = V(t[a], o),
                        l = o.target,
                        c = z(s),
                        u = J(l, a, c, o),
                        h = ee(ne(s, c || z(u)), u),
                        d = Y(l, a)
                      _e[d](l, a, h, o.transforms, !0)
                    }
                  }
                }
                function Se(e, t) {
                  var n = Y(e.target, t.name)
                  if (n) {
                    var r = Me(t, e),
                      i = r[r.length - 1]
                    return {
                      type: n,
                      property: t.name,
                      animatable: e,
                      tweens: r,
                      duration: i.end,
                      delay: r[0].delay,
                      endDelay: i.endDelay,
                    }
                  }
                }
                function Ce(e, t) {
                  return _(
                    T(
                      e.map(function (e) {
                        return t.map(function (t) {
                          return Se(e, t)
                        })
                      }),
                    ),
                    function (e) {
                      return !f.und(e)
                    },
                  )
                }
                function Le(e, t) {
                  var n = e.length,
                    r = function (e) {
                      return e.timelineOffset ? e.timelineOffset : 0
                    },
                    i = {}
                  return (
                    (i.duration = n
                      ? Math.max.apply(
                          Math,
                          e.map(function (e) {
                            return r(e) + e.duration
                          }),
                        )
                      : t.duration),
                    (i.delay = n
                      ? Math.min.apply(
                          Math,
                          e.map(function (e) {
                            return r(e) + e.delay
                          }),
                        )
                      : t.delay),
                    (i.endDelay = n
                      ? i.duration -
                        Math.max.apply(
                          Math,
                          e.map(function (e) {
                            return r(e) + e.duration - e.endDelay
                          }),
                        )
                      : t.endDelay),
                    i
                  )
                }
                var Re = 0
                function Pe(e) {
                  var t = R(i, e),
                    n = R(o, e),
                    r = xe(n, e),
                    a = ye(e.targets),
                    s = Ce(a, r),
                    l = Le(s, n),
                    c = Re
                  return (
                    Re++,
                    P(t, {
                      id: c,
                      children: [],
                      animatables: a,
                      animations: s,
                      duration: l.duration,
                      delay: l.delay,
                      endDelay: l.endDelay,
                    })
                  )
                }
                var De,
                  Oe = [],
                  Ie = [],
                  Be = (function () {
                    function e() {
                      De = requestAnimationFrame(t)
                    }
                    function t(t) {
                      var n = Oe.length
                      if (n) {
                        for (var r = 0; r < n; ) {
                          var i = Oe[r]
                          if (i.paused) {
                            var o = Oe.indexOf(i)
                            o > -1 && (Oe.splice(o, 1), (n = Oe.length))
                          } else i.tick(t)
                          r++
                        }
                        e()
                      } else De = cancelAnimationFrame(De)
                    }
                    return e
                  })()
                function Fe() {
                  if (document.hidden) {
                    for (var e = 0, t = Oe.length; e < t; e++) activeInstance[e].pause()
                    ;(Ie = Oe.slice(0)), (Oe = [])
                  } else for (var n = 0, r = Ie.length; n < r; n++) Ie[n].play()
                }
                function ke(e) {
                  void 0 === e && (e = {})
                  var t,
                    n = 0,
                    r = 0,
                    i = 0,
                    o = 0,
                    a = null
                  function s() {
                    return (
                      window.Promise &&
                      new Promise(function (e) {
                        return (a = e)
                      })
                    )
                  }
                  var c = s(),
                    u = Pe(e)
                  function h() {
                    u.reversed = !u.reversed
                    for (var e = 0, n = t.length; e < n; e++) t[e].reversed = u.reversed
                  }
                  function d(e) {
                    return u.reversed ? u.duration - e : e
                  }
                  function p() {
                    ;(n = 0), (r = d(u.currentTime) * (1 / ke.speed))
                  }
                  function f(e, t) {
                    t && t.seek(e - t.timelineOffset)
                  }
                  function m(e) {
                    if (u.reversePlayback) for (var n = o; n--; ) f(e, t[n])
                    else for (var r = 0; r < o; r++) f(e, t[r])
                  }
                  function v(e) {
                    for (var t = 0, n = u.animations, r = n.length; t < r; ) {
                      var i = n[t],
                        o = i.animatable,
                        a = i.tweens,
                        s = a.length - 1,
                        c = a[s]
                      s &&
                        (c =
                          _(a, function (t) {
                            return e < t.end
                          })[0] || c)
                      for (
                        var h = l(e - c.start - c.delay, 0, c.duration) / c.duration,
                          d = isNaN(h) ? 1 : c.easing(h),
                          p = c.to.strings,
                          f = c.round,
                          m = [],
                          v = c.to.numbers.length,
                          g = void 0,
                          y = 0;
                        y < v;
                        y++
                      ) {
                        var b = void 0,
                          A = c.to.numbers[y],
                          w = c.from.numbers[y] || 0
                        ;(b = c.isPath ? fe(c.value, d * A) : w + d * (A - w)),
                          f && ((c.isColor && y > 2) || (b = Math.round(b * f) / f)),
                          m.push(b)
                      }
                      var x = p.length
                      if (x) {
                        g = p[0]
                        for (var E = 0; E < x; E++) {
                          p[E]
                          var M = p[E + 1],
                            T = m[E]
                          isNaN(T) || (g += M ? T + M : T + ' ')
                        }
                      } else g = m[0]
                      _e[i.type](o.target, i.property, g, o.transforms), (i.currentValue = g), t++
                    }
                  }
                  function g(e) {
                    u[e] && !u.passThrough && u[e](u)
                  }
                  function y() {
                    u.remaining && !0 !== u.remaining && u.remaining--
                  }
                  function b(e) {
                    var o = u.duration,
                      p = u.delay,
                      f = o - u.endDelay,
                      b = d(e)
                    ;(u.progress = l((b / o) * 100, 0, 100)),
                      (u.reversePlayback = b < u.currentTime),
                      t && m(b),
                      !u.began && u.currentTime > 0 && ((u.began = !0), g('begin'), g('loopBegin')),
                      b <= p && 0 !== u.currentTime && v(0),
                      ((b >= f && u.currentTime !== o) || !o) && v(o),
                      b > p && b < f
                        ? (u.changeBegan ||
                            ((u.changeBegan = !0), (u.changeCompleted = !1), g('changeBegin')),
                          g('change'),
                          v(b))
                        : u.changeBegan &&
                          ((u.changeCompleted = !0), (u.changeBegan = !1), g('changeComplete')),
                      (u.currentTime = l(b, 0, o)),
                      u.began && g('update'),
                      e >= o &&
                        ((r = 0),
                        y(),
                        u.remaining
                          ? ((n = i),
                            g('loopComplete'),
                            g('loopBegin'),
                            'alternate' === u.direction && h())
                          : ((u.paused = !0),
                            u.completed ||
                              ((u.completed = !0),
                              g('loopComplete'),
                              g('complete'),
                              'Promise' in window && (a(), (c = s())))))
                  }
                  return (
                    (u.reset = function () {
                      var e = u.direction
                      ;(u.passThrough = !1),
                        (u.currentTime = 0),
                        (u.progress = 0),
                        (u.paused = !0),
                        (u.began = !1),
                        (u.changeBegan = !1),
                        (u.completed = !1),
                        (u.changeCompleted = !1),
                        (u.reversePlayback = !1),
                        (u.reversed = 'reverse' === e),
                        (u.remaining = u.loop),
                        (t = u.children)
                      for (var n = (o = t.length); n--; ) u.children[n].reset()
                      ;((u.reversed && !0 !== u.loop) || ('alternate' === e && 1 === u.loop)) &&
                        u.remaining++,
                        v(0)
                    }),
                    (u.set = function (e, t) {
                      return Te(e, t), u
                    }),
                    (u.tick = function (e) {
                      ;(i = e), n || (n = i), b((i + (r - n)) * ke.speed)
                    }),
                    (u.seek = function (e) {
                      b(d(e))
                    }),
                    (u.pause = function () {
                      ;(u.paused = !0), p()
                    }),
                    (u.play = function () {
                      u.paused && ((u.paused = !1), Oe.push(u), p(), De || Be())
                    }),
                    (u.reverse = function () {
                      h(), p()
                    }),
                    (u.restart = function () {
                      u.reset(), u.play()
                    }),
                    (u.finished = c),
                    u.reset(),
                    u.autoplay && u.play(),
                    u
                  )
                }
                function Ne(e, t) {
                  for (var n = t.length; n--; ) C(e, t[n].animatable.target) && t.splice(n, 1)
                }
                function Ue(e) {
                  for (var t = ge(e), n = Oe.length; n--; ) {
                    var r = Oe[n],
                      i = r.animations,
                      o = r.children
                    Ne(t, i)
                    for (var a = o.length; a--; ) {
                      var s = o[a],
                        l = s.animations
                      Ne(t, l), l.length || s.children.length || o.splice(a, 1)
                    }
                    i.length || o.length || r.pause()
                  }
                }
                function He(e, t) {
                  void 0 === t && (t = {})
                  var n = t.direction || 'normal',
                    r = t.easing ? x(t.easing) : null,
                    i = t.grid,
                    o = t.axis,
                    a = t.from || 0,
                    s = 'first' === a,
                    l = 'center' === a,
                    c = 'last' === a,
                    u = f.arr(e),
                    h = u ? parseFloat(e[0]) : parseFloat(e),
                    d = u ? parseFloat(e[1]) : 0,
                    p = z(u ? e[1] : e) || 0,
                    m = t.start || 0 + (u ? h : 0),
                    v = [],
                    g = 0
                  return function (e, t, f) {
                    if ((s && (a = 0), l && (a = (f - 1) / 2), c && (a = f - 1), !v.length)) {
                      for (var y = 0; y < f; y++) {
                        if (i) {
                          var b = l ? (i[0] - 1) / 2 : a % i[0],
                            A = l ? (i[1] - 1) / 2 : Math.floor(a / i[0]),
                            w = b - (y % i[0]),
                            x = A - Math.floor(y / i[0]),
                            E = Math.sqrt(w * w + x * x)
                          'x' === o && (E = -w), 'y' === o && (E = -x), v.push(E)
                        } else v.push(Math.abs(a - y))
                        g = Math.max.apply(Math, v)
                      }
                      r &&
                        (v = v.map(function (e) {
                          return r(e / g) * g
                        })),
                        'reverse' === n &&
                          (v = v.map(function (e) {
                            return o ? (e < 0 ? -1 * e : -e) : Math.abs(g - e)
                          }))
                    }
                    return m + (u ? (d - h) / g : h) * (Math.round(100 * v[t]) / 100) + p
                  }
                }
                function Ge(e) {
                  void 0 === e && (e = {})
                  var t = ke(e)
                  return (
                    (t.duration = 0),
                    (t.add = function (n, r) {
                      var i = Oe.indexOf(t),
                        a = t.children
                      function s(e) {
                        e.passThrough = !0
                      }
                      i > -1 && Oe.splice(i, 1)
                      for (var l = 0; l < a.length; l++) s(a[l])
                      var c = P(n, R(o, e))
                      c.targets = c.targets || e.targets
                      var u = t.duration
                      ;(c.autoplay = !1),
                        (c.direction = t.direction),
                        (c.timelineOffset = f.und(r) ? u : ee(r, u)),
                        s(t),
                        t.seek(c.timelineOffset)
                      var h = ke(c)
                      s(h), a.push(h)
                      var d = Le(a, e)
                      return (
                        (t.delay = d.delay),
                        (t.endDelay = d.endDelay),
                        (t.duration = d.duration),
                        t.seek(0),
                        t.reset(),
                        t.autoplay && t.play(),
                        t
                      )
                    }),
                    t
                  )
                }
                document.addEventListener('visibilitychange', Fe),
                  (ke.version = '3.0.0'),
                  (ke.speed = 1),
                  (ke.running = Oe),
                  (ke.remove = Ue),
                  (ke.get = J),
                  (ke.set = Te),
                  (ke.convertPx = q),
                  (ke.path = pe),
                  (ke.setDashoffset = ue),
                  (ke.stagger = He),
                  (ke.timeline = Ge),
                  (ke.easing = x),
                  (ke.penner = w),
                  (ke.random = function (e, t) {
                    return Math.floor(Math.random() * (t - e + 1)) + e
                  }),
                  (n.exports = ke)
              },
              {},
            ],
            57: [
              function (n, r, i) {
                var o, a
                ;(o = this),
                  (a = function (t) {
                    'use strict'
                    void 0 === Number.EPSILON && (Number.EPSILON = Math.pow(2, -52)),
                      void 0 === Number.isInteger &&
                        (Number.isInteger = function (e) {
                          return 'number' === typeof e && isFinite(e) && Math.floor(e) === e
                        }),
                      void 0 === Math.sign &&
                        (Math.sign = function (e) {
                          return e < 0 ? -1 : e > 0 ? 1 : +e
                        }),
                      'name' in Function.prototype === !1 &&
                        Object.defineProperty(Function.prototype, 'name', {
                          get: function () {
                            return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]
                          },
                        }),
                      void 0 === Object.assign &&
                        (Object.assign = function (e) {
                          if (void 0 === e || null === e)
                            throw new TypeError('Cannot convert undefined or null to object')
                          for (var t = Object(e), n = 1; n < arguments.length; n++) {
                            var r = arguments[n]
                            if (void 0 !== r && null !== r)
                              for (var i in r)
                                Object.prototype.hasOwnProperty.call(r, i) && (t[i] = r[i])
                          }
                          return t
                        })
                    var n = (function (e) {
                      var t,
                        n = Object.prototype,
                        r = n.hasOwnProperty,
                        i = 'function' === typeof Symbol ? Symbol : {},
                        o = i.iterator || '@@iterator',
                        a = i.asyncIterator || '@@asyncIterator',
                        s = i.toStringTag || '@@toStringTag'
                      function l(e, t, n) {
                        return (
                          Object.defineProperty(e, t, {
                            value: n,
                            enumerable: !0,
                            configurable: !0,
                            writable: !0,
                          }),
                          e[t]
                        )
                      }
                      try {
                        l({}, '')
                      } catch (D) {
                        l = function (e, t, n) {
                          return (e[t] = n)
                        }
                      }
                      function c(e, t, n, r) {
                        var i = t && t.prototype instanceof v ? t : v,
                          o = Object.create(i.prototype),
                          a = new L(r || [])
                        return (o._invoke = _(e, n, a)), o
                      }
                      function u(e, t, n) {
                        try {
                          return { type: 'normal', arg: e.call(t, n) }
                        } catch (D) {
                          return { type: 'throw', arg: D }
                        }
                      }
                      e.wrap = c
                      var h = 'suspendedStart',
                        d = 'suspendedYield',
                        p = 'executing',
                        f = 'completed',
                        m = {}
                      function v() {}
                      function g() {}
                      function y() {}
                      var b = {}
                      b[o] = function () {
                        return this
                      }
                      var A = Object.getPrototypeOf,
                        w = A && A(A(R([])))
                      w && w !== n && r.call(w, o) && (b = w)
                      var x = (y.prototype = v.prototype = Object.create(b))
                      function E(e) {
                        ;['next', 'throw', 'return'].forEach(function (t) {
                          l(e, t, function (e) {
                            return this._invoke(t, e)
                          })
                        })
                      }
                      function M(e, t) {
                        function n(i, o, a, s) {
                          var l = u(e[i], e, o)
                          if ('throw' !== l.type) {
                            var c = l.arg,
                              h = c.value
                            return h && 'object' === typeof h && r.call(h, '__await')
                              ? t.resolve(h.__await).then(
                                  function (e) {
                                    n('next', e, a, s)
                                  },
                                  function (e) {
                                    n('throw', e, a, s)
                                  },
                                )
                              : t.resolve(h).then(
                                  function (e) {
                                    ;(c.value = e), a(c)
                                  },
                                  function (e) {
                                    return n('throw', e, a, s)
                                  },
                                )
                          }
                          s(l.arg)
                        }
                        var i
                        function o(e, r) {
                          function o() {
                            return new t(function (t, i) {
                              n(e, r, t, i)
                            })
                          }
                          return (i = i ? i.then(o, o) : o())
                        }
                        this._invoke = o
                      }
                      function _(e, t, n) {
                        var r = h
                        return function (i, o) {
                          if (r === p) throw new Error('Generator is already running')
                          if (r === f) {
                            if ('throw' === i) throw o
                            return P()
                          }
                          for (n.method = i, n.arg = o; ; ) {
                            var a = n.delegate
                            if (a) {
                              var s = T(a, n)
                              if (s) {
                                if (s === m) continue
                                return s
                              }
                            }
                            if ('next' === n.method) n.sent = n._sent = n.arg
                            else if ('throw' === n.method) {
                              if (r === h) throw ((r = f), n.arg)
                              n.dispatchException(n.arg)
                            } else 'return' === n.method && n.abrupt('return', n.arg)
                            r = p
                            var l = u(e, t, n)
                            if ('normal' === l.type) {
                              if (((r = n.done ? f : d), l.arg === m)) continue
                              return { value: l.arg, done: n.done }
                            }
                            'throw' === l.type && ((r = f), (n.method = 'throw'), (n.arg = l.arg))
                          }
                        }
                      }
                      function T(e, n) {
                        var r = e.iterator[n.method]
                        if (r === t) {
                          if (((n.delegate = null), 'throw' === n.method)) {
                            if (
                              e.iterator.return &&
                              ((n.method = 'return'), (n.arg = t), T(e, n), 'throw' === n.method)
                            )
                              return m
                            ;(n.method = 'throw'),
                              (n.arg = new TypeError(
                                "The iterator does not provide a 'throw' method",
                              ))
                          }
                          return m
                        }
                        var i = u(r, e.iterator, n.arg)
                        if ('throw' === i.type)
                          return (n.method = 'throw'), (n.arg = i.arg), (n.delegate = null), m
                        var o = i.arg
                        return o
                          ? o.done
                            ? ((n[e.resultName] = o.value),
                              (n.next = e.nextLoc),
                              'return' !== n.method && ((n.method = 'next'), (n.arg = t)),
                              (n.delegate = null),
                              m)
                            : o
                          : ((n.method = 'throw'),
                            (n.arg = new TypeError('iterator result is not an object')),
                            (n.delegate = null),
                            m)
                      }
                      function S(e) {
                        var t = { tryLoc: e[0] }
                        1 in e && (t.catchLoc = e[1]),
                          2 in e && ((t.finallyLoc = e[2]), (t.afterLoc = e[3])),
                          this.tryEntries.push(t)
                      }
                      function C(e) {
                        var t = e.completion || {}
                        ;(t.type = 'normal'), delete t.arg, (e.completion = t)
                      }
                      function L(e) {
                        ;(this.tryEntries = [{ tryLoc: 'root' }]),
                          e.forEach(S, this),
                          this.reset(!0)
                      }
                      function R(e) {
                        if (e) {
                          var n = e[o]
                          if (n) return n.call(e)
                          if ('function' === typeof e.next) return e
                          if (!isNaN(e.length)) {
                            var i = -1,
                              a = function n() {
                                for (; ++i < e.length; )
                                  if (r.call(e, i)) return (n.value = e[i]), (n.done = !1), n
                                return (n.value = t), (n.done = !0), n
                              }
                            return (a.next = a)
                          }
                        }
                        return { next: P }
                      }
                      function P() {
                        return { value: t, done: !0 }
                      }
                      return (
                        (g.prototype = x.constructor = y),
                        (y.constructor = g),
                        (g.displayName = l(y, s, 'GeneratorFunction')),
                        (e.isGeneratorFunction = function (e) {
                          var t = 'function' === typeof e && e.constructor
                          return (
                            !!t && (t === g || 'GeneratorFunction' === (t.displayName || t.name))
                          )
                        }),
                        (e.mark = function (e) {
                          return (
                            Object.setPrototypeOf
                              ? Object.setPrototypeOf(e, y)
                              : ((e.__proto__ = y), l(e, s, 'GeneratorFunction')),
                            (e.prototype = Object.create(x)),
                            e
                          )
                        }),
                        (e.awrap = function (e) {
                          return { __await: e }
                        }),
                        E(M.prototype),
                        (M.prototype[a] = function () {
                          return this
                        }),
                        (e.AsyncIterator = M),
                        (e.async = function (t, n, r, i, o) {
                          void 0 === o && (o = Promise)
                          var a = new M(c(t, n, r, i), o)
                          return e.isGeneratorFunction(n)
                            ? a
                            : a.next().then(function (e) {
                                return e.done ? e.value : a.next()
                              })
                        }),
                        E(x),
                        l(x, s, 'Generator'),
                        (x[o] = function () {
                          return this
                        }),
                        (x.toString = function () {
                          return '[object Generator]'
                        }),
                        (e.keys = function (e) {
                          var t = []
                          for (var n in e) t.push(n)
                          return (
                            t.reverse(),
                            function n() {
                              for (; t.length; ) {
                                var r = t.pop()
                                if (r in e) return (n.value = r), (n.done = !1), n
                              }
                              return (n.done = !0), n
                            }
                          )
                        }),
                        (e.values = R),
                        (L.prototype = {
                          constructor: L,
                          reset: function (e) {
                            if (
                              ((this.prev = 0),
                              (this.next = 0),
                              (this.sent = this._sent = t),
                              (this.done = !1),
                              (this.delegate = null),
                              (this.method = 'next'),
                              (this.arg = t),
                              this.tryEntries.forEach(C),
                              !e)
                            )
                              for (var n in this)
                                't' === n.charAt(0) &&
                                  r.call(this, n) &&
                                  !isNaN(+n.slice(1)) &&
                                  (this[n] = t)
                          },
                          stop: function () {
                            this.done = !0
                            var e = this.tryEntries[0].completion
                            if ('throw' === e.type) throw e.arg
                            return this.rval
                          },
                          dispatchException: function (e) {
                            if (this.done) throw e
                            var n = this
                            function i(r, i) {
                              return (
                                (s.type = 'throw'),
                                (s.arg = e),
                                (n.next = r),
                                i && ((n.method = 'next'), (n.arg = t)),
                                !!i
                              )
                            }
                            for (var o = this.tryEntries.length - 1; o >= 0; --o) {
                              var a = this.tryEntries[o],
                                s = a.completion
                              if ('root' === a.tryLoc) return i('end')
                              if (a.tryLoc <= this.prev) {
                                var l = r.call(a, 'catchLoc'),
                                  c = r.call(a, 'finallyLoc')
                                if (l && c) {
                                  if (this.prev < a.catchLoc) return i(a.catchLoc, !0)
                                  if (this.prev < a.finallyLoc) return i(a.finallyLoc)
                                } else if (l) {
                                  if (this.prev < a.catchLoc) return i(a.catchLoc, !0)
                                } else {
                                  if (!c) throw new Error('try statement without catch or finally')
                                  if (this.prev < a.finallyLoc) return i(a.finallyLoc)
                                }
                              }
                            }
                          },
                          abrupt: function (e, t) {
                            for (var n = this.tryEntries.length - 1; n >= 0; --n) {
                              var i = this.tryEntries[n]
                              if (
                                i.tryLoc <= this.prev &&
                                r.call(i, 'finallyLoc') &&
                                this.prev < i.finallyLoc
                              ) {
                                var o = i
                                break
                              }
                            }
                            o &&
                              ('break' === e || 'continue' === e) &&
                              o.tryLoc <= t &&
                              t <= o.finallyLoc &&
                              (o = null)
                            var a = o ? o.completion : {}
                            return (
                              (a.type = e),
                              (a.arg = t),
                              o
                                ? ((this.method = 'next'), (this.next = o.finallyLoc), m)
                                : this.complete(a)
                            )
                          },
                          complete: function (e, t) {
                            if ('throw' === e.type) throw e.arg
                            return (
                              'break' === e.type || 'continue' === e.type
                                ? (this.next = e.arg)
                                : 'return' === e.type
                                ? ((this.rval = this.arg = e.arg),
                                  (this.method = 'return'),
                                  (this.next = 'end'))
                                : 'normal' === e.type && t && (this.next = t),
                              m
                            )
                          },
                          finish: function (e) {
                            for (var t = this.tryEntries.length - 1; t >= 0; --t) {
                              var n = this.tryEntries[t]
                              if (n.finallyLoc === e)
                                return this.complete(n.completion, n.afterLoc), C(n), m
                            }
                          },
                          catch: function (e) {
                            for (var t = this.tryEntries.length - 1; t >= 0; --t) {
                              var n = this.tryEntries[t]
                              if (n.tryLoc === e) {
                                var r = n.completion
                                if ('throw' === r.type) {
                                  var i = r.arg
                                  C(n)
                                }
                                return i
                              }
                            }
                            throw new Error('illegal catch attempt')
                          },
                          delegateYield: function (e, n, r) {
                            return (
                              (this.delegate = { iterator: R(e), resultName: n, nextLoc: r }),
                              'next' === this.method && (this.arg = t),
                              m
                            )
                          },
                        }),
                        e
                      )
                    })('object' === typeof r ? r.exports : {})
                    try {
                      regeneratorRuntime = n
                    } catch (ym) {
                      Function('r', 'regeneratorRuntime = r')(n)
                    }
                    var i = '125',
                      o = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 },
                      a = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 },
                      s = 0,
                      l = 1,
                      c = 2,
                      u = 3,
                      h = 0,
                      d = 1,
                      p = 2,
                      f = 3,
                      m = 0,
                      v = 1,
                      g = 2,
                      y = 1,
                      b = 2,
                      A = 0,
                      w = 1,
                      x = 2,
                      E = 3,
                      M = 4,
                      _ = 5,
                      T = 100,
                      S = 101,
                      C = 102,
                      L = 103,
                      R = 104,
                      P = 200,
                      D = 201,
                      O = 202,
                      I = 203,
                      B = 204,
                      F = 205,
                      k = 206,
                      N = 207,
                      U = 208,
                      H = 209,
                      G = 210,
                      z = 0,
                      j = 1,
                      V = 2,
                      W = 3,
                      q = 4,
                      X = 5,
                      Y = 6,
                      Q = 7,
                      Z = 0,
                      K = 1,
                      J = 2,
                      $ = 0,
                      ee = 1,
                      te = 2,
                      ne = 3,
                      re = 4,
                      ie = 5,
                      oe = 300,
                      ae = 301,
                      se = 302,
                      le = 303,
                      ce = 304,
                      ue = 306,
                      he = 307,
                      de = 1e3,
                      pe = 1001,
                      fe = 1002,
                      me = 1003,
                      ve = 1004,
                      ge = 1004,
                      ye = 1005,
                      be = 1005,
                      Ae = 1006,
                      we = 1007,
                      xe = 1007,
                      Ee = 1008,
                      Me = 1008,
                      _e = 1009,
                      Te = 1010,
                      Se = 1011,
                      Ce = 1012,
                      Le = 1013,
                      Re = 1014,
                      Pe = 1015,
                      De = 1016,
                      Oe = 1017,
                      Ie = 1018,
                      Be = 1019,
                      Fe = 1020,
                      ke = 1021,
                      Ne = 1022,
                      Ue = 1023,
                      He = 1024,
                      Ge = 1025,
                      ze = Ue,
                      je = 1026,
                      Ve = 1027,
                      We = 1028,
                      qe = 1029,
                      Xe = 1030,
                      Ye = 1031,
                      Qe = 1032,
                      Ze = 1033,
                      Ke = 33776,
                      Je = 33777,
                      $e = 33778,
                      et = 33779,
                      tt = 35840,
                      nt = 35841,
                      rt = 35842,
                      it = 35843,
                      ot = 36196,
                      at = 37492,
                      st = 37496,
                      lt = 37808,
                      ct = 37809,
                      ut = 37810,
                      ht = 37811,
                      dt = 37812,
                      pt = 37813,
                      ft = 37814,
                      mt = 37815,
                      vt = 37816,
                      gt = 37817,
                      yt = 37818,
                      bt = 37819,
                      At = 37820,
                      wt = 37821,
                      xt = 36492,
                      Et = 37840,
                      Mt = 37841,
                      _t = 37842,
                      Tt = 37843,
                      St = 37844,
                      Ct = 37845,
                      Lt = 37846,
                      Rt = 37847,
                      Pt = 37848,
                      Dt = 37849,
                      Ot = 37850,
                      It = 37851,
                      Bt = 37852,
                      Ft = 37853,
                      kt = 2200,
                      Nt = 2201,
                      Ut = 2202,
                      Ht = 2300,
                      Gt = 2301,
                      zt = 2302,
                      jt = 2400,
                      Vt = 2401,
                      Wt = 2402,
                      qt = 2500,
                      Xt = 2501,
                      Yt = 0,
                      Qt = 1,
                      Zt = 2,
                      Kt = 3e3,
                      Jt = 3001,
                      $t = 3007,
                      en = 3002,
                      tn = 3003,
                      nn = 3004,
                      rn = 3005,
                      on = 3006,
                      an = 3200,
                      sn = 3201,
                      ln = 0,
                      cn = 1,
                      un = 0,
                      hn = 7680,
                      dn = 7681,
                      pn = 7682,
                      fn = 7683,
                      mn = 34055,
                      vn = 34056,
                      gn = 5386,
                      yn = 512,
                      bn = 513,
                      An = 514,
                      wn = 515,
                      xn = 516,
                      En = 517,
                      Mn = 518,
                      _n = 519,
                      Tn = 35044,
                      Sn = 35048,
                      Cn = 35040,
                      Ln = 35045,
                      Rn = 35049,
                      Pn = 35041,
                      Dn = 35046,
                      On = 35050,
                      In = 35042,
                      Bn = '100',
                      Fn = '300 es'
                    function kn(e, t, n, r, i, o, a) {
                      try {
                        var s = e[o](a),
                          l = s.value
                      } catch (c) {
                        return void n(c)
                      }
                      s.done ? t(l) : Promise.resolve(l).then(r, i)
                    }
                    function Nn(e) {
                      return function () {
                        var t = this,
                          n = arguments
                        return new Promise(function (r, i) {
                          var o = e.apply(t, n)
                          function a(e) {
                            kn(o, r, i, a, s, 'next', e)
                          }
                          function s(e) {
                            kn(o, r, i, a, s, 'throw', e)
                          }
                          a(void 0)
                        })
                      }
                    }
                    function Un(e, t) {
                      for (var n = 0; n < t.length; n++) {
                        var r = t[n]
                        ;(r.enumerable = r.enumerable || !1),
                          (r.configurable = !0),
                          'value' in r && (r.writable = !0),
                          Object.defineProperty(e, r.key, r)
                      }
                    }
                    function Hn(e, t, n) {
                      return t && Un(e.prototype, t), n && Un(e, n), e
                    }
                    function Gn(e, t) {
                      ;(e.prototype = Object.create(t.prototype)),
                        (e.prototype.constructor = e),
                        (e.__proto__ = t)
                    }
                    function zn(e) {
                      if (void 0 === e)
                        throw new ReferenceError(
                          "this hasn't been initialised - super() hasn't been called",
                        )
                      return e
                    }
                    function jn(e, t) {
                      if (e) {
                        if ('string' === typeof e) return Vn(e, t)
                        var n = Object.prototype.toString.call(e).slice(8, -1)
                        return (
                          'Object' === n && e.constructor && (n = e.constructor.name),
                          'Map' === n || 'Set' === n
                            ? Array.from(e)
                            : 'Arguments' === n ||
                              /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)
                            ? Vn(e, t)
                            : void 0
                        )
                      }
                    }
                    function Vn(e, t) {
                      ;(null == t || t > e.length) && (t = e.length)
                      for (var n = 0, r = new Array(t); n < t; n++) r[n] = e[n]
                      return r
                    }
                    function Wn(e, t) {
                      var n
                      if ('undefined' === typeof Symbol || null == e[Symbol.iterator]) {
                        if (
                          Array.isArray(e) ||
                          (n = jn(e)) ||
                          (t && e && 'number' === typeof e.length)
                        ) {
                          n && (e = n)
                          var r = 0
                          return function () {
                            return r >= e.length ? { done: !0 } : { done: !1, value: e[r++] }
                          }
                        }
                        throw new TypeError(
                          'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
                        )
                      }
                      return (n = e[Symbol.iterator]()).next.bind(n)
                    }
                    function qn() {}
                    Object.assign(qn.prototype, {
                      addEventListener: function (e, t) {
                        void 0 === this._listeners && (this._listeners = {})
                        var n = this._listeners
                        void 0 === n[e] && (n[e] = []), -1 === n[e].indexOf(t) && n[e].push(t)
                      },
                      hasEventListener: function (e, t) {
                        if (void 0 === this._listeners) return !1
                        var n = this._listeners
                        return void 0 !== n[e] && -1 !== n[e].indexOf(t)
                      },
                      removeEventListener: function (e, t) {
                        if (void 0 !== this._listeners) {
                          var n = this._listeners[e]
                          if (void 0 !== n) {
                            var r = n.indexOf(t)
                            ;-1 !== r && n.splice(r, 1)
                          }
                        }
                      },
                      dispatchEvent: function (e) {
                        if (void 0 !== this._listeners) {
                          var t = this._listeners[e.type]
                          if (void 0 !== t) {
                            e.target = this
                            for (var n = t.slice(0), r = 0, i = n.length; r < i; r++)
                              n[r].call(this, e)
                          }
                        }
                      },
                    })
                    for (var Xn = [], Yn = 0; Yn < 256; Yn++)
                      Xn[Yn] = (Yn < 16 ? '0' : '') + Yn.toString(16)
                    var Qn,
                      Zn = 1234567,
                      Kn = {
                        DEG2RAD: Math.PI / 180,
                        RAD2DEG: 180 / Math.PI,
                        generateUUID: function () {
                          var e = (4294967295 * Math.random()) | 0,
                            t = (4294967295 * Math.random()) | 0,
                            n = (4294967295 * Math.random()) | 0,
                            r = (4294967295 * Math.random()) | 0
                          return (
                            Xn[255 & e] +
                            Xn[(e >> 8) & 255] +
                            Xn[(e >> 16) & 255] +
                            Xn[(e >> 24) & 255] +
                            '-' +
                            Xn[255 & t] +
                            Xn[(t >> 8) & 255] +
                            '-' +
                            Xn[((t >> 16) & 15) | 64] +
                            Xn[(t >> 24) & 255] +
                            '-' +
                            Xn[(63 & n) | 128] +
                            Xn[(n >> 8) & 255] +
                            '-' +
                            Xn[(n >> 16) & 255] +
                            Xn[(n >> 24) & 255] +
                            Xn[255 & r] +
                            Xn[(r >> 8) & 255] +
                            Xn[(r >> 16) & 255] +
                            Xn[(r >> 24) & 255]
                          ).toUpperCase()
                        },
                        clamp: function (e, t, n) {
                          return Math.max(t, Math.min(n, e))
                        },
                        euclideanModulo: function (e, t) {
                          return ((e % t) + t) % t
                        },
                        mapLinear: function (e, t, n, r, i) {
                          return r + ((e - t) * (i - r)) / (n - t)
                        },
                        lerp: function (e, t, n) {
                          return (1 - n) * e + n * t
                        },
                        damp: function (e, t, n, r) {
                          return Kn.lerp(e, t, 1 - Math.exp(-n * r))
                        },
                        pingpong: function (e, t) {
                          return (
                            void 0 === t && (t = 1), t - Math.abs(Kn.euclideanModulo(e, 2 * t) - t)
                          )
                        },
                        smoothstep: function (e, t, n) {
                          return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t)) * e * (3 - 2 * e)
                        },
                        smootherstep: function (e, t, n) {
                          return e <= t
                            ? 0
                            : e >= n
                            ? 1
                            : (e = (e - t) / (n - t)) * e * e * (e * (6 * e - 15) + 10)
                        },
                        randInt: function (e, t) {
                          return e + Math.floor(Math.random() * (t - e + 1))
                        },
                        randFloat: function (e, t) {
                          return e + Math.random() * (t - e)
                        },
                        randFloatSpread: function (e) {
                          return e * (0.5 - Math.random())
                        },
                        seededRandom: function (e) {
                          return (
                            void 0 !== e && (Zn = e % 2147483647),
                            ((Zn = (16807 * Zn) % 2147483647) - 1) / 2147483646
                          )
                        },
                        degToRad: function (e) {
                          return e * Kn.DEG2RAD
                        },
                        radToDeg: function (e) {
                          return e * Kn.RAD2DEG
                        },
                        isPowerOfTwo: function (e) {
                          return 0 === (e & (e - 1)) && 0 !== e
                        },
                        ceilPowerOfTwo: function (e) {
                          return Math.pow(2, Math.ceil(Math.log(e) / Math.LN2))
                        },
                        floorPowerOfTwo: function (e) {
                          return Math.pow(2, Math.floor(Math.log(e) / Math.LN2))
                        },
                        setQuaternionFromProperEuler: function (e, t, n, r, i) {
                          var o = Math.cos,
                            a = Math.sin,
                            s = o(n / 2),
                            l = a(n / 2),
                            c = o((t + r) / 2),
                            u = a((t + r) / 2),
                            h = o((t - r) / 2),
                            d = a((t - r) / 2),
                            p = o((r - t) / 2),
                            f = a((r - t) / 2)
                          switch (i) {
                            case 'XYX':
                              e.set(s * u, l * h, l * d, s * c)
                              break
                            case 'YZY':
                              e.set(l * d, s * u, l * h, s * c)
                              break
                            case 'ZXZ':
                              e.set(l * h, l * d, s * u, s * c)
                              break
                            case 'XZX':
                              e.set(s * u, l * f, l * p, s * c)
                              break
                            case 'YXY':
                              e.set(l * p, s * u, l * f, s * c)
                              break
                            case 'ZYZ':
                              e.set(l * f, l * p, s * u, s * c)
                              break
                            default:
                              console.warn(
                                'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' +
                                  i,
                              )
                          }
                        },
                      },
                      Jn = (function () {
                        function e(e, t) {
                          void 0 === e && (e = 0),
                            void 0 === t && (t = 0),
                            Object.defineProperty(this, 'isVector2', { value: !0 }),
                            (this.x = e),
                            (this.y = t)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return (this.x = e), (this.y = t), this
                          }),
                          (t.setScalar = function (e) {
                            return (this.x = e), (this.y = e), this
                          }),
                          (t.setX = function (e) {
                            return (this.x = e), this
                          }),
                          (t.setY = function (e) {
                            return (this.y = e), this
                          }),
                          (t.setComponent = function (e, t) {
                            switch (e) {
                              case 0:
                                this.x = t
                                break
                              case 1:
                                this.y = t
                                break
                              default:
                                throw new Error('index is out of range: ' + e)
                            }
                            return this
                          }),
                          (t.getComponent = function (e) {
                            switch (e) {
                              case 0:
                                return this.x
                              case 1:
                                return this.y
                              default:
                                throw new Error('index is out of range: ' + e)
                            }
                          }),
                          (t.clone = function () {
                            return new this.constructor(this.x, this.y)
                          }),
                          (t.copy = function (e) {
                            return (this.x = e.x), (this.y = e.y), this
                          }),
                          (t.add = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.',
                                ),
                                this.addVectors(e, t))
                              : ((this.x += e.x), (this.y += e.y), this)
                          }),
                          (t.addScalar = function (e) {
                            return (this.x += e), (this.y += e), this
                          }),
                          (t.addVectors = function (e, t) {
                            return (this.x = e.x + t.x), (this.y = e.y + t.y), this
                          }),
                          (t.addScaledVector = function (e, t) {
                            return (this.x += e.x * t), (this.y += e.y * t), this
                          }),
                          (t.sub = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.',
                                ),
                                this.subVectors(e, t))
                              : ((this.x -= e.x), (this.y -= e.y), this)
                          }),
                          (t.subScalar = function (e) {
                            return (this.x -= e), (this.y -= e), this
                          }),
                          (t.subVectors = function (e, t) {
                            return (this.x = e.x - t.x), (this.y = e.y - t.y), this
                          }),
                          (t.multiply = function (e) {
                            return (this.x *= e.x), (this.y *= e.y), this
                          }),
                          (t.multiplyScalar = function (e) {
                            return (this.x *= e), (this.y *= e), this
                          }),
                          (t.divide = function (e) {
                            return (this.x /= e.x), (this.y /= e.y), this
                          }),
                          (t.divideScalar = function (e) {
                            return this.multiplyScalar(1 / e)
                          }),
                          (t.applyMatrix3 = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = e.elements
                            return (
                              (this.x = r[0] * t + r[3] * n + r[6]),
                              (this.y = r[1] * t + r[4] * n + r[7]),
                              this
                            )
                          }),
                          (t.min = function (e) {
                            return (
                              (this.x = Math.min(this.x, e.x)),
                              (this.y = Math.min(this.y, e.y)),
                              this
                            )
                          }),
                          (t.max = function (e) {
                            return (
                              (this.x = Math.max(this.x, e.x)),
                              (this.y = Math.max(this.y, e.y)),
                              this
                            )
                          }),
                          (t.clamp = function (e, t) {
                            return (
                              (this.x = Math.max(e.x, Math.min(t.x, this.x))),
                              (this.y = Math.max(e.y, Math.min(t.y, this.y))),
                              this
                            )
                          }),
                          (t.clampScalar = function (e, t) {
                            return (
                              (this.x = Math.max(e, Math.min(t, this.x))),
                              (this.y = Math.max(e, Math.min(t, this.y))),
                              this
                            )
                          }),
                          (t.clampLength = function (e, t) {
                            var n = this.length()
                            return this.divideScalar(n || 1).multiplyScalar(
                              Math.max(e, Math.min(t, n)),
                            )
                          }),
                          (t.floor = function () {
                            return (
                              (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)), this
                            )
                          }),
                          (t.ceil = function () {
                            return (this.x = Math.ceil(this.x)), (this.y = Math.ceil(this.y)), this
                          }),
                          (t.round = function () {
                            return (
                              (this.x = Math.round(this.x)), (this.y = Math.round(this.y)), this
                            )
                          }),
                          (t.roundToZero = function () {
                            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
                            )
                          }),
                          (t.negate = function () {
                            return (this.x = -this.x), (this.y = -this.y), this
                          }),
                          (t.dot = function (e) {
                            return this.x * e.x + this.y * e.y
                          }),
                          (t.cross = function (e) {
                            return this.x * e.y - this.y * e.x
                          }),
                          (t.lengthSq = function () {
                            return this.x * this.x + this.y * this.y
                          }),
                          (t.length = function () {
                            return Math.sqrt(this.x * this.x + this.y * this.y)
                          }),
                          (t.manhattanLength = function () {
                            return Math.abs(this.x) + Math.abs(this.y)
                          }),
                          (t.normalize = function () {
                            return this.divideScalar(this.length() || 1)
                          }),
                          (t.angle = function () {
                            var e = Math.atan2(-this.y, -this.x) + Math.PI
                            return e
                          }),
                          (t.distanceTo = function (e) {
                            return Math.sqrt(this.distanceToSquared(e))
                          }),
                          (t.distanceToSquared = function (e) {
                            var t = this.x - e.x,
                              n = this.y - e.y
                            return t * t + n * n
                          }),
                          (t.manhattanDistanceTo = function (e) {
                            return Math.abs(this.x - e.x) + Math.abs(this.y - e.y)
                          }),
                          (t.setLength = function (e) {
                            return this.normalize().multiplyScalar(e)
                          }),
                          (t.lerp = function (e, t) {
                            return (
                              (this.x += (e.x - this.x) * t), (this.y += (e.y - this.y) * t), this
                            )
                          }),
                          (t.lerpVectors = function (e, t, n) {
                            return (
                              (this.x = e.x + (t.x - e.x) * n),
                              (this.y = e.y + (t.y - e.y) * n),
                              this
                            )
                          }),
                          (t.equals = function (e) {
                            return e.x === this.x && e.y === this.y
                          }),
                          (t.fromArray = function (e, t) {
                            return (
                              void 0 === t && (t = 0), (this.x = e[t]), (this.y = e[t + 1]), this
                            )
                          }),
                          (t.toArray = function (e, t) {
                            return (
                              void 0 === e && (e = []),
                              void 0 === t && (t = 0),
                              (e[t] = this.x),
                              (e[t + 1] = this.y),
                              e
                            )
                          }),
                          (t.fromBufferAttribute = function (e, t, n) {
                            return (
                              void 0 !== n &&
                                console.warn(
                                  'THREE.Vector2: offset has been removed from .fromBufferAttribute().',
                                ),
                              (this.x = e.getX(t)),
                              (this.y = e.getY(t)),
                              this
                            )
                          }),
                          (t.rotateAround = function (e, t) {
                            var n = Math.cos(t),
                              r = Math.sin(t),
                              i = this.x - e.x,
                              o = this.y - e.y
                            return (
                              (this.x = i * n - o * r + e.x), (this.y = i * r + o * n + e.y), this
                            )
                          }),
                          (t.random = function () {
                            return (this.x = Math.random()), (this.y = Math.random()), this
                          }),
                          Hn(e, [
                            {
                              key: 'width',
                              get: function () {
                                return this.x
                              },
                              set: function (e) {
                                this.x = e
                              },
                            },
                            {
                              key: 'height',
                              get: function () {
                                return this.y
                              },
                              set: function (e) {
                                this.y = e
                              },
                            },
                          ]),
                          e
                        )
                      })(),
                      $n = (function () {
                        function e() {
                          Object.defineProperty(this, 'isMatrix3', { value: !0 }),
                            (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.',
                              )
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r, i, o, a, s, l) {
                            var c = this.elements
                            return (
                              (c[0] = e),
                              (c[1] = r),
                              (c[2] = a),
                              (c[3] = t),
                              (c[4] = i),
                              (c[5] = s),
                              (c[6] = n),
                              (c[7] = o),
                              (c[8] = l),
                              this
                            )
                          }),
                          (t.identity = function () {
                            return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().fromArray(this.elements)
                          }),
                          (t.copy = function (e) {
                            var t = this.elements,
                              n = e.elements
                            return (
                              (t[0] = n[0]),
                              (t[1] = n[1]),
                              (t[2] = n[2]),
                              (t[3] = n[3]),
                              (t[4] = n[4]),
                              (t[5] = n[5]),
                              (t[6] = n[6]),
                              (t[7] = n[7]),
                              (t[8] = n[8]),
                              this
                            )
                          }),
                          (t.extractBasis = function (e, t, n) {
                            return (
                              e.setFromMatrix3Column(this, 0),
                              t.setFromMatrix3Column(this, 1),
                              n.setFromMatrix3Column(this, 2),
                              this
                            )
                          }),
                          (t.setFromMatrix4 = function (e) {
                            var t = e.elements
                            return (
                              this.set(t[0], t[4], t[8], t[1], t[5], t[9], t[2], t[6], t[10]), this
                            )
                          }),
                          (t.multiply = function (e) {
                            return this.multiplyMatrices(this, e)
                          }),
                          (t.premultiply = function (e) {
                            return this.multiplyMatrices(e, this)
                          }),
                          (t.multiplyMatrices = function (e, t) {
                            var n = e.elements,
                              r = t.elements,
                              i = this.elements,
                              o = n[0],
                              a = n[3],
                              s = n[6],
                              l = n[1],
                              c = n[4],
                              u = n[7],
                              h = n[2],
                              d = n[5],
                              p = n[8],
                              f = r[0],
                              m = r[3],
                              v = r[6],
                              g = r[1],
                              y = r[4],
                              b = r[7],
                              A = r[2],
                              w = r[5],
                              x = r[8]
                            return (
                              (i[0] = o * f + a * g + s * A),
                              (i[3] = o * m + a * y + s * w),
                              (i[6] = o * v + a * b + s * x),
                              (i[1] = l * f + c * g + u * A),
                              (i[4] = l * m + c * y + u * w),
                              (i[7] = l * v + c * b + u * x),
                              (i[2] = h * f + d * g + p * A),
                              (i[5] = h * m + d * y + p * w),
                              (i[8] = h * v + d * b + p * x),
                              this
                            )
                          }),
                          (t.multiplyScalar = function (e) {
                            var t = this.elements
                            return (
                              (t[0] *= e),
                              (t[3] *= e),
                              (t[6] *= e),
                              (t[1] *= e),
                              (t[4] *= e),
                              (t[7] *= e),
                              (t[2] *= e),
                              (t[5] *= e),
                              (t[8] *= e),
                              this
                            )
                          }),
                          (t.determinant = function () {
                            var e = this.elements,
                              t = e[0],
                              n = e[1],
                              r = e[2],
                              i = e[3],
                              o = e[4],
                              a = e[5],
                              s = e[6],
                              l = e[7],
                              c = e[8]
                            return (
                              t * o * c - t * a * l - n * i * c + n * a * s + r * i * l - r * o * s
                            )
                          }),
                          (t.invert = function () {
                            var e = this.elements,
                              t = e[0],
                              n = e[1],
                              r = e[2],
                              i = e[3],
                              o = e[4],
                              a = e[5],
                              s = e[6],
                              l = e[7],
                              c = e[8],
                              u = c * o - a * l,
                              h = a * s - c * i,
                              d = l * i - o * s,
                              p = t * u + n * h + r * d
                            if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0)
                            var f = 1 / p
                            return (
                              (e[0] = u * f),
                              (e[1] = (r * l - c * n) * f),
                              (e[2] = (a * n - r * o) * f),
                              (e[3] = h * f),
                              (e[4] = (c * t - r * s) * f),
                              (e[5] = (r * i - a * t) * f),
                              (e[6] = d * f),
                              (e[7] = (n * s - l * t) * f),
                              (e[8] = (o * t - n * i) * f),
                              this
                            )
                          }),
                          (t.transpose = function () {
                            var e,
                              t = this.elements
                            return (
                              (e = t[1]),
                              (t[1] = t[3]),
                              (t[3] = e),
                              (e = t[2]),
                              (t[2] = t[6]),
                              (t[6] = e),
                              (e = t[5]),
                              (t[5] = t[7]),
                              (t[7] = e),
                              this
                            )
                          }),
                          (t.getNormalMatrix = function (e) {
                            return this.setFromMatrix4(e).copy(this).invert().transpose()
                          }),
                          (t.transposeIntoArray = function (e) {
                            var t = this.elements
                            return (
                              (e[0] = t[0]),
                              (e[1] = t[3]),
                              (e[2] = t[6]),
                              (e[3] = t[1]),
                              (e[4] = t[4]),
                              (e[5] = t[7]),
                              (e[6] = t[2]),
                              (e[7] = t[5]),
                              (e[8] = t[8]),
                              this
                            )
                          }),
                          (t.setUvTransform = function (e, t, n, r, i, o, a) {
                            var s = Math.cos(i),
                              l = Math.sin(i)
                            return (
                              this.set(
                                n * s,
                                n * l,
                                -n * (s * o + l * a) + o + e,
                                -r * l,
                                r * s,
                                -r * (-l * o + s * a) + a + t,
                                0,
                                0,
                                1,
                              ),
                              this
                            )
                          }),
                          (t.scale = function (e, t) {
                            var n = this.elements
                            return (
                              (n[0] *= e),
                              (n[3] *= e),
                              (n[6] *= e),
                              (n[1] *= t),
                              (n[4] *= t),
                              (n[7] *= t),
                              this
                            )
                          }),
                          (t.rotate = function (e) {
                            var t = Math.cos(e),
                              n = Math.sin(e),
                              r = this.elements,
                              i = r[0],
                              o = r[3],
                              a = r[6],
                              s = r[1],
                              l = r[4],
                              c = r[7]
                            return (
                              (r[0] = t * i + n * s),
                              (r[3] = t * o + n * l),
                              (r[6] = t * a + n * c),
                              (r[1] = -n * i + t * s),
                              (r[4] = -n * o + t * l),
                              (r[7] = -n * a + t * c),
                              this
                            )
                          }),
                          (t.translate = function (e, t) {
                            var n = this.elements
                            return (
                              (n[0] += e * n[2]),
                              (n[3] += e * n[5]),
                              (n[6] += e * n[8]),
                              (n[1] += t * n[2]),
                              (n[4] += t * n[5]),
                              (n[7] += t * n[8]),
                              this
                            )
                          }),
                          (t.equals = function (e) {
                            for (var t = this.elements, n = e.elements, r = 0; r < 9; r++)
                              if (t[r] !== n[r]) return !1
                            return !0
                          }),
                          (t.fromArray = function (e, t) {
                            void 0 === t && (t = 0)
                            for (var n = 0; n < 9; n++) this.elements[n] = e[n + t]
                            return this
                          }),
                          (t.toArray = function (e, t) {
                            void 0 === e && (e = []), void 0 === t && (t = 0)
                            var n = this.elements
                            return (
                              (e[t] = n[0]),
                              (e[t + 1] = n[1]),
                              (e[t + 2] = n[2]),
                              (e[t + 3] = n[3]),
                              (e[t + 4] = n[4]),
                              (e[t + 5] = n[5]),
                              (e[t + 6] = n[6]),
                              (e[t + 7] = n[7]),
                              (e[t + 8] = n[8]),
                              e
                            )
                          }),
                          e
                        )
                      })(),
                      er = {
                        getDataURL: function (e) {
                          if (/^data:/i.test(e.src)) return e.src
                          if ('undefined' == typeof HTMLCanvasElement) return e.src
                          var t
                          if (e instanceof HTMLCanvasElement) t = e
                          else {
                            void 0 === Qn &&
                              (Qn = document.createElementNS(
                                'http://www.w3.org/1999/xhtml',
                                'canvas',
                              )),
                              (Qn.width = e.width),
                              (Qn.height = e.height)
                            var n = Qn.getContext('2d')
                            e instanceof ImageData
                              ? n.putImageData(e, 0, 0)
                              : n.drawImage(e, 0, 0, e.width, e.height),
                              (t = Qn)
                          }
                          return t.width > 2048 || t.height > 2048
                            ? t.toDataURL('image/jpeg', 0.6)
                            : t.toDataURL('image/png')
                        },
                      },
                      tr = 0
                    function nr(e, t, n, r, i, o, a, s, l, c) {
                      void 0 === e && (e = nr.DEFAULT_IMAGE),
                        void 0 === t && (t = nr.DEFAULT_MAPPING),
                        void 0 === n && (n = pe),
                        void 0 === r && (r = pe),
                        void 0 === i && (i = Ae),
                        void 0 === o && (o = Ee),
                        void 0 === a && (a = Ue),
                        void 0 === s && (s = _e),
                        void 0 === l && (l = 1),
                        void 0 === c && (c = Kt),
                        Object.defineProperty(this, 'id', { value: tr++ }),
                        (this.uuid = Kn.generateUUID()),
                        (this.name = ''),
                        (this.image = e),
                        (this.mipmaps = []),
                        (this.mapping = t),
                        (this.wrapS = n),
                        (this.wrapT = r),
                        (this.magFilter = i),
                        (this.minFilter = o),
                        (this.anisotropy = l),
                        (this.format = a),
                        (this.internalFormat = null),
                        (this.type = s),
                        (this.offset = new Jn(0, 0)),
                        (this.repeat = new Jn(1, 1)),
                        (this.center = new Jn(0, 0)),
                        (this.rotation = 0),
                        (this.matrixAutoUpdate = !0),
                        (this.matrix = new $n()),
                        (this.generateMipmaps = !0),
                        (this.premultiplyAlpha = !1),
                        (this.flipY = !0),
                        (this.unpackAlignment = 4),
                        (this.encoding = c),
                        (this.version = 0),
                        (this.onUpdate = null)
                    }
                    function rr(e) {
                      return ('undefined' !== typeof HTMLImageElement &&
                        e instanceof HTMLImageElement) ||
                        ('undefined' !== typeof HTMLCanvasElement &&
                          e instanceof HTMLCanvasElement) ||
                        ('undefined' !== typeof ImageBitmap && e instanceof ImageBitmap)
                        ? er.getDataURL(e)
                        : e.data
                        ? {
                            data: Array.prototype.slice.call(e.data),
                            width: e.width,
                            height: e.height,
                            type: e.data.constructor.name,
                          }
                        : (console.warn('THREE.Texture: Unable to serialize Texture.'), {})
                    }
                    ;(nr.DEFAULT_IMAGE = void 0),
                      (nr.DEFAULT_MAPPING = oe),
                      (nr.prototype = Object.assign(Object.create(qn.prototype), {
                        constructor: nr,
                        isTexture: !0,
                        updateMatrix: function () {
                          this.matrix.setUvTransform(
                            this.offset.x,
                            this.offset.y,
                            this.repeat.x,
                            this.repeat.y,
                            this.rotation,
                            this.center.x,
                            this.center.y,
                          )
                        },
                        clone: function () {
                          return new this.constructor().copy(this)
                        },
                        copy: function (e) {
                          return (
                            (this.name = e.name),
                            (this.image = e.image),
                            (this.mipmaps = e.mipmaps.slice(0)),
                            (this.mapping = e.mapping),
                            (this.wrapS = e.wrapS),
                            (this.wrapT = e.wrapT),
                            (this.magFilter = e.magFilter),
                            (this.minFilter = e.minFilter),
                            (this.anisotropy = e.anisotropy),
                            (this.format = e.format),
                            (this.internalFormat = e.internalFormat),
                            (this.type = e.type),
                            this.offset.copy(e.offset),
                            this.repeat.copy(e.repeat),
                            this.center.copy(e.center),
                            (this.rotation = e.rotation),
                            (this.matrixAutoUpdate = e.matrixAutoUpdate),
                            this.matrix.copy(e.matrix),
                            (this.generateMipmaps = e.generateMipmaps),
                            (this.premultiplyAlpha = e.premultiplyAlpha),
                            (this.flipY = e.flipY),
                            (this.unpackAlignment = e.unpackAlignment),
                            (this.encoding = e.encoding),
                            this
                          )
                        },
                        toJSON: function (e) {
                          var t = void 0 === e || 'string' === typeof e
                          if (!t && void 0 !== e.textures[this.uuid]) return e.textures[this.uuid]
                          var 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) {
                            var r = this.image
                            if (
                              (void 0 === r.uuid && (r.uuid = Kn.generateUUID()),
                              !t && void 0 === e.images[r.uuid])
                            ) {
                              var i
                              if (Array.isArray(r)) {
                                i = []
                                for (var o = 0, a = r.length; o < a; o++)
                                  r[o].isDataTexture ? i.push(rr(r[o].image)) : i.push(rr(r[o]))
                              } else i = rr(r)
                              e.images[r.uuid] = { uuid: r.uuid, url: i }
                            }
                            n.image = r.uuid
                          }
                          return t || (e.textures[this.uuid] = n), n
                        },
                        dispose: function () {
                          this.dispatchEvent({ type: 'dispose' })
                        },
                        transformUv: function (e) {
                          if (this.mapping !== oe) return e
                          if ((e.applyMatrix3(this.matrix), e.x < 0 || e.x > 1))
                            switch (this.wrapS) {
                              case de:
                                e.x = e.x - Math.floor(e.x)
                                break
                              case pe:
                                e.x = e.x < 0 ? 0 : 1
                                break
                              case fe:
                                1 === Math.abs(Math.floor(e.x) % 2)
                                  ? (e.x = Math.ceil(e.x) - e.x)
                                  : (e.x = e.x - Math.floor(e.x))
                            }
                          if (e.y < 0 || e.y > 1)
                            switch (this.wrapT) {
                              case de:
                                e.y = e.y - Math.floor(e.y)
                                break
                              case pe:
                                e.y = e.y < 0 ? 0 : 1
                                break
                              case fe:
                                1 === Math.abs(Math.floor(e.y) % 2)
                                  ? (e.y = Math.ceil(e.y) - e.y)
                                  : (e.y = e.y - Math.floor(e.y))
                            }
                          return this.flipY && (e.y = 1 - e.y), e
                        },
                      })),
                      Object.defineProperty(nr.prototype, 'needsUpdate', {
                        set: function (e) {
                          !0 === e && this.version++
                        },
                      })
                    var ir = (function () {
                        function e(e, t, n, r) {
                          void 0 === e && (e = 0),
                            void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            void 0 === r && (r = 1),
                            Object.defineProperty(this, 'isVector4', { value: !0 }),
                            (this.x = e),
                            (this.y = t),
                            (this.z = n),
                            (this.w = r)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r) {
                            return (this.x = e), (this.y = t), (this.z = n), (this.w = r), this
                          }),
                          (t.setScalar = function (e) {
                            return (this.x = e), (this.y = e), (this.z = e), (this.w = e), this
                          }),
                          (t.setX = function (e) {
                            return (this.x = e), this
                          }),
                          (t.setY = function (e) {
                            return (this.y = e), this
                          }),
                          (t.setZ = function (e) {
                            return (this.z = e), this
                          }),
                          (t.setW = function (e) {
                            return (this.w = e), this
                          }),
                          (t.setComponent = function (e, t) {
                            switch (e) {
                              case 0:
                                this.x = t
                                break
                              case 1:
                                this.y = t
                                break
                              case 2:
                                this.z = t
                                break
                              case 3:
                                this.w = t
                                break
                              default:
                                throw new Error('index is out of range: ' + e)
                            }
                            return this
                          }),
                          (t.getComponent = function (e) {
                            switch (e) {
                              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: ' + e)
                            }
                          }),
                          (t.clone = function () {
                            return new this.constructor(this.x, this.y, this.z, this.w)
                          }),
                          (t.copy = function (e) {
                            return (
                              (this.x = e.x),
                              (this.y = e.y),
                              (this.z = e.z),
                              (this.w = void 0 !== e.w ? e.w : 1),
                              this
                            )
                          }),
                          (t.add = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.',
                                ),
                                this.addVectors(e, t))
                              : ((this.x += e.x),
                                (this.y += e.y),
                                (this.z += e.z),
                                (this.w += e.w),
                                this)
                          }),
                          (t.addScalar = function (e) {
                            return (this.x += e), (this.y += e), (this.z += e), (this.w += e), this
                          }),
                          (t.addVectors = function (e, t) {
                            return (
                              (this.x = e.x + t.x),
                              (this.y = e.y + t.y),
                              (this.z = e.z + t.z),
                              (this.w = e.w + t.w),
                              this
                            )
                          }),
                          (t.addScaledVector = function (e, t) {
                            return (
                              (this.x += e.x * t),
                              (this.y += e.y * t),
                              (this.z += e.z * t),
                              (this.w += e.w * t),
                              this
                            )
                          }),
                          (t.sub = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.',
                                ),
                                this.subVectors(e, t))
                              : ((this.x -= e.x),
                                (this.y -= e.y),
                                (this.z -= e.z),
                                (this.w -= e.w),
                                this)
                          }),
                          (t.subScalar = function (e) {
                            return (this.x -= e), (this.y -= e), (this.z -= e), (this.w -= e), this
                          }),
                          (t.subVectors = function (e, t) {
                            return (
                              (this.x = e.x - t.x),
                              (this.y = e.y - t.y),
                              (this.z = e.z - t.z),
                              (this.w = e.w - t.w),
                              this
                            )
                          }),
                          (t.multiply = function (e) {
                            return (
                              (this.x *= e.x),
                              (this.y *= e.y),
                              (this.z *= e.z),
                              (this.w *= e.w),
                              this
                            )
                          }),
                          (t.multiplyScalar = function (e) {
                            return (this.x *= e), (this.y *= e), (this.z *= e), (this.w *= e), this
                          }),
                          (t.applyMatrix4 = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = this.z,
                              i = this.w,
                              o = e.elements
                            return (
                              (this.x = o[0] * t + o[4] * n + o[8] * r + o[12] * i),
                              (this.y = o[1] * t + o[5] * n + o[9] * r + o[13] * i),
                              (this.z = o[2] * t + o[6] * n + o[10] * r + o[14] * i),
                              (this.w = o[3] * t + o[7] * n + o[11] * r + o[15] * i),
                              this
                            )
                          }),
                          (t.divideScalar = function (e) {
                            return this.multiplyScalar(1 / e)
                          }),
                          (t.setAxisAngleFromQuaternion = function (e) {
                            this.w = 2 * Math.acos(e.w)
                            var t = Math.sqrt(1 - e.w * e.w)
                            return (
                              t < 1e-4
                                ? ((this.x = 1), (this.y = 0), (this.z = 0))
                                : ((this.x = e.x / t), (this.y = e.y / t), (this.z = e.z / t)),
                              this
                            )
                          }),
                          (t.setAxisAngleFromRotationMatrix = function (e) {
                            var t,
                              n,
                              r,
                              i,
                              o = 0.01,
                              a = 0.1,
                              s = e.elements,
                              l = s[0],
                              c = s[4],
                              u = s[8],
                              h = s[1],
                              d = s[5],
                              p = s[9],
                              f = s[2],
                              m = s[6],
                              v = s[10]
                            if (Math.abs(c - h) < o && Math.abs(u - f) < o && Math.abs(p - m) < o) {
                              if (
                                Math.abs(c + h) < a &&
                                Math.abs(u + f) < a &&
                                Math.abs(p + m) < a &&
                                Math.abs(l + d + v - 3) < a
                              )
                                return this.set(1, 0, 0, 0), this
                              t = Math.PI
                              var g = (l + 1) / 2,
                                y = (d + 1) / 2,
                                b = (v + 1) / 2,
                                A = (c + h) / 4,
                                w = (u + f) / 4,
                                x = (p + m) / 4
                              return (
                                g > y && g > b
                                  ? g < o
                                    ? ((n = 0), (r = 0.707106781), (i = 0.707106781))
                                    : ((r = A / (n = Math.sqrt(g))), (i = w / n))
                                  : y > b
                                  ? y < o
                                    ? ((n = 0.707106781), (r = 0), (i = 0.707106781))
                                    : ((n = A / (r = Math.sqrt(y))), (i = x / r))
                                  : b < o
                                  ? ((n = 0.707106781), (r = 0.707106781), (i = 0))
                                  : ((n = w / (i = Math.sqrt(b))), (r = x / i)),
                                this.set(n, r, i, t),
                                this
                              )
                            }
                            var E = Math.sqrt(
                              (m - p) * (m - p) + (u - f) * (u - f) + (h - c) * (h - c),
                            )
                            return (
                              Math.abs(E) < 0.001 && (E = 1),
                              (this.x = (m - p) / E),
                              (this.y = (u - f) / E),
                              (this.z = (h - c) / E),
                              (this.w = Math.acos((l + d + v - 1) / 2)),
                              this
                            )
                          }),
                          (t.min = function (e) {
                            return (
                              (this.x = Math.min(this.x, e.x)),
                              (this.y = Math.min(this.y, e.y)),
                              (this.z = Math.min(this.z, e.z)),
                              (this.w = Math.min(this.w, e.w)),
                              this
                            )
                          }),
                          (t.max = function (e) {
                            return (
                              (this.x = Math.max(this.x, e.x)),
                              (this.y = Math.max(this.y, e.y)),
                              (this.z = Math.max(this.z, e.z)),
                              (this.w = Math.max(this.w, e.w)),
                              this
                            )
                          }),
                          (t.clamp = function (e, t) {
                            return (
                              (this.x = Math.max(e.x, Math.min(t.x, this.x))),
                              (this.y = Math.max(e.y, Math.min(t.y, this.y))),
                              (this.z = Math.max(e.z, Math.min(t.z, this.z))),
                              (this.w = Math.max(e.w, Math.min(t.w, this.w))),
                              this
                            )
                          }),
                          (t.clampScalar = function (e, t) {
                            return (
                              (this.x = Math.max(e, Math.min(t, this.x))),
                              (this.y = Math.max(e, Math.min(t, this.y))),
                              (this.z = Math.max(e, Math.min(t, this.z))),
                              (this.w = Math.max(e, Math.min(t, this.w))),
                              this
                            )
                          }),
                          (t.clampLength = function (e, t) {
                            var n = this.length()
                            return this.divideScalar(n || 1).multiplyScalar(
                              Math.max(e, Math.min(t, n)),
                            )
                          }),
                          (t.floor = function () {
                            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
                            )
                          }),
                          (t.ceil = function () {
                            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
                            )
                          }),
                          (t.round = function () {
                            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
                            )
                          }),
                          (t.roundToZero = function () {
                            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
                            )
                          }),
                          (t.negate = function () {
                            return (
                              (this.x = -this.x),
                              (this.y = -this.y),
                              (this.z = -this.z),
                              (this.w = -this.w),
                              this
                            )
                          }),
                          (t.dot = function (e) {
                            return this.x * e.x + this.y * e.y + this.z * e.z + this.w * e.w
                          }),
                          (t.lengthSq = function () {
                            return (
                              this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
                            )
                          }),
                          (t.length = function () {
                            return Math.sqrt(
                              this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w,
                            )
                          }),
                          (t.manhattanLength = function () {
                            return (
                              Math.abs(this.x) +
                              Math.abs(this.y) +
                              Math.abs(this.z) +
                              Math.abs(this.w)
                            )
                          }),
                          (t.normalize = function () {
                            return this.divideScalar(this.length() || 1)
                          }),
                          (t.setLength = function (e) {
                            return this.normalize().multiplyScalar(e)
                          }),
                          (t.lerp = function (e, t) {
                            return (
                              (this.x += (e.x - this.x) * t),
                              (this.y += (e.y - this.y) * t),
                              (this.z += (e.z - this.z) * t),
                              (this.w += (e.w - this.w) * t),
                              this
                            )
                          }),
                          (t.lerpVectors = function (e, t, n) {
                            return (
                              (this.x = e.x + (t.x - e.x) * n),
                              (this.y = e.y + (t.y - e.y) * n),
                              (this.z = e.z + (t.z - e.z) * n),
                              (this.w = e.w + (t.w - e.w) * n),
                              this
                            )
                          }),
                          (t.equals = function (e) {
                            return (
                              e.x === this.x && e.y === this.y && e.z === this.z && e.w === this.w
                            )
                          }),
                          (t.fromArray = function (e, t) {
                            return (
                              void 0 === t && (t = 0),
                              (this.x = e[t]),
                              (this.y = e[t + 1]),
                              (this.z = e[t + 2]),
                              (this.w = e[t + 3]),
                              this
                            )
                          }),
                          (t.toArray = function (e, t) {
                            return (
                              void 0 === e && (e = []),
                              void 0 === t && (t = 0),
                              (e[t] = this.x),
                              (e[t + 1] = this.y),
                              (e[t + 2] = this.z),
                              (e[t + 3] = this.w),
                              e
                            )
                          }),
                          (t.fromBufferAttribute = function (e, t, n) {
                            return (
                              void 0 !== n &&
                                console.warn(
                                  'THREE.Vector4: offset has been removed from .fromBufferAttribute().',
                                ),
                              (this.x = e.getX(t)),
                              (this.y = e.getY(t)),
                              (this.z = e.getZ(t)),
                              (this.w = e.getW(t)),
                              this
                            )
                          }),
                          (t.random = function () {
                            return (
                              (this.x = Math.random()),
                              (this.y = Math.random()),
                              (this.z = Math.random()),
                              (this.w = Math.random()),
                              this
                            )
                          }),
                          Hn(e, [
                            {
                              key: 'width',
                              get: function () {
                                return this.z
                              },
                              set: function (e) {
                                this.z = e
                              },
                            },
                            {
                              key: 'height',
                              get: function () {
                                return this.w
                              },
                              set: function (e) {
                                this.w = e
                              },
                            },
                          ]),
                          e
                        )
                      })(),
                      or = (function (e) {
                        function t(t, n, r) {
                          var i
                          return (
                            (i = e.call(this) || this),
                            Object.defineProperty(zn(i), 'isWebGLRenderTarget', { value: !0 }),
                            (i.width = t),
                            (i.height = n),
                            (i.scissor = new ir(0, 0, t, n)),
                            (i.scissorTest = !1),
                            (i.viewport = new ir(0, 0, t, n)),
                            (r = r || {}),
                            (i.texture = new nr(
                              void 0,
                              r.mapping,
                              r.wrapS,
                              r.wrapT,
                              r.magFilter,
                              r.minFilter,
                              r.format,
                              r.type,
                              r.anisotropy,
                              r.encoding,
                            )),
                            (i.texture.image = {}),
                            (i.texture.image.width = t),
                            (i.texture.image.height = n),
                            (i.texture.generateMipmaps =
                              void 0 !== r.generateMipmaps && r.generateMipmaps),
                            (i.texture.minFilter = void 0 !== r.minFilter ? r.minFilter : Ae),
                            (i.depthBuffer = void 0 === r.depthBuffer || r.depthBuffer),
                            (i.stencilBuffer = void 0 !== r.stencilBuffer && r.stencilBuffer),
                            (i.depthTexture = void 0 !== r.depthTexture ? r.depthTexture : null),
                            i
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.setSize = function (e, t) {
                            ;(this.width === e && this.height === t) ||
                              ((this.width = e),
                              (this.height = t),
                              (this.texture.image.width = e),
                              (this.texture.image.height = t),
                              this.dispose()),
                              this.viewport.set(0, 0, e, t),
                              this.scissor.set(0, 0, e, t)
                          }),
                          (n.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (n.copy = function (e) {
                            return (
                              (this.width = e.width),
                              (this.height = e.height),
                              this.viewport.copy(e.viewport),
                              (this.texture = e.texture.clone()),
                              (this.depthBuffer = e.depthBuffer),
                              (this.stencilBuffer = e.stencilBuffer),
                              (this.depthTexture = e.depthTexture),
                              this
                            )
                          }),
                          (n.dispose = function () {
                            this.dispatchEvent({ type: 'dispose' })
                          }),
                          t
                        )
                      })(qn),
                      ar = (function (e) {
                        function t(t, n, r) {
                          var i
                          return (
                            (i = e.call(this, t, n, r) || this),
                            Object.defineProperty(zn(i), 'isWebGLMultisampleRenderTarget', {
                              value: !0,
                            }),
                            (i.samples = 4),
                            i
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.copy = function (t) {
                            return e.prototype.copy.call(this, t), (this.samples = t.samples), this
                          }),
                          t
                        )
                      })(or),
                      sr = (function () {
                        function e(e, t, n, r) {
                          void 0 === e && (e = 0),
                            void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            void 0 === r && (r = 1),
                            Object.defineProperty(this, 'isQuaternion', { value: !0 }),
                            (this._x = e),
                            (this._y = t),
                            (this._z = n),
                            (this._w = r)
                        }
                        ;(e.slerp = function (e, t, n, r) {
                          return n.copy(e).slerp(t, r)
                        }),
                          (e.slerpFlat = function (e, t, n, r, i, o, a) {
                            var s = n[r + 0],
                              l = n[r + 1],
                              c = n[r + 2],
                              u = n[r + 3],
                              h = i[o + 0],
                              d = i[o + 1],
                              p = i[o + 2],
                              f = i[o + 3]
                            if (u !== f || s !== h || l !== d || c !== p) {
                              var m = 1 - a,
                                v = s * h + l * d + c * p + u * f,
                                g = v >= 0 ? 1 : -1,
                                y = 1 - v * v
                              if (y > Number.EPSILON) {
                                var b = Math.sqrt(y),
                                  A = Math.atan2(b, v * g)
                                ;(m = Math.sin(m * A) / b), (a = Math.sin(a * A) / b)
                              }
                              var w = a * g
                              if (
                                ((s = s * m + h * w),
                                (l = l * m + d * w),
                                (c = c * m + p * w),
                                (u = u * m + f * w),
                                m === 1 - a)
                              ) {
                                var x = 1 / Math.sqrt(s * s + l * l + c * c + u * u)
                                ;(s *= x), (l *= x), (c *= x), (u *= x)
                              }
                            }
                            ;(e[t] = s), (e[t + 1] = l), (e[t + 2] = c), (e[t + 3] = u)
                          }),
                          (e.multiplyQuaternionsFlat = function (e, t, n, r, i, o) {
                            var a = n[r],
                              s = n[r + 1],
                              l = n[r + 2],
                              c = n[r + 3],
                              u = i[o],
                              h = i[o + 1],
                              d = i[o + 2],
                              p = i[o + 3]
                            return (
                              (e[t] = a * p + c * u + s * d - l * h),
                              (e[t + 1] = s * p + c * h + l * u - a * d),
                              (e[t + 2] = l * p + c * d + a * h - s * u),
                              (e[t + 3] = c * p - a * u - s * h - l * d),
                              e
                            )
                          })
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r) {
                            return (
                              (this._x = e),
                              (this._y = t),
                              (this._z = n),
                              (this._w = r),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.clone = function () {
                            return new this.constructor(this._x, this._y, this._z, this._w)
                          }),
                          (t.copy = function (e) {
                            return (
                              (this._x = e.x),
                              (this._y = e.y),
                              (this._z = e.z),
                              (this._w = e.w),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.setFromEuler = function (e, t) {
                            if (!e || !e.isEuler)
                              throw new Error(
                                'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.',
                              )
                            var n = e._x,
                              r = e._y,
                              i = e._z,
                              o = e._order,
                              a = Math.cos,
                              s = Math.sin,
                              l = a(n / 2),
                              c = a(r / 2),
                              u = a(i / 2),
                              h = s(n / 2),
                              d = s(r / 2),
                              p = s(i / 2)
                            switch (o) {
                              case 'XYZ':
                                ;(this._x = h * c * u + l * d * p),
                                  (this._y = l * d * u - h * c * p),
                                  (this._z = l * c * p + h * d * u),
                                  (this._w = l * c * u - h * d * p)
                                break
                              case 'YXZ':
                                ;(this._x = h * c * u + l * d * p),
                                  (this._y = l * d * u - h * c * p),
                                  (this._z = l * c * p - h * d * u),
                                  (this._w = l * c * u + h * d * p)
                                break
                              case 'ZXY':
                                ;(this._x = h * c * u - l * d * p),
                                  (this._y = l * d * u + h * c * p),
                                  (this._z = l * c * p + h * d * u),
                                  (this._w = l * c * u - h * d * p)
                                break
                              case 'ZYX':
                                ;(this._x = h * c * u - l * d * p),
                                  (this._y = l * d * u + h * c * p),
                                  (this._z = l * c * p - h * d * u),
                                  (this._w = l * c * u + h * d * p)
                                break
                              case 'YZX':
                                ;(this._x = h * c * u + l * d * p),
                                  (this._y = l * d * u + h * c * p),
                                  (this._z = l * c * p - h * d * u),
                                  (this._w = l * c * u - h * d * p)
                                break
                              case 'XZY':
                                ;(this._x = h * c * u - l * d * p),
                                  (this._y = l * d * u - h * c * p),
                                  (this._z = l * c * p + h * d * u),
                                  (this._w = l * c * u + h * d * p)
                                break
                              default:
                                console.warn(
                                  'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' +
                                    o,
                                )
                            }
                            return !1 !== t && this._onChangeCallback(), this
                          }),
                          (t.setFromAxisAngle = function (e, t) {
                            var n = t / 2,
                              r = Math.sin(n)
                            return (
                              (this._x = e.x * r),
                              (this._y = e.y * r),
                              (this._z = e.z * r),
                              (this._w = Math.cos(n)),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.setFromRotationMatrix = function (e) {
                            var t = e.elements,
                              n = t[0],
                              r = t[4],
                              i = t[8],
                              o = t[1],
                              a = t[5],
                              s = t[9],
                              l = t[2],
                              c = t[6],
                              u = t[10],
                              h = n + a + u
                            if (h > 0) {
                              var d = 0.5 / Math.sqrt(h + 1)
                              ;(this._w = 0.25 / d),
                                (this._x = (c - s) * d),
                                (this._y = (i - l) * d),
                                (this._z = (o - r) * d)
                            } else if (n > a && n > u) {
                              var p = 2 * Math.sqrt(1 + n - a - u)
                              ;(this._w = (c - s) / p),
                                (this._x = 0.25 * p),
                                (this._y = (r + o) / p),
                                (this._z = (i + l) / p)
                            } else if (a > u) {
                              var f = 2 * Math.sqrt(1 + a - n - u)
                              ;(this._w = (i - l) / f),
                                (this._x = (r + o) / f),
                                (this._y = 0.25 * f),
                                (this._z = (s + c) / f)
                            } else {
                              var m = 2 * Math.sqrt(1 + u - n - a)
                              ;(this._w = (o - r) / m),
                                (this._x = (i + l) / m),
                                (this._y = (s + c) / m),
                                (this._z = 0.25 * m)
                            }
                            return this._onChangeCallback(), this
                          }),
                          (t.setFromUnitVectors = function (e, t) {
                            var n = 1e-6,
                              r = e.dot(t) + 1
                            return (
                              r < n
                                ? ((r = 0),
                                  Math.abs(e.x) > Math.abs(e.z)
                                    ? ((this._x = -e.y),
                                      (this._y = e.x),
                                      (this._z = 0),
                                      (this._w = r))
                                    : ((this._x = 0),
                                      (this._y = -e.z),
                                      (this._z = e.y),
                                      (this._w = r)))
                                : ((this._x = e.y * t.z - e.z * t.y),
                                  (this._y = e.z * t.x - e.x * t.z),
                                  (this._z = e.x * t.y - e.y * t.x),
                                  (this._w = r)),
                              this.normalize()
                            )
                          }),
                          (t.angleTo = function (e) {
                            return 2 * Math.acos(Math.abs(Kn.clamp(this.dot(e), -1, 1)))
                          }),
                          (t.rotateTowards = function (e, t) {
                            var n = this.angleTo(e)
                            if (0 === n) return this
                            var r = Math.min(1, t / n)
                            return this.slerp(e, r), this
                          }),
                          (t.identity = function () {
                            return this.set(0, 0, 0, 1)
                          }),
                          (t.invert = function () {
                            return this.conjugate()
                          }),
                          (t.conjugate = function () {
                            return (
                              (this._x *= -1),
                              (this._y *= -1),
                              (this._z *= -1),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.dot = function (e) {
                            return this._x * e._x + this._y * e._y + this._z * e._z + this._w * e._w
                          }),
                          (t.lengthSq = function () {
                            return (
                              this._x * this._x +
                              this._y * this._y +
                              this._z * this._z +
                              this._w * this._w
                            )
                          }),
                          (t.length = function () {
                            return Math.sqrt(
                              this._x * this._x +
                                this._y * this._y +
                                this._z * this._z +
                                this._w * this._w,
                            )
                          }),
                          (t.normalize = function () {
                            var e = this.length()
                            return (
                              0 === e
                                ? ((this._x = 0), (this._y = 0), (this._z = 0), (this._w = 1))
                                : ((e = 1 / e),
                                  (this._x = this._x * e),
                                  (this._y = this._y * e),
                                  (this._z = this._z * e),
                                  (this._w = this._w * e)),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.multiply = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.',
                                ),
                                this.multiplyQuaternions(e, t))
                              : this.multiplyQuaternions(this, e)
                          }),
                          (t.premultiply = function (e) {
                            return this.multiplyQuaternions(e, this)
                          }),
                          (t.multiplyQuaternions = function (e, t) {
                            var n = e._x,
                              r = e._y,
                              i = e._z,
                              o = e._w,
                              a = t._x,
                              s = t._y,
                              l = t._z,
                              c = t._w
                            return (
                              (this._x = n * c + o * a + r * l - i * s),
                              (this._y = r * c + o * s + i * a - n * l),
                              (this._z = i * c + o * l + n * s - r * a),
                              (this._w = o * c - n * a - r * s - i * l),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.slerp = function (e, t) {
                            if (0 === t) return this
                            if (1 === t) return this.copy(e)
                            var n = this._x,
                              r = this._y,
                              i = this._z,
                              o = this._w,
                              a = o * e._w + n * e._x + r * e._y + i * e._z
                            if (
                              (a < 0
                                ? ((this._w = -e._w),
                                  (this._x = -e._x),
                                  (this._y = -e._y),
                                  (this._z = -e._z),
                                  (a = -a))
                                : this.copy(e),
                              a >= 1)
                            )
                              return (
                                (this._w = o), (this._x = n), (this._y = r), (this._z = i), this
                              )
                            var s = 1 - a * a
                            if (s <= Number.EPSILON) {
                              var l = 1 - t
                              return (
                                (this._w = l * o + t * this._w),
                                (this._x = l * n + t * this._x),
                                (this._y = l * r + t * this._y),
                                (this._z = l * i + t * this._z),
                                this.normalize(),
                                this._onChangeCallback(),
                                this
                              )
                            }
                            var c = Math.sqrt(s),
                              u = Math.atan2(c, a),
                              h = Math.sin((1 - t) * u) / c,
                              d = Math.sin(t * u) / c
                            return (
                              (this._w = o * h + this._w * d),
                              (this._x = n * h + this._x * d),
                              (this._y = r * h + this._y * d),
                              (this._z = i * h + this._z * d),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.equals = function (e) {
                            return (
                              e._x === this._x &&
                              e._y === this._y &&
                              e._z === this._z &&
                              e._w === this._w
                            )
                          }),
                          (t.fromArray = function (e, t) {
                            return (
                              void 0 === t && (t = 0),
                              (this._x = e[t]),
                              (this._y = e[t + 1]),
                              (this._z = e[t + 2]),
                              (this._w = e[t + 3]),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.toArray = function (e, t) {
                            return (
                              void 0 === e && (e = []),
                              void 0 === t && (t = 0),
                              (e[t] = this._x),
                              (e[t + 1] = this._y),
                              (e[t + 2] = this._z),
                              (e[t + 3] = this._w),
                              e
                            )
                          }),
                          (t.fromBufferAttribute = function (e, t) {
                            return (
                              (this._x = e.getX(t)),
                              (this._y = e.getY(t)),
                              (this._z = e.getZ(t)),
                              (this._w = e.getW(t)),
                              this
                            )
                          }),
                          (t._onChange = function (e) {
                            return (this._onChangeCallback = e), this
                          }),
                          (t._onChangeCallback = function () {}),
                          Hn(e, [
                            {
                              key: 'x',
                              get: function () {
                                return this._x
                              },
                              set: function (e) {
                                ;(this._x = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'y',
                              get: function () {
                                return this._y
                              },
                              set: function (e) {
                                ;(this._y = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'z',
                              get: function () {
                                return this._z
                              },
                              set: function (e) {
                                ;(this._z = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'w',
                              get: function () {
                                return this._w
                              },
                              set: function (e) {
                                ;(this._w = e), this._onChangeCallback()
                              },
                            },
                          ]),
                          e
                        )
                      })(),
                      lr = (function () {
                        function e(e, t, n) {
                          void 0 === e && (e = 0),
                            void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            Object.defineProperty(this, 'isVector3', { value: !0 }),
                            (this.x = e),
                            (this.y = t),
                            (this.z = n)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n) {
                            return (
                              void 0 === n && (n = this.z),
                              (this.x = e),
                              (this.y = t),
                              (this.z = n),
                              this
                            )
                          }),
                          (t.setScalar = function (e) {
                            return (this.x = e), (this.y = e), (this.z = e), this
                          }),
                          (t.setX = function (e) {
                            return (this.x = e), this
                          }),
                          (t.setY = function (e) {
                            return (this.y = e), this
                          }),
                          (t.setZ = function (e) {
                            return (this.z = e), this
                          }),
                          (t.setComponent = function (e, t) {
                            switch (e) {
                              case 0:
                                this.x = t
                                break
                              case 1:
                                this.y = t
                                break
                              case 2:
                                this.z = t
                                break
                              default:
                                throw new Error('index is out of range: ' + e)
                            }
                            return this
                          }),
                          (t.getComponent = function (e) {
                            switch (e) {
                              case 0:
                                return this.x
                              case 1:
                                return this.y
                              case 2:
                                return this.z
                              default:
                                throw new Error('index is out of range: ' + e)
                            }
                          }),
                          (t.clone = function () {
                            return new this.constructor(this.x, this.y, this.z)
                          }),
                          (t.copy = function (e) {
                            return (this.x = e.x), (this.y = e.y), (this.z = e.z), this
                          }),
                          (t.add = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.',
                                ),
                                this.addVectors(e, t))
                              : ((this.x += e.x), (this.y += e.y), (this.z += e.z), this)
                          }),
                          (t.addScalar = function (e) {
                            return (this.x += e), (this.y += e), (this.z += e), this
                          }),
                          (t.addVectors = function (e, t) {
                            return (
                              (this.x = e.x + t.x), (this.y = e.y + t.y), (this.z = e.z + t.z), this
                            )
                          }),
                          (t.addScaledVector = function (e, t) {
                            return (
                              (this.x += e.x * t), (this.y += e.y * t), (this.z += e.z * t), this
                            )
                          }),
                          (t.sub = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.',
                                ),
                                this.subVectors(e, t))
                              : ((this.x -= e.x), (this.y -= e.y), (this.z -= e.z), this)
                          }),
                          (t.subScalar = function (e) {
                            return (this.x -= e), (this.y -= e), (this.z -= e), this
                          }),
                          (t.subVectors = function (e, t) {
                            return (
                              (this.x = e.x - t.x), (this.y = e.y - t.y), (this.z = e.z - t.z), this
                            )
                          }),
                          (t.multiply = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.',
                                ),
                                this.multiplyVectors(e, t))
                              : ((this.x *= e.x), (this.y *= e.y), (this.z *= e.z), this)
                          }),
                          (t.multiplyScalar = function (e) {
                            return (this.x *= e), (this.y *= e), (this.z *= e), this
                          }),
                          (t.multiplyVectors = function (e, t) {
                            return (
                              (this.x = e.x * t.x), (this.y = e.y * t.y), (this.z = e.z * t.z), this
                            )
                          }),
                          (t.applyEuler = function (e) {
                            return (
                              (e && e.isEuler) ||
                                console.error(
                                  'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.',
                                ),
                              this.applyQuaternion(ur.setFromEuler(e))
                            )
                          }),
                          (t.applyAxisAngle = function (e, t) {
                            return this.applyQuaternion(ur.setFromAxisAngle(e, t))
                          }),
                          (t.applyMatrix3 = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = this.z,
                              i = e.elements
                            return (
                              (this.x = i[0] * t + i[3] * n + i[6] * r),
                              (this.y = i[1] * t + i[4] * n + i[7] * r),
                              (this.z = i[2] * t + i[5] * n + i[8] * r),
                              this
                            )
                          }),
                          (t.applyNormalMatrix = function (e) {
                            return this.applyMatrix3(e).normalize()
                          }),
                          (t.applyMatrix4 = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = this.z,
                              i = e.elements,
                              o = 1 / (i[3] * t + i[7] * n + i[11] * r + i[15])
                            return (
                              (this.x = (i[0] * t + i[4] * n + i[8] * r + i[12]) * o),
                              (this.y = (i[1] * t + i[5] * n + i[9] * r + i[13]) * o),
                              (this.z = (i[2] * t + i[6] * n + i[10] * r + i[14]) * o),
                              this
                            )
                          }),
                          (t.applyQuaternion = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = this.z,
                              i = e.x,
                              o = e.y,
                              a = e.z,
                              s = e.w,
                              l = s * t + o * r - a * n,
                              c = s * n + a * t - i * r,
                              u = s * r + i * n - o * t,
                              h = -i * t - o * n - a * r
                            return (
                              (this.x = l * s + h * -i + c * -a - u * -o),
                              (this.y = c * s + h * -o + u * -i - l * -a),
                              (this.z = u * s + h * -a + l * -o - c * -i),
                              this
                            )
                          }),
                          (t.project = function (e) {
                            return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(
                              e.projectionMatrix,
                            )
                          }),
                          (t.unproject = function (e) {
                            return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(
                              e.matrixWorld,
                            )
                          }),
                          (t.transformDirection = function (e) {
                            var t = this.x,
                              n = this.y,
                              r = this.z,
                              i = e.elements
                            return (
                              (this.x = i[0] * t + i[4] * n + i[8] * r),
                              (this.y = i[1] * t + i[5] * n + i[9] * r),
                              (this.z = i[2] * t + i[6] * n + i[10] * r),
                              this.normalize()
                            )
                          }),
                          (t.divide = function (e) {
                            return (this.x /= e.x), (this.y /= e.y), (this.z /= e.z), this
                          }),
                          (t.divideScalar = function (e) {
                            return this.multiplyScalar(1 / e)
                          }),
                          (t.min = function (e) {
                            return (
                              (this.x = Math.min(this.x, e.x)),
                              (this.y = Math.min(this.y, e.y)),
                              (this.z = Math.min(this.z, e.z)),
                              this
                            )
                          }),
                          (t.max = function (e) {
                            return (
                              (this.x = Math.max(this.x, e.x)),
                              (this.y = Math.max(this.y, e.y)),
                              (this.z = Math.max(this.z, e.z)),
                              this
                            )
                          }),
                          (t.clamp = function (e, t) {
                            return (
                              (this.x = Math.max(e.x, Math.min(t.x, this.x))),
                              (this.y = Math.max(e.y, Math.min(t.y, this.y))),
                              (this.z = Math.max(e.z, Math.min(t.z, this.z))),
                              this
                            )
                          }),
                          (t.clampScalar = function (e, t) {
                            return (
                              (this.x = Math.max(e, Math.min(t, this.x))),
                              (this.y = Math.max(e, Math.min(t, this.y))),
                              (this.z = Math.max(e, Math.min(t, this.z))),
                              this
                            )
                          }),
                          (t.clampLength = function (e, t) {
                            var n = this.length()
                            return this.divideScalar(n || 1).multiplyScalar(
                              Math.max(e, Math.min(t, n)),
                            )
                          }),
                          (t.floor = function () {
                            return (
                              (this.x = Math.floor(this.x)),
                              (this.y = Math.floor(this.y)),
                              (this.z = Math.floor(this.z)),
                              this
                            )
                          }),
                          (t.ceil = function () {
                            return (
                              (this.x = Math.ceil(this.x)),
                              (this.y = Math.ceil(this.y)),
                              (this.z = Math.ceil(this.z)),
                              this
                            )
                          }),
                          (t.round = function () {
                            return (
                              (this.x = Math.round(this.x)),
                              (this.y = Math.round(this.y)),
                              (this.z = Math.round(this.z)),
                              this
                            )
                          }),
                          (t.roundToZero = function () {
                            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
                            )
                          }),
                          (t.negate = function () {
                            return (this.x = -this.x), (this.y = -this.y), (this.z = -this.z), this
                          }),
                          (t.dot = function (e) {
                            return this.x * e.x + this.y * e.y + this.z * e.z
                          }),
                          (t.lengthSq = function () {
                            return this.x * this.x + this.y * this.y + this.z * this.z
                          }),
                          (t.length = function () {
                            return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
                          }),
                          (t.manhattanLength = function () {
                            return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z)
                          }),
                          (t.normalize = function () {
                            return this.divideScalar(this.length() || 1)
                          }),
                          (t.setLength = function (e) {
                            return this.normalize().multiplyScalar(e)
                          }),
                          (t.lerp = function (e, t) {
                            return (
                              (this.x += (e.x - this.x) * t),
                              (this.y += (e.y - this.y) * t),
                              (this.z += (e.z - this.z) * t),
                              this
                            )
                          }),
                          (t.lerpVectors = function (e, t, n) {
                            return (
                              (this.x = e.x + (t.x - e.x) * n),
                              (this.y = e.y + (t.y - e.y) * n),
                              (this.z = e.z + (t.z - e.z) * n),
                              this
                            )
                          }),
                          (t.cross = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.',
                                ),
                                this.crossVectors(e, t))
                              : this.crossVectors(this, e)
                          }),
                          (t.crossVectors = function (e, t) {
                            var n = e.x,
                              r = e.y,
                              i = e.z,
                              o = t.x,
                              a = t.y,
                              s = t.z
                            return (
                              (this.x = r * s - i * a),
                              (this.y = i * o - n * s),
                              (this.z = n * a - r * o),
                              this
                            )
                          }),
                          (t.projectOnVector = function (e) {
                            var t = e.lengthSq()
                            if (0 === t) return this.set(0, 0, 0)
                            var n = e.dot(this) / t
                            return this.copy(e).multiplyScalar(n)
                          }),
                          (t.projectOnPlane = function (e) {
                            return cr.copy(this).projectOnVector(e), this.sub(cr)
                          }),
                          (t.reflect = function (e) {
                            return this.sub(cr.copy(e).multiplyScalar(2 * this.dot(e)))
                          }),
                          (t.angleTo = function (e) {
                            var t = Math.sqrt(this.lengthSq() * e.lengthSq())
                            if (0 === t) return Math.PI / 2
                            var n = this.dot(e) / t
                            return Math.acos(Kn.clamp(n, -1, 1))
                          }),
                          (t.distanceTo = function (e) {
                            return Math.sqrt(this.distanceToSquared(e))
                          }),
                          (t.distanceToSquared = function (e) {
                            var t = this.x - e.x,
                              n = this.y - e.y,
                              r = this.z - e.z
                            return t * t + n * n + r * r
                          }),
                          (t.manhattanDistanceTo = function (e) {
                            return (
                              Math.abs(this.x - e.x) +
                              Math.abs(this.y - e.y) +
                              Math.abs(this.z - e.z)
                            )
                          }),
                          (t.setFromSpherical = function (e) {
                            return this.setFromSphericalCoords(e.radius, e.phi, e.theta)
                          }),
                          (t.setFromSphericalCoords = function (e, t, n) {
                            var r = Math.sin(t) * e
                            return (
                              (this.x = r * Math.sin(n)),
                              (this.y = Math.cos(t) * e),
                              (this.z = r * Math.cos(n)),
                              this
                            )
                          }),
                          (t.setFromCylindrical = function (e) {
                            return this.setFromCylindricalCoords(e.radius, e.theta, e.y)
                          }),
                          (t.setFromCylindricalCoords = function (e, t, n) {
                            return (
                              (this.x = e * Math.sin(t)),
                              (this.y = n),
                              (this.z = e * Math.cos(t)),
                              this
                            )
                          }),
                          (t.setFromMatrixPosition = function (e) {
                            var t = e.elements
                            return (this.x = t[12]), (this.y = t[13]), (this.z = t[14]), this
                          }),
                          (t.setFromMatrixScale = function (e) {
                            var t = this.setFromMatrixColumn(e, 0).length(),
                              n = this.setFromMatrixColumn(e, 1).length(),
                              r = this.setFromMatrixColumn(e, 2).length()
                            return (this.x = t), (this.y = n), (this.z = r), this
                          }),
                          (t.setFromMatrixColumn = function (e, t) {
                            return this.fromArray(e.elements, 4 * t)
                          }),
                          (t.setFromMatrix3Column = function (e, t) {
                            return this.fromArray(e.elements, 3 * t)
                          }),
                          (t.equals = function (e) {
                            return e.x === this.x && e.y === this.y && e.z === this.z
                          }),
                          (t.fromArray = function (e, t) {
                            return (
                              void 0 === t && (t = 0),
                              (this.x = e[t]),
                              (this.y = e[t + 1]),
                              (this.z = e[t + 2]),
                              this
                            )
                          }),
                          (t.toArray = function (e, t) {
                            return (
                              void 0 === e && (e = []),
                              void 0 === t && (t = 0),
                              (e[t] = this.x),
                              (e[t + 1] = this.y),
                              (e[t + 2] = this.z),
                              e
                            )
                          }),
                          (t.fromBufferAttribute = function (e, t, n) {
                            return (
                              void 0 !== n &&
                                console.warn(
                                  'THREE.Vector3: offset has been removed from .fromBufferAttribute().',
                                ),
                              (this.x = e.getX(t)),
                              (this.y = e.getY(t)),
                              (this.z = e.getZ(t)),
                              this
                            )
                          }),
                          (t.random = function () {
                            return (
                              (this.x = Math.random()),
                              (this.y = Math.random()),
                              (this.z = Math.random()),
                              this
                            )
                          }),
                          e
                        )
                      })(),
                      cr = new lr(),
                      ur = new sr(),
                      hr = (function () {
                        function e(e, t) {
                          Object.defineProperty(this, 'isBox3', { value: !0 }),
                            (this.min = void 0 !== e ? e : new lr(1 / 0, 1 / 0, 1 / 0)),
                            (this.max = void 0 !== t ? t : new lr(-1 / 0, -1 / 0, -1 / 0))
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.min.copy(e), this.max.copy(t), this
                          }),
                          (t.setFromArray = function (e) {
                            for (
                              var t = 1 / 0,
                                n = 1 / 0,
                                r = 1 / 0,
                                i = -1 / 0,
                                o = -1 / 0,
                                a = -1 / 0,
                                s = 0,
                                l = e.length;
                              s < l;
                              s += 3
                            ) {
                              var c = e[s],
                                u = e[s + 1],
                                h = e[s + 2]
                              c < t && (t = c),
                                u < n && (n = u),
                                h < r && (r = h),
                                c > i && (i = c),
                                u > o && (o = u),
                                h > a && (a = h)
                            }
                            return this.min.set(t, n, r), this.max.set(i, o, a), this
                          }),
                          (t.setFromBufferAttribute = function (e) {
                            for (
                              var t = 1 / 0,
                                n = 1 / 0,
                                r = 1 / 0,
                                i = -1 / 0,
                                o = -1 / 0,
                                a = -1 / 0,
                                s = 0,
                                l = e.count;
                              s < l;
                              s++
                            ) {
                              var c = e.getX(s),
                                u = e.getY(s),
                                h = e.getZ(s)
                              c < t && (t = c),
                                u < n && (n = u),
                                h < r && (r = h),
                                c > i && (i = c),
                                u > o && (o = u),
                                h > a && (a = h)
                            }
                            return this.min.set(t, n, r), this.max.set(i, o, a), this
                          }),
                          (t.setFromPoints = function (e) {
                            this.makeEmpty()
                            for (var t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t])
                            return this
                          }),
                          (t.setFromCenterAndSize = function (e, t) {
                            var n = fr.copy(t).multiplyScalar(0.5)
                            return this.min.copy(e).sub(n), this.max.copy(e).add(n), this
                          }),
                          (t.setFromObject = function (e) {
                            return this.makeEmpty(), this.expandByObject(e)
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.min.copy(e.min), this.max.copy(e.max), this
                          }),
                          (t.makeEmpty = function () {
                            return (
                              (this.min.x = this.min.y = this.min.z = 1 / 0),
                              (this.max.x = this.max.y = this.max.z = -1 / 0),
                              this
                            )
                          }),
                          (t.isEmpty = function () {
                            return (
                              this.max.x < this.min.x ||
                              this.max.y < this.min.y ||
                              this.max.z < this.min.z
                            )
                          }),
                          (t.getCenter = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Box3: .getCenter() target is now required'),
                                (e = new lr())),
                              this.isEmpty()
                                ? e.set(0, 0, 0)
                                : e.addVectors(this.min, this.max).multiplyScalar(0.5)
                            )
                          }),
                          (t.getSize = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Box3: .getSize() target is now required'),
                                (e = new lr())),
                              this.isEmpty() ? e.set(0, 0, 0) : e.subVectors(this.max, this.min)
                            )
                          }),
                          (t.expandByPoint = function (e) {
                            return this.min.min(e), this.max.max(e), this
                          }),
                          (t.expandByVector = function (e) {
                            return this.min.sub(e), this.max.add(e), this
                          }),
                          (t.expandByScalar = function (e) {
                            return this.min.addScalar(-e), this.max.addScalar(e), this
                          }),
                          (t.expandByObject = function (e) {
                            e.updateWorldMatrix(!1, !1)
                            var t = e.geometry
                            void 0 !== t &&
                              (null === t.boundingBox && t.computeBoundingBox(),
                              mr.copy(t.boundingBox),
                              mr.applyMatrix4(e.matrixWorld),
                              this.union(mr))
                            for (var n = e.children, r = 0, i = n.length; r < i; r++)
                              this.expandByObject(n[r])
                            return this
                          }),
                          (t.containsPoint = function (e) {
                            return !(
                              e.x < this.min.x ||
                              e.x > this.max.x ||
                              e.y < this.min.y ||
                              e.y > this.max.y ||
                              e.z < this.min.z ||
                              e.z > this.max.z
                            )
                          }),
                          (t.containsBox = function (e) {
                            return (
                              this.min.x <= e.min.x &&
                              e.max.x <= this.max.x &&
                              this.min.y <= e.min.y &&
                              e.max.y <= this.max.y &&
                              this.min.z <= e.min.z &&
                              e.max.z <= this.max.z
                            )
                          }),
                          (t.getParameter = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Box3: .getParameter() target is now required'),
                                (t = new lr())),
                              t.set(
                                (e.x - this.min.x) / (this.max.x - this.min.x),
                                (e.y - this.min.y) / (this.max.y - this.min.y),
                                (e.z - this.min.z) / (this.max.z - this.min.z),
                              )
                            )
                          }),
                          (t.intersectsBox = function (e) {
                            return !(
                              e.max.x < this.min.x ||
                              e.min.x > this.max.x ||
                              e.max.y < this.min.y ||
                              e.min.y > this.max.y ||
                              e.max.z < this.min.z ||
                              e.min.z > this.max.z
                            )
                          }),
                          (t.intersectsSphere = function (e) {
                            return (
                              this.clampPoint(e.center, fr),
                              fr.distanceToSquared(e.center) <= e.radius * e.radius
                            )
                          }),
                          (t.intersectsPlane = function (e) {
                            var t, n
                            return (
                              e.normal.x > 0
                                ? ((t = e.normal.x * this.min.x), (n = e.normal.x * this.max.x))
                                : ((t = e.normal.x * this.max.x), (n = e.normal.x * this.min.x)),
                              e.normal.y > 0
                                ? ((t += e.normal.y * this.min.y), (n += e.normal.y * this.max.y))
                                : ((t += e.normal.y * this.max.y), (n += e.normal.y * this.min.y)),
                              e.normal.z > 0
                                ? ((t += e.normal.z * this.min.z), (n += e.normal.z * this.max.z))
                                : ((t += e.normal.z * this.max.z), (n += e.normal.z * this.min.z)),
                              t <= -e.constant && n >= -e.constant
                            )
                          }),
                          (t.intersectsTriangle = function (e) {
                            if (this.isEmpty()) return !1
                            this.getCenter(xr),
                              Er.subVectors(this.max, xr),
                              vr.subVectors(e.a, xr),
                              gr.subVectors(e.b, xr),
                              yr.subVectors(e.c, xr),
                              br.subVectors(gr, vr),
                              Ar.subVectors(yr, gr),
                              wr.subVectors(vr, yr)
                            var t = [
                              0,
                              -br.z,
                              br.y,
                              0,
                              -Ar.z,
                              Ar.y,
                              0,
                              -wr.z,
                              wr.y,
                              br.z,
                              0,
                              -br.x,
                              Ar.z,
                              0,
                              -Ar.x,
                              wr.z,
                              0,
                              -wr.x,
                              -br.y,
                              br.x,
                              0,
                              -Ar.y,
                              Ar.x,
                              0,
                              -wr.y,
                              wr.x,
                              0,
                            ]
                            return (
                              !!dr(t, vr, gr, yr, Er) &&
                              !!dr((t = [1, 0, 0, 0, 1, 0, 0, 0, 1]), vr, gr, yr, Er) &&
                              (Mr.crossVectors(br, Ar),
                              dr((t = [Mr.x, Mr.y, Mr.z]), vr, gr, yr, Er))
                            )
                          }),
                          (t.clampPoint = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Box3: .clampPoint() target is now required'),
                                (t = new lr())),
                              t.copy(e).clamp(this.min, this.max)
                            )
                          }),
                          (t.distanceToPoint = function (e) {
                            return fr.copy(e).clamp(this.min, this.max).sub(e).length()
                          }),
                          (t.getBoundingSphere = function (e) {
                            return (
                              void 0 === e &&
                                console.error(
                                  'THREE.Box3: .getBoundingSphere() target is now required',
                                ),
                              this.getCenter(e.center),
                              (e.radius = 0.5 * this.getSize(fr).length()),
                              e
                            )
                          }),
                          (t.intersect = function (e) {
                            return (
                              this.min.max(e.min),
                              this.max.min(e.max),
                              this.isEmpty() && this.makeEmpty(),
                              this
                            )
                          }),
                          (t.union = function (e) {
                            return this.min.min(e.min), this.max.max(e.max), this
                          }),
                          (t.applyMatrix4 = function (e) {
                            return (
                              this.isEmpty() ||
                                (pr[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(e),
                                pr[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(e),
                                pr[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(e),
                                pr[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(e),
                                pr[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(e),
                                pr[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(e),
                                pr[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(e),
                                pr[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(e),
                                this.setFromPoints(pr)),
                              this
                            )
                          }),
                          (t.translate = function (e) {
                            return this.min.add(e), this.max.add(e), this
                          }),
                          (t.equals = function (e) {
                            return e.min.equals(this.min) && e.max.equals(this.max)
                          }),
                          e
                        )
                      })()
                    function dr(e, t, n, r, i) {
                      for (var o = 0, a = e.length - 3; o <= a; o += 3) {
                        _r.fromArray(e, o)
                        var s = i.x * Math.abs(_r.x) + i.y * Math.abs(_r.y) + i.z * Math.abs(_r.z),
                          l = t.dot(_r),
                          c = n.dot(_r),
                          u = r.dot(_r)
                        if (Math.max(-Math.max(l, c, u), Math.min(l, c, u)) > s) return !1
                      }
                      return !0
                    }
                    var pr = [
                        new lr(),
                        new lr(),
                        new lr(),
                        new lr(),
                        new lr(),
                        new lr(),
                        new lr(),
                        new lr(),
                      ],
                      fr = new lr(),
                      mr = new hr(),
                      vr = new lr(),
                      gr = new lr(),
                      yr = new lr(),
                      br = new lr(),
                      Ar = new lr(),
                      wr = new lr(),
                      xr = new lr(),
                      Er = new lr(),
                      Mr = new lr(),
                      _r = new lr(),
                      Tr = new hr(),
                      Sr = (function () {
                        function e(e, t) {
                          ;(this.center = void 0 !== e ? e : new lr()),
                            (this.radius = void 0 !== t ? t : -1)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.center.copy(e), (this.radius = t), this
                          }),
                          (t.setFromPoints = function (e, t) {
                            var n = this.center
                            void 0 !== t ? n.copy(t) : Tr.setFromPoints(e).getCenter(n)
                            for (var r = 0, i = 0, o = e.length; i < o; i++)
                              r = Math.max(r, n.distanceToSquared(e[i]))
                            return (this.radius = Math.sqrt(r)), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.center.copy(e.center), (this.radius = e.radius), this
                          }),
                          (t.isEmpty = function () {
                            return this.radius < 0
                          }),
                          (t.makeEmpty = function () {
                            return this.center.set(0, 0, 0), (this.radius = -1), this
                          }),
                          (t.containsPoint = function (e) {
                            return e.distanceToSquared(this.center) <= this.radius * this.radius
                          }),
                          (t.distanceToPoint = function (e) {
                            return e.distanceTo(this.center) - this.radius
                          }),
                          (t.intersectsSphere = function (e) {
                            var t = this.radius + e.radius
                            return e.center.distanceToSquared(this.center) <= t * t
                          }),
                          (t.intersectsBox = function (e) {
                            return e.intersectsSphere(this)
                          }),
                          (t.intersectsPlane = function (e) {
                            return Math.abs(e.distanceToPoint(this.center)) <= this.radius
                          }),
                          (t.clampPoint = function (e, t) {
                            var n = this.center.distanceToSquared(e)
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Sphere: .clampPoint() target is now required'),
                                (t = new lr())),
                              t.copy(e),
                              n > this.radius * this.radius &&
                                (t.sub(this.center).normalize(),
                                t.multiplyScalar(this.radius).add(this.center)),
                              t
                            )
                          }),
                          (t.getBoundingBox = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn(
                                  'THREE.Sphere: .getBoundingBox() target is now required',
                                ),
                                (e = new hr())),
                              this.isEmpty()
                                ? (e.makeEmpty(), e)
                                : (e.set(this.center, this.center),
                                  e.expandByScalar(this.radius),
                                  e)
                            )
                          }),
                          (t.applyMatrix4 = function (e) {
                            return (
                              this.center.applyMatrix4(e),
                              (this.radius = this.radius * e.getMaxScaleOnAxis()),
                              this
                            )
                          }),
                          (t.translate = function (e) {
                            return this.center.add(e), this
                          }),
                          (t.equals = function (e) {
                            return e.center.equals(this.center) && e.radius === this.radius
                          }),
                          e
                        )
                      })(),
                      Cr = new lr(),
                      Lr = new lr(),
                      Rr = new lr(),
                      Pr = new lr(),
                      Dr = new lr(),
                      Or = new lr(),
                      Ir = new lr(),
                      Br = (function () {
                        function e(e, t) {
                          ;(this.origin = void 0 !== e ? e : new lr()),
                            (this.direction = void 0 !== t ? t : new lr(0, 0, -1))
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.origin.copy(e), this.direction.copy(t), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return (
                              this.origin.copy(e.origin), this.direction.copy(e.direction), this
                            )
                          }),
                          (t.at = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Ray: .at() target is now required'),
                                (t = new lr())),
                              t.copy(this.direction).multiplyScalar(e).add(this.origin)
                            )
                          }),
                          (t.lookAt = function (e) {
                            return this.direction.copy(e).sub(this.origin).normalize(), this
                          }),
                          (t.recast = function (e) {
                            return this.origin.copy(this.at(e, Cr)), this
                          }),
                          (t.closestPointToPoint = function (e, t) {
                            void 0 === t &&
                              (console.warn(
                                'THREE.Ray: .closestPointToPoint() target is now required',
                              ),
                              (t = new lr())),
                              t.subVectors(e, this.origin)
                            var n = t.dot(this.direction)
                            return n < 0
                              ? t.copy(this.origin)
                              : t.copy(this.direction).multiplyScalar(n).add(this.origin)
                          }),
                          (t.distanceToPoint = function (e) {
                            return Math.sqrt(this.distanceSqToPoint(e))
                          }),
                          (t.distanceSqToPoint = function (e) {
                            var t = Cr.subVectors(e, this.origin).dot(this.direction)
                            return t < 0
                              ? this.origin.distanceToSquared(e)
                              : (Cr.copy(this.direction).multiplyScalar(t).add(this.origin),
                                Cr.distanceToSquared(e))
                          }),
                          (t.distanceSqToSegment = function (e, t, n, r) {
                            Lr.copy(e).add(t).multiplyScalar(0.5),
                              Rr.copy(t).sub(e).normalize(),
                              Pr.copy(this.origin).sub(Lr)
                            var i,
                              o,
                              a,
                              s,
                              l = 0.5 * e.distanceTo(t),
                              c = -this.direction.dot(Rr),
                              u = Pr.dot(this.direction),
                              h = -Pr.dot(Rr),
                              d = Pr.lengthSq(),
                              p = Math.abs(1 - c * c)
                            if (p > 0)
                              if (((o = c * u - h), (s = l * p), (i = c * h - u) >= 0))
                                if (o >= -s)
                                  if (o <= s) {
                                    var f = 1 / p
                                    a =
                                      (i *= f) * (i + c * (o *= f) + 2 * u) +
                                      o * (c * i + o + 2 * h) +
                                      d
                                  } else
                                    (o = l),
                                      (a =
                                        -(i = Math.max(0, -(c * o + u))) * i + o * (o + 2 * h) + d)
                                else
                                  (o = -l),
                                    (a = -(i = Math.max(0, -(c * o + u))) * i + o * (o + 2 * h) + d)
                              else
                                o <= -s
                                  ? (a =
                                      -(i = Math.max(0, -(-c * l + u))) * i +
                                      (o = i > 0 ? -l : Math.min(Math.max(-l, -h), l)) *
                                        (o + 2 * h) +
                                      d)
                                  : o <= s
                                  ? ((i = 0),
                                    (a = (o = Math.min(Math.max(-l, -h), l)) * (o + 2 * h) + d))
                                  : (a =
                                      -(i = Math.max(0, -(c * l + u))) * i +
                                      (o = i > 0 ? l : Math.min(Math.max(-l, -h), l)) *
                                        (o + 2 * h) +
                                      d)
                            else
                              (o = c > 0 ? -l : l),
                                (a = -(i = Math.max(0, -(c * o + u))) * i + o * (o + 2 * h) + d)
                            return (
                              n && n.copy(this.direction).multiplyScalar(i).add(this.origin),
                              r && r.copy(Rr).multiplyScalar(o).add(Lr),
                              a
                            )
                          }),
                          (t.intersectSphere = function (e, t) {
                            Cr.subVectors(e.center, this.origin)
                            var n = Cr.dot(this.direction),
                              r = Cr.dot(Cr) - n * n,
                              i = e.radius * e.radius
                            if (r > i) return null
                            var o = Math.sqrt(i - r),
                              a = n - o,
                              s = n + o
                            return a < 0 && s < 0 ? null : a < 0 ? this.at(s, t) : this.at(a, t)
                          }),
                          (t.intersectsSphere = function (e) {
                            return this.distanceSqToPoint(e.center) <= e.radius * e.radius
                          }),
                          (t.distanceToPlane = function (e) {
                            var t = e.normal.dot(this.direction)
                            if (0 === t) return 0 === e.distanceToPoint(this.origin) ? 0 : null
                            var n = -(this.origin.dot(e.normal) + e.constant) / t
                            return n >= 0 ? n : null
                          }),
                          (t.intersectPlane = function (e, t) {
                            var n = this.distanceToPlane(e)
                            return null === n ? null : this.at(n, t)
                          }),
                          (t.intersectsPlane = function (e) {
                            var t = e.distanceToPoint(this.origin)
                            return 0 === t || e.normal.dot(this.direction) * t < 0
                          }),
                          (t.intersectBox = function (e, t) {
                            var n,
                              r,
                              i,
                              o,
                              a,
                              s,
                              l = 1 / this.direction.x,
                              c = 1 / this.direction.y,
                              u = 1 / this.direction.z,
                              h = this.origin
                            return (
                              l >= 0
                                ? ((n = (e.min.x - h.x) * l), (r = (e.max.x - h.x) * l))
                                : ((n = (e.max.x - h.x) * l), (r = (e.min.x - h.x) * l)),
                              c >= 0
                                ? ((i = (e.min.y - h.y) * c), (o = (e.max.y - h.y) * c))
                                : ((i = (e.max.y - h.y) * c), (o = (e.min.y - h.y) * c)),
                              n > o || i > r
                                ? null
                                : ((i > n || n !== n) && (n = i),
                                  (o < r || r !== r) && (r = o),
                                  u >= 0
                                    ? ((a = (e.min.z - h.z) * u), (s = (e.max.z - h.z) * u))
                                    : ((a = (e.max.z - h.z) * u), (s = (e.min.z - h.z) * u)),
                                  n > s || a > r
                                    ? null
                                    : ((a > n || n !== n) && (n = a),
                                      (s < r || r !== r) && (r = s),
                                      r < 0 ? null : this.at(n >= 0 ? n : r, t)))
                            )
                          }),
                          (t.intersectsBox = function (e) {
                            return null !== this.intersectBox(e, Cr)
                          }),
                          (t.intersectTriangle = function (e, t, n, r, i) {
                            Dr.subVectors(t, e), Or.subVectors(n, e), Ir.crossVectors(Dr, Or)
                            var o,
                              a = this.direction.dot(Ir)
                            if (a > 0) {
                              if (r) return null
                              o = 1
                            } else {
                              if (!(a < 0)) return null
                              ;(o = -1), (a = -a)
                            }
                            Pr.subVectors(this.origin, e)
                            var s = o * this.direction.dot(Or.crossVectors(Pr, Or))
                            if (s < 0) return null
                            var l = o * this.direction.dot(Dr.cross(Pr))
                            if (l < 0) return null
                            if (s + l > a) return null
                            var c = -o * Pr.dot(Ir)
                            return c < 0 ? null : this.at(c / a, i)
                          }),
                          (t.applyMatrix4 = function (e) {
                            return (
                              this.origin.applyMatrix4(e),
                              this.direction.transformDirection(e),
                              this
                            )
                          }),
                          (t.equals = function (e) {
                            return (
                              e.origin.equals(this.origin) && e.direction.equals(this.direction)
                            )
                          }),
                          e
                        )
                      })(),
                      Fr = (function () {
                        function e() {
                          Object.defineProperty(this, 'isMatrix4', { value: !0 }),
                            (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.',
                              )
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r, i, o, a, s, l, c, u, h, d, p, f, m) {
                            var v = this.elements
                            return (
                              (v[0] = e),
                              (v[4] = t),
                              (v[8] = n),
                              (v[12] = r),
                              (v[1] = i),
                              (v[5] = o),
                              (v[9] = a),
                              (v[13] = s),
                              (v[2] = l),
                              (v[6] = c),
                              (v[10] = u),
                              (v[14] = h),
                              (v[3] = d),
                              (v[7] = p),
                              (v[11] = f),
                              (v[15] = m),
                              this
                            )
                          }),
                          (t.identity = function () {
                            return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this
                          }),
                          (t.clone = function () {
                            return new e().fromArray(this.elements)
                          }),
                          (t.copy = function (e) {
                            var t = this.elements,
                              n = e.elements
                            return (
                              (t[0] = n[0]),
                              (t[1] = n[1]),
                              (t[2] = n[2]),
                              (t[3] = n[3]),
                              (t[4] = n[4]),
                              (t[5] = n[5]),
                              (t[6] = n[6]),
                              (t[7] = n[7]),
                              (t[8] = n[8]),
                              (t[9] = n[9]),
                              (t[10] = n[10]),
                              (t[11] = n[11]),
                              (t[12] = n[12]),
                              (t[13] = n[13]),
                              (t[14] = n[14]),
                              (t[15] = n[15]),
                              this
                            )
                          }),
                          (t.copyPosition = function (e) {
                            var t = this.elements,
                              n = e.elements
                            return (t[12] = n[12]), (t[13] = n[13]), (t[14] = n[14]), this
                          }),
                          (t.setFromMatrix3 = function (e) {
                            var t = e.elements
                            return (
                              this.set(
                                t[0],
                                t[3],
                                t[6],
                                0,
                                t[1],
                                t[4],
                                t[7],
                                0,
                                t[2],
                                t[5],
                                t[8],
                                0,
                                0,
                                0,
                                0,
                                1,
                              ),
                              this
                            )
                          }),
                          (t.extractBasis = function (e, t, n) {
                            return (
                              e.setFromMatrixColumn(this, 0),
                              t.setFromMatrixColumn(this, 1),
                              n.setFromMatrixColumn(this, 2),
                              this
                            )
                          }),
                          (t.makeBasis = function (e, t, n) {
                            return (
                              this.set(
                                e.x,
                                t.x,
                                n.x,
                                0,
                                e.y,
                                t.y,
                                n.y,
                                0,
                                e.z,
                                t.z,
                                n.z,
                                0,
                                0,
                                0,
                                0,
                                1,
                              ),
                              this
                            )
                          }),
                          (t.extractRotation = function (e) {
                            var t = this.elements,
                              n = e.elements,
                              r = 1 / kr.setFromMatrixColumn(e, 0).length(),
                              i = 1 / kr.setFromMatrixColumn(e, 1).length(),
                              o = 1 / kr.setFromMatrixColumn(e, 2).length()
                            return (
                              (t[0] = n[0] * r),
                              (t[1] = n[1] * r),
                              (t[2] = n[2] * r),
                              (t[3] = 0),
                              (t[4] = n[4] * i),
                              (t[5] = n[5] * i),
                              (t[6] = n[6] * i),
                              (t[7] = 0),
                              (t[8] = n[8] * o),
                              (t[9] = n[9] * o),
                              (t[10] = n[10] * o),
                              (t[11] = 0),
                              (t[12] = 0),
                              (t[13] = 0),
                              (t[14] = 0),
                              (t[15] = 1),
                              this
                            )
                          }),
                          (t.makeRotationFromEuler = function (e) {
                            ;(e && e.isEuler) ||
                              console.error(
                                'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.',
                              )
                            var t = this.elements,
                              n = e.x,
                              r = e.y,
                              i = e.z,
                              o = Math.cos(n),
                              a = Math.sin(n),
                              s = Math.cos(r),
                              l = Math.sin(r),
                              c = Math.cos(i),
                              u = Math.sin(i)
                            if ('XYZ' === e.order) {
                              var h = o * c,
                                d = o * u,
                                p = a * c,
                                f = a * u
                              ;(t[0] = s * c),
                                (t[4] = -s * u),
                                (t[8] = l),
                                (t[1] = d + p * l),
                                (t[5] = h - f * l),
                                (t[9] = -a * s),
                                (t[2] = f - h * l),
                                (t[6] = p + d * l),
                                (t[10] = o * s)
                            } else if ('YXZ' === e.order) {
                              var m = s * c,
                                v = s * u,
                                g = l * c,
                                y = l * u
                              ;(t[0] = m + y * a),
                                (t[4] = g * a - v),
                                (t[8] = o * l),
                                (t[1] = o * u),
                                (t[5] = o * c),
                                (t[9] = -a),
                                (t[2] = v * a - g),
                                (t[6] = y + m * a),
                                (t[10] = o * s)
                            } else if ('ZXY' === e.order) {
                              var b = s * c,
                                A = s * u,
                                w = l * c,
                                x = l * u
                              ;(t[0] = b - x * a),
                                (t[4] = -o * u),
                                (t[8] = w + A * a),
                                (t[1] = A + w * a),
                                (t[5] = o * c),
                                (t[9] = x - b * a),
                                (t[2] = -o * l),
                                (t[6] = a),
                                (t[10] = o * s)
                            } else if ('ZYX' === e.order) {
                              var E = o * c,
                                M = o * u,
                                _ = a * c,
                                T = a * u
                              ;(t[0] = s * c),
                                (t[4] = _ * l - M),
                                (t[8] = E * l + T),
                                (t[1] = s * u),
                                (t[5] = T * l + E),
                                (t[9] = M * l - _),
                                (t[2] = -l),
                                (t[6] = a * s),
                                (t[10] = o * s)
                            } else if ('YZX' === e.order) {
                              var S = o * s,
                                C = o * l,
                                L = a * s,
                                R = a * l
                              ;(t[0] = s * c),
                                (t[4] = R - S * u),
                                (t[8] = L * u + C),
                                (t[1] = u),
                                (t[5] = o * c),
                                (t[9] = -a * c),
                                (t[2] = -l * c),
                                (t[6] = C * u + L),
                                (t[10] = S - R * u)
                            } else if ('XZY' === e.order) {
                              var P = o * s,
                                D = o * l,
                                O = a * s,
                                I = a * l
                              ;(t[0] = s * c),
                                (t[4] = -u),
                                (t[8] = l * c),
                                (t[1] = P * u + I),
                                (t[5] = o * c),
                                (t[9] = D * u - O),
                                (t[2] = O * u - D),
                                (t[6] = a * c),
                                (t[10] = I * u + P)
                            }
                            return (
                              (t[3] = 0),
                              (t[7] = 0),
                              (t[11] = 0),
                              (t[12] = 0),
                              (t[13] = 0),
                              (t[14] = 0),
                              (t[15] = 1),
                              this
                            )
                          }),
                          (t.makeRotationFromQuaternion = function (e) {
                            return this.compose(Ur, e, Hr)
                          }),
                          (t.lookAt = function (e, t, n) {
                            var r = this.elements
                            return (
                              jr.subVectors(e, t),
                              0 === jr.lengthSq() && (jr.z = 1),
                              jr.normalize(),
                              Gr.crossVectors(n, jr),
                              0 === Gr.lengthSq() &&
                                (1 === Math.abs(n.z) ? (jr.x += 1e-4) : (jr.z += 1e-4),
                                jr.normalize(),
                                Gr.crossVectors(n, jr)),
                              Gr.normalize(),
                              zr.crossVectors(jr, Gr),
                              (r[0] = Gr.x),
                              (r[4] = zr.x),
                              (r[8] = jr.x),
                              (r[1] = Gr.y),
                              (r[5] = zr.y),
                              (r[9] = jr.y),
                              (r[2] = Gr.z),
                              (r[6] = zr.z),
                              (r[10] = jr.z),
                              this
                            )
                          }),
                          (t.multiply = function (e, t) {
                            return void 0 !== t
                              ? (console.warn(
                                  'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.',
                                ),
                                this.multiplyMatrices(e, t))
                              : this.multiplyMatrices(this, e)
                          }),
                          (t.premultiply = function (e) {
                            return this.multiplyMatrices(e, this)
                          }),
                          (t.multiplyMatrices = function (e, t) {
                            var n = e.elements,
                              r = t.elements,
                              i = this.elements,
                              o = n[0],
                              a = n[4],
                              s = n[8],
                              l = n[12],
                              c = n[1],
                              u = n[5],
                              h = n[9],
                              d = n[13],
                              p = n[2],
                              f = n[6],
                              m = n[10],
                              v = n[14],
                              g = n[3],
                              y = n[7],
                              b = n[11],
                              A = n[15],
                              w = r[0],
                              x = r[4],
                              E = r[8],
                              M = r[12],
                              _ = r[1],
                              T = r[5],
                              S = r[9],
                              C = r[13],
                              L = r[2],
                              R = r[6],
                              P = r[10],
                              D = r[14],
                              O = r[3],
                              I = r[7],
                              B = r[11],
                              F = r[15]
                            return (
                              (i[0] = o * w + a * _ + s * L + l * O),
                              (i[4] = o * x + a * T + s * R + l * I),
                              (i[8] = o * E + a * S + s * P + l * B),
                              (i[12] = o * M + a * C + s * D + l * F),
                              (i[1] = c * w + u * _ + h * L + d * O),
                              (i[5] = c * x + u * T + h * R + d * I),
                              (i[9] = c * E + u * S + h * P + d * B),
                              (i[13] = c * M + u * C + h * D + d * F),
                              (i[2] = p * w + f * _ + m * L + v * O),
                              (i[6] = p * x + f * T + m * R + v * I),
                              (i[10] = p * E + f * S + m * P + v * B),
                              (i[14] = p * M + f * C + m * D + v * F),
                              (i[3] = g * w + y * _ + b * L + A * O),
                              (i[7] = g * x + y * T + b * R + A * I),
                              (i[11] = g * E + y * S + b * P + A * B),
                              (i[15] = g * M + y * C + b * D + A * F),
                              this
                            )
                          }),
                          (t.multiplyScalar = function (e) {
                            var t = this.elements
                            return (
                              (t[0] *= e),
                              (t[4] *= e),
                              (t[8] *= e),
                              (t[12] *= e),
                              (t[1] *= e),
                              (t[5] *= e),
                              (t[9] *= e),
                              (t[13] *= e),
                              (t[2] *= e),
                              (t[6] *= e),
                              (t[10] *= e),
                              (t[14] *= e),
                              (t[3] *= e),
                              (t[7] *= e),
                              (t[11] *= e),
                              (t[15] *= e),
                              this
                            )
                          }),
                          (t.determinant = function () {
                            var e = this.elements,
                              t = e[0],
                              n = e[4],
                              r = e[8],
                              i = e[12],
                              o = e[1],
                              a = e[5],
                              s = e[9],
                              l = e[13],
                              c = e[2],
                              u = e[6],
                              h = e[10],
                              d = e[14]
                            return (
                              e[3] *
                                (+i * s * u -
                                  r * l * u -
                                  i * a * h +
                                  n * l * h +
                                  r * a * d -
                                  n * s * d) +
                              e[7] *
                                (+t * s * d -
                                  t * l * h +
                                  i * o * h -
                                  r * o * d +
                                  r * l * c -
                                  i * s * c) +
                              e[11] *
                                (+t * l * u -
                                  t * a * d -
                                  i * o * u +
                                  n * o * d +
                                  i * a * c -
                                  n * l * c) +
                              e[15] *
                                (-r * a * c -
                                  t * s * u +
                                  t * a * h +
                                  r * o * u -
                                  n * o * h +
                                  n * s * c)
                            )
                          }),
                          (t.transpose = function () {
                            var e,
                              t = this.elements
                            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
                            )
                          }),
                          (t.setPosition = function (e, t, n) {
                            var r = this.elements
                            return (
                              e.isVector3
                                ? ((r[12] = e.x), (r[13] = e.y), (r[14] = e.z))
                                : ((r[12] = e), (r[13] = t), (r[14] = n)),
                              this
                            )
                          }),
                          (t.invert = function () {
                            var e = this.elements,
                              t = e[0],
                              n = e[1],
                              r = e[2],
                              i = e[3],
                              o = e[4],
                              a = e[5],
                              s = e[6],
                              l = e[7],
                              c = e[8],
                              u = e[9],
                              h = e[10],
                              d = e[11],
                              p = e[12],
                              f = e[13],
                              m = e[14],
                              v = e[15],
                              g =
                                u * m * l -
                                f * h * l +
                                f * s * d -
                                a * m * d -
                                u * s * v +
                                a * h * v,
                              y =
                                p * h * l -
                                c * m * l -
                                p * s * d +
                                o * m * d +
                                c * s * v -
                                o * h * v,
                              b =
                                c * f * l -
                                p * u * l +
                                p * a * d -
                                o * f * d -
                                c * a * v +
                                o * u * v,
                              A =
                                p * u * s -
                                c * f * s -
                                p * a * h +
                                o * f * h +
                                c * a * m -
                                o * u * m,
                              w = t * g + n * y + r * b + i * A
                            if (0 === w)
                              return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
                            var x = 1 / w
                            return (
                              (e[0] = g * x),
                              (e[1] =
                                (f * h * i -
                                  u * m * i -
                                  f * r * d +
                                  n * m * d +
                                  u * r * v -
                                  n * h * v) *
                                x),
                              (e[2] =
                                (a * m * i -
                                  f * s * i +
                                  f * r * l -
                                  n * m * l -
                                  a * r * v +
                                  n * s * v) *
                                x),
                              (e[3] =
                                (u * s * i -
                                  a * h * i -
                                  u * r * l +
                                  n * h * l +
                                  a * r * d -
                                  n * s * d) *
                                x),
                              (e[4] = y * x),
                              (e[5] =
                                (c * m * i -
                                  p * h * i +
                                  p * r * d -
                                  t * m * d -
                                  c * r * v +
                                  t * h * v) *
                                x),
                              (e[6] =
                                (p * s * i -
                                  o * m * i -
                                  p * r * l +
                                  t * m * l +
                                  o * r * v -
                                  t * s * v) *
                                x),
                              (e[7] =
                                (o * h * i -
                                  c * s * i +
                                  c * r * l -
                                  t * h * l -
                                  o * r * d +
                                  t * s * d) *
                                x),
                              (e[8] = b * x),
                              (e[9] =
                                (p * u * i -
                                  c * f * i -
                                  p * n * d +
                                  t * f * d +
                                  c * n * v -
                                  t * u * v) *
                                x),
                              (e[10] =
                                (o * f * i -
                                  p * a * i +
                                  p * n * l -
                                  t * f * l -
                                  o * n * v +
                                  t * a * v) *
                                x),
                              (e[11] =
                                (c * a * i -
                                  o * u * i -
                                  c * n * l +
                                  t * u * l +
                                  o * n * d -
                                  t * a * d) *
                                x),
                              (e[12] = A * x),
                              (e[13] =
                                (c * f * r -
                                  p * u * r +
                                  p * n * h -
                                  t * f * h -
                                  c * n * m +
                                  t * u * m) *
                                x),
                              (e[14] =
                                (p * a * r -
                                  o * f * r -
                                  p * n * s +
                                  t * f * s +
                                  o * n * m -
                                  t * a * m) *
                                x),
                              (e[15] =
                                (o * u * r -
                                  c * a * r +
                                  c * n * s -
                                  t * u * s -
                                  o * n * h +
                                  t * a * h) *
                                x),
                              this
                            )
                          }),
                          (t.scale = function (e) {
                            var t = this.elements,
                              n = e.x,
                              r = e.y,
                              i = e.z
                            return (
                              (t[0] *= n),
                              (t[4] *= r),
                              (t[8] *= i),
                              (t[1] *= n),
                              (t[5] *= r),
                              (t[9] *= i),
                              (t[2] *= n),
                              (t[6] *= r),
                              (t[10] *= i),
                              (t[3] *= n),
                              (t[7] *= r),
                              (t[11] *= i),
                              this
                            )
                          }),
                          (t.getMaxScaleOnAxis = function () {
                            var e = this.elements,
                              t = e[0] * e[0] + e[1] * e[1] + e[2] * e[2],
                              n = e[4] * e[4] + e[5] * e[5] + e[6] * e[6],
                              r = e[8] * e[8] + e[9] * e[9] + e[10] * e[10]
                            return Math.sqrt(Math.max(t, n, r))
                          }),
                          (t.makeTranslation = function (e, t, n) {
                            return this.set(1, 0, 0, e, 0, 1, 0, t, 0, 0, 1, n, 0, 0, 0, 1), this
                          }),
                          (t.makeRotationX = function (e) {
                            var t = Math.cos(e),
                              n = Math.sin(e)
                            return this.set(1, 0, 0, 0, 0, t, -n, 0, 0, n, t, 0, 0, 0, 0, 1), this
                          }),
                          (t.makeRotationY = function (e) {
                            var t = Math.cos(e),
                              n = Math.sin(e)
                            return this.set(t, 0, n, 0, 0, 1, 0, 0, -n, 0, t, 0, 0, 0, 0, 1), this
                          }),
                          (t.makeRotationZ = function (e) {
                            var t = Math.cos(e),
                              n = Math.sin(e)
                            return this.set(t, -n, 0, 0, n, t, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this
                          }),
                          (t.makeRotationAxis = function (e, t) {
                            var n = Math.cos(t),
                              r = Math.sin(t),
                              i = 1 - n,
                              o = e.x,
                              a = e.y,
                              s = e.z,
                              l = i * o,
                              c = i * a
                            return (
                              this.set(
                                l * o + n,
                                l * a - r * s,
                                l * s + r * a,
                                0,
                                l * a + r * s,
                                c * a + n,
                                c * s - r * o,
                                0,
                                l * s - r * a,
                                c * s + r * o,
                                i * s * s + n,
                                0,
                                0,
                                0,
                                0,
                                1,
                              ),
                              this
                            )
                          }),
                          (t.makeScale = function (e, t, n) {
                            return this.set(e, 0, 0, 0, 0, t, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this
                          }),
                          (t.makeShear = function (e, t, n) {
                            return this.set(1, t, n, 0, e, 1, n, 0, e, t, 1, 0, 0, 0, 0, 1), this
                          }),
                          (t.compose = function (e, t, n) {
                            var r = this.elements,
                              i = t._x,
                              o = t._y,
                              a = t._z,
                              s = t._w,
                              l = i + i,
                              c = o + o,
                              u = a + a,
                              h = i * l,
                              d = i * c,
                              p = i * u,
                              f = o * c,
                              m = o * u,
                              v = a * u,
                              g = s * l,
                              y = s * c,
                              b = s * u,
                              A = n.x,
                              w = n.y,
                              x = n.z
                            return (
                              (r[0] = (1 - (f + v)) * A),
                              (r[1] = (d + b) * A),
                              (r[2] = (p - y) * A),
                              (r[3] = 0),
                              (r[4] = (d - b) * w),
                              (r[5] = (1 - (h + v)) * w),
                              (r[6] = (m + g) * w),
                              (r[7] = 0),
                              (r[8] = (p + y) * x),
                              (r[9] = (m - g) * x),
                              (r[10] = (1 - (h + f)) * x),
                              (r[11] = 0),
                              (r[12] = e.x),
                              (r[13] = e.y),
                              (r[14] = e.z),
                              (r[15] = 1),
                              this
                            )
                          }),
                          (t.decompose = function (e, t, n) {
                            var r = this.elements,
                              i = kr.set(r[0], r[1], r[2]).length(),
                              o = kr.set(r[4], r[5], r[6]).length(),
                              a = kr.set(r[8], r[9], r[10]).length()
                            this.determinant() < 0 && (i = -i),
                              (e.x = r[12]),
                              (e.y = r[13]),
                              (e.z = r[14]),
                              Nr.copy(this)
                            var s = 1 / i,
                              l = 1 / o,
                              c = 1 / a
                            return (
                              (Nr.elements[0] *= s),
                              (Nr.elements[1] *= s),
                              (Nr.elements[2] *= s),
                              (Nr.elements[4] *= l),
                              (Nr.elements[5] *= l),
                              (Nr.elements[6] *= l),
                              (Nr.elements[8] *= c),
                              (Nr.elements[9] *= c),
                              (Nr.elements[10] *= c),
                              t.setFromRotationMatrix(Nr),
                              (n.x = i),
                              (n.y = o),
                              (n.z = a),
                              this
                            )
                          }),
                          (t.makePerspective = function (e, t, n, r, i, o) {
                            void 0 === o &&
                              console.warn(
                                'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.',
                              )
                            var a = this.elements,
                              s = (2 * i) / (t - e),
                              l = (2 * i) / (n - r),
                              c = (t + e) / (t - e),
                              u = (n + r) / (n - r),
                              h = -(o + i) / (o - i),
                              d = (-2 * o * i) / (o - i)
                            return (
                              (a[0] = s),
                              (a[4] = 0),
                              (a[8] = c),
                              (a[12] = 0),
                              (a[1] = 0),
                              (a[5] = l),
                              (a[9] = u),
                              (a[13] = 0),
                              (a[2] = 0),
                              (a[6] = 0),
                              (a[10] = h),
                              (a[14] = d),
                              (a[3] = 0),
                              (a[7] = 0),
                              (a[11] = -1),
                              (a[15] = 0),
                              this
                            )
                          }),
                          (t.makeOrthographic = function (e, t, n, r, i, o) {
                            var a = this.elements,
                              s = 1 / (t - e),
                              l = 1 / (n - r),
                              c = 1 / (o - i),
                              u = (t + e) * s,
                              h = (n + r) * l,
                              d = (o + i) * c
                            return (
                              (a[0] = 2 * s),
                              (a[4] = 0),
                              (a[8] = 0),
                              (a[12] = -u),
                              (a[1] = 0),
                              (a[5] = 2 * l),
                              (a[9] = 0),
                              (a[13] = -h),
                              (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
                            )
                          }),
                          (t.equals = function (e) {
                            for (var t = this.elements, n = e.elements, r = 0; r < 16; r++)
                              if (t[r] !== n[r]) return !1
                            return !0
                          }),
                          (t.fromArray = function (e, t) {
                            void 0 === t && (t = 0)
                            for (var n = 0; n < 16; n++) this.elements[n] = e[n + t]
                            return this
                          }),
                          (t.toArray = function (e, t) {
                            void 0 === e && (e = []), void 0 === t && (t = 0)
                            var n = this.elements
                            return (
                              (e[t] = n[0]),
                              (e[t + 1] = n[1]),
                              (e[t + 2] = n[2]),
                              (e[t + 3] = n[3]),
                              (e[t + 4] = n[4]),
                              (e[t + 5] = n[5]),
                              (e[t + 6] = n[6]),
                              (e[t + 7] = n[7]),
                              (e[t + 8] = n[8]),
                              (e[t + 9] = n[9]),
                              (e[t + 10] = n[10]),
                              (e[t + 11] = n[11]),
                              (e[t + 12] = n[12]),
                              (e[t + 13] = n[13]),
                              (e[t + 14] = n[14]),
                              (e[t + 15] = n[15]),
                              e
                            )
                          }),
                          e
                        )
                      })(),
                      kr = new lr(),
                      Nr = new Fr(),
                      Ur = new lr(0, 0, 0),
                      Hr = new lr(1, 1, 1),
                      Gr = new lr(),
                      zr = new lr(),
                      jr = new lr(),
                      Vr = (function () {
                        function e(t, n, r, i) {
                          void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            void 0 === r && (r = 0),
                            void 0 === i && (i = e.DefaultOrder),
                            Object.defineProperty(this, 'isEuler', { value: !0 }),
                            (this._x = t),
                            (this._y = n),
                            (this._z = r),
                            (this._order = i)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r) {
                            return (
                              (this._x = e),
                              (this._y = t),
                              (this._z = n),
                              (this._order = r || this._order),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.clone = function () {
                            return new this.constructor(this._x, this._y, this._z, this._order)
                          }),
                          (t.copy = function (e) {
                            return (
                              (this._x = e._x),
                              (this._y = e._y),
                              (this._z = e._z),
                              (this._order = e._order),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.setFromRotationMatrix = function (e, t, n) {
                            var r = Kn.clamp,
                              i = e.elements,
                              o = i[0],
                              a = i[4],
                              s = i[8],
                              l = i[1],
                              c = i[5],
                              u = i[9],
                              h = i[2],
                              d = i[6],
                              p = i[10]
                            switch ((t = t || this._order)) {
                              case 'XYZ':
                                ;(this._y = Math.asin(r(s, -1, 1))),
                                  Math.abs(s) < 0.9999999
                                    ? ((this._x = Math.atan2(-u, p)), (this._z = Math.atan2(-a, o)))
                                    : ((this._x = Math.atan2(d, c)), (this._z = 0))
                                break
                              case 'YXZ':
                                ;(this._x = Math.asin(-r(u, -1, 1))),
                                  Math.abs(u) < 0.9999999
                                    ? ((this._y = Math.atan2(s, p)), (this._z = Math.atan2(l, c)))
                                    : ((this._y = Math.atan2(-h, o)), (this._z = 0))
                                break
                              case 'ZXY':
                                ;(this._x = Math.asin(r(d, -1, 1))),
                                  Math.abs(d) < 0.9999999
                                    ? ((this._y = Math.atan2(-h, p)), (this._z = Math.atan2(-a, c)))
                                    : ((this._y = 0), (this._z = Math.atan2(l, o)))
                                break
                              case 'ZYX':
                                ;(this._y = Math.asin(-r(h, -1, 1))),
                                  Math.abs(h) < 0.9999999
                                    ? ((this._x = Math.atan2(d, p)), (this._z = Math.atan2(l, o)))
                                    : ((this._x = 0), (this._z = Math.atan2(-a, c)))
                                break
                              case 'YZX':
                                ;(this._z = Math.asin(r(l, -1, 1))),
                                  Math.abs(l) < 0.9999999
                                    ? ((this._x = Math.atan2(-u, c)), (this._y = Math.atan2(-h, o)))
                                    : ((this._x = 0), (this._y = Math.atan2(s, p)))
                                break
                              case 'XZY':
                                ;(this._z = Math.asin(-r(a, -1, 1))),
                                  Math.abs(a) < 0.9999999
                                    ? ((this._x = Math.atan2(d, c)), (this._y = Math.atan2(s, o)))
                                    : ((this._x = Math.atan2(-u, p)), (this._y = 0))
                                break
                              default:
                                console.warn(
                                  'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' +
                                    t,
                                )
                            }
                            return (this._order = t), !1 !== n && this._onChangeCallback(), this
                          }),
                          (t.setFromQuaternion = function (e, t, n) {
                            return (
                              Wr.makeRotationFromQuaternion(e), this.setFromRotationMatrix(Wr, t, n)
                            )
                          }),
                          (t.setFromVector3 = function (e, t) {
                            return this.set(e.x, e.y, e.z, t || this._order)
                          }),
                          (t.reorder = function (e) {
                            return qr.setFromEuler(this), this.setFromQuaternion(qr, e)
                          }),
                          (t.equals = function (e) {
                            return (
                              e._x === this._x &&
                              e._y === this._y &&
                              e._z === this._z &&
                              e._order === this._order
                            )
                          }),
                          (t.fromArray = function (e) {
                            return (
                              (this._x = e[0]),
                              (this._y = e[1]),
                              (this._z = e[2]),
                              void 0 !== e[3] && (this._order = e[3]),
                              this._onChangeCallback(),
                              this
                            )
                          }),
                          (t.toArray = function (e, t) {
                            return (
                              void 0 === e && (e = []),
                              void 0 === t && (t = 0),
                              (e[t] = this._x),
                              (e[t + 1] = this._y),
                              (e[t + 2] = this._z),
                              (e[t + 3] = this._order),
                              e
                            )
                          }),
                          (t.toVector3 = function (e) {
                            return e
                              ? e.set(this._x, this._y, this._z)
                              : new lr(this._x, this._y, this._z)
                          }),
                          (t._onChange = function (e) {
                            return (this._onChangeCallback = e), this
                          }),
                          (t._onChangeCallback = function () {}),
                          Hn(e, [
                            {
                              key: 'x',
                              get: function () {
                                return this._x
                              },
                              set: function (e) {
                                ;(this._x = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'y',
                              get: function () {
                                return this._y
                              },
                              set: function (e) {
                                ;(this._y = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'z',
                              get: function () {
                                return this._z
                              },
                              set: function (e) {
                                ;(this._z = e), this._onChangeCallback()
                              },
                            },
                            {
                              key: 'order',
                              get: function () {
                                return this._order
                              },
                              set: function (e) {
                                ;(this._order = e), this._onChangeCallback()
                              },
                            },
                          ]),
                          e
                        )
                      })()
                    ;(Vr.DefaultOrder = 'XYZ'),
                      (Vr.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX'])
                    var Wr = new Fr(),
                      qr = new sr(),
                      Xr = (function () {
                        function e() {
                          this.mask = 1
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e) {
                            this.mask = (1 << e) | 0
                          }),
                          (t.enable = function (e) {
                            this.mask |= (1 << e) | 0
                          }),
                          (t.enableAll = function () {
                            this.mask = -1
                          }),
                          (t.toggle = function (e) {
                            this.mask ^= (1 << e) | 0
                          }),
                          (t.disable = function (e) {
                            this.mask &= ~((1 << e) | 0)
                          }),
                          (t.disableAll = function () {
                            this.mask = 0
                          }),
                          (t.test = function (e) {
                            return 0 !== (this.mask & e.mask)
                          }),
                          e
                        )
                      })(),
                      Yr = 0,
                      Qr = new lr(),
                      Zr = new sr(),
                      Kr = new Fr(),
                      Jr = new lr(),
                      $r = new lr(),
                      ei = new lr(),
                      ti = new sr(),
                      ni = new lr(1, 0, 0),
                      ri = new lr(0, 1, 0),
                      ii = new lr(0, 0, 1),
                      oi = { type: 'added' },
                      ai = { type: 'removed' }
                    function si() {
                      Object.defineProperty(this, 'id', { value: Yr++ }),
                        (this.uuid = Kn.generateUUID()),
                        (this.name = ''),
                        (this.type = 'Object3D'),
                        (this.parent = null),
                        (this.children = []),
                        (this.up = si.DefaultUp.clone())
                      var e = new lr(),
                        t = new Vr(),
                        n = new sr(),
                        r = new lr(1, 1, 1)
                      function i() {
                        n.setFromEuler(t, !1)
                      }
                      function o() {
                        t.setFromQuaternion(n, void 0, !1)
                      }
                      t._onChange(i),
                        n._onChange(o),
                        Object.defineProperties(this, {
                          position: { configurable: !0, enumerable: !0, value: e },
                          rotation: { configurable: !0, enumerable: !0, value: t },
                          quaternion: { configurable: !0, enumerable: !0, value: n },
                          scale: { configurable: !0, enumerable: !0, value: r },
                          modelViewMatrix: { value: new Fr() },
                          normalMatrix: { value: new $n() },
                        }),
                        (this.matrix = new Fr()),
                        (this.matrixWorld = new Fr()),
                        (this.matrixAutoUpdate = si.DefaultMatrixAutoUpdate),
                        (this.matrixWorldNeedsUpdate = !1),
                        (this.layers = new Xr()),
                        (this.visible = !0),
                        (this.castShadow = !1),
                        (this.receiveShadow = !1),
                        (this.frustumCulled = !0),
                        (this.renderOrder = 0),
                        (this.animations = []),
                        (this.userData = {})
                    }
                    ;(si.DefaultUp = new lr(0, 1, 0)),
                      (si.DefaultMatrixAutoUpdate = !0),
                      (si.prototype = Object.assign(Object.create(qn.prototype), {
                        constructor: si,
                        isObject3D: !0,
                        onBeforeRender: function () {},
                        onAfterRender: function () {},
                        applyMatrix4: function (e) {
                          this.matrixAutoUpdate && this.updateMatrix(),
                            this.matrix.premultiply(e),
                            this.matrix.decompose(this.position, this.quaternion, this.scale)
                        },
                        applyQuaternion: function (e) {
                          return this.quaternion.premultiply(e), this
                        },
                        setRotationFromAxisAngle: function (e, t) {
                          this.quaternion.setFromAxisAngle(e, t)
                        },
                        setRotationFromEuler: function (e) {
                          this.quaternion.setFromEuler(e, !0)
                        },
                        setRotationFromMatrix: function (e) {
                          this.quaternion.setFromRotationMatrix(e)
                        },
                        setRotationFromQuaternion: function (e) {
                          this.quaternion.copy(e)
                        },
                        rotateOnAxis: function (e, t) {
                          return Zr.setFromAxisAngle(e, t), this.quaternion.multiply(Zr), this
                        },
                        rotateOnWorldAxis: function (e, t) {
                          return Zr.setFromAxisAngle(e, t), this.quaternion.premultiply(Zr), this
                        },
                        rotateX: function (e) {
                          return this.rotateOnAxis(ni, e)
                        },
                        rotateY: function (e) {
                          return this.rotateOnAxis(ri, e)
                        },
                        rotateZ: function (e) {
                          return this.rotateOnAxis(ii, e)
                        },
                        translateOnAxis: function (e, t) {
                          return (
                            Qr.copy(e).applyQuaternion(this.quaternion),
                            this.position.add(Qr.multiplyScalar(t)),
                            this
                          )
                        },
                        translateX: function (e) {
                          return this.translateOnAxis(ni, e)
                        },
                        translateY: function (e) {
                          return this.translateOnAxis(ri, e)
                        },
                        translateZ: function (e) {
                          return this.translateOnAxis(ii, e)
                        },
                        localToWorld: function (e) {
                          return e.applyMatrix4(this.matrixWorld)
                        },
                        worldToLocal: function (e) {
                          return e.applyMatrix4(Kr.copy(this.matrixWorld).invert())
                        },
                        lookAt: function (e, t, n) {
                          e.isVector3 ? Jr.copy(e) : Jr.set(e, t, n)
                          var r = this.parent
                          this.updateWorldMatrix(!0, !1),
                            $r.setFromMatrixPosition(this.matrixWorld),
                            this.isCamera || this.isLight
                              ? Kr.lookAt($r, Jr, this.up)
                              : Kr.lookAt(Jr, $r, this.up),
                            this.quaternion.setFromRotationMatrix(Kr),
                            r &&
                              (Kr.extractRotation(r.matrixWorld),
                              Zr.setFromRotationMatrix(Kr),
                              this.quaternion.premultiply(Zr.invert()))
                        },
                        add: function (e) {
                          if (arguments.length > 1) {
                            for (var t = 0; t < arguments.length; t++) this.add(arguments[t])
                            return this
                          }
                          return e === this
                            ? (console.error(
                                "THREE.Object3D.add: object can't be added as a child of itself.",
                                e,
                              ),
                              this)
                            : (e && e.isObject3D
                                ? (null !== e.parent && e.parent.remove(e),
                                  (e.parent = this),
                                  this.children.push(e),
                                  e.dispatchEvent(oi))
                                : console.error(
                                    'THREE.Object3D.add: object not an instance of THREE.Object3D.',
                                    e,
                                  ),
                              this)
                        },
                        remove: function (e) {
                          if (arguments.length > 1) {
                            for (var t = 0; t < arguments.length; t++) this.remove(arguments[t])
                            return this
                          }
                          var n = this.children.indexOf(e)
                          return (
                            -1 !== n &&
                              ((e.parent = null), this.children.splice(n, 1), e.dispatchEvent(ai)),
                            this
                          )
                        },
                        clear: function () {
                          for (var e = 0; e < this.children.length; e++) {
                            var t = this.children[e]
                            ;(t.parent = null), t.dispatchEvent(ai)
                          }
                          return (this.children.length = 0), this
                        },
                        attach: function (e) {
                          return (
                            this.updateWorldMatrix(!0, !1),
                            Kr.copy(this.matrixWorld).invert(),
                            null !== e.parent &&
                              (e.parent.updateWorldMatrix(!0, !1),
                              Kr.multiply(e.parent.matrixWorld)),
                            e.applyMatrix4(Kr),
                            e.updateWorldMatrix(!1, !1),
                            this.add(e),
                            this
                          )
                        },
                        getObjectById: function (e) {
                          return this.getObjectByProperty('id', e)
                        },
                        getObjectByName: function (e) {
                          return this.getObjectByProperty('name', e)
                        },
                        getObjectByProperty: function (e, t) {
                          if (this[e] === t) return this
                          for (var n = 0, r = this.children.length; n < r; n++) {
                            var i = this.children[n].getObjectByProperty(e, t)
                            if (void 0 !== i) return i
                          }
                        },
                        getWorldPosition: function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'THREE.Object3D: .getWorldPosition() target is now required',
                              ),
                              (e = new lr())),
                            this.updateWorldMatrix(!0, !1),
                            e.setFromMatrixPosition(this.matrixWorld)
                          )
                        },
                        getWorldQuaternion: function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'THREE.Object3D: .getWorldQuaternion() target is now required',
                              ),
                              (e = new sr())),
                            this.updateWorldMatrix(!0, !1),
                            this.matrixWorld.decompose($r, e, ei),
                            e
                          )
                        },
                        getWorldScale: function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'THREE.Object3D: .getWorldScale() target is now required',
                              ),
                              (e = new lr())),
                            this.updateWorldMatrix(!0, !1),
                            this.matrixWorld.decompose($r, ti, e),
                            e
                          )
                        },
                        getWorldDirection: function (e) {
                          void 0 === e &&
                            (console.warn(
                              'THREE.Object3D: .getWorldDirection() target is now required',
                            ),
                            (e = new lr())),
                            this.updateWorldMatrix(!0, !1)
                          var t = this.matrixWorld.elements
                          return e.set(t[8], t[9], t[10]).normalize()
                        },
                        raycast: function () {},
                        traverse: function (e) {
                          e(this)
                          for (var t = this.children, n = 0, r = t.length; n < r; n++)
                            t[n].traverse(e)
                        },
                        traverseVisible: function (e) {
                          if (!1 !== this.visible) {
                            e(this)
                            for (var t = this.children, n = 0, r = t.length; n < r; n++)
                              t[n].traverseVisible(e)
                          }
                        },
                        traverseAncestors: function (e) {
                          var t = this.parent
                          null !== t && (e(t), t.traverseAncestors(e))
                        },
                        updateMatrix: function () {
                          this.matrix.compose(this.position, this.quaternion, this.scale),
                            (this.matrixWorldNeedsUpdate = !0)
                        },
                        updateMatrixWorld: function (e) {
                          this.matrixAutoUpdate && this.updateMatrix(),
                            (this.matrixWorldNeedsUpdate || e) &&
                              (null === this.parent
                                ? this.matrixWorld.copy(this.matrix)
                                : this.matrixWorld.multiplyMatrices(
                                    this.parent.matrixWorld,
                                    this.matrix,
                                  ),
                              (this.matrixWorldNeedsUpdate = !1),
                              (e = !0))
                          for (var t = this.children, n = 0, r = t.length; n < r; n++)
                            t[n].updateMatrixWorld(e)
                        },
                        updateWorldMatrix: function (e, t) {
                          var n = this.parent
                          if (
                            (!0 === e && 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 === t)
                          )
                            for (var r = this.children, i = 0, o = r.length; i < o; i++)
                              r[i].updateWorldMatrix(!1, !0)
                        },
                        toJSON: function (e) {
                          var t = void 0 === e || 'string' === typeof e,
                            n = {}
                          t &&
                            ((e = {
                              geometries: {},
                              materials: {},
                              textures: {},
                              images: {},
                              shapes: {},
                              skeletons: {},
                              animations: {},
                            }),
                            (n.metadata = {
                              version: 4.5,
                              type: 'Object',
                              generator: 'Object3D.toJSON',
                            }))
                          var r = {}
                          function i(t, n) {
                            return void 0 === t[n.uuid] && (t[n.uuid] = n.toJSON(e)), n.uuid
                          }
                          if (
                            ((r.uuid = this.uuid),
                            (r.type = this.type),
                            '' !== this.name && (r.name = this.name),
                            !0 === this.castShadow && (r.castShadow = !0),
                            !0 === this.receiveShadow && (r.receiveShadow = !0),
                            !1 === this.visible && (r.visible = !1),
                            !1 === this.frustumCulled && (r.frustumCulled = !1),
                            0 !== this.renderOrder && (r.renderOrder = this.renderOrder),
                            '{}' !== JSON.stringify(this.userData) && (r.userData = this.userData),
                            (r.layers = this.layers.mask),
                            (r.matrix = this.matrix.toArray()),
                            !1 === this.matrixAutoUpdate && (r.matrixAutoUpdate = !1),
                            this.isInstancedMesh &&
                              ((r.type = 'InstancedMesh'),
                              (r.count = this.count),
                              (r.instanceMatrix = this.instanceMatrix.toJSON())),
                            this.isMesh || this.isLine || this.isPoints)
                          ) {
                            r.geometry = i(e.geometries, this.geometry)
                            var o = this.geometry.parameters
                            if (void 0 !== o && void 0 !== o.shapes) {
                              var a = o.shapes
                              if (Array.isArray(a))
                                for (var s = 0, l = a.length; s < l; s++) {
                                  var c = a[s]
                                  i(e.shapes, c)
                                }
                              else i(e.shapes, a)
                            }
                          }
                          if (
                            (this.isSkinnedMesh &&
                              ((r.bindMode = this.bindMode),
                              (r.bindMatrix = this.bindMatrix.toArray()),
                              void 0 !== this.skeleton &&
                                (i(e.skeletons, this.skeleton), (r.skeleton = this.skeleton.uuid))),
                            void 0 !== this.material)
                          )
                            if (Array.isArray(this.material)) {
                              for (var u = [], h = 0, d = this.material.length; h < d; h++)
                                u.push(i(e.materials, this.material[h]))
                              r.material = u
                            } else r.material = i(e.materials, this.material)
                          if (this.children.length > 0) {
                            r.children = []
                            for (var p = 0; p < this.children.length; p++)
                              r.children.push(this.children[p].toJSON(e).object)
                          }
                          if (this.animations.length > 0) {
                            r.animations = []
                            for (var f = 0; f < this.animations.length; f++) {
                              var m = this.animations[f]
                              r.animations.push(i(e.animations, m))
                            }
                          }
                          if (t) {
                            var v = E(e.geometries),
                              g = E(e.materials),
                              y = E(e.textures),
                              b = E(e.images),
                              A = E(e.shapes),
                              w = E(e.skeletons),
                              x = E(e.animations)
                            v.length > 0 && (n.geometries = v),
                              g.length > 0 && (n.materials = g),
                              y.length > 0 && (n.textures = y),
                              b.length > 0 && (n.images = b),
                              A.length > 0 && (n.shapes = A),
                              w.length > 0 && (n.skeletons = w),
                              x.length > 0 && (n.animations = x)
                          }
                          return (n.object = r), n
                          function E(e) {
                            var t = []
                            for (var n in e) {
                              var r = e[n]
                              delete r.metadata, t.push(r)
                            }
                            return t
                          }
                        },
                        clone: function (e) {
                          return new this.constructor().copy(this, e)
                        },
                        copy: function (e, t) {
                          if (
                            (void 0 === t && (t = !0),
                            (this.name = e.name),
                            this.up.copy(e.up),
                            this.position.copy(e.position),
                            (this.rotation.order = e.rotation.order),
                            this.quaternion.copy(e.quaternion),
                            this.scale.copy(e.scale),
                            this.matrix.copy(e.matrix),
                            this.matrixWorld.copy(e.matrixWorld),
                            (this.matrixAutoUpdate = e.matrixAutoUpdate),
                            (this.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate),
                            (this.layers.mask = e.layers.mask),
                            (this.visible = e.visible),
                            (this.castShadow = e.castShadow),
                            (this.receiveShadow = e.receiveShadow),
                            (this.frustumCulled = e.frustumCulled),
                            (this.renderOrder = e.renderOrder),
                            (this.userData = JSON.parse(JSON.stringify(e.userData))),
                            !0 === t)
                          )
                            for (var n = 0; n < e.children.length; n++) {
                              var r = e.children[n]
                              this.add(r.clone())
                            }
                          return this
                        },
                      }))
                    var li = new lr(),
                      ci = new lr(),
                      ui = new $n(),
                      hi = (function () {
                        function e(e, t) {
                          Object.defineProperty(this, 'isPlane', { value: !0 }),
                            (this.normal = void 0 !== e ? e : new lr(1, 0, 0)),
                            (this.constant = void 0 !== t ? t : 0)
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.normal.copy(e), (this.constant = t), this
                          }),
                          (t.setComponents = function (e, t, n, r) {
                            return this.normal.set(e, t, n), (this.constant = r), this
                          }),
                          (t.setFromNormalAndCoplanarPoint = function (e, t) {
                            return this.normal.copy(e), (this.constant = -t.dot(this.normal)), this
                          }),
                          (t.setFromCoplanarPoints = function (e, t, n) {
                            var r = li.subVectors(n, t).cross(ci.subVectors(e, t)).normalize()
                            return this.setFromNormalAndCoplanarPoint(r, e), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.normal.copy(e.normal), (this.constant = e.constant), this
                          }),
                          (t.normalize = function () {
                            var e = 1 / this.normal.length()
                            return this.normal.multiplyScalar(e), (this.constant *= e), this
                          }),
                          (t.negate = function () {
                            return (this.constant *= -1), this.normal.negate(), this
                          }),
                          (t.distanceToPoint = function (e) {
                            return this.normal.dot(e) + this.constant
                          }),
                          (t.distanceToSphere = function (e) {
                            return this.distanceToPoint(e.center) - e.radius
                          }),
                          (t.projectPoint = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn(
                                  'THREE.Plane: .projectPoint() target is now required',
                                ),
                                (t = new lr())),
                              t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)
                            )
                          }),
                          (t.intersectLine = function (e, t) {
                            void 0 === t &&
                              (console.warn('THREE.Plane: .intersectLine() target is now required'),
                              (t = new lr()))
                            var n = e.delta(li),
                              r = this.normal.dot(n)
                            if (0 === r)
                              return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : void 0
                            var i = -(e.start.dot(this.normal) + this.constant) / r
                            return i < 0 || i > 1
                              ? void 0
                              : t.copy(n).multiplyScalar(i).add(e.start)
                          }),
                          (t.intersectsLine = function (e) {
                            var t = this.distanceToPoint(e.start),
                              n = this.distanceToPoint(e.end)
                            return (t < 0 && n > 0) || (n < 0 && t > 0)
                          }),
                          (t.intersectsBox = function (e) {
                            return e.intersectsPlane(this)
                          }),
                          (t.intersectsSphere = function (e) {
                            return e.intersectsPlane(this)
                          }),
                          (t.coplanarPoint = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn(
                                  'THREE.Plane: .coplanarPoint() target is now required',
                                ),
                                (e = new lr())),
                              e.copy(this.normal).multiplyScalar(-this.constant)
                            )
                          }),
                          (t.applyMatrix4 = function (e, t) {
                            var n = t || ui.getNormalMatrix(e),
                              r = this.coplanarPoint(li).applyMatrix4(e),
                              i = this.normal.applyMatrix3(n).normalize()
                            return (this.constant = -r.dot(i)), this
                          }),
                          (t.translate = function (e) {
                            return (this.constant -= e.dot(this.normal)), this
                          }),
                          (t.equals = function (e) {
                            return e.normal.equals(this.normal) && e.constant === this.constant
                          }),
                          e
                        )
                      })(),
                      di = new lr(),
                      pi = new lr(),
                      fi = new lr(),
                      mi = new lr(),
                      vi = new lr(),
                      gi = new lr(),
                      yi = new lr(),
                      bi = new lr(),
                      Ai = new lr(),
                      wi = new lr(),
                      xi = (function () {
                        function e(e, t, n) {
                          ;(this.a = void 0 !== e ? e : new lr()),
                            (this.b = void 0 !== t ? t : new lr()),
                            (this.c = void 0 !== n ? n : new lr())
                        }
                        ;(e.getNormal = function (e, t, n, r) {
                          void 0 === r &&
                            (console.warn('THREE.Triangle: .getNormal() target is now required'),
                            (r = new lr())),
                            r.subVectors(n, t),
                            di.subVectors(e, t),
                            r.cross(di)
                          var i = r.lengthSq()
                          return i > 0 ? r.multiplyScalar(1 / Math.sqrt(i)) : r.set(0, 0, 0)
                        }),
                          (e.getBarycoord = function (e, t, n, r, i) {
                            di.subVectors(r, t), pi.subVectors(n, t), fi.subVectors(e, t)
                            var o = di.dot(di),
                              a = di.dot(pi),
                              s = di.dot(fi),
                              l = pi.dot(pi),
                              c = pi.dot(fi),
                              u = o * l - a * a
                            if (
                              (void 0 === i &&
                                (console.warn(
                                  'THREE.Triangle: .getBarycoord() target is now required',
                                ),
                                (i = new lr())),
                              0 === u)
                            )
                              return i.set(-2, -1, -1)
                            var h = 1 / u,
                              d = (l * s - a * c) * h,
                              p = (o * c - a * s) * h
                            return i.set(1 - d - p, p, d)
                          }),
                          (e.containsPoint = function (e, t, n, r) {
                            return (
                              this.getBarycoord(e, t, n, r, mi),
                              mi.x >= 0 && mi.y >= 0 && mi.x + mi.y <= 1
                            )
                          }),
                          (e.getUV = function (e, t, n, r, i, o, a, s) {
                            return (
                              this.getBarycoord(e, t, n, r, mi),
                              s.set(0, 0),
                              s.addScaledVector(i, mi.x),
                              s.addScaledVector(o, mi.y),
                              s.addScaledVector(a, mi.z),
                              s
                            )
                          }),
                          (e.isFrontFacing = function (e, t, n, r) {
                            return di.subVectors(n, t), pi.subVectors(e, t), di.cross(pi).dot(r) < 0
                          })
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n) {
                            return this.a.copy(e), this.b.copy(t), this.c.copy(n), this
                          }),
                          (t.setFromPointsAndIndices = function (e, t, n, r) {
                            return this.a.copy(e[t]), this.b.copy(e[n]), this.c.copy(e[r]), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.a.copy(e.a), this.b.copy(e.b), this.c.copy(e.c), this
                          }),
                          (t.getArea = function () {
                            return (
                              di.subVectors(this.c, this.b),
                              pi.subVectors(this.a, this.b),
                              0.5 * di.cross(pi).length()
                            )
                          }),
                          (t.getMidpoint = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn(
                                  'THREE.Triangle: .getMidpoint() target is now required',
                                ),
                                (e = new lr())),
                              e
                                .addVectors(this.a, this.b)
                                .add(this.c)
                                .multiplyScalar(1 / 3)
                            )
                          }),
                          (t.getNormal = function (t) {
                            return e.getNormal(this.a, this.b, this.c, t)
                          }),
                          (t.getPlane = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Triangle: .getPlane() target is now required'),
                                (e = new hi())),
                              e.setFromCoplanarPoints(this.a, this.b, this.c)
                            )
                          }),
                          (t.getBarycoord = function (t, n) {
                            return e.getBarycoord(t, this.a, this.b, this.c, n)
                          }),
                          (t.getUV = function (t, n, r, i, o) {
                            return e.getUV(t, this.a, this.b, this.c, n, r, i, o)
                          }),
                          (t.containsPoint = function (t) {
                            return e.containsPoint(t, this.a, this.b, this.c)
                          }),
                          (t.isFrontFacing = function (t) {
                            return e.isFrontFacing(this.a, this.b, this.c, t)
                          }),
                          (t.intersectsBox = function (e) {
                            return e.intersectsTriangle(this)
                          }),
                          (t.closestPointToPoint = function (e, t) {
                            void 0 === t &&
                              (console.warn(
                                'THREE.Triangle: .closestPointToPoint() target is now required',
                              ),
                              (t = new lr()))
                            var n,
                              r,
                              i = this.a,
                              o = this.b,
                              a = this.c
                            vi.subVectors(o, i), gi.subVectors(a, i), bi.subVectors(e, i)
                            var s = vi.dot(bi),
                              l = gi.dot(bi)
                            if (s <= 0 && l <= 0) return t.copy(i)
                            Ai.subVectors(e, o)
                            var c = vi.dot(Ai),
                              u = gi.dot(Ai)
                            if (c >= 0 && u <= c) return t.copy(o)
                            var h = s * u - c * l
                            if (h <= 0 && s >= 0 && c <= 0)
                              return (n = s / (s - c)), t.copy(i).addScaledVector(vi, n)
                            wi.subVectors(e, a)
                            var d = vi.dot(wi),
                              p = gi.dot(wi)
                            if (p >= 0 && d <= p) return t.copy(a)
                            var f = d * l - s * p
                            if (f <= 0 && l >= 0 && p <= 0)
                              return (r = l / (l - p)), t.copy(i).addScaledVector(gi, r)
                            var m = c * p - d * u
                            if (m <= 0 && u - c >= 0 && d - p >= 0)
                              return (
                                yi.subVectors(a, o),
                                (r = (u - c) / (u - c + (d - p))),
                                t.copy(o).addScaledVector(yi, r)
                              )
                            var v = 1 / (m + f + h)
                            return (
                              (n = f * v),
                              (r = h * v),
                              t.copy(i).addScaledVector(vi, n).addScaledVector(gi, r)
                            )
                          }),
                          (t.equals = function (e) {
                            return e.a.equals(this.a) && e.b.equals(this.b) && e.c.equals(this.c)
                          }),
                          e
                        )
                      })(),
                      Ei = {
                        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,
                      },
                      Mi = { h: 0, s: 0, l: 0 },
                      _i = { h: 0, s: 0, l: 0 }
                    function Ti(e, t, n) {
                      return (
                        n < 0 && (n += 1),
                        n > 1 && (n -= 1),
                        n < 1 / 6
                          ? e + 6 * (t - e) * n
                          : n < 0.5
                          ? t
                          : n < 2 / 3
                          ? e + 6 * (t - e) * (2 / 3 - n)
                          : e
                      )
                    }
                    function Si(e) {
                      return e < 0.04045
                        ? 0.0773993808 * e
                        : Math.pow(0.9478672986 * e + 0.0521327014, 2.4)
                    }
                    function Ci(e) {
                      return e < 0.0031308 ? 12.92 * e : 1.055 * Math.pow(e, 0.41666) - 0.055
                    }
                    var Li = (function () {
                      function e(e, t, n) {
                        return (
                          Object.defineProperty(this, 'isColor', { value: !0 }),
                          void 0 === t && void 0 === n ? this.set(e) : this.setRGB(e, t, n)
                        )
                      }
                      var t = e.prototype
                      return (
                        (t.set = function (e) {
                          return (
                            e && e.isColor
                              ? this.copy(e)
                              : 'number' === typeof e
                              ? this.setHex(e)
                              : 'string' === typeof e && this.setStyle(e),
                            this
                          )
                        }),
                        (t.setScalar = function (e) {
                          return (this.r = e), (this.g = e), (this.b = e), this
                        }),
                        (t.setHex = function (e) {
                          return (
                            (e = Math.floor(e)),
                            (this.r = ((e >> 16) & 255) / 255),
                            (this.g = ((e >> 8) & 255) / 255),
                            (this.b = (255 & e) / 255),
                            this
                          )
                        }),
                        (t.setRGB = function (e, t, n) {
                          return (this.r = e), (this.g = t), (this.b = n), this
                        }),
                        (t.setHSL = function (e, t, n) {
                          if (
                            ((e = Kn.euclideanModulo(e, 1)),
                            (t = Kn.clamp(t, 0, 1)),
                            (n = Kn.clamp(n, 0, 1)),
                            0 === t)
                          )
                            this.r = this.g = this.b = n
                          else {
                            var r = n <= 0.5 ? n * (1 + t) : n + t - n * t,
                              i = 2 * n - r
                            ;(this.r = Ti(i, r, e + 1 / 3)),
                              (this.g = Ti(i, r, e)),
                              (this.b = Ti(i, r, e - 1 / 3))
                          }
                          return this
                        }),
                        (t.setStyle = function (e) {
                          function t(t) {
                            void 0 !== t &&
                              parseFloat(t) < 1 &&
                              console.warn(
                                'THREE.Color: Alpha component of ' + e + ' will be ignored.',
                              )
                          }
                          var n
                          if ((n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e))) {
                            var r,
                              i = n[1],
                              o = n[2]
                            switch (i) {
                              case 'rgb':
                              case 'rgba':
                                if (
                                  (r =
                                    /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
                                      o,
                                    ))
                                )
                                  return (
                                    (this.r = Math.min(255, parseInt(r[1], 10)) / 255),
                                    (this.g = Math.min(255, parseInt(r[2], 10)) / 255),
                                    (this.b = Math.min(255, parseInt(r[3], 10)) / 255),
                                    t(r[4]),
                                    this
                                  )
                                if (
                                  (r =
                                    /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
                                      o,
                                    ))
                                )
                                  return (
                                    (this.r = Math.min(100, parseInt(r[1], 10)) / 100),
                                    (this.g = Math.min(100, parseInt(r[2], 10)) / 100),
                                    (this.b = Math.min(100, parseInt(r[3], 10)) / 100),
                                    t(r[4]),
                                    this
                                  )
                                break
                              case 'hsl':
                              case 'hsla':
                                if (
                                  (r =
                                    /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
                                      o,
                                    ))
                                ) {
                                  var a = parseFloat(r[1]) / 360,
                                    s = parseInt(r[2], 10) / 100,
                                    l = parseInt(r[3], 10) / 100
                                  return t(r[4]), this.setHSL(a, s, l)
                                }
                            }
                          } else if ((n = /^\#([A-Fa-f\d]+)$/.exec(e))) {
                            var c = n[1],
                              u = c.length
                            if (3 === u)
                              return (
                                (this.r = parseInt(c.charAt(0) + c.charAt(0), 16) / 255),
                                (this.g = parseInt(c.charAt(1) + c.charAt(1), 16) / 255),
                                (this.b = parseInt(c.charAt(2) + c.charAt(2), 16) / 255),
                                this
                              )
                            if (6 === u)
                              return (
                                (this.r = parseInt(c.charAt(0) + c.charAt(1), 16) / 255),
                                (this.g = parseInt(c.charAt(2) + c.charAt(3), 16) / 255),
                                (this.b = parseInt(c.charAt(4) + c.charAt(5), 16) / 255),
                                this
                              )
                          }
                          return e && e.length > 0 ? this.setColorName(e) : this
                        }),
                        (t.setColorName = function (e) {
                          var t = Ei[e]
                          return (
                            void 0 !== t
                              ? this.setHex(t)
                              : console.warn('THREE.Color: Unknown color ' + e),
                            this
                          )
                        }),
                        (t.clone = function () {
                          return new this.constructor(this.r, this.g, this.b)
                        }),
                        (t.copy = function (e) {
                          return (this.r = e.r), (this.g = e.g), (this.b = e.b), this
                        }),
                        (t.copyGammaToLinear = function (e, t) {
                          return (
                            void 0 === t && (t = 2),
                            (this.r = Math.pow(e.r, t)),
                            (this.g = Math.pow(e.g, t)),
                            (this.b = Math.pow(e.b, t)),
                            this
                          )
                        }),
                        (t.copyLinearToGamma = function (e, t) {
                          void 0 === t && (t = 2)
                          var n = t > 0 ? 1 / t : 1
                          return (
                            (this.r = Math.pow(e.r, n)),
                            (this.g = Math.pow(e.g, n)),
                            (this.b = Math.pow(e.b, n)),
                            this
                          )
                        }),
                        (t.convertGammaToLinear = function (e) {
                          return this.copyGammaToLinear(this, e), this
                        }),
                        (t.convertLinearToGamma = function (e) {
                          return this.copyLinearToGamma(this, e), this
                        }),
                        (t.copySRGBToLinear = function (e) {
                          return (this.r = Si(e.r)), (this.g = Si(e.g)), (this.b = Si(e.b)), this
                        }),
                        (t.copyLinearToSRGB = function (e) {
                          return (this.r = Ci(e.r)), (this.g = Ci(e.g)), (this.b = Ci(e.b)), this
                        }),
                        (t.convertSRGBToLinear = function () {
                          return this.copySRGBToLinear(this), this
                        }),
                        (t.convertLinearToSRGB = function () {
                          return this.copyLinearToSRGB(this), this
                        }),
                        (t.getHex = function () {
                          return (
                            ((255 * this.r) << 16) ^ ((255 * this.g) << 8) ^ ((255 * this.b) << 0)
                          )
                        }),
                        (t.getHexString = function () {
                          return ('000000' + this.getHex().toString(16)).slice(-6)
                        }),
                        (t.getHSL = function (e) {
                          void 0 === e &&
                            (console.warn('THREE.Color: .getHSL() target is now required'),
                            (e = { h: 0, s: 0, l: 0 }))
                          var t,
                            n,
                            r = this.r,
                            i = this.g,
                            o = this.b,
                            a = Math.max(r, i, o),
                            s = Math.min(r, i, o),
                            l = (s + a) / 2
                          if (s === a) (t = 0), (n = 0)
                          else {
                            var c = a - s
                            switch (((n = l <= 0.5 ? c / (a + s) : c / (2 - a - s)), a)) {
                              case r:
                                t = (i - o) / c + (i < o ? 6 : 0)
                                break
                              case i:
                                t = (o - r) / c + 2
                                break
                              case o:
                                t = (r - i) / c + 4
                            }
                            t /= 6
                          }
                          return (e.h = t), (e.s = n), (e.l = l), e
                        }),
                        (t.getStyle = function () {
                          return (
                            'rgb(' +
                            ((255 * this.r) | 0) +
                            ',' +
                            ((255 * this.g) | 0) +
                            ',' +
                            ((255 * this.b) | 0) +
                            ')'
                          )
                        }),
                        (t.offsetHSL = function (e, t, n) {
                          return (
                            this.getHSL(Mi),
                            (Mi.h += e),
                            (Mi.s += t),
                            (Mi.l += n),
                            this.setHSL(Mi.h, Mi.s, Mi.l),
                            this
                          )
                        }),
                        (t.add = function (e) {
                          return (this.r += e.r), (this.g += e.g), (this.b += e.b), this
                        }),
                        (t.addColors = function (e, t) {
                          return (
                            (this.r = e.r + t.r), (this.g = e.g + t.g), (this.b = e.b + t.b), this
                          )
                        }),
                        (t.addScalar = function (e) {
                          return (this.r += e), (this.g += e), (this.b += e), this
                        }),
                        (t.sub = function (e) {
                          return (
                            (this.r = Math.max(0, this.r - e.r)),
                            (this.g = Math.max(0, this.g - e.g)),
                            (this.b = Math.max(0, this.b - e.b)),
                            this
                          )
                        }),
                        (t.multiply = function (e) {
                          return (this.r *= e.r), (this.g *= e.g), (this.b *= e.b), this
                        }),
                        (t.multiplyScalar = function (e) {
                          return (this.r *= e), (this.g *= e), (this.b *= e), this
                        }),
                        (t.lerp = function (e, t) {
                          return (
                            (this.r += (e.r - this.r) * t),
                            (this.g += (e.g - this.g) * t),
                            (this.b += (e.b - this.b) * t),
                            this
                          )
                        }),
                        (t.lerpColors = function (e, t, n) {
                          return (
                            (this.r = e.r + (t.r - e.r) * n),
                            (this.g = e.g + (t.g - e.g) * n),
                            (this.b = e.b + (t.b - e.b) * n),
                            this
                          )
                        }),
                        (t.lerpHSL = function (e, t) {
                          this.getHSL(Mi), e.getHSL(_i)
                          var n = Kn.lerp(Mi.h, _i.h, t),
                            r = Kn.lerp(Mi.s, _i.s, t),
                            i = Kn.lerp(Mi.l, _i.l, t)
                          return this.setHSL(n, r, i), this
                        }),
                        (t.equals = function (e) {
                          return e.r === this.r && e.g === this.g && e.b === this.b
                        }),
                        (t.fromArray = function (e, t) {
                          return (
                            void 0 === t && (t = 0),
                            (this.r = e[t]),
                            (this.g = e[t + 1]),
                            (this.b = e[t + 2]),
                            this
                          )
                        }),
                        (t.toArray = function (e, t) {
                          return (
                            void 0 === e && (e = []),
                            void 0 === t && (t = 0),
                            (e[t] = this.r),
                            (e[t + 1] = this.g),
                            (e[t + 2] = this.b),
                            e
                          )
                        }),
                        (t.fromBufferAttribute = function (e, t) {
                          return (
                            (this.r = e.getX(t)),
                            (this.g = e.getY(t)),
                            (this.b = e.getZ(t)),
                            !0 === e.normalized &&
                              ((this.r /= 255), (this.g /= 255), (this.b /= 255)),
                            this
                          )
                        }),
                        (t.toJSON = function () {
                          return this.getHex()
                        }),
                        e
                      )
                    })()
                    ;(Li.NAMES = Ei),
                      (Li.prototype.r = 1),
                      (Li.prototype.g = 1),
                      (Li.prototype.b = 1)
                    var Ri = (function () {
                        function e(e, t, n, r, i, o) {
                          void 0 === o && (o = 0),
                            (this.a = e),
                            (this.b = t),
                            (this.c = n),
                            (this.normal = r && r.isVector3 ? r : new lr()),
                            (this.vertexNormals = Array.isArray(r) ? r : []),
                            (this.color = i && i.isColor ? i : new Li()),
                            (this.vertexColors = Array.isArray(i) ? i : []),
                            (this.materialIndex = o)
                        }
                        var t = e.prototype
                        return (
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            ;(this.a = e.a),
                              (this.b = e.b),
                              (this.c = e.c),
                              this.normal.copy(e.normal),
                              this.color.copy(e.color),
                              (this.materialIndex = e.materialIndex)
                            for (var t = 0, n = e.vertexNormals.length; t < n; t++)
                              this.vertexNormals[t] = e.vertexNormals[t].clone()
                            for (var r = 0, i = e.vertexColors.length; r < i; r++)
                              this.vertexColors[r] = e.vertexColors[r].clone()
                            return this
                          }),
                          e
                        )
                      })(),
                      Pi = 0
                    function Di() {
                      Object.defineProperty(this, 'id', { value: Pi++ }),
                        (this.uuid = Kn.generateUUID()),
                        (this.name = ''),
                        (this.type = 'Material'),
                        (this.fog = !0),
                        (this.blending = w),
                        (this.side = m),
                        (this.flatShading = !1),
                        (this.vertexColors = !1),
                        (this.opacity = 1),
                        (this.transparent = !1),
                        (this.blendSrc = B),
                        (this.blendDst = F),
                        (this.blendEquation = T),
                        (this.blendSrcAlpha = null),
                        (this.blendDstAlpha = null),
                        (this.blendEquationAlpha = null),
                        (this.depthFunc = W),
                        (this.depthTest = !0),
                        (this.depthWrite = !0),
                        (this.stencilWriteMask = 255),
                        (this.stencilFunc = _n),
                        (this.stencilRef = 0),
                        (this.stencilFuncMask = 255),
                        (this.stencilFail = hn),
                        (this.stencilZFail = hn),
                        (this.stencilZPass = hn),
                        (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.alphaTest = 0),
                        (this.premultipliedAlpha = !1),
                        (this.visible = !0),
                        (this.toneMapped = !0),
                        (this.userData = {}),
                        (this.version = 0)
                    }
                    function Oi(e) {
                      Di.call(this),
                        (this.type = 'MeshBasicMaterial'),
                        (this.color = new Li(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 = Z),
                        (this.reflectivity = 1),
                        (this.refractionRatio = 0.98),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.wireframeLinecap = 'round'),
                        (this.wireframeLinejoin = 'round'),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        this.setValues(e)
                    }
                    ;(Di.prototype = Object.assign(Object.create(qn.prototype), {
                      constructor: Di,
                      isMaterial: !0,
                      onBeforeCompile: function () {},
                      customProgramCacheKey: function () {
                        return this.onBeforeCompile.toString()
                      },
                      setValues: function (e) {
                        if (void 0 !== e)
                          for (var t in e) {
                            var n = e[t]
                            if (void 0 !== n)
                              if ('shading' !== t) {
                                var r = this[t]
                                void 0 !== r
                                  ? r && r.isColor
                                    ? r.set(n)
                                    : r && r.isVector3 && n && n.isVector3
                                    ? r.copy(n)
                                    : (this[t] = n)
                                  : console.warn(
                                      'THREE.' +
                                        this.type +
                                        ": '" +
                                        t +
                                        "' is not a property of this material.",
                                    )
                              } else
                                console.warn(
                                  'THREE.' +
                                    this.type +
                                    ': .shading has been removed. Use the boolean .flatShading instead.',
                                ),
                                  (this.flatShading = n === y)
                            else console.warn("THREE.Material: '" + t + "' parameter is undefined.")
                          }
                      },
                      toJSON: function (e) {
                        var t = void 0 === e || 'string' === typeof e
                        t && (e = { textures: {}, images: {} })
                        var n = {
                          metadata: {
                            version: 4.5,
                            type: 'Material',
                            generator: 'Material.toJSON',
                          },
                        }
                        function r(e) {
                          var t = []
                          for (var n in e) {
                            var r = e[n]
                            delete r.metadata, t.push(r)
                          }
                          return t
                        }
                        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),
                          this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()),
                          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.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(e).uuid),
                          this.clearcoatRoughnessMap &&
                            this.clearcoatRoughnessMap.isTexture &&
                            (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(e).uuid),
                          this.clearcoatNormalMap &&
                            this.clearcoatNormalMap.isTexture &&
                            ((n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(e).uuid),
                            (n.clearcoatNormalScale = this.clearcoatNormalScale.toArray())),
                          this.map && this.map.isTexture && (n.map = this.map.toJSON(e).uuid),
                          this.matcap &&
                            this.matcap.isTexture &&
                            (n.matcap = this.matcap.toJSON(e).uuid),
                          this.alphaMap &&
                            this.alphaMap.isTexture &&
                            (n.alphaMap = this.alphaMap.toJSON(e).uuid),
                          this.lightMap &&
                            this.lightMap.isTexture &&
                            (n.lightMap = this.lightMap.toJSON(e).uuid),
                          this.aoMap &&
                            this.aoMap.isTexture &&
                            ((n.aoMap = this.aoMap.toJSON(e).uuid),
                            (n.aoMapIntensity = this.aoMapIntensity)),
                          this.bumpMap &&
                            this.bumpMap.isTexture &&
                            ((n.bumpMap = this.bumpMap.toJSON(e).uuid),
                            (n.bumpScale = this.bumpScale)),
                          this.normalMap &&
                            this.normalMap.isTexture &&
                            ((n.normalMap = this.normalMap.toJSON(e).uuid),
                            (n.normalMapType = this.normalMapType),
                            (n.normalScale = this.normalScale.toArray())),
                          this.displacementMap &&
                            this.displacementMap.isTexture &&
                            ((n.displacementMap = this.displacementMap.toJSON(e).uuid),
                            (n.displacementScale = this.displacementScale),
                            (n.displacementBias = this.displacementBias)),
                          this.roughnessMap &&
                            this.roughnessMap.isTexture &&
                            (n.roughnessMap = this.roughnessMap.toJSON(e).uuid),
                          this.metalnessMap &&
                            this.metalnessMap.isTexture &&
                            (n.metalnessMap = this.metalnessMap.toJSON(e).uuid),
                          this.emissiveMap &&
                            this.emissiveMap.isTexture &&
                            (n.emissiveMap = this.emissiveMap.toJSON(e).uuid),
                          this.specularMap &&
                            this.specularMap.isTexture &&
                            (n.specularMap = this.specularMap.toJSON(e).uuid),
                          this.envMap &&
                            this.envMap.isTexture &&
                            ((n.envMap = this.envMap.toJSON(e).uuid),
                            (n.reflectivity = this.reflectivity),
                            (n.refractionRatio = this.refractionRatio),
                            void 0 !== this.combine && (n.combine = this.combine),
                            void 0 !== this.envMapIntensity &&
                              (n.envMapIntensity = this.envMapIntensity)),
                          this.gradientMap &&
                            this.gradientMap.isTexture &&
                            (n.gradientMap = this.gradientMap.toJSON(e).uuid),
                          void 0 !== this.size && (n.size = this.size),
                          void 0 !== this.sizeAttenuation &&
                            (n.sizeAttenuation = this.sizeAttenuation),
                          this.blending !== w && (n.blending = this.blending),
                          !0 === this.flatShading && (n.flatShading = this.flatShading),
                          this.side !== m && (n.side = this.side),
                          this.vertexColors && (n.vertexColors = !0),
                          this.opacity < 1 && (n.opacity = this.opacity),
                          !0 === this.transparent && (n.transparent = this.transparent),
                          (n.depthFunc = this.depthFunc),
                          (n.depthTest = this.depthTest),
                          (n.depthWrite = this.depthWrite),
                          (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.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.morphTargets && (n.morphTargets = !0),
                          !0 === this.morphNormals && (n.morphNormals = !0),
                          !0 === this.skinning && (n.skinning = !0),
                          !1 === this.visible && (n.visible = !1),
                          !1 === this.toneMapped && (n.toneMapped = !1),
                          '{}' !== JSON.stringify(this.userData) && (n.userData = this.userData),
                          t)
                        ) {
                          var i = r(e.textures),
                            o = r(e.images)
                          i.length > 0 && (n.textures = i), o.length > 0 && (n.images = o)
                        }
                        return n
                      },
                      clone: function () {
                        return new this.constructor().copy(this)
                      },
                      copy: function (e) {
                        ;(this.name = e.name),
                          (this.fog = e.fog),
                          (this.blending = e.blending),
                          (this.side = e.side),
                          (this.flatShading = e.flatShading),
                          (this.vertexColors = e.vertexColors),
                          (this.opacity = e.opacity),
                          (this.transparent = e.transparent),
                          (this.blendSrc = e.blendSrc),
                          (this.blendDst = e.blendDst),
                          (this.blendEquation = e.blendEquation),
                          (this.blendSrcAlpha = e.blendSrcAlpha),
                          (this.blendDstAlpha = e.blendDstAlpha),
                          (this.blendEquationAlpha = e.blendEquationAlpha),
                          (this.depthFunc = e.depthFunc),
                          (this.depthTest = e.depthTest),
                          (this.depthWrite = e.depthWrite),
                          (this.stencilWriteMask = e.stencilWriteMask),
                          (this.stencilFunc = e.stencilFunc),
                          (this.stencilRef = e.stencilRef),
                          (this.stencilFuncMask = e.stencilFuncMask),
                          (this.stencilFail = e.stencilFail),
                          (this.stencilZFail = e.stencilZFail),
                          (this.stencilZPass = e.stencilZPass),
                          (this.stencilWrite = e.stencilWrite)
                        var t = e.clippingPlanes,
                          n = null
                        if (null !== t) {
                          var r = t.length
                          n = new Array(r)
                          for (var i = 0; i !== r; ++i) n[i] = t[i].clone()
                        }
                        return (
                          (this.clippingPlanes = n),
                          (this.clipIntersection = e.clipIntersection),
                          (this.clipShadows = e.clipShadows),
                          (this.shadowSide = e.shadowSide),
                          (this.colorWrite = e.colorWrite),
                          (this.precision = e.precision),
                          (this.polygonOffset = e.polygonOffset),
                          (this.polygonOffsetFactor = e.polygonOffsetFactor),
                          (this.polygonOffsetUnits = e.polygonOffsetUnits),
                          (this.dithering = e.dithering),
                          (this.alphaTest = e.alphaTest),
                          (this.premultipliedAlpha = e.premultipliedAlpha),
                          (this.visible = e.visible),
                          (this.toneMapped = e.toneMapped),
                          (this.userData = JSON.parse(JSON.stringify(e.userData))),
                          this
                        )
                      },
                      dispose: function () {
                        this.dispatchEvent({ type: 'dispose' })
                      },
                    })),
                      Object.defineProperty(Di.prototype, 'needsUpdate', {
                        set: function (e) {
                          !0 === e && this.version++
                        },
                      }),
                      (Oi.prototype = Object.create(Di.prototype)),
                      (Oi.prototype.constructor = Oi),
                      (Oi.prototype.isMeshBasicMaterial = !0),
                      (Oi.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.map = e.map),
                          (this.lightMap = e.lightMap),
                          (this.lightMapIntensity = e.lightMapIntensity),
                          (this.aoMap = e.aoMap),
                          (this.aoMapIntensity = e.aoMapIntensity),
                          (this.specularMap = e.specularMap),
                          (this.alphaMap = e.alphaMap),
                          (this.envMap = e.envMap),
                          (this.combine = e.combine),
                          (this.reflectivity = e.reflectivity),
                          (this.refractionRatio = e.refractionRatio),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.wireframeLinecap = e.wireframeLinecap),
                          (this.wireframeLinejoin = e.wireframeLinejoin),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          this
                        )
                      })
                    var Ii = new lr(),
                      Bi = new Jn()
                    function Fi(e, t, n) {
                      if (Array.isArray(e))
                        throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.')
                      ;(this.name = ''),
                        (this.array = e),
                        (this.itemSize = t),
                        (this.count = void 0 !== e ? e.length / t : 0),
                        (this.normalized = !0 === n),
                        (this.usage = Tn),
                        (this.updateRange = { offset: 0, count: -1 }),
                        (this.version = 0)
                    }
                    function ki(e, t, n) {
                      Fi.call(this, new Int8Array(e), t, n)
                    }
                    function Ni(e, t, n) {
                      Fi.call(this, new Uint8Array(e), t, n)
                    }
                    function Ui(e, t, n) {
                      Fi.call(this, new Uint8ClampedArray(e), t, n)
                    }
                    function Hi(e, t, n) {
                      Fi.call(this, new Int16Array(e), t, n)
                    }
                    function Gi(e, t, n) {
                      Fi.call(this, new Uint16Array(e), t, n)
                    }
                    function zi(e, t, n) {
                      Fi.call(this, new Int32Array(e), t, n)
                    }
                    function ji(e, t, n) {
                      Fi.call(this, new Uint32Array(e), t, n)
                    }
                    function Vi(e, t, n) {
                      Fi.call(this, new Uint16Array(e), t, n)
                    }
                    function Wi(e, t, n) {
                      Fi.call(this, new Float32Array(e), t, n)
                    }
                    function qi(e, t, n) {
                      Fi.call(this, new Float64Array(e), t, n)
                    }
                    function Xi(e) {
                      if (0 === e.length) return -1 / 0
                      for (var t = e[0], n = 1, r = e.length; n < r; ++n) e[n] > t && (t = e[n])
                      return t
                    }
                    Object.defineProperty(Fi.prototype, 'needsUpdate', {
                      set: function (e) {
                        !0 === e && this.version++
                      },
                    }),
                      Object.assign(Fi.prototype, {
                        isBufferAttribute: !0,
                        onUploadCallback: function () {},
                        setUsage: function (e) {
                          return (this.usage = e), this
                        },
                        copy: function (e) {
                          return (
                            (this.name = e.name),
                            (this.array = new e.array.constructor(e.array)),
                            (this.itemSize = e.itemSize),
                            (this.count = e.count),
                            (this.normalized = e.normalized),
                            (this.usage = e.usage),
                            this
                          )
                        },
                        copyAt: function (e, t, n) {
                          ;(e *= this.itemSize), (n *= t.itemSize)
                          for (var r = 0, i = this.itemSize; r < i; r++)
                            this.array[e + r] = t.array[n + r]
                          return this
                        },
                        copyArray: function (e) {
                          return this.array.set(e), this
                        },
                        copyColorsArray: function (e) {
                          for (var t = this.array, n = 0, r = 0, i = e.length; r < i; r++) {
                            var o = e[r]
                            void 0 === o &&
                              (console.warn(
                                'THREE.BufferAttribute.copyColorsArray(): color is undefined',
                                r,
                              ),
                              (o = new Li())),
                              (t[n++] = o.r),
                              (t[n++] = o.g),
                              (t[n++] = o.b)
                          }
                          return this
                        },
                        copyVector2sArray: function (e) {
                          for (var t = this.array, n = 0, r = 0, i = e.length; r < i; r++) {
                            var o = e[r]
                            void 0 === o &&
                              (console.warn(
                                'THREE.BufferAttribute.copyVector2sArray(): vector is undefined',
                                r,
                              ),
                              (o = new Jn())),
                              (t[n++] = o.x),
                              (t[n++] = o.y)
                          }
                          return this
                        },
                        copyVector3sArray: function (e) {
                          for (var t = this.array, n = 0, r = 0, i = e.length; r < i; r++) {
                            var o = e[r]
                            void 0 === o &&
                              (console.warn(
                                'THREE.BufferAttribute.copyVector3sArray(): vector is undefined',
                                r,
                              ),
                              (o = new lr())),
                              (t[n++] = o.x),
                              (t[n++] = o.y),
                              (t[n++] = o.z)
                          }
                          return this
                        },
                        copyVector4sArray: function (e) {
                          for (var t = this.array, n = 0, r = 0, i = e.length; r < i; r++) {
                            var o = e[r]
                            void 0 === o &&
                              (console.warn(
                                'THREE.BufferAttribute.copyVector4sArray(): vector is undefined',
                                r,
                              ),
                              (o = new ir())),
                              (t[n++] = o.x),
                              (t[n++] = o.y),
                              (t[n++] = o.z),
                              (t[n++] = o.w)
                          }
                          return this
                        },
                        applyMatrix3: function (e) {
                          if (2 === this.itemSize)
                            for (var t = 0, n = this.count; t < n; t++)
                              Bi.fromBufferAttribute(this, t),
                                Bi.applyMatrix3(e),
                                this.setXY(t, Bi.x, Bi.y)
                          else if (3 === this.itemSize)
                            for (var r = 0, i = this.count; r < i; r++)
                              Ii.fromBufferAttribute(this, r),
                                Ii.applyMatrix3(e),
                                this.setXYZ(r, Ii.x, Ii.y, Ii.z)
                          return this
                        },
                        applyMatrix4: function (e) {
                          for (var t = 0, n = this.count; t < n; t++)
                            (Ii.x = this.getX(t)),
                              (Ii.y = this.getY(t)),
                              (Ii.z = this.getZ(t)),
                              Ii.applyMatrix4(e),
                              this.setXYZ(t, Ii.x, Ii.y, Ii.z)
                          return this
                        },
                        applyNormalMatrix: function (e) {
                          for (var t = 0, n = this.count; t < n; t++)
                            (Ii.x = this.getX(t)),
                              (Ii.y = this.getY(t)),
                              (Ii.z = this.getZ(t)),
                              Ii.applyNormalMatrix(e),
                              this.setXYZ(t, Ii.x, Ii.y, Ii.z)
                          return this
                        },
                        transformDirection: function (e) {
                          for (var t = 0, n = this.count; t < n; t++)
                            (Ii.x = this.getX(t)),
                              (Ii.y = this.getY(t)),
                              (Ii.z = this.getZ(t)),
                              Ii.transformDirection(e),
                              this.setXYZ(t, Ii.x, Ii.y, Ii.z)
                          return this
                        },
                        set: function (e, t) {
                          return void 0 === t && (t = 0), this.array.set(e, t), this
                        },
                        getX: function (e) {
                          return this.array[e * this.itemSize]
                        },
                        setX: function (e, t) {
                          return (this.array[e * this.itemSize] = t), this
                        },
                        getY: function (e) {
                          return this.array[e * this.itemSize + 1]
                        },
                        setY: function (e, t) {
                          return (this.array[e * this.itemSize + 1] = t), this
                        },
                        getZ: function (e) {
                          return this.array[e * this.itemSize + 2]
                        },
                        setZ: function (e, t) {
                          return (this.array[e * this.itemSize + 2] = t), this
                        },
                        getW: function (e) {
                          return this.array[e * this.itemSize + 3]
                        },
                        setW: function (e, t) {
                          return (this.array[e * this.itemSize + 3] = t), this
                        },
                        setXY: function (e, t, n) {
                          return (
                            (e *= this.itemSize),
                            (this.array[e + 0] = t),
                            (this.array[e + 1] = n),
                            this
                          )
                        },
                        setXYZ: function (e, t, n, r) {
                          return (
                            (e *= this.itemSize),
                            (this.array[e + 0] = t),
                            (this.array[e + 1] = n),
                            (this.array[e + 2] = r),
                            this
                          )
                        },
                        setXYZW: function (e, t, n, r, i) {
                          return (
                            (e *= this.itemSize),
                            (this.array[e + 0] = t),
                            (this.array[e + 1] = n),
                            (this.array[e + 2] = r),
                            (this.array[e + 3] = i),
                            this
                          )
                        },
                        onUpload: function (e) {
                          return (this.onUploadCallback = e), this
                        },
                        clone: function () {
                          return new this.constructor(this.array, this.itemSize).copy(this)
                        },
                        toJSON: function () {
                          return {
                            itemSize: this.itemSize,
                            type: this.array.constructor.name,
                            array: Array.prototype.slice.call(this.array),
                            normalized: this.normalized,
                          }
                        },
                      }),
                      (ki.prototype = Object.create(Fi.prototype)),
                      (ki.prototype.constructor = ki),
                      (Ni.prototype = Object.create(Fi.prototype)),
                      (Ni.prototype.constructor = Ni),
                      (Ui.prototype = Object.create(Fi.prototype)),
                      (Ui.prototype.constructor = Ui),
                      (Hi.prototype = Object.create(Fi.prototype)),
                      (Hi.prototype.constructor = Hi),
                      (Gi.prototype = Object.create(Fi.prototype)),
                      (Gi.prototype.constructor = Gi),
                      (zi.prototype = Object.create(Fi.prototype)),
                      (zi.prototype.constructor = zi),
                      (ji.prototype = Object.create(Fi.prototype)),
                      (ji.prototype.constructor = ji),
                      (Vi.prototype = Object.create(Fi.prototype)),
                      (Vi.prototype.constructor = Vi),
                      (Vi.prototype.isFloat16BufferAttribute = !0),
                      (Wi.prototype = Object.create(Fi.prototype)),
                      (Wi.prototype.constructor = Wi),
                      (qi.prototype = Object.create(Fi.prototype)),
                      (qi.prototype.constructor = qi)
                    var Yi = {
                      Int8Array: Int8Array,
                      Uint8Array: Uint8Array,
                      Uint8ClampedArray:
                        'undefined' !== typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array,
                      Int16Array: Int16Array,
                      Uint16Array: Uint16Array,
                      Int32Array: Int32Array,
                      Uint32Array: Uint32Array,
                      Float32Array: Float32Array,
                      Float64Array: Float64Array,
                    }
                    function Qi(e, t) {
                      return new Yi[e](t)
                    }
                    var Zi = 0,
                      Ki = new Fr(),
                      Ji = new si(),
                      $i = new lr(),
                      eo = new hr(),
                      to = new hr(),
                      no = new lr()
                    function ro() {
                      Object.defineProperty(this, 'id', { value: Zi++ }),
                        (this.uuid = Kn.generateUUID()),
                        (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 = {})
                    }
                    ro.prototype = Object.assign(Object.create(qn.prototype), {
                      constructor: ro,
                      isBufferGeometry: !0,
                      getIndex: function () {
                        return this.index
                      },
                      setIndex: function (e) {
                        return (
                          Array.isArray(e)
                            ? (this.index = new (Xi(e) > 65535 ? ji : Gi)(e, 1))
                            : (this.index = e),
                          this
                        )
                      },
                      getAttribute: function (e) {
                        return this.attributes[e]
                      },
                      setAttribute: function (e, t) {
                        return (this.attributes[e] = t), this
                      },
                      deleteAttribute: function (e) {
                        return delete this.attributes[e], this
                      },
                      hasAttribute: function (e) {
                        return void 0 !== this.attributes[e]
                      },
                      addGroup: function (e, t, n) {
                        void 0 === n && (n = 0),
                          this.groups.push({ start: e, count: t, materialIndex: n })
                      },
                      clearGroups: function () {
                        this.groups = []
                      },
                      setDrawRange: function (e, t) {
                        ;(this.drawRange.start = e), (this.drawRange.count = t)
                      },
                      applyMatrix4: function (e) {
                        var t = this.attributes.position
                        void 0 !== t && (t.applyMatrix4(e), (t.needsUpdate = !0))
                        var n = this.attributes.normal
                        if (void 0 !== n) {
                          var r = new $n().getNormalMatrix(e)
                          n.applyNormalMatrix(r), (n.needsUpdate = !0)
                        }
                        var i = this.attributes.tangent
                        return (
                          void 0 !== i && (i.transformDirection(e), (i.needsUpdate = !0)),
                          null !== this.boundingBox && this.computeBoundingBox(),
                          null !== this.boundingSphere && this.computeBoundingSphere(),
                          this
                        )
                      },
                      rotateX: function (e) {
                        return Ki.makeRotationX(e), this.applyMatrix4(Ki), this
                      },
                      rotateY: function (e) {
                        return Ki.makeRotationY(e), this.applyMatrix4(Ki), this
                      },
                      rotateZ: function (e) {
                        return Ki.makeRotationZ(e), this.applyMatrix4(Ki), this
                      },
                      translate: function (e, t, n) {
                        return Ki.makeTranslation(e, t, n), this.applyMatrix4(Ki), this
                      },
                      scale: function (e, t, n) {
                        return Ki.makeScale(e, t, n), this.applyMatrix4(Ki), this
                      },
                      lookAt: function (e) {
                        return Ji.lookAt(e), Ji.updateMatrix(), this.applyMatrix4(Ji.matrix), this
                      },
                      center: function () {
                        return (
                          this.computeBoundingBox(),
                          this.boundingBox.getCenter($i).negate(),
                          this.translate($i.x, $i.y, $i.z),
                          this
                        )
                      },
                      setFromPoints: function (e) {
                        for (var t = [], n = 0, r = e.length; n < r; n++) {
                          var i = e[n]
                          t.push(i.x, i.y, i.z || 0)
                        }
                        return this.setAttribute('position', new Wi(t, 3)), this
                      },
                      computeBoundingBox: function () {
                        null === this.boundingBox && (this.boundingBox = new hr())
                        var e = this.attributes.position,
                          t = this.morphAttributes.position
                        if (e && e.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 lr(-1 / 0, -1 / 0, -1 / 0),
                              new lr(1 / 0, 1 / 0, 1 / 0),
                            )
                          )
                        if (void 0 !== e) {
                          if ((this.boundingBox.setFromBufferAttribute(e), t))
                            for (var n = 0, r = t.length; n < r; n++) {
                              var i = t[n]
                              eo.setFromBufferAttribute(i),
                                this.morphTargetsRelative
                                  ? (no.addVectors(this.boundingBox.min, eo.min),
                                    this.boundingBox.expandByPoint(no),
                                    no.addVectors(this.boundingBox.max, eo.max),
                                    this.boundingBox.expandByPoint(no))
                                  : (this.boundingBox.expandByPoint(eo.min),
                                    this.boundingBox.expandByPoint(eo.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: function () {
                        null === this.boundingSphere && (this.boundingSphere = new Sr())
                        var e = this.attributes.position,
                          t = this.morphAttributes.position
                        if (e && e.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 lr(), 1 / 0)
                          )
                        if (e) {
                          var n = this.boundingSphere.center
                          if ((eo.setFromBufferAttribute(e), t))
                            for (var r = 0, i = t.length; r < i; r++) {
                              var o = t[r]
                              to.setFromBufferAttribute(o),
                                this.morphTargetsRelative
                                  ? (no.addVectors(eo.min, to.min),
                                    eo.expandByPoint(no),
                                    no.addVectors(eo.max, to.max),
                                    eo.expandByPoint(no))
                                  : (eo.expandByPoint(to.min), eo.expandByPoint(to.max))
                            }
                          eo.getCenter(n)
                          for (var a = 0, s = 0, l = e.count; s < l; s++)
                            no.fromBufferAttribute(e, s), (a = Math.max(a, n.distanceToSquared(no)))
                          if (t)
                            for (var c = 0, u = t.length; c < u; c++)
                              for (
                                var h = t[c], d = this.morphTargetsRelative, p = 0, f = h.count;
                                p < f;
                                p++
                              )
                                no.fromBufferAttribute(h, p),
                                  d && ($i.fromBufferAttribute(e, p), no.add($i)),
                                  (a = Math.max(a, n.distanceToSquared(no)))
                          ;(this.boundingSphere.radius = Math.sqrt(a)),
                            isNaN(this.boundingSphere.radius) &&
                              console.error(
                                'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',
                                this,
                              )
                        }
                      },
                      computeFaceNormals: function () {},
                      computeTangents: function () {
                        var e = this.index,
                          t = this.attributes
                        if (
                          null !== e &&
                          void 0 !== t.position &&
                          void 0 !== t.normal &&
                          void 0 !== t.uv
                        ) {
                          var n = e.array,
                            r = t.position.array,
                            i = t.normal.array,
                            o = t.uv.array,
                            a = r.length / 3
                          void 0 === t.tangent &&
                            this.setAttribute('tangent', new Fi(new Float32Array(4 * a), 4))
                          for (var s = t.tangent.array, l = [], c = [], u = 0; u < a; u++)
                            (l[u] = new lr()), (c[u] = new lr())
                          var h = new lr(),
                            d = new lr(),
                            p = new lr(),
                            f = new Jn(),
                            m = new Jn(),
                            v = new Jn(),
                            g = new lr(),
                            y = new lr(),
                            b = this.groups
                          0 === b.length && (b = [{ start: 0, count: n.length }])
                          for (var A = 0, w = b.length; A < w; ++A)
                            for (var x = b[A], E = x.start, M = E, _ = E + x.count; M < _; M += 3)
                              F(n[M + 0], n[M + 1], n[M + 2])
                          for (
                            var T = new lr(),
                              S = new lr(),
                              C = new lr(),
                              L = new lr(),
                              R = 0,
                              P = b.length;
                            R < P;
                            ++R
                          )
                            for (var D = b[R], O = D.start, I = O, B = O + D.count; I < B; I += 3)
                              k(n[I + 0]), k(n[I + 1]), k(n[I + 2])
                        } else
                          console.error(
                            'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)',
                          )
                        function F(e, t, n) {
                          h.fromArray(r, 3 * e),
                            d.fromArray(r, 3 * t),
                            p.fromArray(r, 3 * n),
                            f.fromArray(o, 2 * e),
                            m.fromArray(o, 2 * t),
                            v.fromArray(o, 2 * n),
                            d.sub(h),
                            p.sub(h),
                            m.sub(f),
                            v.sub(f)
                          var i = 1 / (m.x * v.y - v.x * m.y)
                          isFinite(i) &&
                            (g
                              .copy(d)
                              .multiplyScalar(v.y)
                              .addScaledVector(p, -m.y)
                              .multiplyScalar(i),
                            y
                              .copy(p)
                              .multiplyScalar(m.x)
                              .addScaledVector(d, -v.x)
                              .multiplyScalar(i),
                            l[e].add(g),
                            l[t].add(g),
                            l[n].add(g),
                            c[e].add(y),
                            c[t].add(y),
                            c[n].add(y))
                        }
                        function k(e) {
                          C.fromArray(i, 3 * e), L.copy(C)
                          var t = l[e]
                          T.copy(t),
                            T.sub(C.multiplyScalar(C.dot(t))).normalize(),
                            S.crossVectors(L, t)
                          var n = S.dot(c[e]) < 0 ? -1 : 1
                          ;(s[4 * e] = T.x),
                            (s[4 * e + 1] = T.y),
                            (s[4 * e + 2] = T.z),
                            (s[4 * e + 3] = n)
                        }
                      },
                      computeVertexNormals: function () {
                        var e = this.index,
                          t = this.getAttribute('position')
                        if (void 0 !== t) {
                          var n = this.getAttribute('normal')
                          if (void 0 === n)
                            (n = new Fi(new Float32Array(3 * t.count), 3)),
                              this.setAttribute('normal', n)
                          else for (var r = 0, i = n.count; r < i; r++) n.setXYZ(r, 0, 0, 0)
                          var o = new lr(),
                            a = new lr(),
                            s = new lr(),
                            l = new lr(),
                            c = new lr(),
                            u = new lr(),
                            h = new lr(),
                            d = new lr()
                          if (e)
                            for (var p = 0, f = e.count; p < f; p += 3) {
                              var m = e.getX(p + 0),
                                v = e.getX(p + 1),
                                g = e.getX(p + 2)
                              o.fromBufferAttribute(t, m),
                                a.fromBufferAttribute(t, v),
                                s.fromBufferAttribute(t, g),
                                h.subVectors(s, a),
                                d.subVectors(o, a),
                                h.cross(d),
                                l.fromBufferAttribute(n, m),
                                c.fromBufferAttribute(n, v),
                                u.fromBufferAttribute(n, g),
                                l.add(h),
                                c.add(h),
                                u.add(h),
                                n.setXYZ(m, l.x, l.y, l.z),
                                n.setXYZ(v, c.x, c.y, c.z),
                                n.setXYZ(g, u.x, u.y, u.z)
                            }
                          else
                            for (var y = 0, b = t.count; y < b; y += 3)
                              o.fromBufferAttribute(t, y + 0),
                                a.fromBufferAttribute(t, y + 1),
                                s.fromBufferAttribute(t, y + 2),
                                h.subVectors(s, a),
                                d.subVectors(o, a),
                                h.cross(d),
                                n.setXYZ(y + 0, h.x, h.y, h.z),
                                n.setXYZ(y + 1, h.x, h.y, h.z),
                                n.setXYZ(y + 2, h.x, h.y, h.z)
                          this.normalizeNormals(), (n.needsUpdate = !0)
                        }
                      },
                      merge: function (e, t) {
                        if (e && e.isBufferGeometry) {
                          void 0 === t &&
                            ((t = 0),
                            console.warn(
                              'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.',
                            ))
                          var n = this.attributes
                          for (var r in n)
                            if (void 0 !== e.attributes[r])
                              for (
                                var i = n[r].array,
                                  o = e.attributes[r],
                                  a = o.array,
                                  s = o.itemSize * t,
                                  l = Math.min(a.length, i.length - s),
                                  c = 0,
                                  u = s;
                                c < l;
                                c++, u++
                              )
                                i[u] = a[c]
                          return this
                        }
                        console.error(
                          'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.',
                          e,
                        )
                      },
                      normalizeNormals: function () {
                        for (var e = this.attributes.normal, t = 0, n = e.count; t < n; t++)
                          no.fromBufferAttribute(e, t),
                            no.normalize(),
                            e.setXYZ(t, no.x, no.y, no.z)
                      },
                      toNonIndexed: function () {
                        function e(e, t) {
                          for (
                            var n = e.array,
                              r = e.itemSize,
                              i = e.normalized,
                              o = new n.constructor(t.length * r),
                              a = 0,
                              s = 0,
                              l = 0,
                              c = t.length;
                            l < c;
                            l++
                          ) {
                            a = t[l] * r
                            for (var u = 0; u < r; u++) o[s++] = n[a++]
                          }
                          return new Fi(o, r, i)
                        }
                        if (null === this.index)
                          return (
                            console.warn(
                              'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.',
                            ),
                            this
                          )
                        var t = new ro(),
                          n = this.index.array,
                          r = this.attributes
                        for (var i in r) {
                          var o = e(r[i], n)
                          t.setAttribute(i, o)
                        }
                        var a = this.morphAttributes
                        for (var s in a) {
                          for (var l = [], c = a[s], u = 0, h = c.length; u < h; u++) {
                            var d = e(c[u], n)
                            l.push(d)
                          }
                          t.morphAttributes[s] = l
                        }
                        t.morphTargetsRelative = this.morphTargetsRelative
                        for (var p = this.groups, f = 0, m = p.length; f < m; f++) {
                          var v = p[f]
                          t.addGroup(v.start, v.count, v.materialIndex)
                        }
                        return t
                      },
                      toJSON: function () {
                        var e = {
                          metadata: {
                            version: 4.5,
                            type: 'BufferGeometry',
                            generator: 'BufferGeometry.toJSON',
                          },
                        }
                        if (
                          ((e.uuid = this.uuid),
                          (e.type = this.type),
                          '' !== this.name && (e.name = this.name),
                          Object.keys(this.userData).length > 0 && (e.userData = this.userData),
                          void 0 !== this.parameters)
                        ) {
                          var t = this.parameters
                          for (var n in t) void 0 !== t[n] && (e[n] = t[n])
                          return e
                        }
                        e.data = { attributes: {} }
                        var r = this.index
                        null !== r &&
                          (e.data.index = {
                            type: r.array.constructor.name,
                            array: Array.prototype.slice.call(r.array),
                          })
                        var i = this.attributes
                        for (var o in i) {
                          var a = i[o],
                            s = a.toJSON(e.data)
                          '' !== a.name && (s.name = a.name), (e.data.attributes[o] = s)
                        }
                        var l = {},
                          c = !1
                        for (var u in this.morphAttributes) {
                          for (
                            var h = this.morphAttributes[u], d = [], p = 0, f = h.length;
                            p < f;
                            p++
                          ) {
                            var m = h[p],
                              v = m.toJSON(e.data)
                            '' !== m.name && (v.name = m.name), d.push(v)
                          }
                          d.length > 0 && ((l[u] = d), (c = !0))
                        }
                        c &&
                          ((e.data.morphAttributes = l),
                          (e.data.morphTargetsRelative = this.morphTargetsRelative))
                        var g = this.groups
                        g.length > 0 && (e.data.groups = JSON.parse(JSON.stringify(g)))
                        var y = this.boundingSphere
                        return (
                          null !== y &&
                            (e.data.boundingSphere = {
                              center: y.center.toArray(),
                              radius: y.radius,
                            }),
                          e
                        )
                      },
                      clone: function () {
                        return new ro().copy(this)
                      },
                      copy: function (e) {
                        ;(this.index = null),
                          (this.attributes = {}),
                          (this.morphAttributes = {}),
                          (this.groups = []),
                          (this.boundingBox = null),
                          (this.boundingSphere = null)
                        var t = {}
                        this.name = e.name
                        var n = e.index
                        null !== n && this.setIndex(n.clone(t))
                        var r = e.attributes
                        for (var i in r) {
                          var o = r[i]
                          this.setAttribute(i, o.clone(t))
                        }
                        var a = e.morphAttributes
                        for (var s in a) {
                          for (var l = [], c = a[s], u = 0, h = c.length; u < h; u++)
                            l.push(c[u].clone(t))
                          this.morphAttributes[s] = l
                        }
                        this.morphTargetsRelative = e.morphTargetsRelative
                        for (var d = e.groups, p = 0, f = d.length; p < f; p++) {
                          var m = d[p]
                          this.addGroup(m.start, m.count, m.materialIndex)
                        }
                        var v = e.boundingBox
                        null !== v && (this.boundingBox = v.clone())
                        var g = e.boundingSphere
                        return (
                          null !== g && (this.boundingSphere = g.clone()),
                          (this.drawRange.start = e.drawRange.start),
                          (this.drawRange.count = e.drawRange.count),
                          (this.userData = e.userData),
                          this
                        )
                      },
                      dispose: function () {
                        this.dispatchEvent({ type: 'dispose' })
                      },
                    })
                    var io = new Fr(),
                      oo = new Br(),
                      ao = new Sr(),
                      so = new lr(),
                      lo = new lr(),
                      co = new lr(),
                      uo = new lr(),
                      ho = new lr(),
                      po = new lr(),
                      fo = new lr(),
                      mo = new lr(),
                      vo = new lr(),
                      go = new Jn(),
                      yo = new Jn(),
                      bo = new Jn(),
                      Ao = new lr(),
                      wo = new lr()
                    function xo(e, t) {
                      void 0 === e && (e = new ro()),
                        void 0 === t && (t = new Oi()),
                        si.call(this),
                        (this.type = 'Mesh'),
                        (this.geometry = e),
                        (this.material = t),
                        this.updateMorphTargets()
                    }
                    function Eo(e, t, n, r, i, o, a, s) {
                      if (
                        null ===
                        (t.side === v
                          ? r.intersectTriangle(a, o, i, !0, s)
                          : r.intersectTriangle(i, o, a, t.side !== g, s))
                      )
                        return null
                      wo.copy(s), wo.applyMatrix4(e.matrixWorld)
                      var l = n.ray.origin.distanceTo(wo)
                      return l < n.near || l > n.far
                        ? null
                        : { distance: l, point: wo.clone(), object: e }
                    }
                    function Mo(e, t, n, r, i, o, a, s, l, c, u, h) {
                      so.fromBufferAttribute(i, c),
                        lo.fromBufferAttribute(i, u),
                        co.fromBufferAttribute(i, h)
                      var d = e.morphTargetInfluences
                      if (t.morphTargets && o && d) {
                        fo.set(0, 0, 0), mo.set(0, 0, 0), vo.set(0, 0, 0)
                        for (var p = 0, f = o.length; p < f; p++) {
                          var m = d[p],
                            v = o[p]
                          0 !== m &&
                            (uo.fromBufferAttribute(v, c),
                            ho.fromBufferAttribute(v, u),
                            po.fromBufferAttribute(v, h),
                            a
                              ? (fo.addScaledVector(uo, m),
                                mo.addScaledVector(ho, m),
                                vo.addScaledVector(po, m))
                              : (fo.addScaledVector(uo.sub(so), m),
                                mo.addScaledVector(ho.sub(lo), m),
                                vo.addScaledVector(po.sub(co), m)))
                        }
                        so.add(fo), lo.add(mo), co.add(vo)
                      }
                      e.isSkinnedMesh &&
                        (e.boneTransform(c, so), e.boneTransform(u, lo), e.boneTransform(h, co))
                      var g = Eo(e, t, n, r, so, lo, co, Ao)
                      if (g) {
                        s &&
                          (go.fromBufferAttribute(s, c),
                          yo.fromBufferAttribute(s, u),
                          bo.fromBufferAttribute(s, h),
                          (g.uv = xi.getUV(Ao, so, lo, co, go, yo, bo, new Jn()))),
                          l &&
                            (go.fromBufferAttribute(l, c),
                            yo.fromBufferAttribute(l, u),
                            bo.fromBufferAttribute(l, h),
                            (g.uv2 = xi.getUV(Ao, so, lo, co, go, yo, bo, new Jn())))
                        var y = new Ri(c, u, h)
                        xi.getNormal(so, lo, co, y.normal), (g.face = y)
                      }
                      return g
                    }
                    xo.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: xo,
                      isMesh: !0,
                      copy: function (e) {
                        return (
                          si.prototype.copy.call(this, e),
                          void 0 !== e.morphTargetInfluences &&
                            (this.morphTargetInfluences = e.morphTargetInfluences.slice()),
                          void 0 !== e.morphTargetDictionary &&
                            (this.morphTargetDictionary = Object.assign(
                              {},
                              e.morphTargetDictionary,
                            )),
                          (this.material = e.material),
                          (this.geometry = e.geometry),
                          this
                        )
                      },
                      updateMorphTargets: function () {
                        var e = this.geometry
                        if (e.isBufferGeometry) {
                          var t = e.morphAttributes,
                            n = Object.keys(t)
                          if (n.length > 0) {
                            var r = t[n[0]]
                            if (void 0 !== r) {
                              ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {})
                              for (var i = 0, o = r.length; i < o; i++) {
                                var a = r[i].name || String(i)
                                this.morphTargetInfluences.push(0),
                                  (this.morphTargetDictionary[a] = i)
                              }
                            }
                          }
                        } else {
                          var s = e.morphTargets
                          void 0 !== s &&
                            s.length > 0 &&
                            console.error(
                              'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        }
                      },
                      raycast: function (e, t) {
                        var n,
                          r = this.geometry,
                          i = this.material,
                          o = this.matrixWorld
                        if (
                          void 0 !== i &&
                          (null === r.boundingSphere && r.computeBoundingSphere(),
                          ao.copy(r.boundingSphere),
                          ao.applyMatrix4(o),
                          !1 !== e.ray.intersectsSphere(ao) &&
                            (io.copy(o).invert(),
                            oo.copy(e.ray).applyMatrix4(io),
                            null === r.boundingBox || !1 !== oo.intersectsBox(r.boundingBox)))
                        )
                          if (r.isBufferGeometry) {
                            var a = r.index,
                              s = r.attributes.position,
                              l = r.morphAttributes.position,
                              c = r.morphTargetsRelative,
                              u = r.attributes.uv,
                              h = r.attributes.uv2,
                              d = r.groups,
                              p = r.drawRange
                            if (null !== a)
                              if (Array.isArray(i))
                                for (var f = 0, m = d.length; f < m; f++)
                                  for (
                                    var v = d[f],
                                      g = i[v.materialIndex],
                                      y = Math.max(v.start, p.start),
                                      b = Math.min(v.start + v.count, p.start + p.count);
                                    y < b;
                                    y += 3
                                  ) {
                                    var A = a.getX(y),
                                      w = a.getX(y + 1),
                                      x = a.getX(y + 2)
                                    ;(n = Mo(this, g, e, oo, s, l, c, u, h, A, w, x)) &&
                                      ((n.faceIndex = Math.floor(y / 3)),
                                      (n.face.materialIndex = v.materialIndex),
                                      t.push(n))
                                  }
                              else
                                for (
                                  var E = Math.max(0, p.start),
                                    M = Math.min(a.count, p.start + p.count);
                                  E < M;
                                  E += 3
                                ) {
                                  var _ = a.getX(E),
                                    T = a.getX(E + 1),
                                    S = a.getX(E + 2)
                                  ;(n = Mo(this, i, e, oo, s, l, c, u, h, _, T, S)) &&
                                    ((n.faceIndex = Math.floor(E / 3)), t.push(n))
                                }
                            else if (void 0 !== s)
                              if (Array.isArray(i))
                                for (var C = 0, L = d.length; C < L; C++)
                                  for (
                                    var R = d[C],
                                      P = i[R.materialIndex],
                                      D = Math.max(R.start, p.start),
                                      O = Math.min(R.start + R.count, p.start + p.count);
                                    D < O;
                                    D += 3
                                  )
                                    (n = Mo(this, P, e, oo, s, l, c, u, h, D, D + 1, D + 2)) &&
                                      ((n.faceIndex = Math.floor(D / 3)),
                                      (n.face.materialIndex = R.materialIndex),
                                      t.push(n))
                              else
                                for (
                                  var I = Math.max(0, p.start),
                                    B = Math.min(s.count, p.start + p.count);
                                  I < B;
                                  I += 3
                                )
                                  (n = Mo(this, i, e, oo, s, l, c, u, h, I, I + 1, I + 2)) &&
                                    ((n.faceIndex = Math.floor(I / 3)), t.push(n))
                          } else
                            r.isGeometry &&
                              console.error(
                                'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                              )
                      },
                    })
                    var _o = (function (e) {
                      function t(t, n, r, i, o, a) {
                        var s
                        void 0 === t && (t = 1),
                          void 0 === n && (n = 1),
                          void 0 === r && (r = 1),
                          void 0 === i && (i = 1),
                          void 0 === o && (o = 1),
                          void 0 === a && (a = 1),
                          ((s = e.call(this) || this).type = 'BoxGeometry'),
                          (s.parameters = {
                            width: t,
                            height: n,
                            depth: r,
                            widthSegments: i,
                            heightSegments: o,
                            depthSegments: a,
                          })
                        var l = zn(s)
                        ;(i = Math.floor(i)), (o = Math.floor(o)), (a = Math.floor(a))
                        var c = [],
                          u = [],
                          h = [],
                          d = [],
                          p = 0,
                          f = 0
                        function m(e, t, n, r, i, o, a, s, m, v, g) {
                          for (
                            var y = o / m,
                              b = a / v,
                              A = o / 2,
                              w = a / 2,
                              x = s / 2,
                              E = m + 1,
                              M = v + 1,
                              _ = 0,
                              T = 0,
                              S = new lr(),
                              C = 0;
                            C < M;
                            C++
                          )
                            for (var L = C * b - w, R = 0; R < E; R++) {
                              var P = R * y - A
                              ;(S[e] = P * r),
                                (S[t] = L * i),
                                (S[n] = x),
                                u.push(S.x, S.y, S.z),
                                (S[e] = 0),
                                (S[t] = 0),
                                (S[n] = s > 0 ? 1 : -1),
                                h.push(S.x, S.y, S.z),
                                d.push(R / m),
                                d.push(1 - C / v),
                                (_ += 1)
                            }
                          for (var D = 0; D < v; D++)
                            for (var O = 0; O < m; O++) {
                              var I = p + O + E * D,
                                B = p + O + E * (D + 1),
                                F = p + (O + 1) + E * (D + 1),
                                k = p + (O + 1) + E * D
                              c.push(I, B, k), c.push(B, F, k), (T += 6)
                            }
                          l.addGroup(f, T, g), (f += T), (p += _)
                        }
                        return (
                          m('z', 'y', 'x', -1, -1, r, n, t, a, o, 0),
                          m('z', 'y', 'x', 1, -1, r, n, -t, a, o, 1),
                          m('x', 'z', 'y', 1, 1, t, r, n, i, a, 2),
                          m('x', 'z', 'y', 1, -1, t, r, -n, i, a, 3),
                          m('x', 'y', 'z', 1, -1, t, n, r, i, o, 4),
                          m('x', 'y', 'z', -1, -1, t, n, -r, i, o, 5),
                          s.setIndex(c),
                          s.setAttribute('position', new Wi(u, 3)),
                          s.setAttribute('normal', new Wi(h, 3)),
                          s.setAttribute('uv', new Wi(d, 2)),
                          s
                        )
                      }
                      return Gn(t, e), t
                    })(ro)
                    function To(e) {
                      var t = {}
                      for (var n in e)
                        for (var r in ((t[n] = {}), e[n])) {
                          var i = e[n][r]
                          i &&
                          (i.isColor ||
                            i.isMatrix3 ||
                            i.isMatrix4 ||
                            i.isVector2 ||
                            i.isVector3 ||
                            i.isVector4 ||
                            i.isTexture)
                            ? (t[n][r] = i.clone())
                            : Array.isArray(i)
                            ? (t[n][r] = i.slice())
                            : (t[n][r] = i)
                        }
                      return t
                    }
                    function So(e) {
                      for (var t = {}, n = 0; n < e.length; n++) {
                        var r = To(e[n])
                        for (var i in r) t[i] = r[i]
                      }
                      return t
                    }
                    var Co = { clone: To, merge: So },
                      Lo =
                        'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}',
                      Ro = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'
                    function Po(e) {
                      Di.call(this),
                        (this.type = 'ShaderMaterial'),
                        (this.defines = {}),
                        (this.uniforms = {}),
                        (this.vertexShader = Lo),
                        (this.fragmentShader = Ro),
                        (this.linewidth = 1),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.fog = !1),
                        (this.lights = !1),
                        (this.clipping = !1),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !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 !== e &&
                          (void 0 !== e.attributes &&
                            console.error(
                              'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.',
                            ),
                          this.setValues(e))
                    }
                    function Do() {
                      si.call(this),
                        (this.type = 'Camera'),
                        (this.matrixWorldInverse = new Fr()),
                        (this.projectionMatrix = new Fr()),
                        (this.projectionMatrixInverse = new Fr())
                    }
                    function Oo(e, t, n, r) {
                      void 0 === e && (e = 50),
                        void 0 === t && (t = 1),
                        void 0 === n && (n = 0.1),
                        void 0 === r && (r = 2e3),
                        Do.call(this),
                        (this.type = 'PerspectiveCamera'),
                        (this.fov = e),
                        (this.zoom = 1),
                        (this.near = n),
                        (this.far = r),
                        (this.focus = 10),
                        (this.aspect = t),
                        (this.view = null),
                        (this.filmGauge = 35),
                        (this.filmOffset = 0),
                        this.updateProjectionMatrix()
                    }
                    ;(Po.prototype = Object.create(Di.prototype)),
                      (Po.prototype.constructor = Po),
                      (Po.prototype.isShaderMaterial = !0),
                      (Po.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          (this.fragmentShader = e.fragmentShader),
                          (this.vertexShader = e.vertexShader),
                          (this.uniforms = To(e.uniforms)),
                          (this.defines = Object.assign({}, e.defines)),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.lights = e.lights),
                          (this.clipping = e.clipping),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          (this.extensions = Object.assign({}, e.extensions)),
                          (this.glslVersion = e.glslVersion),
                          this
                        )
                      }),
                      (Po.prototype.toJSON = function (e) {
                        var t = Di.prototype.toJSON.call(this, e)
                        for (var n in ((t.glslVersion = this.glslVersion),
                        (t.uniforms = {}),
                        this.uniforms)) {
                          var r = this.uniforms[n].value
                          r && r.isTexture
                            ? (t.uniforms[n] = { type: 't', value: r.toJSON(e).uuid })
                            : r && r.isColor
                            ? (t.uniforms[n] = { type: 'c', value: r.getHex() })
                            : r && r.isVector2
                            ? (t.uniforms[n] = { type: 'v2', value: r.toArray() })
                            : r && r.isVector3
                            ? (t.uniforms[n] = { type: 'v3', value: r.toArray() })
                            : r && r.isVector4
                            ? (t.uniforms[n] = { type: 'v4', value: r.toArray() })
                            : r && r.isMatrix3
                            ? (t.uniforms[n] = { type: 'm3', value: r.toArray() })
                            : r && r.isMatrix4
                            ? (t.uniforms[n] = { type: 'm4', value: r.toArray() })
                            : (t.uniforms[n] = { value: r })
                        }
                        Object.keys(this.defines).length > 0 && (t.defines = this.defines),
                          (t.vertexShader = this.vertexShader),
                          (t.fragmentShader = this.fragmentShader)
                        var i = {}
                        for (var o in this.extensions) !0 === this.extensions[o] && (i[o] = !0)
                        return Object.keys(i).length > 0 && (t.extensions = i), t
                      }),
                      (Do.prototype = Object.assign(Object.create(si.prototype), {
                        constructor: Do,
                        isCamera: !0,
                        copy: function (e, t) {
                          return (
                            si.prototype.copy.call(this, e, t),
                            this.matrixWorldInverse.copy(e.matrixWorldInverse),
                            this.projectionMatrix.copy(e.projectionMatrix),
                            this.projectionMatrixInverse.copy(e.projectionMatrixInverse),
                            this
                          )
                        },
                        getWorldDirection: function (e) {
                          void 0 === e &&
                            (console.warn(
                              'THREE.Camera: .getWorldDirection() target is now required',
                            ),
                            (e = new lr())),
                            this.updateWorldMatrix(!0, !1)
                          var t = this.matrixWorld.elements
                          return e.set(-t[8], -t[9], -t[10]).normalize()
                        },
                        updateMatrixWorld: function (e) {
                          si.prototype.updateMatrixWorld.call(this, e),
                            this.matrixWorldInverse.copy(this.matrixWorld).invert()
                        },
                        updateWorldMatrix: function (e, t) {
                          si.prototype.updateWorldMatrix.call(this, e, t),
                            this.matrixWorldInverse.copy(this.matrixWorld).invert()
                        },
                        clone: function () {
                          return new this.constructor().copy(this)
                        },
                      })),
                      (Oo.prototype = Object.assign(Object.create(Do.prototype), {
                        constructor: Oo,
                        isPerspectiveCamera: !0,
                        copy: function (e, t) {
                          return (
                            Do.prototype.copy.call(this, e, t),
                            (this.fov = e.fov),
                            (this.zoom = e.zoom),
                            (this.near = e.near),
                            (this.far = e.far),
                            (this.focus = e.focus),
                            (this.aspect = e.aspect),
                            (this.view = null === e.view ? null : Object.assign({}, e.view)),
                            (this.filmGauge = e.filmGauge),
                            (this.filmOffset = e.filmOffset),
                            this
                          )
                        },
                        setFocalLength: function (e) {
                          var t = (0.5 * this.getFilmHeight()) / e
                          ;(this.fov = 2 * Kn.RAD2DEG * Math.atan(t)), this.updateProjectionMatrix()
                        },
                        getFocalLength: function () {
                          var e = Math.tan(0.5 * Kn.DEG2RAD * this.fov)
                          return (0.5 * this.getFilmHeight()) / e
                        },
                        getEffectiveFOV: function () {
                          return (
                            2 *
                            Kn.RAD2DEG *
                            Math.atan(Math.tan(0.5 * Kn.DEG2RAD * this.fov) / this.zoom)
                          )
                        },
                        getFilmWidth: function () {
                          return this.filmGauge * Math.min(this.aspect, 1)
                        },
                        getFilmHeight: function () {
                          return this.filmGauge / Math.max(this.aspect, 1)
                        },
                        setViewOffset: function (e, t, n, r, i, o) {
                          ;(this.aspect = e / t),
                            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 = e),
                            (this.view.fullHeight = t),
                            (this.view.offsetX = n),
                            (this.view.offsetY = r),
                            (this.view.width = i),
                            (this.view.height = o),
                            this.updateProjectionMatrix()
                        },
                        clearViewOffset: function () {
                          null !== this.view && (this.view.enabled = !1),
                            this.updateProjectionMatrix()
                        },
                        updateProjectionMatrix: function () {
                          var e = this.near,
                            t = (e * Math.tan(0.5 * Kn.DEG2RAD * this.fov)) / this.zoom,
                            n = 2 * t,
                            r = this.aspect * n,
                            i = -0.5 * r,
                            o = this.view
                          if (null !== this.view && this.view.enabled) {
                            var a = o.fullWidth,
                              s = o.fullHeight
                            ;(i += (o.offsetX * r) / a),
                              (t -= (o.offsetY * n) / s),
                              (r *= o.width / a),
                              (n *= o.height / s)
                          }
                          var l = this.filmOffset
                          0 !== l && (i += (e * l) / this.getFilmWidth()),
                            this.projectionMatrix.makePerspective(i, i + r, t, t - n, e, this.far),
                            this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
                        },
                        toJSON: function (e) {
                          var t = si.prototype.toJSON.call(this, e)
                          return (
                            (t.object.fov = this.fov),
                            (t.object.zoom = this.zoom),
                            (t.object.near = this.near),
                            (t.object.far = this.far),
                            (t.object.focus = this.focus),
                            (t.object.aspect = this.aspect),
                            null !== this.view && (t.object.view = Object.assign({}, this.view)),
                            (t.object.filmGauge = this.filmGauge),
                            (t.object.filmOffset = this.filmOffset),
                            t
                          )
                        },
                      }))
                    var Io = 90,
                      Bo = 1
                    function Fo(e, t, n) {
                      if (
                        (si.call(this),
                        (this.type = 'CubeCamera'),
                        !0 === n.isWebGLCubeRenderTarget)
                      ) {
                        this.renderTarget = n
                        var r = new Oo(Io, Bo, e, t)
                        ;(r.layers = this.layers),
                          r.up.set(0, -1, 0),
                          r.lookAt(new lr(1, 0, 0)),
                          this.add(r)
                        var i = new Oo(Io, Bo, e, t)
                        ;(i.layers = this.layers),
                          i.up.set(0, -1, 0),
                          i.lookAt(new lr(-1, 0, 0)),
                          this.add(i)
                        var o = new Oo(Io, Bo, e, t)
                        ;(o.layers = this.layers),
                          o.up.set(0, 0, 1),
                          o.lookAt(new lr(0, 1, 0)),
                          this.add(o)
                        var a = new Oo(Io, Bo, e, t)
                        ;(a.layers = this.layers),
                          a.up.set(0, 0, -1),
                          a.lookAt(new lr(0, -1, 0)),
                          this.add(a)
                        var s = new Oo(Io, Bo, e, t)
                        ;(s.layers = this.layers),
                          s.up.set(0, -1, 0),
                          s.lookAt(new lr(0, 0, 1)),
                          this.add(s)
                        var l = new Oo(Io, Bo, e, t)
                        ;(l.layers = this.layers),
                          l.up.set(0, -1, 0),
                          l.lookAt(new lr(0, 0, -1)),
                          this.add(l),
                          (this.update = function (e, t) {
                            null === this.parent && this.updateMatrixWorld()
                            var c = e.xr.enabled,
                              u = e.getRenderTarget()
                            e.xr.enabled = !1
                            var h = n.texture.generateMipmaps
                            ;(n.texture.generateMipmaps = !1),
                              e.setRenderTarget(n, 0),
                              e.render(t, r),
                              e.setRenderTarget(n, 1),
                              e.render(t, i),
                              e.setRenderTarget(n, 2),
                              e.render(t, o),
                              e.setRenderTarget(n, 3),
                              e.render(t, a),
                              e.setRenderTarget(n, 4),
                              e.render(t, s),
                              (n.texture.generateMipmaps = h),
                              e.setRenderTarget(n, 5),
                              e.render(t, l),
                              e.setRenderTarget(u),
                              (e.xr.enabled = c)
                          })
                      } else
                        console.error(
                          'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.',
                        )
                    }
                    function ko(e, t, n, r, i, o, a, s, l, c) {
                      ;(e = void 0 !== e ? e : []),
                        (t = void 0 !== t ? t : ae),
                        (a = void 0 !== a ? a : Ne),
                        nr.call(this, e, t, n, r, i, o, a, s, l, c),
                        (this.flipY = !1),
                        (this._needsFlipEnvMap = !0)
                    }
                    ;(Fo.prototype = Object.create(si.prototype)),
                      (Fo.prototype.constructor = Fo),
                      (ko.prototype = Object.create(nr.prototype)),
                      (ko.prototype.constructor = ko),
                      (ko.prototype.isCubeTexture = !0),
                      Object.defineProperty(ko.prototype, 'images', {
                        get: function () {
                          return this.image
                        },
                        set: function (e) {
                          this.image = e
                        },
                      })
                    var No = (function (e) {
                      function t(t, n, r) {
                        var i
                        return (
                          Number.isInteger(n) &&
                            (console.warn(
                              'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )',
                            ),
                            (n = r)),
                          (i = e.call(this, t, t, n) || this),
                          Object.defineProperty(zn(i), 'isWebGLCubeRenderTarget', { value: !0 }),
                          (n = n || {}),
                          (i.texture = new ko(
                            void 0,
                            n.mapping,
                            n.wrapS,
                            n.wrapT,
                            n.magFilter,
                            n.minFilter,
                            n.format,
                            n.type,
                            n.anisotropy,
                            n.encoding,
                          )),
                          (i.texture._needsFlipEnvMap = !1),
                          i
                        )
                      }
                      Gn(t, e)
                      var n = t.prototype
                      return (
                        (n.fromEquirectangularTexture = function (e, t) {
                          ;(this.texture.type = t.type),
                            (this.texture.format = Ue),
                            (this.texture.encoding = t.encoding),
                            (this.texture.generateMipmaps = t.generateMipmaps),
                            (this.texture.minFilter = t.minFilter),
                            (this.texture.magFilter = t.magFilter)
                          var 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',
                            },
                            r = new _o(5, 5, 5),
                            i = new Po({
                              name: 'CubemapFromEquirect',
                              uniforms: To(n.uniforms),
                              vertexShader: n.vertexShader,
                              fragmentShader: n.fragmentShader,
                              side: v,
                              blending: A,
                            })
                          i.uniforms.tEquirect.value = t
                          var o = new xo(r, i),
                            a = t.minFilter
                          return (
                            t.minFilter === Ee && (t.minFilter = Ae),
                            new Fo(1, 10, this).update(e, o),
                            (t.minFilter = a),
                            o.geometry.dispose(),
                            o.material.dispose(),
                            this
                          )
                        }),
                        (n.clear = function (e, t, n, r) {
                          for (var i = e.getRenderTarget(), o = 0; o < 6; o++)
                            e.setRenderTarget(this, o), e.clear(t, n, r)
                          e.setRenderTarget(i)
                        }),
                        t
                      )
                    })(or)
                    function Uo(e, t, n, r, i, o, a, s, l, c, u, h) {
                      nr.call(this, null, o, a, s, l, c, r, i, u, h),
                        (this.image = { data: e || null, width: t || 1, height: n || 1 }),
                        (this.magFilter = void 0 !== l ? l : me),
                        (this.minFilter = void 0 !== c ? c : me),
                        (this.generateMipmaps = !1),
                        (this.flipY = !1),
                        (this.unpackAlignment = 1),
                        (this.needsUpdate = !0)
                    }
                    ;(Uo.prototype = Object.create(nr.prototype)),
                      (Uo.prototype.constructor = Uo),
                      (Uo.prototype.isDataTexture = !0)
                    var Ho = new Sr(),
                      Go = new lr(),
                      zo = (function () {
                        function e(e, t, n, r, i, o) {
                          this.planes = [
                            void 0 !== e ? e : new hi(),
                            void 0 !== t ? t : new hi(),
                            void 0 !== n ? n : new hi(),
                            void 0 !== r ? r : new hi(),
                            void 0 !== i ? i : new hi(),
                            void 0 !== o ? o : new hi(),
                          ]
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n, r, i, o) {
                            var a = this.planes
                            return (
                              a[0].copy(e),
                              a[1].copy(t),
                              a[2].copy(n),
                              a[3].copy(r),
                              a[4].copy(i),
                              a[5].copy(o),
                              this
                            )
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            for (var t = this.planes, n = 0; n < 6; n++) t[n].copy(e.planes[n])
                            return this
                          }),
                          (t.setFromProjectionMatrix = function (e) {
                            var t = this.planes,
                              n = e.elements,
                              r = n[0],
                              i = n[1],
                              o = n[2],
                              a = n[3],
                              s = n[4],
                              l = n[5],
                              c = n[6],
                              u = n[7],
                              h = n[8],
                              d = n[9],
                              p = n[10],
                              f = n[11],
                              m = n[12],
                              v = n[13],
                              g = n[14],
                              y = n[15]
                            return (
                              t[0].setComponents(a - r, u - s, f - h, y - m).normalize(),
                              t[1].setComponents(a + r, u + s, f + h, y + m).normalize(),
                              t[2].setComponents(a + i, u + l, f + d, y + v).normalize(),
                              t[3].setComponents(a - i, u - l, f - d, y - v).normalize(),
                              t[4].setComponents(a - o, u - c, f - p, y - g).normalize(),
                              t[5].setComponents(a + o, u + c, f + p, y + g).normalize(),
                              this
                            )
                          }),
                          (t.intersectsObject = function (e) {
                            var t = e.geometry
                            return (
                              null === t.boundingSphere && t.computeBoundingSphere(),
                              Ho.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),
                              this.intersectsSphere(Ho)
                            )
                          }),
                          (t.intersectsSprite = function (e) {
                            return (
                              Ho.center.set(0, 0, 0),
                              (Ho.radius = 0.7071067811865476),
                              Ho.applyMatrix4(e.matrixWorld),
                              this.intersectsSphere(Ho)
                            )
                          }),
                          (t.intersectsSphere = function (e) {
                            for (
                              var t = this.planes, n = e.center, r = -e.radius, i = 0;
                              i < 6;
                              i++
                            )
                              if (t[i].distanceToPoint(n) < r) return !1
                            return !0
                          }),
                          (t.intersectsBox = function (e) {
                            for (var t = this.planes, n = 0; n < 6; n++) {
                              var r = t[n]
                              if (
                                ((Go.x = r.normal.x > 0 ? e.max.x : e.min.x),
                                (Go.y = r.normal.y > 0 ? e.max.y : e.min.y),
                                (Go.z = r.normal.z > 0 ? e.max.z : e.min.z),
                                r.distanceToPoint(Go) < 0)
                              )
                                return !1
                            }
                            return !0
                          }),
                          (t.containsPoint = function (e) {
                            for (var t = this.planes, n = 0; n < 6; n++)
                              if (t[n].distanceToPoint(e) < 0) return !1
                            return !0
                          }),
                          e
                        )
                      })()
                    function jo() {
                      var e = null,
                        t = !1,
                        n = null,
                        r = null
                      function i(t, o) {
                        n(t, o), (r = e.requestAnimationFrame(i))
                      }
                      return {
                        start: function () {
                          !0 !== t && null !== n && ((r = e.requestAnimationFrame(i)), (t = !0))
                        },
                        stop: function () {
                          e.cancelAnimationFrame(r), (t = !1)
                        },
                        setAnimationLoop: function (e) {
                          n = e
                        },
                        setContext: function (t) {
                          e = t
                        },
                      }
                    }
                    function Vo(e, t) {
                      var n = t.isWebGL2,
                        r = new WeakMap()
                      function i(t, r) {
                        var i = t.array,
                          o = t.usage,
                          a = e.createBuffer()
                        e.bindBuffer(r, a), e.bufferData(r, i, o), t.onUploadCallback()
                        var s = 5126
                        return (
                          i instanceof Float32Array
                            ? (s = 5126)
                            : i instanceof Float64Array
                            ? console.warn(
                                'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.',
                              )
                            : i instanceof Uint16Array
                            ? t.isFloat16BufferAttribute
                              ? n
                                ? (s = 5131)
                                : console.warn(
                                    'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.',
                                  )
                              : (s = 5123)
                            : i instanceof Int16Array
                            ? (s = 5122)
                            : i instanceof Uint32Array
                            ? (s = 5125)
                            : i instanceof Int32Array
                            ? (s = 5124)
                            : i instanceof Int8Array
                            ? (s = 5120)
                            : i instanceof Uint8Array && (s = 5121),
                          {
                            buffer: a,
                            type: s,
                            bytesPerElement: i.BYTES_PER_ELEMENT,
                            version: t.version,
                          }
                        )
                      }
                      function o(t, r, i) {
                        var o = r.array,
                          a = r.updateRange
                        e.bindBuffer(i, t),
                          -1 === a.count
                            ? e.bufferSubData(i, 0, o)
                            : (n
                                ? e.bufferSubData(
                                    i,
                                    a.offset * o.BYTES_PER_ELEMENT,
                                    o,
                                    a.offset,
                                    a.count,
                                  )
                                : e.bufferSubData(
                                    i,
                                    a.offset * o.BYTES_PER_ELEMENT,
                                    o.subarray(a.offset, a.offset + a.count),
                                  ),
                              (a.count = -1))
                      }
                      function a(e) {
                        return e.isInterleavedBufferAttribute && (e = e.data), r.get(e)
                      }
                      function s(t) {
                        t.isInterleavedBufferAttribute && (t = t.data)
                        var n = r.get(t)
                        n && (e.deleteBuffer(n.buffer), r.delete(t))
                      }
                      function l(e, t) {
                        if (e.isGLBufferAttribute) {
                          var n = r.get(e)
                          ;(!n || n.version < e.version) &&
                            r.set(e, {
                              buffer: e.buffer,
                              type: e.type,
                              bytesPerElement: e.elementSize,
                              version: e.version,
                            })
                        } else {
                          e.isInterleavedBufferAttribute && (e = e.data)
                          var a = r.get(e)
                          void 0 === a
                            ? r.set(e, i(e, t))
                            : a.version < e.version && (o(a.buffer, e, t), (a.version = e.version))
                        }
                      }
                      return { get: a, remove: s, update: l }
                    }
                    var Wo = (function (e) {
                        function t(t, n, r, i) {
                          var o
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 1),
                            void 0 === r && (r = 1),
                            void 0 === i && (i = 1),
                            ((o = e.call(this) || this).type = 'PlaneGeometry'),
                            (o.parameters = {
                              width: t,
                              height: n,
                              widthSegments: r,
                              heightSegments: i,
                            })
                          for (
                            var a = t / 2,
                              s = n / 2,
                              l = Math.floor(r),
                              c = Math.floor(i),
                              u = l + 1,
                              h = c + 1,
                              d = t / l,
                              p = n / c,
                              f = [],
                              m = [],
                              v = [],
                              g = [],
                              y = 0;
                            y < h;
                            y++
                          )
                            for (var b = y * p - s, A = 0; A < u; A++) {
                              var w = A * d - a
                              m.push(w, -b, 0), v.push(0, 0, 1), g.push(A / l), g.push(1 - y / c)
                            }
                          for (var x = 0; x < c; x++)
                            for (var E = 0; E < l; E++) {
                              var M = E + u * x,
                                _ = E + u * (x + 1),
                                T = E + 1 + u * (x + 1),
                                S = E + 1 + u * x
                              f.push(M, _, S), f.push(_, T, S)
                            }
                          return (
                            o.setIndex(f),
                            o.setAttribute('position', new Wi(m, 3)),
                            o.setAttribute('normal', new Wi(v, 3)),
                            o.setAttribute('uv', new Wi(g, 2)),
                            o
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      qo = {
                        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 ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\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.specularRoughness );\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:
                          'vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.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}\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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\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 ) {\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 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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: '#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif',
                        color_pars_fragment: '#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif',
                        color_pars_vertex:
                          '#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif',
                        color_vertex:
                          '#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\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 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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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 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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\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#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#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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\tuniform int maxMipLevel;\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 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\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\tfogDepth = - mvPosition.z;\n#endif',
                        fog_pars_vertex: '#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif',
                        fog_fragment:
                          '#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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 fogDepth;\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\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\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 );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\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\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * 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\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * 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\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * 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 );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif',
                        lights_toon_fragment:
                          'ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;',
                        lights_toon_pars_fragment:
                          'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_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_Diffuse_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;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, 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_Diffuse_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.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\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 = sheen;\n#endif',
                        lights_physical_pars_fragment:
                          'struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\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.specularRoughness;\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#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_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_Diffuse_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 CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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 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\tgetPointDirectLightIrradiance( 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\tgetSpotDirectLightIrradiance( 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\tgetDirectionalDirectLightIrradiance( 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 );\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 );\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 += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\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\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif',
                        morphtarget_pars_vertex:
                          '#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif',
                        morphtarget_vertex:
                          '#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif',
                        normal_fragment_begin:
                          '#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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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 );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\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 ) {\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\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif',
                        clearcoat_normal_fragment_begin:
                          '#ifdef 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 );\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',
                        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; }',
                        transmissionmap_fragment:
                          '#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif',
                        transmissionmap_pars_fragment:
                          '#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\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 )\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_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}',
                        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}',
                        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}',
                        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}',
                        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 <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}',
                        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}',
                        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 <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}',
                        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}',
                        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}',
                        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}',
                        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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_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}',
                        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 <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\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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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}',
                        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#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\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 <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_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 <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_Diffuse_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_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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}',
                        meshmatcap_frag:
                          '#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\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 <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 <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#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\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 <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 <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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\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 <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#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#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\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_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 <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 <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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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}',
                        meshphong_vert:
                          '#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 <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#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#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\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}',
                        meshphysical_frag:
                          '#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\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 <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <transmissionmap_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 <lights_physical_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#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\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 <transmissionmap_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 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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#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\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 <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#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\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}',
                        normal_frag:
                          '#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\n#include <packing>\n#include <uv_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}',
                        normal_vert:
                          '#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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 <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#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\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}',
                        points_frag:
                          'uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_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}',
                        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}',
                        shadow_vert:
                          '#include <common>\n#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_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 <shadowmap_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 <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\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\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}',
                      },
                      Xo = {
                        common: {
                          diffuse: { value: new Li(15658734) },
                          opacity: { value: 1 },
                          map: { value: null },
                          uvTransform: { value: new $n() },
                          uv2Transform: { value: new $n() },
                          alphaMap: { value: null },
                        },
                        specularmap: { specularMap: { value: null } },
                        envmap: {
                          envMap: { value: null },
                          flipEnvMap: { value: -1 },
                          reflectivity: { value: 1 },
                          refractionRatio: { value: 0.98 },
                          maxMipLevel: { value: 0 },
                        },
                        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 Jn(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 Li(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 Li(15658734) },
                          opacity: { value: 1 },
                          size: { value: 1 },
                          scale: { value: 1 },
                          map: { value: null },
                          alphaMap: { value: null },
                          uvTransform: { value: new $n() },
                        },
                        sprite: {
                          diffuse: { value: new Li(15658734) },
                          opacity: { value: 1 },
                          center: { value: new Jn(0.5, 0.5) },
                          rotation: { value: 0 },
                          map: { value: null },
                          alphaMap: { value: null },
                          uvTransform: { value: new $n() },
                        },
                      },
                      Yo = {
                        basic: {
                          uniforms: So([
                            Xo.common,
                            Xo.specularmap,
                            Xo.envmap,
                            Xo.aomap,
                            Xo.lightmap,
                            Xo.fog,
                          ]),
                          vertexShader: qo.meshbasic_vert,
                          fragmentShader: qo.meshbasic_frag,
                        },
                        lambert: {
                          uniforms: So([
                            Xo.common,
                            Xo.specularmap,
                            Xo.envmap,
                            Xo.aomap,
                            Xo.lightmap,
                            Xo.emissivemap,
                            Xo.fog,
                            Xo.lights,
                            { emissive: { value: new Li(0) } },
                          ]),
                          vertexShader: qo.meshlambert_vert,
                          fragmentShader: qo.meshlambert_frag,
                        },
                        phong: {
                          uniforms: So([
                            Xo.common,
                            Xo.specularmap,
                            Xo.envmap,
                            Xo.aomap,
                            Xo.lightmap,
                            Xo.emissivemap,
                            Xo.bumpmap,
                            Xo.normalmap,
                            Xo.displacementmap,
                            Xo.fog,
                            Xo.lights,
                            {
                              emissive: { value: new Li(0) },
                              specular: { value: new Li(1118481) },
                              shininess: { value: 30 },
                            },
                          ]),
                          vertexShader: qo.meshphong_vert,
                          fragmentShader: qo.meshphong_frag,
                        },
                        standard: {
                          uniforms: So([
                            Xo.common,
                            Xo.envmap,
                            Xo.aomap,
                            Xo.lightmap,
                            Xo.emissivemap,
                            Xo.bumpmap,
                            Xo.normalmap,
                            Xo.displacementmap,
                            Xo.roughnessmap,
                            Xo.metalnessmap,
                            Xo.fog,
                            Xo.lights,
                            {
                              emissive: { value: new Li(0) },
                              roughness: { value: 1 },
                              metalness: { value: 0 },
                              envMapIntensity: { value: 1 },
                            },
                          ]),
                          vertexShader: qo.meshphysical_vert,
                          fragmentShader: qo.meshphysical_frag,
                        },
                        toon: {
                          uniforms: So([
                            Xo.common,
                            Xo.aomap,
                            Xo.lightmap,
                            Xo.emissivemap,
                            Xo.bumpmap,
                            Xo.normalmap,
                            Xo.displacementmap,
                            Xo.gradientmap,
                            Xo.fog,
                            Xo.lights,
                            { emissive: { value: new Li(0) } },
                          ]),
                          vertexShader: qo.meshtoon_vert,
                          fragmentShader: qo.meshtoon_frag,
                        },
                        matcap: {
                          uniforms: So([
                            Xo.common,
                            Xo.bumpmap,
                            Xo.normalmap,
                            Xo.displacementmap,
                            Xo.fog,
                            { matcap: { value: null } },
                          ]),
                          vertexShader: qo.meshmatcap_vert,
                          fragmentShader: qo.meshmatcap_frag,
                        },
                        points: {
                          uniforms: So([Xo.points, Xo.fog]),
                          vertexShader: qo.points_vert,
                          fragmentShader: qo.points_frag,
                        },
                        dashed: {
                          uniforms: So([
                            Xo.common,
                            Xo.fog,
                            {
                              scale: { value: 1 },
                              dashSize: { value: 1 },
                              totalSize: { value: 2 },
                            },
                          ]),
                          vertexShader: qo.linedashed_vert,
                          fragmentShader: qo.linedashed_frag,
                        },
                        depth: {
                          uniforms: So([Xo.common, Xo.displacementmap]),
                          vertexShader: qo.depth_vert,
                          fragmentShader: qo.depth_frag,
                        },
                        normal: {
                          uniforms: So([
                            Xo.common,
                            Xo.bumpmap,
                            Xo.normalmap,
                            Xo.displacementmap,
                            { opacity: { value: 1 } },
                          ]),
                          vertexShader: qo.normal_vert,
                          fragmentShader: qo.normal_frag,
                        },
                        sprite: {
                          uniforms: So([Xo.sprite, Xo.fog]),
                          vertexShader: qo.sprite_vert,
                          fragmentShader: qo.sprite_frag,
                        },
                        background: {
                          uniforms: { uvTransform: { value: new $n() }, t2D: { value: null } },
                          vertexShader: qo.background_vert,
                          fragmentShader: qo.background_frag,
                        },
                        cube: {
                          uniforms: So([Xo.envmap, { opacity: { value: 1 } }]),
                          vertexShader: qo.cube_vert,
                          fragmentShader: qo.cube_frag,
                        },
                        equirect: {
                          uniforms: { tEquirect: { value: null } },
                          vertexShader: qo.equirect_vert,
                          fragmentShader: qo.equirect_frag,
                        },
                        distanceRGBA: {
                          uniforms: So([
                            Xo.common,
                            Xo.displacementmap,
                            {
                              referencePosition: { value: new lr() },
                              nearDistance: { value: 1 },
                              farDistance: { value: 1e3 },
                            },
                          ]),
                          vertexShader: qo.distanceRGBA_vert,
                          fragmentShader: qo.distanceRGBA_frag,
                        },
                        shadow: {
                          uniforms: So([
                            Xo.lights,
                            Xo.fog,
                            { color: { value: new Li(0) }, opacity: { value: 1 } },
                          ]),
                          vertexShader: qo.shadow_vert,
                          fragmentShader: qo.shadow_frag,
                        },
                      }
                    function Qo(e, t, n, r, i) {
                      var o,
                        a,
                        s = new Li(0),
                        l = 0,
                        c = null,
                        u = 0,
                        h = null
                      function d(n, i, d, f) {
                        var g = !0 === i.isScene ? i.background : null
                        g && g.isTexture && (g = t.get(g))
                        var y = e.xr,
                          b = y.getSession && y.getSession()
                        b && 'additive' === b.environmentBlendMode && (g = null),
                          null === g ? p(s, l) : g && g.isColor && (p(g, 1), (f = !0)),
                          (e.autoClear || f) &&
                            e.clear(e.autoClearColor, e.autoClearDepth, e.autoClearStencil),
                          g && (g.isCubeTexture || g.isWebGLCubeRenderTarget || g.mapping === ue)
                            ? (void 0 === a &&
                                ((a = new xo(
                                  new _o(1, 1, 1),
                                  new Po({
                                    name: 'BackgroundCubeMaterial',
                                    uniforms: To(Yo.cube.uniforms),
                                    vertexShader: Yo.cube.vertexShader,
                                    fragmentShader: Yo.cube.fragmentShader,
                                    side: v,
                                    depthTest: !1,
                                    depthWrite: !1,
                                    fog: !1,
                                  }),
                                )).geometry.deleteAttribute('normal'),
                                a.geometry.deleteAttribute('uv'),
                                (a.onBeforeRender = function (e, t, n) {
                                  this.matrixWorld.copyPosition(n.matrixWorld)
                                }),
                                Object.defineProperty(a.material, 'envMap', {
                                  get: function () {
                                    return this.uniforms.envMap.value
                                  },
                                }),
                                r.update(a)),
                              g.isWebGLCubeRenderTarget && (g = g.texture),
                              (a.material.uniforms.envMap.value = g),
                              (a.material.uniforms.flipEnvMap.value =
                                g.isCubeTexture && g._needsFlipEnvMap ? -1 : 1),
                              (c === g && u === g.version && h === e.toneMapping) ||
                                ((a.material.needsUpdate = !0),
                                (c = g),
                                (u = g.version),
                                (h = e.toneMapping)),
                              n.unshift(a, a.geometry, a.material, 0, 0, null))
                            : g &&
                              g.isTexture &&
                              (void 0 === o &&
                                ((o = new xo(
                                  new Wo(2, 2),
                                  new Po({
                                    name: 'BackgroundMaterial',
                                    uniforms: To(Yo.background.uniforms),
                                    vertexShader: Yo.background.vertexShader,
                                    fragmentShader: Yo.background.fragmentShader,
                                    side: m,
                                    depthTest: !1,
                                    depthWrite: !1,
                                    fog: !1,
                                  }),
                                )).geometry.deleteAttribute('normal'),
                                Object.defineProperty(o.material, 'map', {
                                  get: function () {
                                    return this.uniforms.t2D.value
                                  },
                                }),
                                r.update(o)),
                              (o.material.uniforms.t2D.value = g),
                              !0 === g.matrixAutoUpdate && g.updateMatrix(),
                              o.material.uniforms.uvTransform.value.copy(g.matrix),
                              (c === g && u === g.version && h === e.toneMapping) ||
                                ((o.material.needsUpdate = !0),
                                (c = g),
                                (u = g.version),
                                (h = e.toneMapping)),
                              n.unshift(o, o.geometry, o.material, 0, 0, null))
                      }
                      function p(e, t) {
                        n.buffers.color.setClear(e.r, e.g, e.b, t, i)
                      }
                      return {
                        getClearColor: function () {
                          return s
                        },
                        setClearColor: function (e, t) {
                          void 0 === t && (t = 1), s.set(e), p(s, (l = t))
                        },
                        getClearAlpha: function () {
                          return l
                        },
                        setClearAlpha: function (e) {
                          p(s, (l = e))
                        },
                        render: d,
                      }
                    }
                    function Zo(e, t, n, r) {
                      var i = e.getParameter(34921),
                        o = r.isWebGL2 ? null : t.get('OES_vertex_array_object'),
                        a = r.isWebGL2 || null !== o,
                        s = {},
                        l = m(null),
                        c = l
                      function u(t, r, i, o, s) {
                        var l = !1
                        if (a) {
                          var u = f(o, i, r)
                          c !== u && d((c = u).object), (l = v(o, s)) && g(o, s)
                        } else {
                          var h = !0 === r.wireframe
                          ;(c.geometry === o.id && c.program === i.id && c.wireframe === h) ||
                            ((c.geometry = o.id), (c.program = i.id), (c.wireframe = h), (l = !0))
                        }
                        !0 === t.isInstancedMesh && (l = !0),
                          null !== s && n.update(s, 34963),
                          l && (E(t, r, i, o), null !== s && e.bindBuffer(34963, n.get(s).buffer))
                      }
                      function h() {
                        return r.isWebGL2 ? e.createVertexArray() : o.createVertexArrayOES()
                      }
                      function d(t) {
                        return r.isWebGL2 ? e.bindVertexArray(t) : o.bindVertexArrayOES(t)
                      }
                      function p(t) {
                        return r.isWebGL2 ? e.deleteVertexArray(t) : o.deleteVertexArrayOES(t)
                      }
                      function f(e, t, n) {
                        var r = !0 === n.wireframe,
                          i = s[e.id]
                        void 0 === i && ((i = {}), (s[e.id] = i))
                        var o = i[t.id]
                        void 0 === o && ((o = {}), (i[t.id] = o))
                        var a = o[r]
                        return void 0 === a && ((a = m(h())), (o[r] = a)), a
                      }
                      function m(e) {
                        for (var t = [], n = [], r = [], o = 0; o < i; o++)
                          (t[o] = 0), (n[o] = 0), (r[o] = 0)
                        return {
                          geometry: null,
                          program: null,
                          wireframe: !1,
                          newAttributes: t,
                          enabledAttributes: n,
                          attributeDivisors: r,
                          object: e,
                          attributes: {},
                          index: null,
                        }
                      }
                      function v(e, t) {
                        var n = c.attributes,
                          r = e.attributes,
                          i = 0
                        for (var o in r) {
                          var a = n[o],
                            s = r[o]
                          if (void 0 === a) return !0
                          if (a.attribute !== s) return !0
                          if (a.data !== s.data) return !0
                          i++
                        }
                        return c.attributesNum !== i || c.index !== t
                      }
                      function g(e, t) {
                        var n = {},
                          r = e.attributes,
                          i = 0
                        for (var o in r) {
                          var a = r[o],
                            s = {}
                          ;(s.attribute = a), a.data && (s.data = a.data), (n[o] = s), i++
                        }
                        ;(c.attributes = n), (c.attributesNum = i), (c.index = t)
                      }
                      function y() {
                        for (var e = c.newAttributes, t = 0, n = e.length; t < n; t++) e[t] = 0
                      }
                      function b(e) {
                        A(e, 0)
                      }
                      function A(n, i) {
                        var o = c.newAttributes,
                          a = c.enabledAttributes,
                          s = c.attributeDivisors
                        ;(o[n] = 1),
                          0 === a[n] && (e.enableVertexAttribArray(n), (a[n] = 1)),
                          s[n] !== i &&
                            ((r.isWebGL2 ? e : t.get('ANGLE_instanced_arrays'))[
                              r.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE'
                            ](n, i),
                            (s[n] = i))
                      }
                      function w() {
                        for (
                          var t = c.newAttributes, n = c.enabledAttributes, r = 0, i = n.length;
                          r < i;
                          r++
                        )
                          n[r] !== t[r] && (e.disableVertexAttribArray(r), (n[r] = 0))
                      }
                      function x(t, n, i, o, a, s) {
                        !0 !== r.isWebGL2 || (5124 !== i && 5125 !== i)
                          ? e.vertexAttribPointer(t, n, i, o, a, s)
                          : e.vertexAttribIPointer(t, n, i, a, s)
                      }
                      function E(i, o, a, s) {
                        if (
                          !1 !== r.isWebGL2 ||
                          (!i.isInstancedMesh && !s.isInstancedBufferGeometry) ||
                          null !== t.get('ANGLE_instanced_arrays')
                        ) {
                          y()
                          var l = s.attributes,
                            c = a.getAttributes(),
                            u = o.defaultAttributeValues
                          for (var h in c) {
                            var d = c[h]
                            if (d >= 0) {
                              var p = l[h]
                              if (void 0 !== p) {
                                var f = p.normalized,
                                  m = p.itemSize,
                                  v = n.get(p)
                                if (void 0 === v) continue
                                var g = v.buffer,
                                  E = v.type,
                                  M = v.bytesPerElement
                                if (p.isInterleavedBufferAttribute) {
                                  var _ = p.data,
                                    T = _.stride,
                                    S = p.offset
                                  _ && _.isInstancedInterleavedBuffer
                                    ? (A(d, _.meshPerAttribute),
                                      void 0 === s._maxInstanceCount &&
                                        (s._maxInstanceCount = _.meshPerAttribute * _.count))
                                    : b(d),
                                    e.bindBuffer(34962, g),
                                    x(d, m, E, f, T * M, S * M)
                                } else
                                  p.isInstancedBufferAttribute
                                    ? (A(d, p.meshPerAttribute),
                                      void 0 === s._maxInstanceCount &&
                                        (s._maxInstanceCount = p.meshPerAttribute * p.count))
                                    : b(d),
                                    e.bindBuffer(34962, g),
                                    x(d, m, E, f, 0, 0)
                              } else if ('instanceMatrix' === h) {
                                var C = n.get(i.instanceMatrix)
                                if (void 0 === C) continue
                                var L = C.buffer,
                                  R = C.type
                                A(d + 0, 1),
                                  A(d + 1, 1),
                                  A(d + 2, 1),
                                  A(d + 3, 1),
                                  e.bindBuffer(34962, L),
                                  e.vertexAttribPointer(d + 0, 4, R, !1, 64, 0),
                                  e.vertexAttribPointer(d + 1, 4, R, !1, 64, 16),
                                  e.vertexAttribPointer(d + 2, 4, R, !1, 64, 32),
                                  e.vertexAttribPointer(d + 3, 4, R, !1, 64, 48)
                              } else if ('instanceColor' === h) {
                                var P = n.get(i.instanceColor)
                                if (void 0 === P) continue
                                var D = P.buffer,
                                  O = P.type
                                A(d, 1),
                                  e.bindBuffer(34962, D),
                                  e.vertexAttribPointer(d, 3, O, !1, 12, 0)
                              } else if (void 0 !== u) {
                                var I = u[h]
                                if (void 0 !== I)
                                  switch (I.length) {
                                    case 2:
                                      e.vertexAttrib2fv(d, I)
                                      break
                                    case 3:
                                      e.vertexAttrib3fv(d, I)
                                      break
                                    case 4:
                                      e.vertexAttrib4fv(d, I)
                                      break
                                    default:
                                      e.vertexAttrib1fv(d, I)
                                  }
                              }
                            }
                          }
                          w()
                        }
                      }
                      function M() {
                        for (var e in (S(), s)) {
                          var t = s[e]
                          for (var n in t) {
                            var r = t[n]
                            for (var i in r) p(r[i].object), delete r[i]
                            delete t[n]
                          }
                          delete s[e]
                        }
                      }
                      function _(e) {
                        if (void 0 !== s[e.id]) {
                          var t = s[e.id]
                          for (var n in t) {
                            var r = t[n]
                            for (var i in r) p(r[i].object), delete r[i]
                            delete t[n]
                          }
                          delete s[e.id]
                        }
                      }
                      function T(e) {
                        for (var t in s) {
                          var n = s[t]
                          if (void 0 !== n[e.id]) {
                            var r = n[e.id]
                            for (var i in r) p(r[i].object), delete r[i]
                            delete n[e.id]
                          }
                        }
                      }
                      function S() {
                        C(), c !== l && d((c = l).object)
                      }
                      function C() {
                        ;(l.geometry = null), (l.program = null), (l.wireframe = !1)
                      }
                      return {
                        setup: u,
                        reset: S,
                        resetDefaultState: C,
                        dispose: M,
                        releaseStatesOfGeometry: _,
                        releaseStatesOfProgram: T,
                        initAttributes: y,
                        enableAttribute: b,
                        disableUnusedAttributes: w,
                      }
                    }
                    function Ko(e, t, n, r) {
                      var i,
                        o = r.isWebGL2
                      function a(e) {
                        i = e
                      }
                      function s(t, r) {
                        e.drawArrays(i, t, r), n.update(r, i, 1)
                      }
                      function l(r, a, s) {
                        if (0 !== s) {
                          var l, c
                          if (o) (l = e), (c = 'drawArraysInstanced')
                          else if (
                            ((c = 'drawArraysInstancedANGLE'),
                            null === (l = t.get('ANGLE_instanced_arrays')))
                          )
                            return void console.error(
                              'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.',
                            )
                          l[c](i, r, a, s), n.update(a, i, s)
                        }
                      }
                      ;(this.setMode = a), (this.render = s), (this.renderInstances = l)
                    }
                    function Jo(e, t, n) {
                      var r
                      function i() {
                        if (void 0 !== r) return r
                        var n = t.get('EXT_texture_filter_anisotropic')
                        return (r =
                          null !== n ? e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0)
                      }
                      function o(t) {
                        if ('highp' === t) {
                          if (
                            e.getShaderPrecisionFormat(35633, 36338).precision > 0 &&
                            e.getShaderPrecisionFormat(35632, 36338).precision > 0
                          )
                            return 'highp'
                          t = 'mediump'
                        }
                        return 'mediump' === t &&
                          e.getShaderPrecisionFormat(35633, 36337).precision > 0 &&
                          e.getShaderPrecisionFormat(35632, 36337).precision > 0
                          ? 'mediump'
                          : 'lowp'
                      }
                      var a =
                          ('undefined' !== typeof WebGL2RenderingContext &&
                            e instanceof WebGL2RenderingContext) ||
                          ('undefined' !== typeof WebGL2ComputeRenderingContext &&
                            e instanceof WebGL2ComputeRenderingContext),
                        s = void 0 !== n.precision ? n.precision : 'highp',
                        l = o(s)
                      l !== s &&
                        (console.warn(
                          'THREE.WebGLRenderer:',
                          s,
                          'not supported, using',
                          l,
                          'instead.',
                        ),
                        (s = l))
                      var c = !0 === n.logarithmicDepthBuffer,
                        u = e.getParameter(34930),
                        h = e.getParameter(35660),
                        d = e.getParameter(3379),
                        p = e.getParameter(34076),
                        f = e.getParameter(34921),
                        m = e.getParameter(36347),
                        v = e.getParameter(36348),
                        g = e.getParameter(36349),
                        y = h > 0,
                        b = a || !!t.get('OES_texture_float')
                      return {
                        isWebGL2: a,
                        getMaxAnisotropy: i,
                        getMaxPrecision: o,
                        precision: s,
                        logarithmicDepthBuffer: c,
                        maxTextures: u,
                        maxVertexTextures: h,
                        maxTextureSize: d,
                        maxCubemapSize: p,
                        maxAttributes: f,
                        maxVertexUniforms: m,
                        maxVaryings: v,
                        maxFragmentUniforms: g,
                        vertexTextures: y,
                        floatFragmentTextures: b,
                        floatVertexTextures: y && b,
                        maxSamples: a ? e.getParameter(36183) : 0,
                      }
                    }
                    function $o(e) {
                      var t = this,
                        n = null,
                        r = 0,
                        i = !1,
                        o = !1,
                        a = new hi(),
                        s = new $n(),
                        l = { value: null, needsUpdate: !1 }
                      function c() {
                        l.value !== n && ((l.value = n), (l.needsUpdate = r > 0)),
                          (t.numPlanes = r),
                          (t.numIntersection = 0)
                      }
                      function u(e, n, r, i) {
                        var o = null !== e ? e.length : 0,
                          c = null
                        if (0 !== o) {
                          if (((c = l.value), !0 !== i || null === c)) {
                            var u = r + 4 * o,
                              h = n.matrixWorldInverse
                            s.getNormalMatrix(h),
                              (null === c || c.length < u) && (c = new Float32Array(u))
                            for (var d = 0, p = r; d !== o; ++d, p += 4)
                              a.copy(e[d]).applyMatrix4(h, s),
                                a.normal.toArray(c, p),
                                (c[p + 3] = a.constant)
                          }
                          ;(l.value = c), (l.needsUpdate = !0)
                        }
                        return (t.numPlanes = o), (t.numIntersection = 0), c
                      }
                      ;(this.uniform = l),
                        (this.numPlanes = 0),
                        (this.numIntersection = 0),
                        (this.init = function (e, t, o) {
                          var a = 0 !== e.length || t || 0 !== r || i
                          return (i = t), (n = u(e, o, 0)), (r = e.length), a
                        }),
                        (this.beginShadows = function () {
                          ;(o = !0), u(null)
                        }),
                        (this.endShadows = function () {
                          ;(o = !1), c()
                        }),
                        (this.setState = function (t, a, s) {
                          var h = t.clippingPlanes,
                            d = t.clipIntersection,
                            p = t.clipShadows,
                            f = e.get(t)
                          if (!i || null === h || 0 === h.length || (o && !p)) o ? u(null) : c()
                          else {
                            var m = o ? 0 : r,
                              v = 4 * m,
                              g = f.clippingState || null
                            ;(l.value = g), (g = u(h, a, v, s))
                            for (var y = 0; y !== v; ++y) g[y] = n[y]
                            ;(f.clippingState = g),
                              (this.numIntersection = d ? this.numPlanes : 0),
                              (this.numPlanes += m)
                          }
                        })
                    }
                    function ea(e) {
                      var t = new WeakMap()
                      function n(e, t) {
                        return t === le ? (e.mapping = ae) : t === ce && (e.mapping = se), e
                      }
                      function r(r) {
                        if (r && r.isTexture) {
                          var o = r.mapping
                          if (o === le || o === ce) {
                            if (t.has(r)) return n(t.get(r).texture, r.mapping)
                            var a = r.image
                            if (a && a.height > 0) {
                              var s = e.getRenderList(),
                                l = e.getRenderTarget(),
                                c = new No(a.height / 2)
                              return (
                                c.fromEquirectangularTexture(e, r),
                                t.set(r, c),
                                e.setRenderTarget(l),
                                e.setRenderList(s),
                                r.addEventListener('dispose', i),
                                n(c.texture, r.mapping)
                              )
                            }
                            return null
                          }
                        }
                        return r
                      }
                      function i(e) {
                        var n = e.target
                        n.removeEventListener('dispose', i)
                        var r = t.get(n)
                        void 0 !== r && (t.delete(n), r.dispose())
                      }
                      function o() {
                        t = new WeakMap()
                      }
                      return { get: r, dispose: o }
                    }
                    function ta(e) {
                      var t = {}
                      function n(n) {
                        if (void 0 !== t[n]) return t[n]
                        var r
                        switch (n) {
                          case 'WEBGL_depth_texture':
                            r =
                              e.getExtension('WEBGL_depth_texture') ||
                              e.getExtension('MOZ_WEBGL_depth_texture') ||
                              e.getExtension('WEBKIT_WEBGL_depth_texture')
                            break
                          case 'EXT_texture_filter_anisotropic':
                            r =
                              e.getExtension('EXT_texture_filter_anisotropic') ||
                              e.getExtension('MOZ_EXT_texture_filter_anisotropic') ||
                              e.getExtension('WEBKIT_EXT_texture_filter_anisotropic')
                            break
                          case 'WEBGL_compressed_texture_s3tc':
                            r =
                              e.getExtension('WEBGL_compressed_texture_s3tc') ||
                              e.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||
                              e.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc')
                            break
                          case 'WEBGL_compressed_texture_pvrtc':
                            r =
                              e.getExtension('WEBGL_compressed_texture_pvrtc') ||
                              e.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc')
                            break
                          default:
                            r = e.getExtension(n)
                        }
                        return (t[n] = r), r
                      }
                      return {
                        has: function (e) {
                          return null !== n(e)
                        },
                        init: function (e) {
                          e.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')
                        },
                        get: function (e) {
                          var t = n(e)
                          return (
                            null === t &&
                              console.warn(
                                'THREE.WebGLRenderer: ' + e + ' extension not supported.',
                              ),
                            t
                          )
                        },
                      }
                    }
                    function na(e, t, n, r) {
                      var i = {},
                        o = new WeakMap()
                      function a(e) {
                        var s = e.target
                        for (var l in (null !== s.index && t.remove(s.index), s.attributes))
                          t.remove(s.attributes[l])
                        s.removeEventListener('dispose', a), delete i[s.id]
                        var c = o.get(s)
                        c && (t.remove(c), o.delete(s)),
                          r.releaseStatesOfGeometry(s),
                          !0 === s.isInstancedBufferGeometry && delete s._maxInstanceCount,
                          n.memory.geometries--
                      }
                      function s(e, t) {
                        return (
                          !0 === i[t.id] ||
                            (t.addEventListener('dispose', a),
                            (i[t.id] = !0),
                            n.memory.geometries++),
                          t
                        )
                      }
                      function l(e) {
                        var n = e.attributes
                        for (var r in n) t.update(n[r], 34962)
                        var i = e.morphAttributes
                        for (var o in i)
                          for (var a = i[o], s = 0, l = a.length; s < l; s++) t.update(a[s], 34962)
                      }
                      function c(e) {
                        var n = [],
                          r = e.index,
                          i = e.attributes.position,
                          a = 0
                        if (null !== r) {
                          var s = r.array
                          a = r.version
                          for (var l = 0, c = s.length; l < c; l += 3) {
                            var u = s[l + 0],
                              h = s[l + 1],
                              d = s[l + 2]
                            n.push(u, h, h, d, d, u)
                          }
                        } else {
                          var p = i.array
                          a = i.version
                          for (var f = 0, m = p.length / 3 - 1; f < m; f += 3) {
                            var v = f + 0,
                              g = f + 1,
                              y = f + 2
                            n.push(v, g, g, y, y, v)
                          }
                        }
                        var b = new (Xi(n) > 65535 ? ji : Gi)(n, 1)
                        b.version = a
                        var A = o.get(e)
                        A && t.remove(A), o.set(e, b)
                      }
                      function u(e) {
                        var t = o.get(e)
                        if (t) {
                          var n = e.index
                          null !== n && t.version < n.version && c(e)
                        } else c(e)
                        return o.get(e)
                      }
                      return { get: s, update: l, getWireframeAttribute: u }
                    }
                    function ra(e, t, n, r) {
                      var i,
                        o,
                        a,
                        s = r.isWebGL2
                      function l(e) {
                        i = e
                      }
                      function c(e) {
                        ;(o = e.type), (a = e.bytesPerElement)
                      }
                      function u(t, r) {
                        e.drawElements(i, r, o, t * a), n.update(r, i, 1)
                      }
                      function h(r, l, c) {
                        if (0 !== c) {
                          var u, h
                          if (s) (u = e), (h = 'drawElementsInstanced')
                          else if (
                            ((h = 'drawElementsInstancedANGLE'),
                            null === (u = t.get('ANGLE_instanced_arrays')))
                          )
                            return void console.error(
                              'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.',
                            )
                          u[h](i, l, o, r * a, c), n.update(l, i, c)
                        }
                      }
                      ;(this.setMode = l),
                        (this.setIndex = c),
                        (this.render = u),
                        (this.renderInstances = h)
                    }
                    function ia(e) {
                      var t = { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 }
                      function n(e, n, r) {
                        switch ((t.calls++, n)) {
                          case 4:
                            t.triangles += r * (e / 3)
                            break
                          case 1:
                            t.lines += r * (e / 2)
                            break
                          case 3:
                            t.lines += r * (e - 1)
                            break
                          case 2:
                            t.lines += r * e
                            break
                          case 0:
                            t.points += r * e
                            break
                          default:
                            console.error('THREE.WebGLInfo: Unknown draw mode:', n)
                        }
                      }
                      function r() {
                        t.frame++, (t.calls = 0), (t.triangles = 0), (t.points = 0), (t.lines = 0)
                      }
                      return {
                        memory: { geometries: 0, textures: 0 },
                        render: t,
                        programs: null,
                        autoReset: !0,
                        reset: r,
                        update: n,
                      }
                    }
                    function oa(e, t) {
                      return e[0] - t[0]
                    }
                    function aa(e, t) {
                      return Math.abs(t[1]) - Math.abs(e[1])
                    }
                    function sa(e) {
                      for (var t = {}, n = new Float32Array(8), r = [], i = 0; i < 8; i++)
                        r[i] = [i, 0]
                      function o(i, o, a, s) {
                        var l = i.morphTargetInfluences,
                          c = void 0 === l ? 0 : l.length,
                          u = t[o.id]
                        if (void 0 === u) {
                          u = []
                          for (var h = 0; h < c; h++) u[h] = [h, 0]
                          t[o.id] = u
                        }
                        for (var d = 0; d < c; d++) {
                          var p = u[d]
                          ;(p[0] = d), (p[1] = l[d])
                        }
                        u.sort(aa)
                        for (var f = 0; f < 8; f++)
                          f < c && u[f][1]
                            ? ((r[f][0] = u[f][0]), (r[f][1] = u[f][1]))
                            : ((r[f][0] = Number.MAX_SAFE_INTEGER), (r[f][1] = 0))
                        r.sort(oa)
                        for (
                          var m = a.morphTargets && o.morphAttributes.position,
                            v = a.morphNormals && o.morphAttributes.normal,
                            g = 0,
                            y = 0;
                          y < 8;
                          y++
                        ) {
                          var b = r[y],
                            A = b[0],
                            w = b[1]
                          A !== Number.MAX_SAFE_INTEGER && w
                            ? (m &&
                                o.getAttribute('morphTarget' + y) !== m[A] &&
                                o.setAttribute('morphTarget' + y, m[A]),
                              v &&
                                o.getAttribute('morphNormal' + y) !== v[A] &&
                                o.setAttribute('morphNormal' + y, v[A]),
                              (n[y] = w),
                              (g += w))
                            : (m &&
                                !0 === o.hasAttribute('morphTarget' + y) &&
                                o.deleteAttribute('morphTarget' + y),
                              v &&
                                !0 === o.hasAttribute('morphNormal' + y) &&
                                o.deleteAttribute('morphNormal' + y),
                              (n[y] = 0))
                        }
                        var x = o.morphTargetsRelative ? 1 : 1 - g
                        s.getUniforms().setValue(e, 'morphTargetBaseInfluence', x),
                          s.getUniforms().setValue(e, 'morphTargetInfluences', n)
                      }
                      return { update: o }
                    }
                    function la(e, t, n, r) {
                      var i = new WeakMap()
                      function o(e) {
                        var o = r.render.frame,
                          a = e.geometry,
                          l = t.get(e, a)
                        return (
                          i.get(l) !== o && (t.update(l), i.set(l, o)),
                          e.isInstancedMesh &&
                            (!1 === e.hasEventListener('dispose', s) &&
                              e.addEventListener('dispose', s),
                            n.update(e.instanceMatrix, 34962),
                            null !== e.instanceColor && n.update(e.instanceColor, 34962)),
                          l
                        )
                      }
                      function a() {
                        i = new WeakMap()
                      }
                      function s(e) {
                        var t = e.target
                        t.removeEventListener('dispose', s),
                          n.remove(t.instanceMatrix),
                          null !== t.instanceColor && n.remove(t.instanceColor)
                      }
                      return { update: o, dispose: a }
                    }
                    function ca(e, t, n, r) {
                      void 0 === e && (e = null),
                        void 0 === t && (t = 1),
                        void 0 === n && (n = 1),
                        void 0 === r && (r = 1),
                        nr.call(this, null),
                        (this.image = { data: e, width: t, height: n, depth: r }),
                        (this.magFilter = me),
                        (this.minFilter = me),
                        (this.wrapR = pe),
                        (this.generateMipmaps = !1),
                        (this.flipY = !1),
                        (this.needsUpdate = !0)
                    }
                    function ua(e, t, n, r) {
                      void 0 === e && (e = null),
                        void 0 === t && (t = 1),
                        void 0 === n && (n = 1),
                        void 0 === r && (r = 1),
                        nr.call(this, null),
                        (this.image = { data: e, width: t, height: n, depth: r }),
                        (this.magFilter = me),
                        (this.minFilter = me),
                        (this.wrapR = pe),
                        (this.generateMipmaps = !1),
                        (this.flipY = !1),
                        (this.needsUpdate = !0)
                    }
                    ;(Yo.physical = {
                      uniforms: So([
                        Yo.standard.uniforms,
                        {
                          clearcoat: { value: 0 },
                          clearcoatMap: { value: null },
                          clearcoatRoughness: { value: 0 },
                          clearcoatRoughnessMap: { value: null },
                          clearcoatNormalScale: { value: new Jn(1, 1) },
                          clearcoatNormalMap: { value: null },
                          sheen: { value: new Li(0) },
                          transmission: { value: 0 },
                          transmissionMap: { value: null },
                        },
                      ]),
                      vertexShader: qo.meshphysical_vert,
                      fragmentShader: qo.meshphysical_frag,
                    }),
                      (ca.prototype = Object.create(nr.prototype)),
                      (ca.prototype.constructor = ca),
                      (ca.prototype.isDataTexture2DArray = !0),
                      (ua.prototype = Object.create(nr.prototype)),
                      (ua.prototype.constructor = ua),
                      (ua.prototype.isDataTexture3D = !0)
                    var ha = new nr(),
                      da = new ca(),
                      pa = new ua(),
                      fa = new ko(),
                      ma = [],
                      va = [],
                      ga = new Float32Array(16),
                      ya = new Float32Array(9),
                      ba = new Float32Array(4)
                    function Aa(e, t, n) {
                      var r = e[0]
                      if (r <= 0 || r > 0) return e
                      var i = t * n,
                        o = ma[i]
                      if ((void 0 === o && ((o = new Float32Array(i)), (ma[i] = o)), 0 !== t)) {
                        r.toArray(o, 0)
                        for (var a = 1, s = 0; a !== t; ++a) (s += n), e[a].toArray(o, s)
                      }
                      return o
                    }
                    function wa(e, t) {
                      if (e.length !== t.length) return !1
                      for (var n = 0, r = e.length; n < r; n++) if (e[n] !== t[n]) return !1
                      return !0
                    }
                    function xa(e, t) {
                      for (var n = 0, r = t.length; n < r; n++) e[n] = t[n]
                    }
                    function Ea(e, t) {
                      var n = va[t]
                      void 0 === n && ((n = new Int32Array(t)), (va[t] = n))
                      for (var r = 0; r !== t; ++r) n[r] = e.allocateTextureUnit()
                      return n
                    }
                    function Ma(e, t) {
                      var n = this.cache
                      n[0] !== t && (e.uniform1f(this.addr, t), (n[0] = t))
                    }
                    function _a(e, t) {
                      var n = this.cache
                      if (void 0 !== t.x)
                        (n[0] === t.x && n[1] === t.y) ||
                          (e.uniform2f(this.addr, t.x, t.y), (n[0] = t.x), (n[1] = t.y))
                      else {
                        if (wa(n, t)) return
                        e.uniform2fv(this.addr, t), xa(n, t)
                      }
                    }
                    function Ta(e, t) {
                      var n = this.cache
                      if (void 0 !== t.x)
                        (n[0] === t.x && n[1] === t.y && n[2] === t.z) ||
                          (e.uniform3f(this.addr, t.x, t.y, t.z),
                          (n[0] = t.x),
                          (n[1] = t.y),
                          (n[2] = t.z))
                      else if (void 0 !== t.r)
                        (n[0] === t.r && n[1] === t.g && n[2] === t.b) ||
                          (e.uniform3f(this.addr, t.r, t.g, t.b),
                          (n[0] = t.r),
                          (n[1] = t.g),
                          (n[2] = t.b))
                      else {
                        if (wa(n, t)) return
                        e.uniform3fv(this.addr, t), xa(n, t)
                      }
                    }
                    function Sa(e, t) {
                      var n = this.cache
                      if (void 0 !== t.x)
                        (n[0] === t.x && n[1] === t.y && n[2] === t.z && n[3] === t.w) ||
                          (e.uniform4f(this.addr, t.x, t.y, t.z, t.w),
                          (n[0] = t.x),
                          (n[1] = t.y),
                          (n[2] = t.z),
                          (n[3] = t.w))
                      else {
                        if (wa(n, t)) return
                        e.uniform4fv(this.addr, t), xa(n, t)
                      }
                    }
                    function Ca(e, t) {
                      var n = this.cache,
                        r = t.elements
                      if (void 0 === r) {
                        if (wa(n, t)) return
                        e.uniformMatrix2fv(this.addr, !1, t), xa(n, t)
                      } else {
                        if (wa(n, r)) return
                        ba.set(r), e.uniformMatrix2fv(this.addr, !1, ba), xa(n, r)
                      }
                    }
                    function La(e, t) {
                      var n = this.cache,
                        r = t.elements
                      if (void 0 === r) {
                        if (wa(n, t)) return
                        e.uniformMatrix3fv(this.addr, !1, t), xa(n, t)
                      } else {
                        if (wa(n, r)) return
                        ya.set(r), e.uniformMatrix3fv(this.addr, !1, ya), xa(n, r)
                      }
                    }
                    function Ra(e, t) {
                      var n = this.cache,
                        r = t.elements
                      if (void 0 === r) {
                        if (wa(n, t)) return
                        e.uniformMatrix4fv(this.addr, !1, t), xa(n, t)
                      } else {
                        if (wa(n, r)) return
                        ga.set(r), e.uniformMatrix4fv(this.addr, !1, ga), xa(n, r)
                      }
                    }
                    function Pa(e, t, n) {
                      var r = this.cache,
                        i = n.allocateTextureUnit()
                      r[0] !== i && (e.uniform1i(this.addr, i), (r[0] = i)),
                        n.safeSetTexture2D(t || ha, i)
                    }
                    function Da(e, t, n) {
                      var r = this.cache,
                        i = n.allocateTextureUnit()
                      r[0] !== i && (e.uniform1i(this.addr, i), (r[0] = i)),
                        n.setTexture2DArray(t || da, i)
                    }
                    function Oa(e, t, n) {
                      var r = this.cache,
                        i = n.allocateTextureUnit()
                      r[0] !== i && (e.uniform1i(this.addr, i), (r[0] = i)),
                        n.setTexture3D(t || pa, i)
                    }
                    function Ia(e, t, n) {
                      var r = this.cache,
                        i = n.allocateTextureUnit()
                      r[0] !== i && (e.uniform1i(this.addr, i), (r[0] = i)),
                        n.safeSetTextureCube(t || fa, i)
                    }
                    function Ba(e, t) {
                      var n = this.cache
                      n[0] !== t && (e.uniform1i(this.addr, t), (n[0] = t))
                    }
                    function Fa(e, t) {
                      var n = this.cache
                      wa(n, t) || (e.uniform2iv(this.addr, t), xa(n, t))
                    }
                    function ka(e, t) {
                      var n = this.cache
                      wa(n, t) || (e.uniform3iv(this.addr, t), xa(n, t))
                    }
                    function Na(e, t) {
                      var n = this.cache
                      wa(n, t) || (e.uniform4iv(this.addr, t), xa(n, t))
                    }
                    function Ua(e, t) {
                      var n = this.cache
                      n[0] !== t && (e.uniform1ui(this.addr, t), (n[0] = t))
                    }
                    function Ha(e) {
                      switch (e) {
                        case 5126:
                          return Ma
                        case 35664:
                          return _a
                        case 35665:
                          return Ta
                        case 35666:
                          return Sa
                        case 35674:
                          return Ca
                        case 35675:
                          return La
                        case 35676:
                          return Ra
                        case 5124:
                        case 35670:
                          return Ba
                        case 35667:
                        case 35671:
                          return Fa
                        case 35668:
                        case 35672:
                          return ka
                        case 35669:
                        case 35673:
                          return Na
                        case 5125:
                          return Ua
                        case 35678:
                        case 36198:
                        case 36298:
                        case 36306:
                        case 35682:
                          return Pa
                        case 35679:
                        case 36299:
                        case 36307:
                          return Oa
                        case 35680:
                        case 36300:
                        case 36308:
                        case 36293:
                          return Ia
                        case 36289:
                        case 36303:
                        case 36311:
                        case 36292:
                          return Da
                      }
                    }
                    function Ga(e, t) {
                      e.uniform1fv(this.addr, t)
                    }
                    function za(e, t) {
                      e.uniform1iv(this.addr, t)
                    }
                    function ja(e, t) {
                      e.uniform2iv(this.addr, t)
                    }
                    function Va(e, t) {
                      e.uniform3iv(this.addr, t)
                    }
                    function Wa(e, t) {
                      e.uniform4iv(this.addr, t)
                    }
                    function qa(e, t) {
                      var n = Aa(t, this.size, 2)
                      e.uniform2fv(this.addr, n)
                    }
                    function Xa(e, t) {
                      var n = Aa(t, this.size, 3)
                      e.uniform3fv(this.addr, n)
                    }
                    function Ya(e, t) {
                      var n = Aa(t, this.size, 4)
                      e.uniform4fv(this.addr, n)
                    }
                    function Qa(e, t) {
                      var n = Aa(t, this.size, 4)
                      e.uniformMatrix2fv(this.addr, !1, n)
                    }
                    function Za(e, t) {
                      var n = Aa(t, this.size, 9)
                      e.uniformMatrix3fv(this.addr, !1, n)
                    }
                    function Ka(e, t) {
                      var n = Aa(t, this.size, 16)
                      e.uniformMatrix4fv(this.addr, !1, n)
                    }
                    function Ja(e, t, n) {
                      var r = t.length,
                        i = Ea(n, r)
                      e.uniform1iv(this.addr, i)
                      for (var o = 0; o !== r; ++o) n.safeSetTexture2D(t[o] || ha, i[o])
                    }
                    function $a(e, t, n) {
                      var r = t.length,
                        i = Ea(n, r)
                      e.uniform1iv(this.addr, i)
                      for (var o = 0; o !== r; ++o) n.safeSetTextureCube(t[o] || fa, i[o])
                    }
                    function es(e) {
                      switch (e) {
                        case 5126:
                          return Ga
                        case 35664:
                          return qa
                        case 35665:
                          return Xa
                        case 35666:
                          return Ya
                        case 35674:
                          return Qa
                        case 35675:
                          return Za
                        case 35676:
                          return Ka
                        case 5124:
                        case 35670:
                          return za
                        case 35667:
                        case 35671:
                          return ja
                        case 35668:
                        case 35672:
                          return Va
                        case 35669:
                        case 35673:
                          return Wa
                        case 35678:
                        case 36198:
                        case 36298:
                        case 36306:
                        case 35682:
                          return Ja
                        case 35680:
                        case 36300:
                        case 36308:
                        case 36293:
                          return $a
                      }
                    }
                    function ts(e, t, n) {
                      ;(this.id = e),
                        (this.addr = n),
                        (this.cache = []),
                        (this.setValue = Ha(t.type))
                    }
                    function ns(e, t, n) {
                      ;(this.id = e),
                        (this.addr = n),
                        (this.cache = []),
                        (this.size = t.size),
                        (this.setValue = es(t.type))
                    }
                    function rs(e) {
                      ;(this.id = e), (this.seq = []), (this.map = {})
                    }
                    ;(ns.prototype.updateCache = function (e) {
                      var t = this.cache
                      e instanceof Float32Array &&
                        t.length !== e.length &&
                        (this.cache = new Float32Array(e.length)),
                        xa(t, e)
                    }),
                      (rs.prototype.setValue = function (e, t, n) {
                        for (var r = this.seq, i = 0, o = r.length; i !== o; ++i) {
                          var a = r[i]
                          a.setValue(e, t[a.id], n)
                        }
                      })
                    var is = /(\w+)(\])?(\[|\.)?/g
                    function os(e, t) {
                      e.seq.push(t), (e.map[t.id] = t)
                    }
                    function as(e, t, n) {
                      var r = e.name,
                        i = r.length
                      for (is.lastIndex = 0; ; ) {
                        var o = is.exec(r),
                          a = is.lastIndex,
                          s = o[1],
                          l = ']' === o[2],
                          c = o[3]
                        if ((l && (s |= 0), void 0 === c || ('[' === c && a + 2 === i))) {
                          os(n, void 0 === c ? new ts(s, e, t) : new ns(s, e, t))
                          break
                        }
                        var u = n.map[s]
                        void 0 === u && os(n, (u = new rs(s))), (n = u)
                      }
                    }
                    function ss(e, t) {
                      ;(this.seq = []), (this.map = {})
                      for (var n = e.getProgramParameter(t, 35718), r = 0; r < n; ++r) {
                        var i = e.getActiveUniform(t, r)
                        as(i, e.getUniformLocation(t, i.name), this)
                      }
                    }
                    function ls(e, t, n) {
                      var r = e.createShader(t)
                      return e.shaderSource(r, n), e.compileShader(r), r
                    }
                    ;(ss.prototype.setValue = function (e, t, n, r) {
                      var i = this.map[t]
                      void 0 !== i && i.setValue(e, n, r)
                    }),
                      (ss.prototype.setOptional = function (e, t, n) {
                        var r = t[n]
                        void 0 !== r && this.setValue(e, n, r)
                      }),
                      (ss.upload = function (e, t, n, r) {
                        for (var i = 0, o = t.length; i !== o; ++i) {
                          var a = t[i],
                            s = n[a.id]
                          !1 !== s.needsUpdate && a.setValue(e, s.value, r)
                        }
                      }),
                      (ss.seqWithValue = function (e, t) {
                        for (var n = [], r = 0, i = e.length; r !== i; ++r) {
                          var o = e[r]
                          o.id in t && n.push(o)
                        }
                        return n
                      })
                    var cs = 0
                    function us(e) {
                      for (var t = e.split('\n'), n = 0; n < t.length; n++)
                        t[n] = n + 1 + ': ' + t[n]
                      return t.join('\n')
                    }
                    function hs(e) {
                      switch (e) {
                        case Kt:
                          return ['Linear', '( value )']
                        case Jt:
                          return ['sRGB', '( value )']
                        case en:
                          return ['RGBE', '( value )']
                        case nn:
                          return ['RGBM', '( value, 7.0 )']
                        case rn:
                          return ['RGBM', '( value, 16.0 )']
                        case on:
                          return ['RGBD', '( value, 256.0 )']
                        case $t:
                          return ['Gamma', '( value, float( GAMMA_FACTOR ) )']
                        case tn:
                          return ['LogLuv', '( value )']
                        default:
                          return (
                            console.warn('THREE.WebGLProgram: Unsupported encoding:', e),
                            ['Linear', '( value )']
                          )
                      }
                    }
                    function ds(e, t, n) {
                      var r = e.getShaderParameter(t, 35713),
                        i = e.getShaderInfoLog(t).trim()
                      return r && '' === i
                        ? ''
                        : 'THREE.WebGLShader: gl.getShaderInfoLog() ' +
                            n +
                            '\n' +
                            i +
                            us(e.getShaderSource(t))
                    }
                    function ps(e, t) {
                      var n = hs(t)
                      return (
                        'vec4 ' + e + '( vec4 value ) { return ' + n[0] + 'ToLinear' + n[1] + '; }'
                      )
                    }
                    function fs(e, t) {
                      var n = hs(t)
                      return 'vec4 ' + e + '( vec4 value ) { return LinearTo' + n[0] + n[1] + '; }'
                    }
                    function ms(e, t) {
                      var n
                      switch (t) {
                        case ee:
                          n = 'Linear'
                          break
                        case te:
                          n = 'Reinhard'
                          break
                        case ne:
                          n = 'OptimizedCineon'
                          break
                        case re:
                          n = 'ACESFilmic'
                          break
                        case ie:
                          n = 'Custom'
                          break
                        default:
                          console.warn('THREE.WebGLProgram: Unsupported toneMapping:', t),
                            (n = 'Linear')
                      }
                      return (
                        'vec3 ' + e + '( vec3 color ) { return ' + n + 'ToneMapping( color ); }'
                      )
                    }
                    function vs(e) {
                      return [
                        e.extensionDerivatives ||
                        e.envMapCubeUV ||
                        e.bumpMap ||
                        e.tangentSpaceNormalMap ||
                        e.clearcoatNormalMap ||
                        e.flatShading ||
                        'physical' === e.shaderID
                          ? '#extension GL_OES_standard_derivatives : enable'
                          : '',
                        (e.extensionFragDepth || e.logarithmicDepthBuffer) &&
                        e.rendererExtensionFragDepth
                          ? '#extension GL_EXT_frag_depth : enable'
                          : '',
                        e.extensionDrawBuffers && e.rendererExtensionDrawBuffers
                          ? '#extension GL_EXT_draw_buffers : require'
                          : '',
                        (e.extensionShaderTextureLOD || e.envMap) &&
                        e.rendererExtensionShaderTextureLod
                          ? '#extension GL_EXT_shader_texture_lod : enable'
                          : '',
                      ]
                        .filter(bs)
                        .join('\n')
                    }
                    function gs(e) {
                      var t = []
                      for (var n in e) {
                        var r = e[n]
                        !1 !== r && t.push('#define ' + n + ' ' + r)
                      }
                      return t.join('\n')
                    }
                    function ys(e, t) {
                      for (var n = {}, r = e.getProgramParameter(t, 35721), i = 0; i < r; i++) {
                        var o = e.getActiveAttrib(t, i).name
                        n[o] = e.getAttribLocation(t, o)
                      }
                      return n
                    }
                    function bs(e) {
                      return '' !== e
                    }
                    function As(e, t) {
                      return e
                        .replace(/NUM_DIR_LIGHTS/g, t.numDirLights)
                        .replace(/NUM_SPOT_LIGHTS/g, t.numSpotLights)
                        .replace(/NUM_RECT_AREA_LIGHTS/g, t.numRectAreaLights)
                        .replace(/NUM_POINT_LIGHTS/g, t.numPointLights)
                        .replace(/NUM_HEMI_LIGHTS/g, t.numHemiLights)
                        .replace(/NUM_DIR_LIGHT_SHADOWS/g, t.numDirLightShadows)
                        .replace(/NUM_SPOT_LIGHT_SHADOWS/g, t.numSpotLightShadows)
                        .replace(/NUM_POINT_LIGHT_SHADOWS/g, t.numPointLightShadows)
                    }
                    function ws(e, t) {
                      return e
                        .replace(/NUM_CLIPPING_PLANES/g, t.numClippingPlanes)
                        .replace(
                          /UNION_CLIPPING_PLANES/g,
                          t.numClippingPlanes - t.numClipIntersection,
                        )
                    }
                    var xs = /^[ \t]*#include +<([\w\d./]+)>/gm
                    function Es(e) {
                      return e.replace(xs, Ms)
                    }
                    function Ms(e, t) {
                      var n = qo[t]
                      if (void 0 === n) throw new Error('Can not resolve #include <' + t + '>')
                      return Es(n)
                    }
                    var _s =
                        /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,
                      Ts =
                        /#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 Ss(e) {
                      return e.replace(Ts, Ls).replace(_s, Cs)
                    }
                    function Cs(e, t, n, r) {
                      return (
                        console.warn(
                          'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.',
                        ),
                        Ls(e, t, n, r)
                      )
                    }
                    function Ls(e, t, n, r) {
                      for (var i = '', o = parseInt(t); o < parseInt(n); o++)
                        i += r
                          .replace(/\[\s*i\s*\]/g, '[ ' + o + ' ]')
                          .replace(/UNROLLED_LOOP_INDEX/g, o)
                      return i
                    }
                    function Rs(e) {
                      var t =
                        'precision ' + e.precision + ' float;\nprecision ' + e.precision + ' int;'
                      return (
                        'highp' === e.precision
                          ? (t += '\n#define HIGH_PRECISION')
                          : 'mediump' === e.precision
                          ? (t += '\n#define MEDIUM_PRECISION')
                          : 'lowp' === e.precision && (t += '\n#define LOW_PRECISION'),
                        t
                      )
                    }
                    function Ps(e) {
                      var t = 'SHADOWMAP_TYPE_BASIC'
                      return (
                        e.shadowMapType === d
                          ? (t = 'SHADOWMAP_TYPE_PCF')
                          : e.shadowMapType === p
                          ? (t = 'SHADOWMAP_TYPE_PCF_SOFT')
                          : e.shadowMapType === f && (t = 'SHADOWMAP_TYPE_VSM'),
                        t
                      )
                    }
                    function Ds(e) {
                      var t = 'ENVMAP_TYPE_CUBE'
                      if (e.envMap)
                        switch (e.envMapMode) {
                          case ae:
                          case se:
                            t = 'ENVMAP_TYPE_CUBE'
                            break
                          case ue:
                          case he:
                            t = 'ENVMAP_TYPE_CUBE_UV'
                        }
                      return t
                    }
                    function Os(e) {
                      var t = 'ENVMAP_MODE_REFLECTION'
                      if (e.envMap)
                        switch (e.envMapMode) {
                          case se:
                          case he:
                            t = 'ENVMAP_MODE_REFRACTION'
                        }
                      return t
                    }
                    function Is(e) {
                      var t = 'ENVMAP_BLENDING_NONE'
                      if (e.envMap)
                        switch (e.combine) {
                          case Z:
                            t = 'ENVMAP_BLENDING_MULTIPLY'
                            break
                          case K:
                            t = 'ENVMAP_BLENDING_MIX'
                            break
                          case J:
                            t = 'ENVMAP_BLENDING_ADD'
                        }
                      return t
                    }
                    function Bs(e, t, n, r) {
                      var i,
                        o,
                        a = e.getContext(),
                        s = n.defines,
                        l = n.vertexShader,
                        c = n.fragmentShader,
                        u = Ps(n),
                        h = Ds(n),
                        d = Os(n),
                        p = Is(n),
                        f = e.gammaFactor > 0 ? e.gammaFactor : 1,
                        m = n.isWebGL2 ? '' : vs(n),
                        v = gs(s),
                        g = a.createProgram(),
                        y = n.glslVersion ? '#version ' + n.glslVersion + '\n' : ''
                      n.isRawShaderMaterial
                        ? ((i = [v].filter(bs).join('\n')).length > 0 && (i += '\n'),
                          (o = [m, v].filter(bs).join('\n')).length > 0 && (o += '\n'))
                        : ((i = [
                            Rs(n),
                            '#define SHADER_NAME ' + n.shaderName,
                            v,
                            n.instancing ? '#define USE_INSTANCING' : '',
                            n.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
                            n.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',
                            '#define GAMMA_FACTOR ' + f,
                            '#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 ' + d : '',
                            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.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
                            n.metalnessMap ? '#define USE_METALNESSMAP' : '',
                            n.alphaMap ? '#define USE_ALPHAMAP' : '',
                            n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
                            n.vertexTangents ? '#define USE_TANGENT' : '',
                            n.vertexColors ? '#define USE_COLOR' : '',
                            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.doubleSided ? '#define DOUBLE_SIDED' : '',
                            n.flipSided ? '#define FLIP_SIDED' : '',
                            n.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
                            n.shadowMapEnabled ? '#define ' + u : '',
                            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',
                            '#ifdef USE_COLOR',
                            '\tattribute vec3 color;',
                            '#endif',
                            '#ifdef USE_MORPHTARGETS',
                            '\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(bs)
                            .join('\n')),
                          (o = [
                            m,
                            Rs(n),
                            '#define SHADER_NAME ' + n.shaderName,
                            v,
                            n.alphaTest
                              ? '#define ALPHATEST ' + n.alphaTest + (n.alphaTest % 1 ? '' : '.0')
                              : '',
                            '#define GAMMA_FACTOR ' + f,
                            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 ' + h : '',
                            n.envMap ? '#define ' + d : '',
                            n.envMap ? '#define ' + p : '',
                            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.specularMap ? '#define USE_SPECULARMAP' : '',
                            n.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
                            n.metalnessMap ? '#define USE_METALNESSMAP' : '',
                            n.alphaMap ? '#define USE_ALPHAMAP' : '',
                            n.sheen ? '#define USE_SHEEN' : '',
                            n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
                            n.vertexTangents ? '#define USE_TANGENT' : '',
                            n.vertexColors || n.instancingColor ? '#define USE_COLOR' : '',
                            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 ' + u : '',
                            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;',
                            n.toneMapping !== $ ? '#define TONE_MAPPING' : '',
                            n.toneMapping !== $ ? qo.tonemapping_pars_fragment : '',
                            n.toneMapping !== $ ? ms('toneMapping', n.toneMapping) : '',
                            n.dithering ? '#define DITHERING' : '',
                            qo.encodings_pars_fragment,
                            n.map ? ps('mapTexelToLinear', n.mapEncoding) : '',
                            n.matcap ? ps('matcapTexelToLinear', n.matcapEncoding) : '',
                            n.envMap ? ps('envMapTexelToLinear', n.envMapEncoding) : '',
                            n.emissiveMap
                              ? ps('emissiveMapTexelToLinear', n.emissiveMapEncoding)
                              : '',
                            n.lightMap ? ps('lightMapTexelToLinear', n.lightMapEncoding) : '',
                            fs('linearToOutputTexel', n.outputEncoding),
                            n.depthPacking ? '#define DEPTH_PACKING ' + n.depthPacking : '',
                            '\n',
                          ]
                            .filter(bs)
                            .join('\n'))),
                        (l = ws((l = As((l = Es(l)), n)), n)),
                        (c = ws((c = As((c = Es(c)), n)), n)),
                        (l = Ss(l)),
                        (c = Ss(c)),
                        n.isWebGL2 &&
                          !0 !== n.isRawShaderMaterial &&
                          ((y = '#version 300 es\n'),
                          (i =
                            [
                              '#define attribute in',
                              '#define varying out',
                              '#define texture2D texture',
                            ].join('\n') +
                            '\n' +
                            i),
                          (o =
                            [
                              '#define varying in',
                              n.glslVersion === Fn ? '' : 'out highp vec4 pc_fragColor;',
                              n.glslVersion === Fn ? '' : '#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' +
                            o))
                      var b,
                        A,
                        w = y + o + c,
                        x = ls(a, 35633, y + i + l),
                        E = ls(a, 35632, w)
                      if (
                        (a.attachShader(g, x),
                        a.attachShader(g, E),
                        void 0 !== n.index0AttributeName
                          ? a.bindAttribLocation(g, 0, n.index0AttributeName)
                          : !0 === n.morphTargets && a.bindAttribLocation(g, 0, 'position'),
                        a.linkProgram(g),
                        e.debug.checkShaderErrors)
                      ) {
                        var M = a.getProgramInfoLog(g).trim(),
                          _ = a.getShaderInfoLog(x).trim(),
                          T = a.getShaderInfoLog(E).trim(),
                          S = !0,
                          C = !0
                        if (!1 === a.getProgramParameter(g, 35714)) {
                          S = !1
                          var L = ds(a, x, 'vertex'),
                            R = ds(a, E, 'fragment')
                          console.error(
                            'THREE.WebGLProgram: shader error: ',
                            a.getError(),
                            '35715',
                            a.getProgramParameter(g, 35715),
                            'gl.getProgramInfoLog',
                            M,
                            L,
                            R,
                          )
                        } else
                          '' !== M
                            ? console.warn('THREE.WebGLProgram: gl.getProgramInfoLog()', M)
                            : ('' !== _ && '' !== T) || (C = !1)
                        C &&
                          (this.diagnostics = {
                            runnable: S,
                            programLog: M,
                            vertexShader: { log: _, prefix: i },
                            fragmentShader: { log: T, prefix: o },
                          })
                      }
                      return (
                        a.deleteShader(x),
                        a.deleteShader(E),
                        (this.getUniforms = function () {
                          return void 0 === b && (b = new ss(a, g)), b
                        }),
                        (this.getAttributes = function () {
                          return void 0 === A && (A = ys(a, g)), A
                        }),
                        (this.destroy = function () {
                          r.releaseStatesOfProgram(this),
                            a.deleteProgram(g),
                            (this.program = void 0)
                        }),
                        (this.name = n.shaderName),
                        (this.id = cs++),
                        (this.cacheKey = t),
                        (this.usedTimes = 1),
                        (this.program = g),
                        (this.vertexShader = x),
                        (this.fragmentShader = E),
                        this
                      )
                    }
                    function Fs(e, t, n, r, i, o) {
                      var a = [],
                        s = r.isWebGL2,
                        l = r.logarithmicDepthBuffer,
                        c = r.floatVertexTextures,
                        u = r.maxVertexUniforms,
                        h = r.vertexTextures,
                        d = r.precision,
                        p = {
                          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',
                        },
                        f = [
                          'precision',
                          'isWebGL2',
                          'supportsVertexTextures',
                          'outputEncoding',
                          'instancing',
                          'instancingColor',
                          'map',
                          'mapEncoding',
                          'matcap',
                          'matcapEncoding',
                          'envMap',
                          'envMapMode',
                          'envMapEncoding',
                          'envMapCubeUV',
                          'lightMap',
                          'lightMapEncoding',
                          'aoMap',
                          'emissiveMap',
                          'emissiveMapEncoding',
                          'bumpMap',
                          'normalMap',
                          'objectSpaceNormalMap',
                          'tangentSpaceNormalMap',
                          'clearcoatMap',
                          'clearcoatRoughnessMap',
                          'clearcoatNormalMap',
                          'displacementMap',
                          'specularMap',
                          'roughnessMap',
                          'metalnessMap',
                          'gradientMap',
                          'alphaMap',
                          'combine',
                          'vertexColors',
                          'vertexTangents',
                          'vertexUvs',
                          'uvsVertexOnly',
                          'fog',
                          'useFog',
                          'fogExp2',
                          'flatShading',
                          'sizeAttenuation',
                          'logarithmicDepthBuffer',
                          'skinning',
                          'maxBones',
                          'useVertexTexture',
                          'morphTargets',
                          'morphNormals',
                          'maxMorphTargets',
                          'maxMorphNormals',
                          'premultipliedAlpha',
                          'numDirLights',
                          'numPointLights',
                          'numSpotLights',
                          'numHemiLights',
                          'numRectAreaLights',
                          'numDirLightShadows',
                          'numPointLightShadows',
                          'numSpotLightShadows',
                          'shadowMapEnabled',
                          'shadowMapType',
                          'toneMapping',
                          'physicallyCorrectLights',
                          'alphaTest',
                          'doubleSided',
                          'flipSided',
                          'numClippingPlanes',
                          'numClipIntersection',
                          'depthPacking',
                          'dithering',
                          'sheen',
                          'transmissionMap',
                        ]
                      function m(e) {
                        var t = e.skeleton.bones
                        if (c) return 1024
                        var n = u,
                          r = Math.floor((n - 20) / 4),
                          i = Math.min(r, t.length)
                        return i < t.length
                          ? (console.warn(
                              'THREE.WebGLRenderer: Skeleton has ' +
                                t.length +
                                ' bones. This GPU supports ' +
                                i +
                                '.',
                            ),
                            0)
                          : i
                      }
                      function y(e) {
                        var t
                        return (
                          e && e.isTexture
                            ? (t = e.encoding)
                            : e && e.isWebGLRenderTarget
                            ? (console.warn(
                                "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.",
                              ),
                              (t = e.texture.encoding))
                            : (t = Kt),
                          t
                        )
                      }
                      function b(i, a, u, f, b) {
                        var A,
                          w,
                          x = f.fog,
                          E = i.isMeshStandardMaterial ? f.environment : null,
                          M = t.get(i.envMap || E),
                          _ = p[i.type],
                          T = b.isSkinnedMesh ? m(b) : 0
                        if (
                          (null !== i.precision &&
                            (d = r.getMaxPrecision(i.precision)) !== i.precision &&
                            console.warn(
                              'THREE.WebGLProgram.getParameters:',
                              i.precision,
                              'not supported, using',
                              d,
                              'instead.',
                            ),
                          _)
                        ) {
                          var S = Yo[_]
                          ;(A = S.vertexShader), (w = S.fragmentShader)
                        } else (A = i.vertexShader), (w = i.fragmentShader)
                        var C = e.getRenderTarget()
                        return {
                          isWebGL2: s,
                          shaderID: _,
                          shaderName: i.type,
                          vertexShader: A,
                          fragmentShader: w,
                          defines: i.defines,
                          isRawShaderMaterial: !0 === i.isRawShaderMaterial,
                          glslVersion: i.glslVersion,
                          precision: d,
                          instancing: !0 === b.isInstancedMesh,
                          instancingColor: !0 === b.isInstancedMesh && null !== b.instanceColor,
                          supportsVertexTextures: h,
                          outputEncoding: null !== C ? y(C.texture) : e.outputEncoding,
                          map: !!i.map,
                          mapEncoding: y(i.map),
                          matcap: !!i.matcap,
                          matcapEncoding: y(i.matcap),
                          envMap: !!M,
                          envMapMode: M && M.mapping,
                          envMapEncoding: y(M),
                          envMapCubeUV: !!M && (M.mapping === ue || M.mapping === he),
                          lightMap: !!i.lightMap,
                          lightMapEncoding: y(i.lightMap),
                          aoMap: !!i.aoMap,
                          emissiveMap: !!i.emissiveMap,
                          emissiveMapEncoding: y(i.emissiveMap),
                          bumpMap: !!i.bumpMap,
                          normalMap: !!i.normalMap,
                          objectSpaceNormalMap: i.normalMapType === cn,
                          tangentSpaceNormalMap: i.normalMapType === ln,
                          clearcoatMap: !!i.clearcoatMap,
                          clearcoatRoughnessMap: !!i.clearcoatRoughnessMap,
                          clearcoatNormalMap: !!i.clearcoatNormalMap,
                          displacementMap: !!i.displacementMap,
                          roughnessMap: !!i.roughnessMap,
                          metalnessMap: !!i.metalnessMap,
                          specularMap: !!i.specularMap,
                          alphaMap: !!i.alphaMap,
                          gradientMap: !!i.gradientMap,
                          sheen: !!i.sheen,
                          transmissionMap: !!i.transmissionMap,
                          combine: i.combine,
                          vertexTangents: i.normalMap && i.vertexTangents,
                          vertexColors: i.vertexColors,
                          vertexUvs:
                            !!i.map ||
                            !!i.bumpMap ||
                            !!i.normalMap ||
                            !!i.specularMap ||
                            !!i.alphaMap ||
                            !!i.emissiveMap ||
                            !!i.roughnessMap ||
                            !!i.metalnessMap ||
                            !!i.clearcoatMap ||
                            !!i.clearcoatRoughnessMap ||
                            !!i.clearcoatNormalMap ||
                            !!i.displacementMap ||
                            !!i.transmissionMap,
                          uvsVertexOnly:
                            !(
                              i.map ||
                              i.bumpMap ||
                              i.normalMap ||
                              i.specularMap ||
                              i.alphaMap ||
                              i.emissiveMap ||
                              i.roughnessMap ||
                              i.metalnessMap ||
                              i.clearcoatNormalMap ||
                              i.transmissionMap
                            ) && !!i.displacementMap,
                          fog: !!x,
                          useFog: i.fog,
                          fogExp2: x && x.isFogExp2,
                          flatShading: i.flatShading,
                          sizeAttenuation: i.sizeAttenuation,
                          logarithmicDepthBuffer: l,
                          skinning: i.skinning && T > 0,
                          maxBones: T,
                          useVertexTexture: c,
                          morphTargets: i.morphTargets,
                          morphNormals: i.morphNormals,
                          maxMorphTargets: e.maxMorphTargets,
                          maxMorphNormals: e.maxMorphNormals,
                          numDirLights: a.directional.length,
                          numPointLights: a.point.length,
                          numSpotLights: a.spot.length,
                          numRectAreaLights: a.rectArea.length,
                          numHemiLights: a.hemi.length,
                          numDirLightShadows: a.directionalShadowMap.length,
                          numPointLightShadows: a.pointShadowMap.length,
                          numSpotLightShadows: a.spotShadowMap.length,
                          numClippingPlanes: o.numPlanes,
                          numClipIntersection: o.numIntersection,
                          dithering: i.dithering,
                          shadowMapEnabled: e.shadowMap.enabled && u.length > 0,
                          shadowMapType: e.shadowMap.type,
                          toneMapping: i.toneMapped ? e.toneMapping : $,
                          physicallyCorrectLights: e.physicallyCorrectLights,
                          premultipliedAlpha: i.premultipliedAlpha,
                          alphaTest: i.alphaTest,
                          doubleSided: i.side === g,
                          flipSided: i.side === v,
                          depthPacking: void 0 !== i.depthPacking && i.depthPacking,
                          index0AttributeName: i.index0AttributeName,
                          extensionDerivatives: i.extensions && i.extensions.derivatives,
                          extensionFragDepth: i.extensions && i.extensions.fragDepth,
                          extensionDrawBuffers: i.extensions && i.extensions.drawBuffers,
                          extensionShaderTextureLOD: i.extensions && i.extensions.shaderTextureLOD,
                          rendererExtensionFragDepth: s || n.has('EXT_frag_depth'),
                          rendererExtensionDrawBuffers: s || n.has('WEBGL_draw_buffers'),
                          rendererExtensionShaderTextureLod: s || n.has('EXT_shader_texture_lod'),
                          customProgramCacheKey: i.customProgramCacheKey(),
                        }
                      }
                      function A(t) {
                        var n = []
                        if (
                          (t.shaderID
                            ? n.push(t.shaderID)
                            : (n.push(t.fragmentShader), n.push(t.vertexShader)),
                          void 0 !== t.defines)
                        )
                          for (var r in t.defines) n.push(r), n.push(t.defines[r])
                        if (!1 === t.isRawShaderMaterial) {
                          for (var i = 0; i < f.length; i++) n.push(t[f[i]])
                          n.push(e.outputEncoding), n.push(e.gammaFactor)
                        }
                        return n.push(t.customProgramCacheKey), n.join()
                      }
                      function w(e) {
                        var t,
                          n = p[e.type]
                        if (n) {
                          var r = Yo[n]
                          t = Co.clone(r.uniforms)
                        } else t = e.uniforms
                        return t
                      }
                      function x(t, n) {
                        for (var r, o = 0, s = a.length; o < s; o++) {
                          var l = a[o]
                          if (l.cacheKey === n) {
                            ++(r = l).usedTimes
                            break
                          }
                        }
                        return void 0 === r && ((r = new Bs(e, n, t, i)), a.push(r)), r
                      }
                      function E(e) {
                        if (0 === --e.usedTimes) {
                          var t = a.indexOf(e)
                          ;(a[t] = a[a.length - 1]), a.pop(), e.destroy()
                        }
                      }
                      return {
                        getParameters: b,
                        getProgramCacheKey: A,
                        getUniforms: w,
                        acquireProgram: x,
                        releaseProgram: E,
                        programs: a,
                      }
                    }
                    function ks() {
                      var e = new WeakMap()
                      function t(t) {
                        var n = e.get(t)
                        return void 0 === n && ((n = {}), e.set(t, n)), n
                      }
                      function n(t) {
                        e.delete(t)
                      }
                      function r(t, n, r) {
                        e.get(t)[n] = r
                      }
                      function i() {
                        e = new WeakMap()
                      }
                      return { get: t, remove: n, update: r, dispose: i }
                    }
                    function Ns(e, t) {
                      return e.groupOrder !== t.groupOrder
                        ? e.groupOrder - t.groupOrder
                        : e.renderOrder !== t.renderOrder
                        ? e.renderOrder - t.renderOrder
                        : e.program !== t.program
                        ? e.program.id - t.program.id
                        : e.material.id !== t.material.id
                        ? e.material.id - t.material.id
                        : e.z !== t.z
                        ? e.z - t.z
                        : e.id - t.id
                    }
                    function Us(e, t) {
                      return e.groupOrder !== t.groupOrder
                        ? e.groupOrder - t.groupOrder
                        : e.renderOrder !== t.renderOrder
                        ? e.renderOrder - t.renderOrder
                        : e.z !== t.z
                        ? t.z - e.z
                        : e.id - t.id
                    }
                    function Hs(e) {
                      var t = [],
                        n = 0,
                        r = [],
                        i = [],
                        o = { id: -1 }
                      function a() {
                        ;(n = 0), (r.length = 0), (i.length = 0)
                      }
                      function s(r, i, a, s, l, c) {
                        var u = t[n],
                          h = e.get(a)
                        return (
                          void 0 === u
                            ? ((u = {
                                id: r.id,
                                object: r,
                                geometry: i,
                                material: a,
                                program: h.program || o,
                                groupOrder: s,
                                renderOrder: r.renderOrder,
                                z: l,
                                group: c,
                              }),
                              (t[n] = u))
                            : ((u.id = r.id),
                              (u.object = r),
                              (u.geometry = i),
                              (u.material = a),
                              (u.program = h.program || o),
                              (u.groupOrder = s),
                              (u.renderOrder = r.renderOrder),
                              (u.z = l),
                              (u.group = c)),
                          n++,
                          u
                        )
                      }
                      function l(e, t, n, o, a, l) {
                        var c = s(e, t, n, o, a, l)
                        ;(!0 === n.transparent ? i : r).push(c)
                      }
                      function c(e, t, n, o, a, l) {
                        var c = s(e, t, n, o, a, l)
                        ;(!0 === n.transparent ? i : r).unshift(c)
                      }
                      function u(e, t) {
                        r.length > 1 && r.sort(e || Ns), i.length > 1 && i.sort(t || Us)
                      }
                      function h() {
                        for (var e = n, r = t.length; e < r; e++) {
                          var i = t[e]
                          if (null === i.id) break
                          ;(i.id = null),
                            (i.object = null),
                            (i.geometry = null),
                            (i.material = null),
                            (i.program = null),
                            (i.group = null)
                        }
                      }
                      return {
                        opaque: r,
                        transparent: i,
                        init: a,
                        push: l,
                        unshift: c,
                        finish: h,
                        sort: u,
                      }
                    }
                    function Gs(e) {
                      var t = new WeakMap()
                      function n(n, r) {
                        var i,
                          o = t.get(n)
                        return (
                          void 0 === o
                            ? ((i = new Hs(e)), t.set(n, new WeakMap()), t.get(n).set(r, i))
                            : void 0 === (i = o.get(r)) && ((i = new Hs(e)), o.set(r, i)),
                          i
                        )
                      }
                      function r() {
                        t = new WeakMap()
                      }
                      return { get: n, dispose: r }
                    }
                    function zs() {
                      var e = {}
                      return {
                        get: function (t) {
                          if (void 0 !== e[t.id]) return e[t.id]
                          var n
                          switch (t.type) {
                            case 'DirectionalLight':
                              n = { direction: new lr(), color: new Li() }
                              break
                            case 'SpotLight':
                              n = {
                                position: new lr(),
                                direction: new lr(),
                                color: new Li(),
                                distance: 0,
                                coneCos: 0,
                                penumbraCos: 0,
                                decay: 0,
                              }
                              break
                            case 'PointLight':
                              n = { position: new lr(), color: new Li(), distance: 0, decay: 0 }
                              break
                            case 'HemisphereLight':
                              n = { direction: new lr(), skyColor: new Li(), groundColor: new Li() }
                              break
                            case 'RectAreaLight':
                              n = {
                                color: new Li(),
                                position: new lr(),
                                halfWidth: new lr(),
                                halfHeight: new lr(),
                              }
                          }
                          return (e[t.id] = n), n
                        },
                      }
                    }
                    function js() {
                      var e = {}
                      return {
                        get: function (t) {
                          if (void 0 !== e[t.id]) return e[t.id]
                          var n
                          switch (t.type) {
                            case 'DirectionalLight':
                            case 'SpotLight':
                              n = {
                                shadowBias: 0,
                                shadowNormalBias: 0,
                                shadowRadius: 1,
                                shadowMapSize: new Jn(),
                              }
                              break
                            case 'PointLight':
                              n = {
                                shadowBias: 0,
                                shadowNormalBias: 0,
                                shadowRadius: 1,
                                shadowMapSize: new Jn(),
                                shadowCameraNear: 1,
                                shadowCameraFar: 1e3,
                              }
                          }
                          return (e[t.id] = n), n
                        },
                      }
                    }
                    var Vs = 0
                    function Ws(e, t) {
                      return (t.castShadow ? 1 : 0) - (e.castShadow ? 1 : 0)
                    }
                    function qs(e, t) {
                      for (
                        var n = new zs(),
                          r = js(),
                          i = {
                            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: [],
                          },
                          o = 0;
                        o < 9;
                        o++
                      )
                        i.probe.push(new lr())
                      var a = new lr(),
                        s = new Fr(),
                        l = new Fr()
                      function c(o) {
                        for (var a = 0, s = 0, l = 0, c = 0; c < 9; c++) i.probe[c].set(0, 0, 0)
                        var u = 0,
                          h = 0,
                          d = 0,
                          p = 0,
                          f = 0,
                          m = 0,
                          v = 0,
                          g = 0
                        o.sort(Ws)
                        for (var y = 0, b = o.length; y < b; y++) {
                          var A = o[y],
                            w = A.color,
                            x = A.intensity,
                            E = A.distance,
                            M = A.shadow && A.shadow.map ? A.shadow.map.texture : null
                          if (A.isAmbientLight) (a += w.r * x), (s += w.g * x), (l += w.b * x)
                          else if (A.isLightProbe)
                            for (var _ = 0; _ < 9; _++)
                              i.probe[_].addScaledVector(A.sh.coefficients[_], x)
                          else if (A.isDirectionalLight) {
                            var T = n.get(A)
                            if ((T.color.copy(A.color).multiplyScalar(A.intensity), A.castShadow)) {
                              var S = A.shadow,
                                C = r.get(A)
                              ;(C.shadowBias = S.bias),
                                (C.shadowNormalBias = S.normalBias),
                                (C.shadowRadius = S.radius),
                                (C.shadowMapSize = S.mapSize),
                                (i.directionalShadow[u] = C),
                                (i.directionalShadowMap[u] = M),
                                (i.directionalShadowMatrix[u] = A.shadow.matrix),
                                m++
                            }
                            ;(i.directional[u] = T), u++
                          } else if (A.isSpotLight) {
                            var L = n.get(A)
                            if (
                              (L.position.setFromMatrixPosition(A.matrixWorld),
                              L.color.copy(w).multiplyScalar(x),
                              (L.distance = E),
                              (L.coneCos = Math.cos(A.angle)),
                              (L.penumbraCos = Math.cos(A.angle * (1 - A.penumbra))),
                              (L.decay = A.decay),
                              A.castShadow)
                            ) {
                              var R = A.shadow,
                                P = r.get(A)
                              ;(P.shadowBias = R.bias),
                                (P.shadowNormalBias = R.normalBias),
                                (P.shadowRadius = R.radius),
                                (P.shadowMapSize = R.mapSize),
                                (i.spotShadow[d] = P),
                                (i.spotShadowMap[d] = M),
                                (i.spotShadowMatrix[d] = A.shadow.matrix),
                                g++
                            }
                            ;(i.spot[d] = L), d++
                          } else if (A.isRectAreaLight) {
                            var D = n.get(A)
                            D.color.copy(w).multiplyScalar(x),
                              D.halfWidth.set(0.5 * A.width, 0, 0),
                              D.halfHeight.set(0, 0.5 * A.height, 0),
                              (i.rectArea[p] = D),
                              p++
                          } else if (A.isPointLight) {
                            var O = n.get(A)
                            if (
                              (O.color.copy(A.color).multiplyScalar(A.intensity),
                              (O.distance = A.distance),
                              (O.decay = A.decay),
                              A.castShadow)
                            ) {
                              var I = A.shadow,
                                B = r.get(A)
                              ;(B.shadowBias = I.bias),
                                (B.shadowNormalBias = I.normalBias),
                                (B.shadowRadius = I.radius),
                                (B.shadowMapSize = I.mapSize),
                                (B.shadowCameraNear = I.camera.near),
                                (B.shadowCameraFar = I.camera.far),
                                (i.pointShadow[h] = B),
                                (i.pointShadowMap[h] = M),
                                (i.pointShadowMatrix[h] = A.shadow.matrix),
                                v++
                            }
                            ;(i.point[h] = O), h++
                          } else if (A.isHemisphereLight) {
                            var F = n.get(A)
                            F.skyColor.copy(A.color).multiplyScalar(x),
                              F.groundColor.copy(A.groundColor).multiplyScalar(x),
                              (i.hemi[f] = F),
                              f++
                          }
                        }
                        p > 0 &&
                          (t.isWebGL2 || !0 === e.has('OES_texture_float_linear')
                            ? ((i.rectAreaLTC1 = Xo.LTC_FLOAT_1), (i.rectAreaLTC2 = Xo.LTC_FLOAT_2))
                            : !0 === e.has('OES_texture_half_float_linear')
                            ? ((i.rectAreaLTC1 = Xo.LTC_HALF_1), (i.rectAreaLTC2 = Xo.LTC_HALF_2))
                            : console.error(
                                'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.',
                              )),
                          (i.ambient[0] = a),
                          (i.ambient[1] = s),
                          (i.ambient[2] = l)
                        var k = i.hash
                        ;(k.directionalLength === u &&
                          k.pointLength === h &&
                          k.spotLength === d &&
                          k.rectAreaLength === p &&
                          k.hemiLength === f &&
                          k.numDirectionalShadows === m &&
                          k.numPointShadows === v &&
                          k.numSpotShadows === g) ||
                          ((i.directional.length = u),
                          (i.spot.length = d),
                          (i.rectArea.length = p),
                          (i.point.length = h),
                          (i.hemi.length = f),
                          (i.directionalShadow.length = m),
                          (i.directionalShadowMap.length = m),
                          (i.pointShadow.length = v),
                          (i.pointShadowMap.length = v),
                          (i.spotShadow.length = g),
                          (i.spotShadowMap.length = g),
                          (i.directionalShadowMatrix.length = m),
                          (i.pointShadowMatrix.length = v),
                          (i.spotShadowMatrix.length = g),
                          (k.directionalLength = u),
                          (k.pointLength = h),
                          (k.spotLength = d),
                          (k.rectAreaLength = p),
                          (k.hemiLength = f),
                          (k.numDirectionalShadows = m),
                          (k.numPointShadows = v),
                          (k.numSpotShadows = g),
                          (i.version = Vs++))
                      }
                      function u(e, t) {
                        for (
                          var n = 0,
                            r = 0,
                            o = 0,
                            c = 0,
                            u = 0,
                            h = t.matrixWorldInverse,
                            d = 0,
                            p = e.length;
                          d < p;
                          d++
                        ) {
                          var f = e[d]
                          if (f.isDirectionalLight) {
                            var m = i.directional[n]
                            m.direction.setFromMatrixPosition(f.matrixWorld),
                              a.setFromMatrixPosition(f.target.matrixWorld),
                              m.direction.sub(a),
                              m.direction.transformDirection(h),
                              n++
                          } else if (f.isSpotLight) {
                            var v = i.spot[o]
                            v.position.setFromMatrixPosition(f.matrixWorld),
                              v.position.applyMatrix4(h),
                              v.direction.setFromMatrixPosition(f.matrixWorld),
                              a.setFromMatrixPosition(f.target.matrixWorld),
                              v.direction.sub(a),
                              v.direction.transformDirection(h),
                              o++
                          } else if (f.isRectAreaLight) {
                            var g = i.rectArea[c]
                            g.position.setFromMatrixPosition(f.matrixWorld),
                              g.position.applyMatrix4(h),
                              l.identity(),
                              s.copy(f.matrixWorld),
                              s.premultiply(h),
                              l.extractRotation(s),
                              g.halfWidth.set(0.5 * f.width, 0, 0),
                              g.halfHeight.set(0, 0.5 * f.height, 0),
                              g.halfWidth.applyMatrix4(l),
                              g.halfHeight.applyMatrix4(l),
                              c++
                          } else if (f.isPointLight) {
                            var y = i.point[r]
                            y.position.setFromMatrixPosition(f.matrixWorld),
                              y.position.applyMatrix4(h),
                              r++
                          } else if (f.isHemisphereLight) {
                            var b = i.hemi[u]
                            b.direction.setFromMatrixPosition(f.matrixWorld),
                              b.direction.transformDirection(h),
                              b.direction.normalize(),
                              u++
                          }
                        }
                      }
                      return { setup: c, setupView: u, state: i }
                    }
                    function Xs(e, t) {
                      var n = new qs(e, t),
                        r = [],
                        i = []
                      function o() {
                        ;(r.length = 0), (i.length = 0)
                      }
                      function a(e) {
                        r.push(e)
                      }
                      function s(e) {
                        i.push(e)
                      }
                      function l() {
                        n.setup(r)
                      }
                      function c(e) {
                        n.setupView(r, e)
                      }
                      return {
                        init: o,
                        state: { lightsArray: r, shadowsArray: i, lights: n },
                        setupLights: l,
                        setupLightsView: c,
                        pushLight: a,
                        pushShadow: s,
                      }
                    }
                    function Ys(e, t) {
                      var n = new WeakMap()
                      function r(r, i) {
                        var o
                        return (
                          void 0 === i && (i = 0),
                          !1 === n.has(r)
                            ? ((o = new Xs(e, t)), n.set(r, []), n.get(r).push(o))
                            : i >= n.get(r).length
                            ? ((o = new Xs(e, t)), n.get(r).push(o))
                            : (o = n.get(r)[i]),
                          o
                        )
                      }
                      function i() {
                        n = new WeakMap()
                      }
                      return { get: r, dispose: i }
                    }
                    function Qs(e) {
                      Di.call(this),
                        (this.type = 'MeshDepthMaterial'),
                        (this.depthPacking = an),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (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(e)
                    }
                    function Zs(e) {
                      Di.call(this),
                        (this.type = 'MeshDistanceMaterial'),
                        (this.referencePosition = new lr()),
                        (this.nearDistance = 1),
                        (this.farDistance = 1e3),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.map = null),
                        (this.alphaMap = null),
                        (this.displacementMap = null),
                        (this.displacementScale = 1),
                        (this.displacementBias = 0),
                        (this.fog = !1),
                        this.setValues(e)
                    }
                    ;(Qs.prototype = Object.create(Di.prototype)),
                      (Qs.prototype.constructor = Qs),
                      (Qs.prototype.isMeshDepthMaterial = !0),
                      (Qs.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          (this.depthPacking = e.depthPacking),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.map = e.map),
                          (this.alphaMap = e.alphaMap),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          this
                        )
                      }),
                      (Zs.prototype = Object.create(Di.prototype)),
                      (Zs.prototype.constructor = Zs),
                      (Zs.prototype.isMeshDistanceMaterial = !0),
                      (Zs.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.referencePosition.copy(e.referencePosition),
                          (this.nearDistance = e.nearDistance),
                          (this.farDistance = e.farDistance),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.map = e.map),
                          (this.alphaMap = e.alphaMap),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          this
                        )
                      })
                    var Ks =
                        'uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 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, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}',
                      Js = 'void main() {\n\tgl_Position = vec4( position, 1.0 );\n}'
                    function $s(e, t, n) {
                      var r = new zo(),
                        i = new Jn(),
                        o = new Jn(),
                        a = new ir(),
                        s = [],
                        l = [],
                        c = {},
                        u = { 0: v, 1: m, 2: g },
                        h = new Po({
                          defines: { SAMPLE_RATE: 2 / 8, HALF_SAMPLE_RATE: 1 / 8 },
                          uniforms: {
                            shadow_pass: { value: null },
                            resolution: { value: new Jn() },
                            radius: { value: 4 },
                          },
                          vertexShader: Js,
                          fragmentShader: Ks,
                        }),
                        p = h.clone()
                      p.defines.HORIZONTAL_PASS = 1
                      var y = new ro()
                      y.setAttribute(
                        'position',
                        new Fi(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3),
                      )
                      var b = new xo(y, h),
                        w = this
                      function x(n, r) {
                        var i = t.update(b)
                        ;(h.uniforms.shadow_pass.value = n.map.texture),
                          (h.uniforms.resolution.value = n.mapSize),
                          (h.uniforms.radius.value = n.radius),
                          e.setRenderTarget(n.mapPass),
                          e.clear(),
                          e.renderBufferDirect(r, null, i, h, b, null),
                          (p.uniforms.shadow_pass.value = n.mapPass.texture),
                          (p.uniforms.resolution.value = n.mapSize),
                          (p.uniforms.radius.value = n.radius),
                          e.setRenderTarget(n.map),
                          e.clear(),
                          e.renderBufferDirect(r, null, i, p, b, null)
                      }
                      function E(e, t, n) {
                        var r = (e << 0) | (t << 1) | (n << 2),
                          i = s[r]
                        return (
                          void 0 === i &&
                            ((i = new Qs({ depthPacking: sn, morphTargets: e, skinning: t })),
                            (s[r] = i)),
                          i
                        )
                      }
                      function M(e, t, n) {
                        var r = (e << 0) | (t << 1) | (n << 2),
                          i = l[r]
                        return (
                          void 0 === i &&
                            ((i = new Zs({ morphTargets: e, skinning: t })), (l[r] = i)),
                          i
                        )
                      }
                      function _(t, n, r, i, o, a, s) {
                        var l = null,
                          h = E,
                          d = t.customDepthMaterial
                        if (
                          (!0 === i.isPointLight && ((h = M), (d = t.customDistanceMaterial)),
                          void 0 === d)
                        ) {
                          var p = !1
                          !0 === r.morphTargets &&
                            (p =
                              n.morphAttributes &&
                              n.morphAttributes.position &&
                              n.morphAttributes.position.length > 0)
                          var m = !1
                          !0 === t.isSkinnedMesh &&
                            (!0 === r.skinning
                              ? (m = !0)
                              : console.warn(
                                  'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:',
                                  t,
                                )),
                            (l = h(p, m, !0 === t.isInstancedMesh))
                        } else l = d
                        if (
                          e.localClippingEnabled &&
                          !0 === r.clipShadows &&
                          0 !== r.clippingPlanes.length
                        ) {
                          var v = l.uuid,
                            g = r.uuid,
                            y = c[v]
                          void 0 === y && ((y = {}), (c[v] = y))
                          var b = y[g]
                          void 0 === b && ((b = l.clone()), (y[g] = b)), (l = b)
                        }
                        return (
                          (l.visible = r.visible),
                          (l.wireframe = r.wireframe),
                          (l.side =
                            s === f
                              ? null !== r.shadowSide
                                ? r.shadowSide
                                : r.side
                              : null !== r.shadowSide
                              ? r.shadowSide
                              : u[r.side]),
                          (l.clipShadows = r.clipShadows),
                          (l.clippingPlanes = r.clippingPlanes),
                          (l.clipIntersection = r.clipIntersection),
                          (l.wireframeLinewidth = r.wireframeLinewidth),
                          (l.linewidth = r.linewidth),
                          !0 === i.isPointLight &&
                            !0 === l.isMeshDistanceMaterial &&
                            (l.referencePosition.setFromMatrixPosition(i.matrixWorld),
                            (l.nearDistance = o),
                            (l.farDistance = a)),
                          l
                        )
                      }
                      function T(n, i, o, a, s) {
                        if (!1 !== n.visible) {
                          if (
                            n.layers.test(i.layers) &&
                            (n.isMesh || n.isLine || n.isPoints) &&
                            (n.castShadow || (n.receiveShadow && s === f)) &&
                            (!n.frustumCulled || r.intersectsObject(n))
                          ) {
                            n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld)
                            var l = t.update(n),
                              c = n.material
                            if (Array.isArray(c))
                              for (var u = l.groups, h = 0, d = u.length; h < d; h++) {
                                var p = u[h],
                                  m = c[p.materialIndex]
                                if (m && m.visible) {
                                  var v = _(n, l, m, a, o.near, o.far, s)
                                  e.renderBufferDirect(o, null, l, v, n, p)
                                }
                              }
                            else if (c.visible) {
                              var g = _(n, l, c, a, o.near, o.far, s)
                              e.renderBufferDirect(o, null, l, g, n, null)
                            }
                          }
                          for (var y = n.children, b = 0, A = y.length; b < A; b++)
                            T(y[b], i, o, a, s)
                        }
                      }
                      ;(this.enabled = !1),
                        (this.autoUpdate = !0),
                        (this.needsUpdate = !1),
                        (this.type = d),
                        (this.render = function (t, s, l) {
                          if (
                            !1 !== w.enabled &&
                            (!1 !== w.autoUpdate || !1 !== w.needsUpdate) &&
                            0 !== t.length
                          ) {
                            var c = e.getRenderTarget(),
                              u = e.getActiveCubeFace(),
                              h = e.getActiveMipmapLevel(),
                              d = e.state
                            d.setBlending(A),
                              d.buffers.color.setClear(1, 1, 1, 1),
                              d.buffers.depth.setTest(!0),
                              d.setScissorTest(!1)
                            for (var p = 0, m = t.length; p < m; p++) {
                              var v = t[p],
                                g = v.shadow
                              if (void 0 !== g) {
                                if (!1 !== g.autoUpdate || !1 !== g.needsUpdate) {
                                  i.copy(g.mapSize)
                                  var y = g.getFrameExtents()
                                  if (
                                    (i.multiply(y),
                                    o.copy(g.mapSize),
                                    (i.x > n || i.y > n) &&
                                      (i.x > n &&
                                        ((o.x = Math.floor(n / y.x)),
                                        (i.x = o.x * y.x),
                                        (g.mapSize.x = o.x)),
                                      i.y > n &&
                                        ((o.y = Math.floor(n / y.y)),
                                        (i.y = o.y * y.y),
                                        (g.mapSize.y = o.y))),
                                    null === g.map && !g.isPointLightShadow && this.type === f)
                                  ) {
                                    var b = { minFilter: Ae, magFilter: Ae, format: Ue }
                                    ;(g.map = new or(i.x, i.y, b)),
                                      (g.map.texture.name = v.name + '.shadowMap'),
                                      (g.mapPass = new or(i.x, i.y, b)),
                                      g.camera.updateProjectionMatrix()
                                  }
                                  if (null === g.map) {
                                    var E = { minFilter: me, magFilter: me, format: Ue }
                                    ;(g.map = new or(i.x, i.y, E)),
                                      (g.map.texture.name = v.name + '.shadowMap'),
                                      g.camera.updateProjectionMatrix()
                                  }
                                  e.setRenderTarget(g.map), e.clear()
                                  for (var M = g.getViewportCount(), _ = 0; _ < M; _++) {
                                    var S = g.getViewport(_)
                                    a.set(o.x * S.x, o.y * S.y, o.x * S.z, o.y * S.w),
                                      d.viewport(a),
                                      g.updateMatrices(v, _),
                                      (r = g.getFrustum()),
                                      T(s, l, g.camera, v, this.type)
                                  }
                                  g.isPointLightShadow || this.type !== f || x(g, l),
                                    (g.needsUpdate = !1)
                                }
                              } else console.warn('THREE.WebGLShadowMap:', v, 'has no shadow.')
                            }
                            ;(w.needsUpdate = !1), e.setRenderTarget(c, u, h)
                          }
                        })
                    }
                    function el(e, t, n) {
                      var r,
                        i,
                        o = n.isWebGL2
                      function a() {
                        var t = !1,
                          n = new ir(),
                          r = null,
                          i = new ir(0, 0, 0, 0)
                        return {
                          setMask: function (n) {
                            r === n || t || (e.colorMask(n, n, n, n), (r = n))
                          },
                          setLocked: function (e) {
                            t = e
                          },
                          setClear: function (t, r, o, a, s) {
                            !0 === s && ((t *= a), (r *= a), (o *= a)),
                              n.set(t, r, o, a),
                              !1 === i.equals(n) && (e.clearColor(t, r, o, a), i.copy(n))
                          },
                          reset: function () {
                            ;(t = !1), (r = null), i.set(-1, 0, 0, 0)
                          },
                        }
                      }
                      function u() {
                        var t = !1,
                          n = null,
                          r = null,
                          i = null
                        return {
                          setTest: function (e) {
                            e ? be(2929) : Ae(2929)
                          },
                          setMask: function (r) {
                            n === r || t || (e.depthMask(r), (n = r))
                          },
                          setFunc: function (t) {
                            if (r !== t) {
                              if (t)
                                switch (t) {
                                  case z:
                                    e.depthFunc(512)
                                    break
                                  case j:
                                    e.depthFunc(519)
                                    break
                                  case V:
                                    e.depthFunc(513)
                                    break
                                  case W:
                                    e.depthFunc(515)
                                    break
                                  case q:
                                    e.depthFunc(514)
                                    break
                                  case X:
                                    e.depthFunc(518)
                                    break
                                  case Y:
                                    e.depthFunc(516)
                                    break
                                  case Q:
                                    e.depthFunc(517)
                                    break
                                  default:
                                    e.depthFunc(515)
                                }
                              else e.depthFunc(515)
                              r = t
                            }
                          },
                          setLocked: function (e) {
                            t = e
                          },
                          setClear: function (t) {
                            i !== t && (e.clearDepth(t), (i = t))
                          },
                          reset: function () {
                            ;(t = !1), (n = null), (r = null), (i = null)
                          },
                        }
                      }
                      function h() {
                        var t = !1,
                          n = null,
                          r = null,
                          i = null,
                          o = null,
                          a = null,
                          s = null,
                          l = null,
                          c = null
                        return {
                          setTest: function (e) {
                            t || (e ? be(2960) : Ae(2960))
                          },
                          setMask: function (r) {
                            n === r || t || (e.stencilMask(r), (n = r))
                          },
                          setFunc: function (t, n, a) {
                            ;(r === t && i === n && o === a) ||
                              (e.stencilFunc(t, n, a), (r = t), (i = n), (o = a))
                          },
                          setOp: function (t, n, r) {
                            ;(a === t && s === n && l === r) ||
                              (e.stencilOp(t, n, r), (a = t), (s = n), (l = r))
                          },
                          setLocked: function (e) {
                            t = e
                          },
                          setClear: function (t) {
                            c !== t && (e.clearStencil(t), (c = t))
                          },
                          reset: function () {
                            ;(t = !1),
                              (n = null),
                              (r = null),
                              (i = null),
                              (o = null),
                              (a = null),
                              (s = null),
                              (l = null),
                              (c = null)
                          },
                        }
                      }
                      var d = new a(),
                        p = new u(),
                        f = new h(),
                        m = {},
                        y = null,
                        b = null,
                        Z = null,
                        K = null,
                        J = null,
                        $ = null,
                        ee = null,
                        te = null,
                        ne = null,
                        re = !1,
                        ie = null,
                        oe = null,
                        ae = null,
                        se = null,
                        le = null,
                        ce = e.getParameter(35661),
                        ue = !1,
                        he = 0,
                        de = e.getParameter(7938)
                      ;-1 !== de.indexOf('WebGL')
                        ? ((he = parseFloat(/^WebGL (\d)/.exec(de)[1])), (ue = he >= 1))
                        : -1 !== de.indexOf('OpenGL ES') &&
                          ((he = parseFloat(/^OpenGL ES (\d)/.exec(de)[1])), (ue = he >= 2))
                      var pe = null,
                        fe = {},
                        me = new ir(),
                        ve = new ir()
                      function ge(t, n, r) {
                        var i = new Uint8Array(4),
                          o = e.createTexture()
                        e.bindTexture(t, o),
                          e.texParameteri(t, 10241, 9728),
                          e.texParameteri(t, 10240, 9728)
                        for (var a = 0; a < r; a++)
                          e.texImage2D(n + a, 0, 6408, 1, 1, 0, 6408, 5121, i)
                        return o
                      }
                      var ye = {}
                      function be(t) {
                        !0 !== m[t] && (e.enable(t), (m[t] = !0))
                      }
                      function Ae(t) {
                        !1 !== m[t] && (e.disable(t), (m[t] = !1))
                      }
                      function we(t) {
                        return y !== t && (e.useProgram(t), (y = t), !0)
                      }
                      ;(ye[3553] = ge(3553, 3553, 1)),
                        (ye[34067] = ge(34067, 34069, 6)),
                        d.setClear(0, 0, 0, 1),
                        p.setClear(1),
                        f.setClear(0),
                        be(2929),
                        p.setFunc(W),
                        Se(!1),
                        Ce(l),
                        be(2884),
                        _e(A)
                      var xe = (((r = {})[T] = 32774), (r[S] = 32778), (r[C] = 32779), r)
                      if (o) (xe[L] = 32775), (xe[R] = 32776)
                      else {
                        var Ee = t.get('EXT_blend_minmax')
                        null !== Ee && ((xe[L] = Ee.MIN_EXT), (xe[R] = Ee.MAX_EXT))
                      }
                      var Me =
                        (((i = {})[P] = 0),
                        (i[D] = 1),
                        (i[O] = 768),
                        (i[B] = 770),
                        (i[G] = 776),
                        (i[U] = 774),
                        (i[k] = 772),
                        (i[I] = 769),
                        (i[F] = 771),
                        (i[H] = 775),
                        (i[N] = 773),
                        i)
                      function _e(t, n, r, i, o, a, s, l) {
                        if (t !== A) {
                          if ((b || (be(3042), (b = !0)), t === _))
                            (o = o || n),
                              (a = a || r),
                              (s = s || i),
                              (n === K && o === ee) ||
                                (e.blendEquationSeparate(xe[n], xe[o]), (K = n), (ee = o)),
                              (r === J && i === $ && a === te && s === ne) ||
                                (e.blendFuncSeparate(Me[r], Me[i], Me[a], Me[s]),
                                (J = r),
                                ($ = i),
                                (te = a),
                                (ne = s)),
                              (Z = t),
                              (re = null)
                          else if (t !== Z || l !== re) {
                            if (
                              ((K === T && ee === T) || (e.blendEquation(32774), (K = T), (ee = T)),
                              l)
                            )
                              switch (t) {
                                case w:
                                  e.blendFuncSeparate(1, 771, 1, 771)
                                  break
                                case x:
                                  e.blendFunc(1, 1)
                                  break
                                case E:
                                  e.blendFuncSeparate(0, 0, 769, 771)
                                  break
                                case M:
                                  e.blendFuncSeparate(0, 768, 0, 770)
                                  break
                                default:
                                  console.error('THREE.WebGLState: Invalid blending: ', t)
                              }
                            else
                              switch (t) {
                                case w:
                                  e.blendFuncSeparate(770, 771, 1, 771)
                                  break
                                case x:
                                  e.blendFunc(770, 1)
                                  break
                                case E:
                                  e.blendFunc(0, 769)
                                  break
                                case M:
                                  e.blendFunc(0, 768)
                                  break
                                default:
                                  console.error('THREE.WebGLState: Invalid blending: ', t)
                              }
                            ;(J = null), ($ = null), (te = null), (ne = null), (Z = t), (re = l)
                          }
                        } else b && (Ae(3042), (b = !1))
                      }
                      function Te(e, t) {
                        e.side === g ? Ae(2884) : be(2884)
                        var n = e.side === v
                        t && (n = !n),
                          Se(n),
                          e.blending === w && !1 === e.transparent
                            ? _e(A)
                            : _e(
                                e.blending,
                                e.blendEquation,
                                e.blendSrc,
                                e.blendDst,
                                e.blendEquationAlpha,
                                e.blendSrcAlpha,
                                e.blendDstAlpha,
                                e.premultipliedAlpha,
                              ),
                          p.setFunc(e.depthFunc),
                          p.setTest(e.depthTest),
                          p.setMask(e.depthWrite),
                          d.setMask(e.colorWrite)
                        var r = e.stencilWrite
                        f.setTest(r),
                          r &&
                            (f.setMask(e.stencilWriteMask),
                            f.setFunc(e.stencilFunc, e.stencilRef, e.stencilFuncMask),
                            f.setOp(e.stencilFail, e.stencilZFail, e.stencilZPass)),
                          Re(e.polygonOffset, e.polygonOffsetFactor, e.polygonOffsetUnits)
                      }
                      function Se(t) {
                        ie !== t && (t ? e.frontFace(2304) : e.frontFace(2305), (ie = t))
                      }
                      function Ce(t) {
                        t !== s
                          ? (be(2884),
                            t !== oe &&
                              (t === l
                                ? e.cullFace(1029)
                                : t === c
                                ? e.cullFace(1028)
                                : e.cullFace(1032)))
                          : Ae(2884),
                          (oe = t)
                      }
                      function Le(t) {
                        t !== ae && (ue && e.lineWidth(t), (ae = t))
                      }
                      function Re(t, n, r) {
                        t
                          ? (be(32823),
                            (se === n && le === r) || (e.polygonOffset(n, r), (se = n), (le = r)))
                          : Ae(32823)
                      }
                      function Pe(e) {
                        e ? be(3089) : Ae(3089)
                      }
                      function De(t) {
                        void 0 === t && (t = 33984 + ce - 1),
                          pe !== t && (e.activeTexture(t), (pe = t))
                      }
                      function Oe(t, n) {
                        null === pe && De()
                        var r = fe[pe]
                        void 0 === r && ((r = { type: void 0, texture: void 0 }), (fe[pe] = r)),
                          (r.type === t && r.texture === n) ||
                            (e.bindTexture(t, n || ye[t]), (r.type = t), (r.texture = n))
                      }
                      function Ie() {
                        var t = fe[pe]
                        void 0 !== t &&
                          void 0 !== t.type &&
                          (e.bindTexture(t.type, null), (t.type = void 0), (t.texture = void 0))
                      }
                      function Be() {
                        try {
                          e.compressedTexImage2D.apply(e, arguments)
                        } catch (t) {
                          console.error('THREE.WebGLState:', t)
                        }
                      }
                      function Fe() {
                        try {
                          e.texImage2D.apply(e, arguments)
                        } catch (t) {
                          console.error('THREE.WebGLState:', t)
                        }
                      }
                      function ke() {
                        try {
                          e.texImage3D.apply(e, arguments)
                        } catch (t) {
                          console.error('THREE.WebGLState:', t)
                        }
                      }
                      function Ne(t) {
                        !1 === me.equals(t) && (e.scissor(t.x, t.y, t.z, t.w), me.copy(t))
                      }
                      function Ue(t) {
                        !1 === ve.equals(t) && (e.viewport(t.x, t.y, t.z, t.w), ve.copy(t))
                      }
                      function He() {
                        ;(m = {}),
                          (pe = null),
                          (fe = {}),
                          (y = null),
                          (b = null),
                          (Z = null),
                          (K = null),
                          (J = null),
                          ($ = null),
                          (ee = null),
                          (te = null),
                          (ne = null),
                          (re = !1),
                          (ie = null),
                          (oe = null),
                          (ae = null),
                          (se = null),
                          (le = null),
                          d.reset(),
                          p.reset(),
                          f.reset()
                      }
                      return {
                        buffers: { color: d, depth: p, stencil: f },
                        enable: be,
                        disable: Ae,
                        useProgram: we,
                        setBlending: _e,
                        setMaterial: Te,
                        setFlipSided: Se,
                        setCullFace: Ce,
                        setLineWidth: Le,
                        setPolygonOffset: Re,
                        setScissorTest: Pe,
                        activeTexture: De,
                        bindTexture: Oe,
                        unbindTexture: Ie,
                        compressedTexImage2D: Be,
                        texImage2D: Fe,
                        texImage3D: ke,
                        scissor: Ne,
                        viewport: Ue,
                        reset: He,
                      }
                    }
                    function tl(e, t, n, r, i, o, a) {
                      var s,
                        l,
                        c,
                        u = i.isWebGL2,
                        h = i.maxTextures,
                        d = i.maxCubemapSize,
                        p = i.maxTextureSize,
                        f = i.maxSamples,
                        m = new WeakMap(),
                        v = !1
                      try {
                        v =
                          'undefined' !== typeof OffscreenCanvas &&
                          null !== new OffscreenCanvas(1, 1).getContext('2d')
                      } catch (te) {}
                      function g(e, t) {
                        return v
                          ? new OffscreenCanvas(e, t)
                          : document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas')
                      }
                      function y(e, t, n, r) {
                        var i = 1
                        if (
                          ((e.width > r || e.height > r) && (i = r / Math.max(e.width, e.height)),
                          i < 1 || !0 === t)
                        ) {
                          if (
                            ('undefined' !== typeof HTMLImageElement &&
                              e instanceof HTMLImageElement) ||
                            ('undefined' !== typeof HTMLCanvasElement &&
                              e instanceof HTMLCanvasElement) ||
                            ('undefined' !== typeof ImageBitmap && e instanceof ImageBitmap)
                          ) {
                            var o = t ? Kn.floorPowerOfTwo : Math.floor,
                              a = o(i * e.width),
                              s = o(i * e.height)
                            void 0 === c && (c = g(a, s))
                            var l = n ? g(a, s) : c
                            return (
                              (l.width = a),
                              (l.height = s),
                              l.getContext('2d').drawImage(e, 0, 0, a, s),
                              console.warn(
                                'THREE.WebGLRenderer: Texture has been resized from (' +
                                  e.width +
                                  'x' +
                                  e.height +
                                  ') to (' +
                                  a +
                                  'x' +
                                  s +
                                  ').',
                              ),
                              l
                            )
                          }
                          return (
                            'data' in e &&
                              console.warn(
                                'THREE.WebGLRenderer: Image in DataTexture is too big (' +
                                  e.width +
                                  'x' +
                                  e.height +
                                  ').',
                              ),
                            e
                          )
                        }
                        return e
                      }
                      function b(e) {
                        return Kn.isPowerOfTwo(e.width) && Kn.isPowerOfTwo(e.height)
                      }
                      function A(e) {
                        return (
                          !u &&
                          (e.wrapS !== pe ||
                            e.wrapT !== pe ||
                            (e.minFilter !== me && e.minFilter !== Ae))
                        )
                      }
                      function w(e, t) {
                        return e.generateMipmaps && t && e.minFilter !== me && e.minFilter !== Ae
                      }
                      function x(t, n, i, o) {
                        e.generateMipmap(t),
                          (r.get(n).__maxMipLevel = Math.log(Math.max(i, o)) * Math.LOG2E)
                      }
                      function E(n, r, i) {
                        if (!1 === u) return r
                        if (null !== n) {
                          if (void 0 !== e[n]) return e[n]
                          console.warn(
                            "THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" +
                              n +
                              "'",
                          )
                        }
                        var o = r
                        return (
                          6403 === r &&
                            (5126 === i && (o = 33326),
                            5131 === i && (o = 33325),
                            5121 === i && (o = 33321)),
                          6407 === r &&
                            (5126 === i && (o = 34837),
                            5131 === i && (o = 34843),
                            5121 === i && (o = 32849)),
                          6408 === r &&
                            (5126 === i && (o = 34836),
                            5131 === i && (o = 34842),
                            5121 === i && (o = 32856)),
                          (33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o) ||
                            t.get('EXT_color_buffer_float'),
                          o
                        )
                      }
                      function M(e) {
                        return e === me || e === ve || e === ye ? 9728 : 9729
                      }
                      function _(e) {
                        var t = e.target
                        t.removeEventListener('dispose', _),
                          S(t),
                          t.isVideoTexture && m.delete(t),
                          a.memory.textures--
                      }
                      function T(e) {
                        var t = e.target
                        t.removeEventListener('dispose', T), C(t), a.memory.textures--
                      }
                      function S(t) {
                        var n = r.get(t)
                        void 0 !== n.__webglInit && (e.deleteTexture(n.__webglTexture), r.remove(t))
                      }
                      function C(t) {
                        var n = r.get(t),
                          i = r.get(t.texture)
                        if (t) {
                          if (
                            (void 0 !== i.__webglTexture && e.deleteTexture(i.__webglTexture),
                            t.depthTexture && t.depthTexture.dispose(),
                            t.isWebGLCubeRenderTarget)
                          )
                            for (var o = 0; o < 6; o++)
                              e.deleteFramebuffer(n.__webglFramebuffer[o]),
                                n.__webglDepthbuffer &&
                                  e.deleteRenderbuffer(n.__webglDepthbuffer[o])
                          else
                            e.deleteFramebuffer(n.__webglFramebuffer),
                              n.__webglDepthbuffer && e.deleteRenderbuffer(n.__webglDepthbuffer),
                              n.__webglMultisampledFramebuffer &&
                                e.deleteFramebuffer(n.__webglMultisampledFramebuffer),
                              n.__webglColorRenderbuffer &&
                                e.deleteRenderbuffer(n.__webglColorRenderbuffer),
                              n.__webglDepthRenderbuffer &&
                                e.deleteRenderbuffer(n.__webglDepthRenderbuffer)
                          r.remove(t.texture), r.remove(t)
                        }
                      }
                      var L = 0
                      function R() {
                        L = 0
                      }
                      function P() {
                        var e = L
                        return (
                          e >= h &&
                            console.warn(
                              'THREE.WebGLTextures: Trying to use ' +
                                e +
                                ' texture units while this GPU supports only ' +
                                h,
                            ),
                          (L += 1),
                          e
                        )
                      }
                      function D(e, t) {
                        var i = r.get(e)
                        if (
                          (e.isVideoTexture && Z(e), e.version > 0 && i.__version !== e.version)
                        ) {
                          var o = e.image
                          if (void 0 === o)
                            console.warn(
                              'THREE.WebGLRenderer: Texture marked for update but image is undefined',
                            )
                          else {
                            if (!1 !== o.complete) return void H(i, e, t)
                            console.warn(
                              'THREE.WebGLRenderer: Texture marked for update but image is incomplete',
                            )
                          }
                        }
                        n.activeTexture(33984 + t), n.bindTexture(3553, i.__webglTexture)
                      }
                      function O(e, t) {
                        var i = r.get(e)
                        e.version > 0 && i.__version !== e.version
                          ? H(i, e, t)
                          : (n.activeTexture(33984 + t), n.bindTexture(35866, i.__webglTexture))
                      }
                      function I(e, t) {
                        var i = r.get(e)
                        e.version > 0 && i.__version !== e.version
                          ? H(i, e, t)
                          : (n.activeTexture(33984 + t), n.bindTexture(32879, i.__webglTexture))
                      }
                      function B(e, t) {
                        var i = r.get(e)
                        e.version > 0 && i.__version !== e.version
                          ? G(i, e, t)
                          : (n.activeTexture(33984 + t), n.bindTexture(34067, i.__webglTexture))
                      }
                      var F = (((s = {})[de] = 10497), (s[pe] = 33071), (s[fe] = 33648), s),
                        k =
                          (((l = {})[me] = 9728),
                          (l[ve] = 9984),
                          (l[ye] = 9986),
                          (l[Ae] = 9729),
                          (l[we] = 9985),
                          (l[Ee] = 9987),
                          l)
                      function N(n, o, a) {
                        a
                          ? (e.texParameteri(n, 10242, F[o.wrapS]),
                            e.texParameteri(n, 10243, F[o.wrapT]),
                            (32879 !== n && 35866 !== n) || e.texParameteri(n, 32882, F[o.wrapR]),
                            e.texParameteri(n, 10240, k[o.magFilter]),
                            e.texParameteri(n, 10241, k[o.minFilter]))
                          : (e.texParameteri(n, 10242, 33071),
                            e.texParameteri(n, 10243, 33071),
                            (32879 !== n && 35866 !== n) || e.texParameteri(n, 32882, 33071),
                            (o.wrapS === pe && o.wrapT === pe) ||
                              console.warn(
                                'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.',
                              ),
                            e.texParameteri(n, 10240, M(o.magFilter)),
                            e.texParameteri(n, 10241, M(o.minFilter)),
                            o.minFilter !== me &&
                              o.minFilter !== Ae &&
                              console.warn(
                                'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.',
                              ))
                        var s = t.get('EXT_texture_filter_anisotropic')
                        if (s) {
                          if (o.type === Pe && null === t.get('OES_texture_float_linear')) return
                          if (
                            o.type === De &&
                            null === (u || t.get('OES_texture_half_float_linear'))
                          )
                            return
                          ;(o.anisotropy > 1 || r.get(o).__currentAnisotropy) &&
                            (e.texParameterf(
                              n,
                              s.TEXTURE_MAX_ANISOTROPY_EXT,
                              Math.min(o.anisotropy, i.getMaxAnisotropy()),
                            ),
                            (r.get(o).__currentAnisotropy = o.anisotropy))
                        }
                      }
                      function U(t, n) {
                        void 0 === t.__webglInit &&
                          ((t.__webglInit = !0),
                          n.addEventListener('dispose', _),
                          (t.__webglTexture = e.createTexture()),
                          a.memory.textures++)
                      }
                      function H(t, r, i) {
                        var a = 3553
                        r.isDataTexture2DArray && (a = 35866),
                          r.isDataTexture3D && (a = 32879),
                          U(t, r),
                          n.activeTexture(33984 + i),
                          n.bindTexture(a, t.__webglTexture),
                          e.pixelStorei(37440, r.flipY),
                          e.pixelStorei(37441, r.premultiplyAlpha),
                          e.pixelStorei(3317, r.unpackAlignment)
                        var s,
                          l = A(r) && !1 === b(r.image),
                          c = y(r.image, l, !1, p),
                          h = b(c) || u,
                          d = o.convert(r.format),
                          f = o.convert(r.type),
                          m = E(r.internalFormat, d, f)
                        N(a, r, h)
                        var v = r.mipmaps
                        if (r.isDepthTexture)
                          (m = 6402),
                            u
                              ? (m =
                                  r.type === Pe
                                    ? 36012
                                    : r.type === Re
                                    ? 33190
                                    : r.type === Fe
                                    ? 35056
                                    : 33189)
                              : r.type === Pe &&
                                console.error(
                                  'WebGLRenderer: Floating point depth texture requires WebGL2.',
                                ),
                            r.format === je &&
                              6402 === m &&
                              r.type !== Ce &&
                              r.type !== Re &&
                              (console.warn(
                                'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.',
                              ),
                              (r.type = Ce),
                              (f = o.convert(r.type))),
                            r.format === Ve &&
                              6402 === m &&
                              ((m = 34041),
                              r.type !== Fe &&
                                (console.warn(
                                  'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.',
                                ),
                                (r.type = Fe),
                                (f = o.convert(r.type)))),
                            n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null)
                        else if (r.isDataTexture)
                          if (v.length > 0 && h) {
                            for (var g = 0, M = v.length; g < M; g++)
                              (s = v[g]),
                                n.texImage2D(3553, g, m, s.width, s.height, 0, d, f, s.data)
                            ;(r.generateMipmaps = !1), (t.__maxMipLevel = v.length - 1)
                          } else
                            n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data),
                              (t.__maxMipLevel = 0)
                        else if (r.isCompressedTexture) {
                          for (var _ = 0, T = v.length; _ < T; _++)
                            (s = v[_]),
                              r.format !== Ue && r.format !== Ne
                                ? null !== d
                                  ? n.compressedTexImage2D(3553, _, m, s.width, s.height, 0, s.data)
                                  : console.warn(
                                      'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()',
                                    )
                                : n.texImage2D(3553, _, m, s.width, s.height, 0, d, f, s.data)
                          t.__maxMipLevel = v.length - 1
                        } else if (r.isDataTexture2DArray)
                          n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data),
                            (t.__maxMipLevel = 0)
                        else if (r.isDataTexture3D)
                          n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data),
                            (t.__maxMipLevel = 0)
                        else if (v.length > 0 && h) {
                          for (var S = 0, C = v.length; S < C; S++)
                            (s = v[S]), n.texImage2D(3553, S, m, d, f, s)
                          ;(r.generateMipmaps = !1), (t.__maxMipLevel = v.length - 1)
                        } else n.texImage2D(3553, 0, m, d, f, c), (t.__maxMipLevel = 0)
                        w(r, h) && x(a, r, c.width, c.height),
                          (t.__version = r.version),
                          r.onUpdate && r.onUpdate(r)
                      }
                      function G(t, r, i) {
                        if (6 === r.image.length) {
                          U(t, r),
                            n.activeTexture(33984 + i),
                            n.bindTexture(34067, t.__webglTexture),
                            e.pixelStorei(37440, r.flipY),
                            e.pixelStorei(37441, r.premultiplyAlpha),
                            e.pixelStorei(3317, r.unpackAlignment)
                          for (
                            var a = r && (r.isCompressedTexture || r.image[0].isCompressedTexture),
                              s = r.image[0] && r.image[0].isDataTexture,
                              l = [],
                              c = 0;
                            c < 6;
                            c++
                          )
                            l[c] =
                              a || s
                                ? s
                                  ? r.image[c].image
                                  : r.image[c]
                                : y(r.image[c], !1, !0, d)
                          var h,
                            p = l[0],
                            f = b(p) || u,
                            m = o.convert(r.format),
                            v = o.convert(r.type),
                            g = E(r.internalFormat, m, v)
                          if ((N(34067, r, f), a)) {
                            for (var A = 0; A < 6; A++) {
                              h = l[A].mipmaps
                              for (var M = 0; M < h.length; M++) {
                                var _ = h[M]
                                r.format !== Ue && r.format !== Ne
                                  ? null !== m
                                    ? n.compressedTexImage2D(
                                        34069 + A,
                                        M,
                                        g,
                                        _.width,
                                        _.height,
                                        0,
                                        _.data,
                                      )
                                    : console.warn(
                                        'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()',
                                      )
                                  : n.texImage2D(
                                      34069 + A,
                                      M,
                                      g,
                                      _.width,
                                      _.height,
                                      0,
                                      m,
                                      v,
                                      _.data,
                                    )
                              }
                            }
                            t.__maxMipLevel = h.length - 1
                          } else {
                            h = r.mipmaps
                            for (var T = 0; T < 6; T++)
                              if (s) {
                                n.texImage2D(
                                  34069 + T,
                                  0,
                                  g,
                                  l[T].width,
                                  l[T].height,
                                  0,
                                  m,
                                  v,
                                  l[T].data,
                                )
                                for (var S = 0; S < h.length; S++) {
                                  var C = h[S].image[T].image
                                  n.texImage2D(
                                    34069 + T,
                                    S + 1,
                                    g,
                                    C.width,
                                    C.height,
                                    0,
                                    m,
                                    v,
                                    C.data,
                                  )
                                }
                              } else {
                                n.texImage2D(34069 + T, 0, g, m, v, l[T])
                                for (var L = 0; L < h.length; L++) {
                                  var R = h[L]
                                  n.texImage2D(34069 + T, L + 1, g, m, v, R.image[T])
                                }
                              }
                            t.__maxMipLevel = h.length
                          }
                          w(r, f) && x(34067, r, p.width, p.height),
                            (t.__version = r.version),
                            r.onUpdate && r.onUpdate(r)
                        }
                      }
                      function z(t, i, a, s) {
                        var l = o.convert(i.texture.format),
                          c = o.convert(i.texture.type),
                          u = E(i.texture.internalFormat, l, c)
                        n.texImage2D(s, 0, u, i.width, i.height, 0, l, c, null),
                          e.bindFramebuffer(36160, t),
                          e.framebufferTexture2D(36160, a, s, r.get(i.texture).__webglTexture, 0),
                          e.bindFramebuffer(36160, null)
                      }
                      function j(t, n, r) {
                        if ((e.bindRenderbuffer(36161, t), n.depthBuffer && !n.stencilBuffer)) {
                          var i = 33189
                          if (r) {
                            var a = n.depthTexture
                            a &&
                              a.isDepthTexture &&
                              (a.type === Pe ? (i = 36012) : a.type === Re && (i = 33190))
                            var s = Q(n)
                            e.renderbufferStorageMultisample(36161, s, i, n.width, n.height)
                          } else e.renderbufferStorage(36161, i, n.width, n.height)
                          e.framebufferRenderbuffer(36160, 36096, 36161, t)
                        } else if (n.depthBuffer && n.stencilBuffer) {
                          if (r) {
                            var l = Q(n)
                            e.renderbufferStorageMultisample(36161, l, 35056, n.width, n.height)
                          } else e.renderbufferStorage(36161, 34041, n.width, n.height)
                          e.framebufferRenderbuffer(36160, 33306, 36161, t)
                        } else {
                          var c = o.convert(n.texture.format),
                            u = o.convert(n.texture.type),
                            h = E(n.texture.internalFormat, c, u)
                          if (r) {
                            var d = Q(n)
                            e.renderbufferStorageMultisample(36161, d, h, n.width, n.height)
                          } else e.renderbufferStorage(36161, h, n.width, n.height)
                        }
                        e.bindRenderbuffer(36161, null)
                      }
                      function V(t, n) {
                        if (n && n.isWebGLCubeRenderTarget)
                          throw new Error('Depth Texture with cube render targets is not supported')
                        if (
                          (e.bindFramebuffer(36160, t),
                          !n.depthTexture || !n.depthTexture.isDepthTexture)
                        )
                          throw new Error(
                            'renderTarget.depthTexture must be an instance of THREE.DepthTexture',
                          )
                        ;(r.get(n.depthTexture).__webglTexture &&
                          n.depthTexture.image.width === n.width &&
                          n.depthTexture.image.height === n.height) ||
                          ((n.depthTexture.image.width = n.width),
                          (n.depthTexture.image.height = n.height),
                          (n.depthTexture.needsUpdate = !0)),
                          D(n.depthTexture, 0)
                        var i = r.get(n.depthTexture).__webglTexture
                        if (n.depthTexture.format === je)
                          e.framebufferTexture2D(36160, 36096, 3553, i, 0)
                        else {
                          if (n.depthTexture.format !== Ve)
                            throw new Error('Unknown depthTexture format')
                          e.framebufferTexture2D(36160, 33306, 3553, i, 0)
                        }
                      }
                      function W(t) {
                        var n = r.get(t),
                          i = !0 === t.isWebGLCubeRenderTarget
                        if (t.depthTexture) {
                          if (i)
                            throw new Error(
                              'target.depthTexture not supported in Cube render targets',
                            )
                          V(n.__webglFramebuffer, t)
                        } else if (i) {
                          n.__webglDepthbuffer = []
                          for (var o = 0; o < 6; o++)
                            e.bindFramebuffer(36160, n.__webglFramebuffer[o]),
                              (n.__webglDepthbuffer[o] = e.createRenderbuffer()),
                              j(n.__webglDepthbuffer[o], t, !1)
                        } else
                          e.bindFramebuffer(36160, n.__webglFramebuffer),
                            (n.__webglDepthbuffer = e.createRenderbuffer()),
                            j(n.__webglDepthbuffer, t, !1)
                        e.bindFramebuffer(36160, null)
                      }
                      function q(t) {
                        var i = r.get(t),
                          s = r.get(t.texture)
                        t.addEventListener('dispose', T),
                          (s.__webglTexture = e.createTexture()),
                          a.memory.textures++
                        var l = !0 === t.isWebGLCubeRenderTarget,
                          c = !0 === t.isWebGLMultisampleRenderTarget,
                          h = b(t) || u
                        if (
                          (!u ||
                            t.texture.format !== Ne ||
                            (t.texture.type !== Pe && t.texture.type !== De) ||
                            ((t.texture.format = Ue),
                            console.warn(
                              'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.',
                            )),
                          l)
                        ) {
                          i.__webglFramebuffer = []
                          for (var d = 0; d < 6; d++)
                            i.__webglFramebuffer[d] = e.createFramebuffer()
                        } else if (((i.__webglFramebuffer = e.createFramebuffer()), c))
                          if (u) {
                            ;(i.__webglMultisampledFramebuffer = e.createFramebuffer()),
                              (i.__webglColorRenderbuffer = e.createRenderbuffer()),
                              e.bindRenderbuffer(36161, i.__webglColorRenderbuffer)
                            var p = o.convert(t.texture.format),
                              f = o.convert(t.texture.type),
                              m = E(t.texture.internalFormat, p, f),
                              v = Q(t)
                            e.renderbufferStorageMultisample(36161, v, m, t.width, t.height),
                              e.bindFramebuffer(36160, i.__webglMultisampledFramebuffer),
                              e.framebufferRenderbuffer(
                                36160,
                                36064,
                                36161,
                                i.__webglColorRenderbuffer,
                              ),
                              e.bindRenderbuffer(36161, null),
                              t.depthBuffer &&
                                ((i.__webglDepthRenderbuffer = e.createRenderbuffer()),
                                j(i.__webglDepthRenderbuffer, t, !0)),
                              e.bindFramebuffer(36160, null)
                          } else
                            console.warn(
                              'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.',
                            )
                        if (l) {
                          n.bindTexture(34067, s.__webglTexture), N(34067, t.texture, h)
                          for (var g = 0; g < 6; g++)
                            z(i.__webglFramebuffer[g], t, 36064, 34069 + g)
                          w(t.texture, h) && x(34067, t.texture, t.width, t.height),
                            n.bindTexture(34067, null)
                        } else
                          n.bindTexture(3553, s.__webglTexture),
                            N(3553, t.texture, h),
                            z(i.__webglFramebuffer, t, 36064, 3553),
                            w(t.texture, h) && x(3553, t.texture, t.width, t.height),
                            n.bindTexture(3553, null)
                        t.depthBuffer && W(t)
                      }
                      function X(e) {
                        var t = e.texture
                        if (w(t, b(e) || u)) {
                          var i = e.isWebGLCubeRenderTarget ? 34067 : 3553,
                            o = r.get(t).__webglTexture
                          n.bindTexture(i, o), x(i, t, e.width, e.height), n.bindTexture(i, null)
                        }
                      }
                      function Y(t) {
                        if (t.isWebGLMultisampleRenderTarget)
                          if (u) {
                            var n = r.get(t)
                            e.bindFramebuffer(36008, n.__webglMultisampledFramebuffer),
                              e.bindFramebuffer(36009, n.__webglFramebuffer)
                            var i = t.width,
                              o = t.height,
                              a = 16384
                            t.depthBuffer && (a |= 256),
                              t.stencilBuffer && (a |= 1024),
                              e.blitFramebuffer(0, 0, i, o, 0, 0, i, o, a, 9728),
                              e.bindFramebuffer(36160, n.__webglMultisampledFramebuffer)
                          } else
                            console.warn(
                              'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.',
                            )
                      }
                      function Q(e) {
                        return u && e.isWebGLMultisampleRenderTarget ? Math.min(f, e.samples) : 0
                      }
                      function Z(e) {
                        var t = a.render.frame
                        m.get(e) !== t && (m.set(e, t), e.update())
                      }
                      var K = !1,
                        J = !1
                      function $(e, t) {
                        e &&
                          e.isWebGLRenderTarget &&
                          (!1 === K &&
                            (console.warn(
                              "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.",
                            ),
                            (K = !0)),
                          (e = e.texture)),
                          D(e, t)
                      }
                      function ee(e, t) {
                        e &&
                          e.isWebGLCubeRenderTarget &&
                          (!1 === J &&
                            (console.warn(
                              "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.",
                            ),
                            (J = !0)),
                          (e = e.texture)),
                          B(e, t)
                      }
                      ;(this.allocateTextureUnit = P),
                        (this.resetTextureUnits = R),
                        (this.setTexture2D = D),
                        (this.setTexture2DArray = O),
                        (this.setTexture3D = I),
                        (this.setTextureCube = B),
                        (this.setupRenderTarget = q),
                        (this.updateRenderTargetMipmap = X),
                        (this.updateMultisampleRenderTarget = Y),
                        (this.safeSetTexture2D = $),
                        (this.safeSetTextureCube = ee)
                    }
                    function nl(e, t, n) {
                      var r = n.isWebGL2
                      function i(e) {
                        var n
                        if (e === _e) return 5121
                        if (e === Oe) return 32819
                        if (e === Ie) return 32820
                        if (e === Be) return 33635
                        if (e === Te) return 5120
                        if (e === Se) return 5122
                        if (e === Ce) return 5123
                        if (e === Le) return 5124
                        if (e === Re) return 5125
                        if (e === Pe) return 5126
                        if (e === De)
                          return r
                            ? 5131
                            : null !== (n = t.get('OES_texture_half_float'))
                            ? n.HALF_FLOAT_OES
                            : null
                        if (e === ke) return 6406
                        if (e === Ne) return 6407
                        if (e === Ue) return 6408
                        if (e === He) return 6409
                        if (e === Ge) return 6410
                        if (e === je) return 6402
                        if (e === Ve) return 34041
                        if (e === We) return 6403
                        if (e === qe) return 36244
                        if (e === Xe) return 33319
                        if (e === Ye) return 33320
                        if (e === Qe) return 36248
                        if (e === Ze) return 36249
                        if (e === Ke || e === Je || e === $e || e === et) {
                          if (null === (n = t.get('WEBGL_compressed_texture_s3tc'))) return null
                          if (e === Ke) return n.COMPRESSED_RGB_S3TC_DXT1_EXT
                          if (e === Je) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT
                          if (e === $e) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT
                          if (e === et) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT
                        }
                        if (e === tt || e === nt || e === rt || e === it) {
                          if (null === (n = t.get('WEBGL_compressed_texture_pvrtc'))) return null
                          if (e === tt) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
                          if (e === nt) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG
                          if (e === rt) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
                          if (e === it) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
                        }
                        if (e === ot)
                          return null !== (n = t.get('WEBGL_compressed_texture_etc1'))
                            ? n.COMPRESSED_RGB_ETC1_WEBGL
                            : null
                        if (
                          (e === at || e === st) &&
                          null !== (n = t.get('WEBGL_compressed_texture_etc'))
                        ) {
                          if (e === at) return n.COMPRESSED_RGB8_ETC2
                          if (e === st) return n.COMPRESSED_RGBA8_ETC2_EAC
                        }
                        return e === lt ||
                          e === ct ||
                          e === ut ||
                          e === ht ||
                          e === dt ||
                          e === pt ||
                          e === ft ||
                          e === mt ||
                          e === vt ||
                          e === gt ||
                          e === yt ||
                          e === bt ||
                          e === At ||
                          e === wt ||
                          e === Et ||
                          e === Mt ||
                          e === _t ||
                          e === Tt ||
                          e === St ||
                          e === Ct ||
                          e === Lt ||
                          e === Rt ||
                          e === Pt ||
                          e === Dt ||
                          e === Ot ||
                          e === It ||
                          e === Bt ||
                          e === Ft
                          ? null !== (n = t.get('WEBGL_compressed_texture_astc'))
                            ? e
                            : null
                          : e === xt
                          ? null !== (n = t.get('EXT_texture_compression_bptc'))
                            ? e
                            : null
                          : e === Fe
                          ? r
                            ? 34042
                            : null !== (n = t.get('WEBGL_depth_texture'))
                            ? n.UNSIGNED_INT_24_8_WEBGL
                            : null
                          : void 0
                      }
                      return { convert: i }
                    }
                    function rl() {
                      si.call(this), (this.type = 'Group')
                    }
                    function il(e) {
                      void 0 === e && (e = []), Oo.call(this), (this.cameras = e)
                    }
                    ;(rl.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: rl,
                      isGroup: !0,
                    })),
                      (il.prototype = Object.assign(Object.create(Oo.prototype), {
                        constructor: il,
                        isArrayCamera: !0,
                      }))
                    var ol = new lr(),
                      al = new lr()
                    function sl(e, t, n) {
                      ol.setFromMatrixPosition(t.matrixWorld),
                        al.setFromMatrixPosition(n.matrixWorld)
                      var r = ol.distanceTo(al),
                        i = t.projectionMatrix.elements,
                        o = n.projectionMatrix.elements,
                        a = i[14] / (i[10] - 1),
                        s = i[14] / (i[10] + 1),
                        l = (i[9] + 1) / i[5],
                        c = (i[9] - 1) / i[5],
                        u = (i[8] - 1) / i[0],
                        h = (o[8] + 1) / o[0],
                        d = a * u,
                        p = a * h,
                        f = r / (-u + h),
                        m = f * -u
                      t.matrixWorld.decompose(e.position, e.quaternion, e.scale),
                        e.translateX(m),
                        e.translateZ(f),
                        e.matrixWorld.compose(e.position, e.quaternion, e.scale),
                        e.matrixWorldInverse.getInverse(e.matrixWorld)
                      var v = a + f,
                        g = s + f,
                        y = d - m,
                        b = p + (r - m),
                        A = ((l * s) / g) * v,
                        w = ((c * s) / g) * v
                      e.projectionMatrix.makePerspective(y, b, A, w, v, g)
                    }
                    function ll(e) {
                      var t,
                        n,
                        r = this,
                        i = null,
                        o = null,
                        a = null,
                        s = [],
                        l = new Fr(),
                        c = new Fr(),
                        u = 1,
                        h = 'local-floor'
                      'undefined' !== typeof window &&
                        'VRFrameData' in window &&
                        ((o = new window.VRFrameData()),
                        window.addEventListener('vrdisplaypresentchange', A, !1))
                      var d = new Fr(),
                        p = new sr(),
                        f = new lr(),
                        m = new Oo()
                      ;(m.viewport = new ir()), m.layers.enable(1)
                      var v = new Oo()
                      ;(v.viewport = new ir()), v.layers.enable(2)
                      var g = new il([m, v])
                      g.layers.enable(1), g.layers.enable(2)
                      var y,
                        b = new Jn()
                      function A() {
                        if ((r.isPresenting = null !== i && !0 === i.isPresenting)) {
                          var o = i.getEyeParameters('left')
                          ;(t = 2 * o.renderWidth * u),
                            (n = o.renderHeight * u),
                            (y = e.getPixelRatio()),
                            e.getSize(b),
                            e.setDrawingBufferSize(t, n, 1),
                            m.viewport.set(0, 0, t / 2, n),
                            v.viewport.set(t / 2, 0, t / 2, n),
                            T.start(),
                            r.dispatchEvent({ type: 'sessionstart' })
                        } else
                          r.enabled && e.setDrawingBufferSize(b.width, b.height, y),
                            T.stop(),
                            r.dispatchEvent({ type: 'sessionend' })
                      }
                      var w = [],
                        x = []
                      function E(e) {
                        for (
                          var t = navigator.getGamepads && navigator.getGamepads(),
                            n = 0,
                            r = t.length;
                          n < r;
                          n++
                        ) {
                          var i = t[n]
                          if (
                            i &&
                            ('Daydream Controller' === i.id ||
                              'Gear VR Controller' === i.id ||
                              'Oculus Go Controller' === i.id ||
                              'OpenVR Gamepad' === i.id ||
                              i.id.startsWith('Oculus Touch') ||
                              i.id.startsWith('HTC Vive Focus') ||
                              i.id.startsWith('Spatial Controller'))
                          ) {
                            var o = i.hand
                            if (0 === e && ('' === o || 'right' === o)) return i
                            if (1 === e && 'left' === o) return i
                          }
                        }
                      }
                      function M() {
                        for (var e = 0; e < s.length; e++) {
                          var t = s[e],
                            n = E(e)
                          if (void 0 !== n && void 0 !== n.pose) {
                            if (null === n.pose) return
                            var r = n.pose
                            !1 === r.hasPosition && t.position.set(0.2, -0.6, -0.05),
                              null !== r.position && t.position.fromArray(r.position),
                              null !== r.orientation && t.quaternion.fromArray(r.orientation),
                              t.matrix.compose(t.position, t.quaternion, t.scale),
                              t.matrix.premultiply(l),
                              t.matrix.decompose(t.position, t.quaternion, t.scale),
                              (t.matrixWorldNeedsUpdate = !0),
                              (t.visible = !0)
                            var i = 'Daydream Controller' === n.id ? 0 : 1
                            void 0 === w[e] && (w[e] = !1),
                              w[e] !== n.buttons[i].pressed &&
                                ((w[e] = n.buttons[i].pressed),
                                !0 === w[e]
                                  ? t.dispatchEvent({ type: 'selectstart' })
                                  : (t.dispatchEvent({ type: 'selectend' }),
                                    t.dispatchEvent({ type: 'select' }))),
                              (i = 2),
                              void 0 === x[e] && (x[e] = !1),
                              void 0 !== n.buttons[i] &&
                                x[e] !== n.buttons[i].pressed &&
                                ((x[e] = n.buttons[i].pressed),
                                !0 === x[e]
                                  ? t.dispatchEvent({ type: 'squeezestart' })
                                  : (t.dispatchEvent({ type: 'squeezeend' }),
                                    t.dispatchEvent({ type: 'squeeze' })))
                          } else t.visible = !1
                        }
                      }
                      function _(e, r) {
                        null !== r &&
                          4 === r.length &&
                          e.set(r[0] * t, r[1] * n, r[2] * t, r[3] * n)
                      }
                      ;(this.enabled = !1),
                        (this.getController = function (e) {
                          var t = s[e]
                          return (
                            void 0 === t &&
                              (((t = new rl()).matrixAutoUpdate = !1),
                              (t.visible = !1),
                              (s[e] = t)),
                            t
                          )
                        }),
                        (this.getDevice = function () {
                          return i
                        }),
                        (this.setDevice = function (e) {
                          void 0 !== e && (i = e), T.setContext(e)
                        }),
                        (this.setFramebufferScaleFactor = function (e) {
                          u = e
                        }),
                        (this.setReferenceSpaceType = function (e) {
                          h = e
                        }),
                        (this.setPoseTarget = function (e) {
                          void 0 !== e && (a = e)
                        }),
                        (this.getCamera = function (e) {
                          var t = 'local-floor' === h ? 1.6 : 0
                          if (
                            ((i.depthNear = e.near),
                            (i.depthFar = e.far),
                            i.getFrameData(o),
                            'local-floor' === h)
                          ) {
                            var n = i.stageParameters
                            n
                              ? l.fromArray(n.sittingToStandingTransform)
                              : l.makeTranslation(0, t, 0)
                          }
                          var r = o.pose,
                            s = null !== a ? a : e
                          s.matrix.copy(l),
                            s.matrix.decompose(s.position, s.quaternion, s.scale),
                            null !== r.orientation &&
                              (p.fromArray(r.orientation), s.quaternion.multiply(p)),
                            null !== r.position &&
                              (p.setFromRotationMatrix(l),
                              f.fromArray(r.position),
                              f.applyQuaternion(p),
                              s.position.add(f)),
                            s.updateMatrixWorld()
                          for (var u = s.children, y = 0, b = u.length; y < b; y++)
                            u[y].updateMatrixWorld(!0)
                          ;(m.near = e.near),
                            (v.near = e.near),
                            (m.far = e.far),
                            (v.far = e.far),
                            m.matrixWorldInverse.fromArray(o.leftViewMatrix),
                            v.matrixWorldInverse.fromArray(o.rightViewMatrix),
                            c.getInverse(l),
                            'local-floor' === h &&
                              (m.matrixWorldInverse.multiply(c), v.matrixWorldInverse.multiply(c))
                          var A = s.parent
                          null !== A &&
                            (d.getInverse(A.matrixWorld),
                            m.matrixWorldInverse.multiply(d),
                            v.matrixWorldInverse.multiply(d)),
                            m.matrixWorld.getInverse(m.matrixWorldInverse),
                            v.matrixWorld.getInverse(v.matrixWorldInverse),
                            m.projectionMatrix.fromArray(o.leftProjectionMatrix),
                            v.projectionMatrix.fromArray(o.rightProjectionMatrix),
                            sl(g, m, v)
                          var w = i.getLayers()
                          if (w.length) {
                            var x = w[0]
                            _(m.viewport, x.leftBounds), _(v.viewport, x.rightBounds)
                          }
                          return M(), g
                        }),
                        (this.getStandingMatrix = function () {
                          return l
                        }),
                        (this.isPresenting = !1)
                      var T = new jo()
                      ;(this.setAnimationLoop = function (e) {
                        T.setAnimationLoop(e), this.isPresenting && T.start()
                      }),
                        (this.submitFrame = function () {
                          this.isPresenting && i.submitFrame()
                        }),
                        (this.dispose = function () {
                          'undefined' !== typeof window &&
                            window.removeEventListener('vrdisplaypresentchange', A)
                        }),
                        (this.setFrameOfReferenceType = function () {
                          console.warn(
                            'THREE.WebVRManager: setFrameOfReferenceType() has been deprecated.',
                          )
                        })
                    }
                    function cl() {
                      ;(this._targetRay = null), (this._grip = null), (this._hand = null)
                    }
                    function ul(e, t) {
                      var n,
                        r = this,
                        i = null,
                        o = 1,
                        a = null,
                        s = 'local-floor',
                        l = null,
                        c = null,
                        u = [],
                        h = new Map(),
                        d = [],
                        p = new Oo()
                      p.layers.enable(1), (p.viewport = new ir())
                      var f = new Oo()
                      f.layers.enable(2), (f.viewport = new ir())
                      var m = [p, f],
                        v = new il()
                      v.layers.enable(1), v.layers.enable(2)
                      var g = null,
                        y = null
                      function b(e) {
                        var t = h.get(e.inputSource)
                        t && t.dispatchEvent({ type: e.type, data: e.inputSource })
                      }
                      function A() {
                        h.forEach(function (e, t) {
                          e.disconnect(t)
                        }),
                          h.clear(),
                          (g = null),
                          (y = null),
                          e.setFramebuffer(null),
                          e.setRenderTarget(e.getRenderTarget()),
                          C.stop(),
                          (r.isPresenting = !1),
                          r.dispatchEvent({ type: 'sessionend' })
                      }
                      function w(e) {
                        for (var t = i.inputSources, n = 0; n < u.length; n++) h.set(t[n], u[n])
                        for (var r = 0; r < e.removed.length; r++) {
                          var o = e.removed[r],
                            a = h.get(o)
                          a && (a.dispatchEvent({ type: 'disconnected', data: o }), h.delete(o))
                        }
                        for (var s = 0; s < e.added.length; s++) {
                          var l = e.added[s],
                            c = h.get(l)
                          c && c.dispatchEvent({ type: 'connected', data: l })
                        }
                      }
                      ;(this.layersEnabled = !1),
                        (this.enabled = !1),
                        (this.isPresenting = !1),
                        (this.getCameraPose = function () {
                          return l
                        }),
                        (this.getController = function (e) {
                          var t = u[e]
                          return void 0 === t && ((t = new cl()), (u[e] = t)), t.getTargetRaySpace()
                        }),
                        (this.getControllerGrip = function (e) {
                          var t = u[e]
                          return void 0 === t && ((t = new cl()), (u[e] = t)), t.getGripSpace()
                        }),
                        (this.getHand = function (e) {
                          var t = u[e]
                          return void 0 === t && ((t = new cl()), (u[e] = t)), t.getHandSpace()
                        }),
                        (this.setFramebufferScaleFactor = function (e) {
                          ;(o = e),
                            !0 === r.isPresenting &&
                              console.warn(
                                'THREE.WebXRManager: Cannot change framebuffer scale while presenting.',
                              )
                        }),
                        (this.setReferenceSpaceType = function (e) {
                          ;(s = e),
                            !0 === r.isPresenting &&
                              console.warn(
                                'THREE.WebXRManager: Cannot change reference space type while presenting.',
                              )
                        }),
                        (this.getReferenceSpace = function () {
                          return a
                        }),
                        (this.getSession = function () {
                          return i
                        }),
                        (this.setSession = (function () {
                          var e = Nn(
                            regeneratorRuntime.mark(function e(l) {
                              var c, u
                              return regeneratorRuntime.wrap(
                                function (e) {
                                  for (;;)
                                    switch ((e.prev = e.next)) {
                                      case 0:
                                        if (null === (i = l)) {
                                          e.next = 24
                                          break
                                        }
                                        if (
                                          (i.addEventListener('select', b),
                                          i.addEventListener('selectstart', b),
                                          i.addEventListener('selectend', b),
                                          i.addEventListener('squeeze', b),
                                          i.addEventListener('squeezestart', b),
                                          i.addEventListener('squeezeend', b),
                                          i.addEventListener('end', A),
                                          i.addEventListener('inputsourceschange', w),
                                          !0 === (c = t.getContextAttributes()).xrCompatible)
                                        ) {
                                          e.next = 14
                                          break
                                        }
                                        return (e.next = 14), t.makeXRCompatible()
                                      case 14:
                                        return (
                                          (u = {
                                            antialias: c.antialias,
                                            alpha: c.alpha,
                                            depth: c.depth,
                                            stencil: c.stencil,
                                            framebufferScaleFactor: o,
                                          }),
                                          (n = new XRWebGLLayer(i, t, u)),
                                          window.XRWebGLBinding && this.layersEnabled
                                            ? this.addLayer(n)
                                            : i.updateRenderState({ baseLayer: n }),
                                          (e.next = 19),
                                          i.requestReferenceSpace(s)
                                        )
                                      case 19:
                                        ;(a = e.sent),
                                          C.setContext(i),
                                          C.start(),
                                          (r.isPresenting = !0),
                                          r.dispatchEvent({ type: 'sessionstart' })
                                      case 24:
                                      case 'end':
                                        return e.stop()
                                    }
                                },
                                e,
                                this,
                              )
                            }),
                          )
                          return function (t) {
                            return e.apply(this, arguments)
                          }
                        })()),
                        (this.addLayer = function (e) {
                          window.XRWebGLBinding &&
                            this.layersEnabled &&
                            i &&
                            (d.push(e), i.updateRenderState({ layers: d }))
                        }),
                        (this.removeLayer = function (e) {
                          window.XRWebGLBinding &&
                            this.layersEnabled &&
                            i &&
                            (d.splice(d.indexOf(e), 1), i.updateRenderState({ layers: d }))
                        })
                      var x = new lr(),
                        E = new lr()
                      function M(e, t, n) {
                        x.setFromMatrixPosition(t.matrixWorld),
                          E.setFromMatrixPosition(n.matrixWorld)
                        var r = x.distanceTo(E),
                          i = t.projectionMatrix.elements,
                          o = n.projectionMatrix.elements,
                          a = i[14] / (i[10] - 1),
                          s = i[14] / (i[10] + 1),
                          l = (i[9] + 1) / i[5],
                          c = (i[9] - 1) / i[5],
                          u = (i[8] - 1) / i[0],
                          h = (o[8] + 1) / o[0],
                          d = a * u,
                          p = a * h,
                          f = r / (-u + h),
                          m = f * -u
                        t.matrixWorld.decompose(e.position, e.quaternion, e.scale),
                          e.translateX(m),
                          e.translateZ(f),
                          e.matrixWorld.compose(e.position, e.quaternion, e.scale),
                          e.matrixWorldInverse.copy(e.matrixWorld).invert()
                        var v = a + f,
                          g = s + f,
                          y = d - m,
                          b = p + (r - m),
                          A = ((l * s) / g) * v,
                          w = ((c * s) / g) * v
                        e.projectionMatrix.makePerspective(y, b, A, w, v, g)
                      }
                      function _(e, t) {
                        null === t
                          ? e.matrixWorld.copy(e.matrix)
                          : e.matrixWorld.multiplyMatrices(t.matrixWorld, e.matrix),
                          e.matrixWorldInverse.copy(e.matrixWorld).invert()
                      }
                      ;(this.setPoseTarget = function (e) {
                        void 0 !== e && (c = e)
                      }),
                        (this.getCamera = function (e) {
                          ;(v.near = f.near = p.near = e.near),
                            (v.far = f.far = p.far = e.far),
                            (g === v.near && y === v.far) ||
                              (i.updateRenderState({ depthNear: v.near, depthFar: v.far }),
                              (g = v.near),
                              (y = v.far))
                          var t = e.parent,
                            n = v.cameras,
                            r = c || e
                          _(v, t)
                          for (var o = 0; o < n.length; o++) _(n[o], t)
                          r.matrixWorld.copy(v.matrixWorld)
                          for (var a = r.children, s = 0, l = a.length; s < l; s++)
                            a[s].updateMatrixWorld(!0)
                          return (
                            2 === n.length
                              ? M(v, p, f)
                              : v.projectionMatrix.copy(p.projectionMatrix),
                            v
                          )
                        })
                      var T = null
                      function S(t, r) {
                        if (null !== (l = r.getViewerPose(a))) {
                          var o = l.views
                          e.setFramebuffer(n.framebuffer)
                          var s = !1
                          o.length !== v.cameras.length && ((v.cameras.length = 0), (s = !0))
                          for (var c = 0; c < o.length; c++) {
                            var h = o[c],
                              d = n.getViewport(h),
                              p = m[c]
                            p.matrix.fromArray(h.transform.matrix),
                              p.projectionMatrix.fromArray(h.projectionMatrix),
                              p.viewport.set(d.x, d.y, d.width, d.height),
                              0 === c && v.matrix.copy(p.matrix),
                              !0 === s && v.cameras.push(p)
                          }
                        }
                        for (var f = i.inputSources, g = 0; g < u.length; g++) {
                          var y = u[g],
                            b = f[g]
                          y.update(b, r, a)
                        }
                        T && T(t, r)
                      }
                      var C = new jo()
                      C.setAnimationLoop(S),
                        (this.setAnimationLoop = function (e) {
                          T = e
                        }),
                        (this.dispose = function () {})
                    }
                    function hl(e) {
                      function t(e, t) {
                        e.fogColor.value.copy(t.color),
                          t.isFog
                            ? ((e.fogNear.value = t.near), (e.fogFar.value = t.far))
                            : t.isFogExp2 && (e.fogDensity.value = t.density)
                      }
                      function n(e, t, n, v) {
                        t.isMeshBasicMaterial
                          ? r(e, t)
                          : t.isMeshLambertMaterial
                          ? (r(e, t), l(e, t))
                          : t.isMeshToonMaterial
                          ? (r(e, t), u(e, t))
                          : t.isMeshPhongMaterial
                          ? (r(e, t), c(e, t))
                          : t.isMeshStandardMaterial
                          ? (r(e, t), t.isMeshPhysicalMaterial ? d(e, t) : h(e, t))
                          : t.isMeshMatcapMaterial
                          ? (r(e, t), p(e, t))
                          : t.isMeshDepthMaterial
                          ? (r(e, t), f(e, t))
                          : t.isMeshDistanceMaterial
                          ? (r(e, t), m(e, t))
                          : t.isMeshNormalMaterial
                          ? (r(e, t), g(e, t))
                          : t.isLineBasicMaterial
                          ? (i(e, t), t.isLineDashedMaterial && o(e, t))
                          : t.isPointsMaterial
                          ? a(e, t, n, v)
                          : t.isSpriteMaterial
                          ? s(e, t)
                          : t.isShadowMaterial
                          ? (e.color.value.copy(t.color), (e.opacity.value = t.opacity))
                          : t.isShaderMaterial && (t.uniformsNeedUpdate = !1)
                      }
                      function r(t, n) {
                        ;(t.opacity.value = n.opacity),
                          n.color && t.diffuse.value.copy(n.color),
                          n.emissive &&
                            t.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),
                          n.map && (t.map.value = n.map),
                          n.alphaMap && (t.alphaMap.value = n.alphaMap),
                          n.specularMap && (t.specularMap.value = n.specularMap)
                        var r,
                          i,
                          o = e.get(n).envMap
                        if (o) {
                          ;(t.envMap.value = o),
                            (t.flipEnvMap.value = o.isCubeTexture && o._needsFlipEnvMap ? -1 : 1),
                            (t.reflectivity.value = n.reflectivity),
                            (t.refractionRatio.value = n.refractionRatio)
                          var a = e.get(o).__maxMipLevel
                          void 0 !== a && (t.maxMipLevel.value = a)
                        }
                        n.lightMap &&
                          ((t.lightMap.value = n.lightMap),
                          (t.lightMapIntensity.value = n.lightMapIntensity)),
                          n.aoMap &&
                            ((t.aoMap.value = n.aoMap),
                            (t.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),
                          void 0 !== r &&
                            (r.isWebGLRenderTarget && (r = r.texture),
                            !0 === r.matrixAutoUpdate && r.updateMatrix(),
                            t.uvTransform.value.copy(r.matrix)),
                          n.aoMap ? (i = n.aoMap) : n.lightMap && (i = n.lightMap),
                          void 0 !== i &&
                            (i.isWebGLRenderTarget && (i = i.texture),
                            !0 === i.matrixAutoUpdate && i.updateMatrix(),
                            t.uv2Transform.value.copy(i.matrix))
                      }
                      function i(e, t) {
                        e.diffuse.value.copy(t.color), (e.opacity.value = t.opacity)
                      }
                      function o(e, t) {
                        ;(e.dashSize.value = t.dashSize),
                          (e.totalSize.value = t.dashSize + t.gapSize),
                          (e.scale.value = t.scale)
                      }
                      function a(e, t, n, r) {
                        var i
                        e.diffuse.value.copy(t.color),
                          (e.opacity.value = t.opacity),
                          (e.size.value = t.size * n),
                          (e.scale.value = 0.5 * r),
                          t.map && (e.map.value = t.map),
                          t.alphaMap && (e.alphaMap.value = t.alphaMap),
                          t.map ? (i = t.map) : t.alphaMap && (i = t.alphaMap),
                          void 0 !== i &&
                            (!0 === i.matrixAutoUpdate && i.updateMatrix(),
                            e.uvTransform.value.copy(i.matrix))
                      }
                      function s(e, t) {
                        var n
                        e.diffuse.value.copy(t.color),
                          (e.opacity.value = t.opacity),
                          (e.rotation.value = t.rotation),
                          t.map && (e.map.value = t.map),
                          t.alphaMap && (e.alphaMap.value = t.alphaMap),
                          t.map ? (n = t.map) : t.alphaMap && (n = t.alphaMap),
                          void 0 !== n &&
                            (!0 === n.matrixAutoUpdate && n.updateMatrix(),
                            e.uvTransform.value.copy(n.matrix))
                      }
                      function l(e, t) {
                        t.emissiveMap && (e.emissiveMap.value = t.emissiveMap)
                      }
                      function c(e, t) {
                        e.specular.value.copy(t.specular),
                          (e.shininess.value = Math.max(t.shininess, 1e-4)),
                          t.emissiveMap && (e.emissiveMap.value = t.emissiveMap),
                          t.bumpMap &&
                            ((e.bumpMap.value = t.bumpMap),
                            (e.bumpScale.value = t.bumpScale),
                            t.side === v && (e.bumpScale.value *= -1)),
                          t.normalMap &&
                            ((e.normalMap.value = t.normalMap),
                            e.normalScale.value.copy(t.normalScale),
                            t.side === v && e.normalScale.value.negate()),
                          t.displacementMap &&
                            ((e.displacementMap.value = t.displacementMap),
                            (e.displacementScale.value = t.displacementScale),
                            (e.displacementBias.value = t.displacementBias))
                      }
                      function u(e, t) {
                        t.gradientMap && (e.gradientMap.value = t.gradientMap),
                          t.emissiveMap && (e.emissiveMap.value = t.emissiveMap),
                          t.bumpMap &&
                            ((e.bumpMap.value = t.bumpMap),
                            (e.bumpScale.value = t.bumpScale),
                            t.side === v && (e.bumpScale.value *= -1)),
                          t.normalMap &&
                            ((e.normalMap.value = t.normalMap),
                            e.normalScale.value.copy(t.normalScale),
                            t.side === v && e.normalScale.value.negate()),
                          t.displacementMap &&
                            ((e.displacementMap.value = t.displacementMap),
                            (e.displacementScale.value = t.displacementScale),
                            (e.displacementBias.value = t.displacementBias))
                      }
                      function h(t, n) {
                        ;(t.roughness.value = n.roughness),
                          (t.metalness.value = n.metalness),
                          n.roughnessMap && (t.roughnessMap.value = n.roughnessMap),
                          n.metalnessMap && (t.metalnessMap.value = n.metalnessMap),
                          n.emissiveMap && (t.emissiveMap.value = n.emissiveMap),
                          n.bumpMap &&
                            ((t.bumpMap.value = n.bumpMap),
                            (t.bumpScale.value = n.bumpScale),
                            n.side === v && (t.bumpScale.value *= -1)),
                          n.normalMap &&
                            ((t.normalMap.value = n.normalMap),
                            t.normalScale.value.copy(n.normalScale),
                            n.side === v && t.normalScale.value.negate()),
                          n.displacementMap &&
                            ((t.displacementMap.value = n.displacementMap),
                            (t.displacementScale.value = n.displacementScale),
                            (t.displacementBias.value = n.displacementBias)),
                          e.get(n).envMap && (t.envMapIntensity.value = n.envMapIntensity)
                      }
                      function d(e, t) {
                        h(e, t),
                          (e.reflectivity.value = t.reflectivity),
                          (e.clearcoat.value = t.clearcoat),
                          (e.clearcoatRoughness.value = t.clearcoatRoughness),
                          t.sheen && e.sheen.value.copy(t.sheen),
                          t.clearcoatMap && (e.clearcoatMap.value = t.clearcoatMap),
                          t.clearcoatRoughnessMap &&
                            (e.clearcoatRoughnessMap.value = t.clearcoatRoughnessMap),
                          t.clearcoatNormalMap &&
                            (e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),
                            (e.clearcoatNormalMap.value = t.clearcoatNormalMap),
                            t.side === v && e.clearcoatNormalScale.value.negate()),
                          (e.transmission.value = t.transmission),
                          t.transmissionMap && (e.transmissionMap.value = t.transmissionMap)
                      }
                      function p(e, t) {
                        t.matcap && (e.matcap.value = t.matcap),
                          t.bumpMap &&
                            ((e.bumpMap.value = t.bumpMap),
                            (e.bumpScale.value = t.bumpScale),
                            t.side === v && (e.bumpScale.value *= -1)),
                          t.normalMap &&
                            ((e.normalMap.value = t.normalMap),
                            e.normalScale.value.copy(t.normalScale),
                            t.side === v && e.normalScale.value.negate()),
                          t.displacementMap &&
                            ((e.displacementMap.value = t.displacementMap),
                            (e.displacementScale.value = t.displacementScale),
                            (e.displacementBias.value = t.displacementBias))
                      }
                      function f(e, t) {
                        t.displacementMap &&
                          ((e.displacementMap.value = t.displacementMap),
                          (e.displacementScale.value = t.displacementScale),
                          (e.displacementBias.value = t.displacementBias))
                      }
                      function m(e, t) {
                        t.displacementMap &&
                          ((e.displacementMap.value = t.displacementMap),
                          (e.displacementScale.value = t.displacementScale),
                          (e.displacementBias.value = t.displacementBias)),
                          e.referencePosition.value.copy(t.referencePosition),
                          (e.nearDistance.value = t.nearDistance),
                          (e.farDistance.value = t.farDistance)
                      }
                      function g(e, t) {
                        t.bumpMap &&
                          ((e.bumpMap.value = t.bumpMap),
                          (e.bumpScale.value = t.bumpScale),
                          t.side === v && (e.bumpScale.value *= -1)),
                          t.normalMap &&
                            ((e.normalMap.value = t.normalMap),
                            e.normalScale.value.copy(t.normalScale),
                            t.side === v && e.normalScale.value.negate()),
                          t.displacementMap &&
                            ((e.displacementMap.value = t.displacementMap),
                            (e.displacementScale.value = t.displacementScale),
                            (e.displacementBias.value = t.displacementBias))
                      }
                      return { refreshFogUniforms: t, refreshMaterialUniforms: n }
                    }
                    function dl() {
                      var e = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas')
                      return (e.style.display = 'block'), e
                    }
                    function pl(e) {
                      var t = void 0 !== (e = e || {}).canvas ? e.canvas : dl(),
                        n = void 0 !== e.context ? e.context : null,
                        r = void 0 !== e.alpha && e.alpha,
                        i = void 0 === e.depth || e.depth,
                        o = void 0 === e.stencil || e.stencil,
                        a = void 0 !== e.antialias && e.antialias,
                        s = void 0 === e.premultipliedAlpha || e.premultipliedAlpha,
                        l = void 0 !== e.preserveDrawingBuffer && e.preserveDrawingBuffer,
                        c = void 0 !== e.powerPreference ? e.powerPreference : 'default',
                        u =
                          void 0 !== e.failIfMajorPerformanceCaveat &&
                          e.failIfMajorPerformanceCaveat,
                        h = null,
                        d = null,
                        p = []
                      ;(this.domElement = t),
                        (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 = Kt),
                        (this.physicallyCorrectLights = !1),
                        (this.toneMapping = $),
                        (this.toneMappingExposure = 1),
                        (this.maxMorphTargets = 8),
                        (this.maxMorphNormals = 4)
                      var f = this,
                        m = !1,
                        v = null,
                        g = 0,
                        y = 0,
                        b = null,
                        A = null,
                        w = -1,
                        x = null,
                        E = new ir(),
                        M = new ir(),
                        _ = null,
                        T = t.width,
                        S = t.height,
                        C = 1,
                        L = null,
                        R = null,
                        P = new ir(0, 0, T, S),
                        D = new ir(0, 0, T, S),
                        O = !1,
                        I = new zo(),
                        B = !1,
                        F = !1,
                        k = new Fr(),
                        N = new lr(),
                        U = {
                          background: null,
                          fog: null,
                          environment: null,
                          overrideMaterial: null,
                          isScene: !0,
                        }
                      function H() {
                        return null === b ? C : 1
                      }
                      var G,
                        z,
                        j,
                        V,
                        W,
                        q,
                        X,
                        Y,
                        Q,
                        Z,
                        K,
                        J,
                        ee,
                        te,
                        ne,
                        re,
                        ie,
                        oe,
                        ae,
                        se,
                        le,
                        ce = n
                      function ue(e, n) {
                        for (var r = 0; r < e.length; r++) {
                          var i = e[r],
                            o = t.getContext(i, n)
                          if (null !== o) return o
                        }
                        return null
                      }
                      try {
                        var he = {
                          alpha: r,
                          depth: i,
                          stencil: o,
                          antialias: a,
                          premultipliedAlpha: s,
                          preserveDrawingBuffer: l,
                          powerPreference: c,
                          failIfMajorPerformanceCaveat: u,
                        }
                        if (
                          (t.addEventListener('webglcontextlost', ve, !1),
                          t.addEventListener('webglcontextrestored', ge, !1),
                          null === ce)
                        ) {
                          var de = ['webgl2', 'webgl', 'experimental-webgl']
                          if ((!0 === f.isWebGL1Renderer && de.shift(), null === (ce = ue(de, he))))
                            throw ue(de)
                              ? new Error(
                                  'Error creating WebGL context with your selected attributes.',
                                )
                              : new Error('Error creating WebGL context.')
                        }
                        void 0 === ce.getShaderPrecisionFormat &&
                          (ce.getShaderPrecisionFormat = function () {
                            return { rangeMin: 1, rangeMax: 1, precision: 1 }
                          })
                      } catch (Be) {
                        throw (console.error('THREE.WebGLRenderer: ' + Be.message), Be)
                      }
                      function pe() {
                        ;(G = new ta(ce)),
                          (z = new Jo(ce, G, e)),
                          G.init(z),
                          (se = new nl(ce, G, z)),
                          (j = new el(ce, G, z)).scissor(M.copy(D).multiplyScalar(C).floor()),
                          j.viewport(E.copy(P).multiplyScalar(C).floor()),
                          (V = new ia(ce)),
                          (W = new ks()),
                          (q = new tl(ce, G, j, W, z, se, V)),
                          (X = new ea(f)),
                          (Y = new Vo(ce, z)),
                          (le = new Zo(ce, G, Y, z)),
                          (Q = new na(ce, Y, V, le)),
                          (Z = new la(ce, Q, Y, V)),
                          (ie = new sa(ce)),
                          (ne = new $o(W)),
                          (K = new Fs(f, X, G, z, le, ne)),
                          (J = new hl(W)),
                          (ee = new Gs(W)),
                          (te = new Ys(G, z)),
                          (re = new Qo(f, X, j, Z, s)),
                          (oe = new Ko(ce, G, V, z)),
                          (ae = new ra(ce, G, V, z)),
                          (V.programs = K.programs),
                          (f.capabilities = z),
                          (f.extensions = G),
                          (f.properties = W),
                          (f.renderLists = ee),
                          (f.state = j),
                          (f.info = V)
                      }
                      pe()
                      var fe =
                        'undefined' !== typeof navigator && 'xr' in navigator
                          ? new ul(f, ce)
                          : new ll(f)
                      this.xr = fe
                      var me = new $s(f, Z, z.maxTextureSize)
                      function ve(e) {
                        e.preventDefault(),
                          console.log('THREE.WebGLRenderer: Context Lost.'),
                          (m = !0)
                      }
                      function ge() {
                        console.log('THREE.WebGLRenderer: Context Restored.'), (m = !1), pe()
                      }
                      function ye(e) {
                        var t = e.target
                        t.removeEventListener('dispose', ye), be(t)
                      }
                      function be(e) {
                        Ae(e), W.remove(e)
                      }
                      function Ae(e) {
                        var t = W.get(e).program
                        void 0 !== t && K.releaseProgram(t)
                      }
                      function we(e, t) {
                        e.render(function (e) {
                          f.renderBufferImmediate(e, t)
                        })
                      }
                      ;(this.shadowMap = me),
                        (this.getContext = function () {
                          return ce
                        }),
                        (this.getContextAttributes = function () {
                          return ce.getContextAttributes()
                        }),
                        (this.forceContextLoss = function () {
                          var e = G.get('WEBGL_lose_context')
                          e && e.loseContext()
                        }),
                        (this.forceContextRestore = function () {
                          var e = G.get('WEBGL_lose_context')
                          e && e.restoreContext()
                        }),
                        (this.getPixelRatio = function () {
                          return C
                        }),
                        (this.setPixelRatio = function (e) {
                          void 0 !== e && ((C = e), this.setSize(T, S, !1))
                        }),
                        (this.getSize = function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'WebGLRenderer: .getsize() now requires a Vector2 as an argument',
                              ),
                              (e = new Jn())),
                            e.set(T, S)
                          )
                        }),
                        (this.setSize = function (e, n, r) {
                          fe.isPresenting
                            ? console.warn(
                                "THREE.WebGLRenderer: Can't change size while VR device is presenting.",
                              )
                            : ((T = e),
                              (S = n),
                              (t.width = Math.floor(e * C)),
                              (t.height = Math.floor(n * C)),
                              !1 !== r && ((t.style.width = e + 'px'), (t.style.height = n + 'px')),
                              this.setViewport(0, 0, e, n))
                        }),
                        (this.getDrawingBufferSize = function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument',
                              ),
                              (e = new Jn())),
                            e.set(T * C, S * C).floor()
                          )
                        }),
                        (this.setDrawingBufferSize = function (e, n, r) {
                          ;(T = e),
                            (S = n),
                            (C = r),
                            (t.width = Math.floor(e * r)),
                            (t.height = Math.floor(n * r)),
                            this.setViewport(0, 0, e, n)
                        }),
                        (this.getCurrentViewport = function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument',
                              ),
                              (e = new ir())),
                            e.copy(E)
                          )
                        }),
                        (this.getViewport = function (e) {
                          return e.copy(P)
                        }),
                        (this.setViewport = function (e, t, n, r) {
                          e.isVector4 ? P.set(e.x, e.y, e.z, e.w) : P.set(e, t, n, r),
                            j.viewport(E.copy(P).multiplyScalar(C).floor())
                        }),
                        (this.getScissor = function (e) {
                          return e.copy(D)
                        }),
                        (this.setScissor = function (e, t, n, r) {
                          e.isVector4 ? D.set(e.x, e.y, e.z, e.w) : D.set(e, t, n, r),
                            j.scissor(M.copy(D).multiplyScalar(C).floor())
                        }),
                        (this.getScissorTest = function () {
                          return O
                        }),
                        (this.setScissorTest = function (e) {
                          j.setScissorTest((O = e))
                        }),
                        (this.setOpaqueSort = function (e) {
                          L = e
                        }),
                        (this.setTransparentSort = function (e) {
                          R = e
                        }),
                        (this.getClearColor = function (e) {
                          return (
                            void 0 === e &&
                              (console.warn(
                                'WebGLRenderer: .getClearColor() now requires a Color as an argument',
                              ),
                              (e = new Li())),
                            e.copy(re.getClearColor())
                          )
                        }),
                        (this.setClearColor = function () {
                          re.setClearColor.apply(re, arguments)
                        }),
                        (this.getClearAlpha = function () {
                          return re.getClearAlpha()
                        }),
                        (this.setClearAlpha = function () {
                          re.setClearAlpha.apply(re, arguments)
                        }),
                        (this.clear = function (e, t, n) {
                          var r = 0
                          ;(void 0 === e || e) && (r |= 16384),
                            (void 0 === t || t) && (r |= 256),
                            (void 0 === n || n) && (r |= 1024),
                            ce.clear(r)
                        }),
                        (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 () {
                          t.removeEventListener('webglcontextlost', ve, !1),
                            t.removeEventListener('webglcontextrestored', ge, !1),
                            ee.dispose(),
                            te.dispose(),
                            W.dispose(),
                            X.dispose(),
                            Z.dispose(),
                            le.dispose(),
                            fe.dispose(),
                            Me.stop()
                        }),
                        (this.renderBufferImmediate = function (e, t) {
                          le.initAttributes()
                          var n = W.get(e)
                          e.hasPositions && !n.position && (n.position = ce.createBuffer()),
                            e.hasNormals && !n.normal && (n.normal = ce.createBuffer()),
                            e.hasUvs && !n.uv && (n.uv = ce.createBuffer()),
                            e.hasColors && !n.color && (n.color = ce.createBuffer())
                          var r = t.getAttributes()
                          e.hasPositions &&
                            (ce.bindBuffer(34962, n.position),
                            ce.bufferData(34962, e.positionArray, 35048),
                            le.enableAttribute(r.position),
                            ce.vertexAttribPointer(r.position, 3, 5126, !1, 0, 0)),
                            e.hasNormals &&
                              (ce.bindBuffer(34962, n.normal),
                              ce.bufferData(34962, e.normalArray, 35048),
                              le.enableAttribute(r.normal),
                              ce.vertexAttribPointer(r.normal, 3, 5126, !1, 0, 0)),
                            e.hasUvs &&
                              (ce.bindBuffer(34962, n.uv),
                              ce.bufferData(34962, e.uvArray, 35048),
                              le.enableAttribute(r.uv),
                              ce.vertexAttribPointer(r.uv, 2, 5126, !1, 0, 0)),
                            e.hasColors &&
                              (ce.bindBuffer(34962, n.color),
                              ce.bufferData(34962, e.colorArray, 35048),
                              le.enableAttribute(r.color),
                              ce.vertexAttribPointer(r.color, 3, 5126, !1, 0, 0)),
                            le.disableUnusedAttributes(),
                            ce.drawArrays(4, 0, e.count),
                            (e.count = 0)
                        }),
                        (this.renderBufferDirect = function (e, t, n, r, i, o) {
                          null === t && (t = U)
                          var a = i.isMesh && i.matrixWorld.determinant() < 0,
                            s = Re(e, t, r, i)
                          j.setMaterial(r, a)
                          var l = n.index,
                            c = n.attributes.position
                          if (null === l) {
                            if (void 0 === c || 0 === c.count) return
                          } else if (0 === l.count) return
                          var u,
                            h = 1
                          !0 === r.wireframe && ((l = Q.getWireframeAttribute(n)), (h = 2)),
                            (r.morphTargets || r.morphNormals) && ie.update(i, n, r, s),
                            le.setup(i, r, s, n, l)
                          var d = oe
                          null !== l && ((u = Y.get(l)), (d = ae).setIndex(u))
                          var p = null !== l ? l.count : c.count,
                            f = n.drawRange.start * h,
                            m = n.drawRange.count * h,
                            v = null !== o ? o.start * h : 0,
                            g = null !== o ? o.count * h : 1 / 0,
                            y = Math.max(f, v),
                            b = Math.min(p, f + m, v + g) - 1,
                            A = Math.max(0, b - y + 1)
                          if (0 !== A) {
                            if (i.isMesh)
                              !0 === r.wireframe
                                ? (j.setLineWidth(r.wireframeLinewidth * H()), d.setMode(1))
                                : d.setMode(4)
                            else if (i.isLine) {
                              var w = r.linewidth
                              void 0 === w && (w = 1),
                                j.setLineWidth(w * H()),
                                i.isLineSegments
                                  ? d.setMode(1)
                                  : i.isLineLoop
                                  ? d.setMode(2)
                                  : d.setMode(3)
                            } else i.isPoints ? d.setMode(0) : i.isSprite && d.setMode(4)
                            if (i.isInstancedMesh) d.renderInstances(y, A, i.count)
                            else if (n.isInstancedBufferGeometry) {
                              var x = Math.min(n.instanceCount, n._maxInstanceCount)
                              d.renderInstances(y, A, x)
                            } else d.render(y, A)
                          }
                        }),
                        (this.compile = function (e, t) {
                          ;(d = te.get(e)).init(),
                            e.traverseVisible(function (e) {
                              e.isLight &&
                                e.layers.test(t.layers) &&
                                (d.pushLight(e), e.castShadow && d.pushShadow(e))
                            }),
                            d.setupLights()
                          var n = new WeakMap()
                          e.traverse(function (t) {
                            var r = t.material
                            if (r)
                              if (Array.isArray(r))
                                for (var i = 0; i < r.length; i++) {
                                  var o = r[i]
                                  !1 === n.has(o) && (Le(o, e, t), n.set(o))
                                }
                              else !1 === n.has(r) && (Le(r, e, t), n.set(r))
                          })
                        })
                      var xe = null
                      function Ee(e) {
                        fe.isPresenting || (xe && xe(e))
                      }
                      var Me = new jo()
                      function Te(e, t, n, r) {
                        if (!1 !== e.visible) {
                          if (e.layers.test(t.layers))
                            if (e.isGroup) n = e.renderOrder
                            else if (e.isLOD) !0 === e.autoUpdate && e.update(t)
                            else if (e.isLight) d.pushLight(e), e.castShadow && d.pushShadow(e)
                            else if (e.isSprite) {
                              if (!e.frustumCulled || I.intersectsSprite(e)) {
                                r && N.setFromMatrixPosition(e.matrixWorld).applyMatrix4(k)
                                var i = Z.update(e),
                                  o = e.material
                                o.visible && h.push(e, i, o, n, N.z, null)
                              }
                            } else if (e.isImmediateRenderObject)
                              r && N.setFromMatrixPosition(e.matrixWorld).applyMatrix4(k),
                                h.push(e, null, e.material, n, N.z, null)
                            else if (
                              (e.isMesh || e.isLine || e.isPoints) &&
                              (e.isSkinnedMesh &&
                                e.skeleton.frame !== V.render.frame &&
                                (e.skeleton.update(), (e.skeleton.frame = V.render.frame)),
                              !e.frustumCulled || I.intersectsObject(e))
                            ) {
                              r && N.setFromMatrixPosition(e.matrixWorld).applyMatrix4(k)
                              var a = Z.update(e),
                                s = e.material
                              if (Array.isArray(s))
                                for (var l = a.groups, c = 0, u = l.length; c < u; c++) {
                                  var p = l[c],
                                    f = s[p.materialIndex]
                                  f && f.visible && h.push(e, a, f, n, N.z, p)
                                }
                              else s.visible && h.push(e, a, s, n, N.z, null)
                            }
                          for (var m = e.children, v = 0, g = m.length; v < g; v++)
                            Te(m[v], t, n, r)
                        }
                      }
                      function Se(e, t, n) {
                        for (
                          var r = !0 === t.isScene ? t.overrideMaterial : null, i = 0, o = e.length;
                          i < o;
                          i++
                        ) {
                          var a = e[i],
                            s = a.object,
                            l = a.geometry,
                            c = null === r ? a.material : r,
                            u = a.group
                          if (n.isArrayCamera)
                            for (var h = n.cameras, p = 0, f = h.length; p < f; p++) {
                              var m = h[p]
                              s.layers.test(m.layers) &&
                                (j.viewport(E.copy(m.viewport)),
                                d.setupLightsView(m),
                                Ce(s, t, m, l, c, u))
                            }
                          else Ce(s, t, n, l, c, u)
                        }
                      }
                      function Ce(e, t, n, r, i, o) {
                        if (
                          (e.onBeforeRender(f, t, n, r, i, o),
                          e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, e.matrixWorld),
                          e.normalMatrix.getNormalMatrix(e.modelViewMatrix),
                          e.isImmediateRenderObject)
                        ) {
                          var a = Re(n, t, i, e)
                          j.setMaterial(i), le.reset(), we(e, a)
                        } else f.renderBufferDirect(n, t, r, i, e, o)
                        e.onAfterRender(f, t, n, r, i, o)
                      }
                      function Le(e, t, n) {
                        !0 !== t.isScene && (t = U)
                        var r = W.get(e),
                          i = d.state.lights,
                          o = d.state.shadowsArray,
                          a = i.state.version,
                          s = K.getParameters(e, i.state, o, t, n),
                          l = K.getProgramCacheKey(s),
                          c = r.program,
                          u = !0
                        if (
                          ((r.environment = e.isMeshStandardMaterial ? t.environment : null),
                          (r.fog = t.fog),
                          (r.envMap = X.get(e.envMap || r.environment)),
                          void 0 === c)
                        )
                          e.addEventListener('dispose', ye)
                        else if (c.cacheKey !== l) Ae(e)
                        else if (r.lightsStateVersion !== a) u = !1
                        else {
                          if (void 0 !== s.shaderID) return
                          u = !1
                        }
                        u &&
                          ((s.uniforms = K.getUniforms(e)),
                          e.onBeforeCompile(s, f),
                          (c = K.acquireProgram(s, l)),
                          (r.program = c),
                          (r.uniforms = s.uniforms),
                          (r.outputEncoding = s.outputEncoding))
                        var h = r.uniforms
                        ;((e.isShaderMaterial || e.isRawShaderMaterial) && !0 !== e.clipping) ||
                          ((r.numClippingPlanes = ne.numPlanes),
                          (r.numIntersection = ne.numIntersection),
                          (h.clippingPlanes = ne.uniform)),
                          (r.needsLights = Ie(e)),
                          (r.lightsStateVersion = a),
                          r.needsLights &&
                            ((h.ambientLightColor.value = i.state.ambient),
                            (h.lightProbe.value = i.state.probe),
                            (h.directionalLights.value = i.state.directional),
                            (h.directionalLightShadows.value = i.state.directionalShadow),
                            (h.spotLights.value = i.state.spot),
                            (h.spotLightShadows.value = i.state.spotShadow),
                            (h.rectAreaLights.value = i.state.rectArea),
                            (h.ltc_1.value = i.state.rectAreaLTC1),
                            (h.ltc_2.value = i.state.rectAreaLTC2),
                            (h.pointLights.value = i.state.point),
                            (h.pointLightShadows.value = i.state.pointShadow),
                            (h.hemisphereLights.value = i.state.hemi),
                            (h.directionalShadowMap.value = i.state.directionalShadowMap),
                            (h.directionalShadowMatrix.value = i.state.directionalShadowMatrix),
                            (h.spotShadowMap.value = i.state.spotShadowMap),
                            (h.spotShadowMatrix.value = i.state.spotShadowMatrix),
                            (h.pointShadowMap.value = i.state.pointShadowMap),
                            (h.pointShadowMatrix.value = i.state.pointShadowMatrix))
                        var p = r.program.getUniforms(),
                          m = ss.seqWithValue(p.seq, h)
                        r.uniformsList = m
                      }
                      function Re(e, t, n, r) {
                        !0 !== t.isScene && (t = U), q.resetTextureUnits()
                        var i = t.fog,
                          o = n.isMeshStandardMaterial ? t.environment : null,
                          a = null === b ? f.outputEncoding : b.texture.encoding,
                          s = X.get(n.envMap || o),
                          l = W.get(n),
                          c = d.state.lights
                        if (!0 === B && (!0 === F || e !== x)) {
                          var u = e === x && n.id === w
                          ne.setState(n, e, u)
                        }
                        n.version === l.__version
                          ? (n.fog && l.fog !== i) ||
                            l.environment !== o ||
                            (l.needsLights && l.lightsStateVersion !== c.state.version)
                            ? Le(n, t, r)
                            : void 0 === l.numClippingPlanes ||
                              (l.numClippingPlanes === ne.numPlanes &&
                                l.numIntersection === ne.numIntersection)
                            ? (l.outputEncoding !== a || l.envMap !== s) && Le(n, t, r)
                            : Le(n, t, r)
                          : (Le(n, t, r), (l.__version = n.version))
                        var h = !1,
                          p = !1,
                          m = !1,
                          v = l.program,
                          g = v.getUniforms(),
                          y = l.uniforms
                        if (
                          (j.useProgram(v.program) && ((h = !0), (p = !0), (m = !0)),
                          n.id !== w && ((w = n.id), (p = !0)),
                          h || x !== e)
                        ) {
                          if (
                            (g.setValue(ce, 'projectionMatrix', e.projectionMatrix),
                            z.logarithmicDepthBuffer &&
                              g.setValue(ce, 'logDepthBufFC', 2 / (Math.log(e.far + 1) / Math.LN2)),
                            x !== e && ((x = e), (p = !0), (m = !0)),
                            n.isShaderMaterial ||
                              n.isMeshPhongMaterial ||
                              n.isMeshToonMaterial ||
                              n.isMeshStandardMaterial ||
                              n.envMap)
                          ) {
                            var A = g.map.cameraPosition
                            void 0 !== A && A.setValue(ce, N.setFromMatrixPosition(e.matrixWorld))
                          }
                          ;(n.isMeshPhongMaterial ||
                            n.isMeshToonMaterial ||
                            n.isMeshLambertMaterial ||
                            n.isMeshBasicMaterial ||
                            n.isMeshStandardMaterial ||
                            n.isShaderMaterial) &&
                            g.setValue(ce, 'isOrthographic', !0 === e.isOrthographicCamera),
                            (n.isMeshPhongMaterial ||
                              n.isMeshToonMaterial ||
                              n.isMeshLambertMaterial ||
                              n.isMeshBasicMaterial ||
                              n.isMeshStandardMaterial ||
                              n.isShaderMaterial ||
                              n.isShadowMaterial ||
                              n.skinning) &&
                              g.setValue(ce, 'viewMatrix', e.matrixWorldInverse)
                        }
                        if (n.skinning) {
                          g.setOptional(ce, r, 'bindMatrix'),
                            g.setOptional(ce, r, 'bindMatrixInverse')
                          var E = r.skeleton
                          if (E) {
                            var M = E.bones
                            if (z.floatVertexTextures) {
                              if (null === E.boneTexture) {
                                var _ = Math.sqrt(4 * M.length)
                                ;(_ = Kn.ceilPowerOfTwo(_)), (_ = Math.max(_, 4))
                                var T = new Float32Array(_ * _ * 4)
                                T.set(E.boneMatrices)
                                var L = new Uo(T, _, _, Ue, Pe)
                                ;(E.boneMatrices = T), (E.boneTexture = L), (E.boneTextureSize = _)
                              }
                              g.setValue(ce, 'boneTexture', E.boneTexture, q),
                                g.setValue(ce, 'boneTextureSize', E.boneTextureSize)
                            } else g.setOptional(ce, E, 'boneMatrices')
                          }
                        }
                        return (
                          (p || l.receiveShadow !== r.receiveShadow) &&
                            ((l.receiveShadow = r.receiveShadow),
                            g.setValue(ce, 'receiveShadow', r.receiveShadow)),
                          p &&
                            (g.setValue(ce, 'toneMappingExposure', f.toneMappingExposure),
                            l.needsLights && Oe(y, m),
                            i && n.fog && J.refreshFogUniforms(y, i),
                            J.refreshMaterialUniforms(y, n, C, S),
                            ss.upload(ce, l.uniformsList, y, q)),
                          n.isShaderMaterial &&
                            !0 === n.uniformsNeedUpdate &&
                            (ss.upload(ce, l.uniformsList, y, q), (n.uniformsNeedUpdate = !1)),
                          n.isSpriteMaterial && g.setValue(ce, 'center', r.center),
                          g.setValue(ce, 'modelViewMatrix', r.modelViewMatrix),
                          g.setValue(ce, 'normalMatrix', r.normalMatrix),
                          g.setValue(ce, 'modelMatrix', r.matrixWorld),
                          v
                        )
                      }
                      function Oe(e, t) {
                        ;(e.ambientLightColor.needsUpdate = t),
                          (e.lightProbe.needsUpdate = t),
                          (e.directionalLights.needsUpdate = t),
                          (e.directionalLightShadows.needsUpdate = t),
                          (e.pointLights.needsUpdate = t),
                          (e.pointLightShadows.needsUpdate = t),
                          (e.spotLights.needsUpdate = t),
                          (e.spotLightShadows.needsUpdate = t),
                          (e.rectAreaLights.needsUpdate = t),
                          (e.hemisphereLights.needsUpdate = t)
                      }
                      function Ie(e) {
                        return (
                          e.isMeshLambertMaterial ||
                          e.isMeshToonMaterial ||
                          e.isMeshPhongMaterial ||
                          e.isMeshStandardMaterial ||
                          e.isShadowMaterial ||
                          (e.isShaderMaterial && !0 === e.lights)
                        )
                      }
                      Me.setAnimationLoop(Ee),
                        'undefined' !== typeof window && Me.setContext(window),
                        (this.setAnimationLoop = function (e) {
                          ;(xe = e), fe.setAnimationLoop(e), null === e ? Me.stop() : Me.start()
                        }),
                        (this.render = function (e, t) {
                          var n, r
                          if (
                            (void 0 !== arguments[2] &&
                              (console.warn(
                                'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.',
                              ),
                              (n = arguments[2])),
                            void 0 !== arguments[3] &&
                              (console.warn(
                                'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.',
                              ),
                              (r = arguments[3])),
                            void 0 === t || !0 === t.isCamera)
                          ) {
                            if (!0 !== m) {
                              le.resetDefaultState(),
                                (w = -1),
                                (x = null),
                                !0 === e.autoUpdate && e.updateMatrixWorld(),
                                null === t.parent && t.updateMatrixWorld(),
                                !0 === fe.enabled &&
                                  !0 === fe.isPresenting &&
                                  (t = fe.getCamera(t)),
                                !0 === e.isScene && e.onBeforeRender(f, e, t, n || b),
                                (d = te.get(e, p.length)).init(),
                                p.push(d),
                                k.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse),
                                I.setFromProjectionMatrix(k),
                                (F = this.localClippingEnabled),
                                (B = ne.init(this.clippingPlanes, F, t)),
                                (h = ee.get(e, t)).init(),
                                Te(e, t, 0, f.sortObjects),
                                h.finish(),
                                !0 === f.sortObjects && h.sort(L, R),
                                !0 === B && ne.beginShadows()
                              var i = d.state.shadowsArray
                              me.render(i, e, t),
                                d.setupLights(),
                                d.setupLightsView(t),
                                !0 === B && ne.endShadows(),
                                !0 === this.info.autoReset && this.info.reset(),
                                void 0 !== n && this.setRenderTarget(n),
                                re.render(h, e, t, r)
                              var o = h.opaque,
                                a = h.transparent
                              o.length > 0 && Se(o, e, t),
                                a.length > 0 && Se(a, e, t),
                                !0 === e.isScene && e.onAfterRender(f, e, t),
                                null !== b &&
                                  (q.updateRenderTargetMipmap(b),
                                  q.updateMultisampleRenderTarget(b)),
                                j.buffers.depth.setTest(!0),
                                j.buffers.depth.setMask(!0),
                                j.buffers.color.setMask(!0),
                                j.setPolygonOffset(!1),
                                fe.enabled && fe.submitFrame && fe.submitFrame(),
                                p.pop(),
                                (d = p.length > 0 ? p[p.length - 1] : null),
                                (h = null)
                            }
                          } else
                            console.error(
                              'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.',
                            )
                        }),
                        (this.setTexture2D = (function () {
                          var e = !1
                          return function (t, n) {
                            t &&
                              t.isWebGLRenderTarget &&
                              (e ||
                                (console.warn(
                                  "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.",
                                ),
                                (e = !0)),
                              (t = t.texture)),
                              q.setTexture2D(t, n)
                          }
                        })()),
                        (this.setFramebuffer = function (e) {
                          v !== e && null === b && ce.bindFramebuffer(36160, e), (v = e)
                        }),
                        (this.getActiveCubeFace = function () {
                          return g
                        }),
                        (this.getActiveMipmapLevel = function () {
                          return y
                        }),
                        (this.getRenderList = function () {
                          return h
                        }),
                        (this.setRenderList = function (e) {
                          h = e
                        }),
                        (this.getRenderTarget = function () {
                          return b
                        }),
                        (this.setRenderTarget = function (e, t, n) {
                          void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            (b = e),
                            (g = t),
                            (y = n),
                            e && void 0 === W.get(e).__webglFramebuffer && q.setupRenderTarget(e)
                          var r = v,
                            i = !1
                          if (e) {
                            var o = W.get(e).__webglFramebuffer
                            e.isWebGLCubeRenderTarget
                              ? ((r = o[t]), (i = !0))
                              : (r = e.isWebGLMultisampleRenderTarget
                                  ? W.get(e).__webglMultisampledFramebuffer
                                  : o),
                              E.copy(e.viewport),
                              M.copy(e.scissor),
                              (_ = e.scissorTest)
                          } else
                            E.copy(P).multiplyScalar(C).floor(),
                              M.copy(D).multiplyScalar(C).floor(),
                              (_ = O)
                          if (
                            (A !== r && (ce.bindFramebuffer(36160, r), (A = r)),
                            j.viewport(E),
                            j.scissor(M),
                            j.setScissorTest(_),
                            i)
                          ) {
                            var a = W.get(e.texture)
                            ce.framebufferTexture2D(36160, 36064, 34069 + t, a.__webglTexture, n)
                          }
                        }),
                        (this.readRenderTargetPixels = function (e, t, n, r, i, o, a) {
                          if (e && e.isWebGLRenderTarget) {
                            var s = W.get(e).__webglFramebuffer
                            if ((e.isWebGLCubeRenderTarget && void 0 !== a && (s = s[a]), s)) {
                              var l = !1
                              s !== A && (ce.bindFramebuffer(36160, s), (l = !0))
                              try {
                                var c = e.texture,
                                  u = c.format,
                                  h = c.type
                                if (u !== Ue && se.convert(u) !== ce.getParameter(35739))
                                  return void console.error(
                                    'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.',
                                  )
                                var d =
                                  h === De &&
                                  (G.has('EXT_color_buffer_half_float') ||
                                    (z.isWebGL2 && G.has('EXT_color_buffer_float')))
                                if (
                                  h !== _e &&
                                  se.convert(h) !== ce.getParameter(35738) &&
                                  (h !== Pe ||
                                    !(
                                      z.isWebGL2 ||
                                      G.has('OES_texture_float') ||
                                      G.has('WEBGL_color_buffer_float')
                                    )) &&
                                  !d
                                )
                                  return void console.error(
                                    'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.',
                                  )
                                36053 === ce.checkFramebufferStatus(36160)
                                  ? t >= 0 &&
                                    t <= e.width - r &&
                                    n >= 0 &&
                                    n <= e.height - i &&
                                    ce.readPixels(t, n, r, i, se.convert(u), se.convert(h), o)
                                  : console.error(
                                      'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.',
                                    )
                              } finally {
                                l && ce.bindFramebuffer(36160, A)
                              }
                            }
                          } else
                            console.error(
                              'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.',
                            )
                        }),
                        (this.copyFramebufferToTexture = function (e, t, n) {
                          void 0 === n && (n = 0)
                          var r = Math.pow(2, -n),
                            i = Math.floor(t.image.width * r),
                            o = Math.floor(t.image.height * r),
                            a = se.convert(t.format)
                          q.setTexture2D(t, 0),
                            ce.copyTexImage2D(3553, n, a, e.x, e.y, i, o, 0),
                            j.unbindTexture()
                        }),
                        (this.copyTextureToTexture = function (e, t, n, r) {
                          void 0 === r && (r = 0)
                          var i = t.image.width,
                            o = t.image.height,
                            a = se.convert(n.format),
                            s = se.convert(n.type)
                          q.setTexture2D(n, 0),
                            ce.pixelStorei(37440, n.flipY),
                            ce.pixelStorei(37441, n.premultiplyAlpha),
                            ce.pixelStorei(3317, n.unpackAlignment),
                            t.isDataTexture
                              ? ce.texSubImage2D(3553, r, e.x, e.y, i, o, a, s, t.image.data)
                              : t.isCompressedTexture
                              ? ce.compressedTexSubImage2D(
                                  3553,
                                  r,
                                  e.x,
                                  e.y,
                                  t.mipmaps[0].width,
                                  t.mipmaps[0].height,
                                  a,
                                  t.mipmaps[0].data,
                                )
                              : ce.texSubImage2D(3553, r, e.x, e.y, a, s, t.image),
                            0 === r && n.generateMipmaps && ce.generateMipmap(3553),
                            j.unbindTexture()
                        }),
                        (this.initTexture = function (e) {
                          q.setTexture2D(e, 0), j.unbindTexture()
                        }),
                        (this.resetState = function () {
                          j.reset(), le.reset()
                        }),
                        'undefined' !== typeof __THREE_DEVTOOLS__ &&
                          __THREE_DEVTOOLS__.dispatchEvent(
                            new CustomEvent('observe', { detail: this }),
                          )
                    }
                    function fl(e) {
                      pl.call(this, e)
                    }
                    Object.assign(ll.prototype, qn.prototype),
                      Object.assign(cl.prototype, {
                        constructor: cl,
                        getHandSpace: function () {
                          return (
                            null === this._hand &&
                              ((this._hand = new rl()),
                              (this._hand.matrixAutoUpdate = !1),
                              (this._hand.visible = !1),
                              (this._hand.joints = {}),
                              (this._hand.inputState = { pinching: !1 })),
                            this._hand
                          )
                        },
                        getTargetRaySpace: function () {
                          return (
                            null === this._targetRay &&
                              ((this._targetRay = new rl()),
                              (this._targetRay.matrixAutoUpdate = !1),
                              (this._targetRay.visible = !1)),
                            this._targetRay
                          )
                        },
                        getGripSpace: function () {
                          return (
                            null === this._grip &&
                              ((this._grip = new rl()),
                              (this._grip.matrixAutoUpdate = !1),
                              (this._grip.visible = !1)),
                            this._grip
                          )
                        },
                        dispatchEvent: function (e) {
                          return (
                            null !== this._targetRay && this._targetRay.dispatchEvent(e),
                            null !== this._grip && this._grip.dispatchEvent(e),
                            null !== this._hand && this._hand.dispatchEvent(e),
                            this
                          )
                        },
                        disconnect: function (e) {
                          return (
                            this.dispatchEvent({ type: 'disconnected', data: e }),
                            null !== this._targetRay && (this._targetRay.visible = !1),
                            null !== this._grip && (this._grip.visible = !1),
                            null !== this._hand && (this._hand.visible = !1),
                            this
                          )
                        },
                        update: function (e, t, n) {
                          var r = null,
                            i = null,
                            o = null,
                            a = this._targetRay,
                            s = this._grip,
                            l = this._hand
                          if (e && 'visible-blurred' !== t.session.visibilityState)
                            if (l && e.hand) {
                              o = !0
                              for (var c, u = Wn(e.hand.values()); !(c = u()).done; ) {
                                var h = c.value,
                                  d = t.getJointPose(h, n)
                                if (void 0 === l.joints[h.jointName]) {
                                  var p = new rl()
                                  ;(p.matrixAutoUpdate = !1),
                                    (p.visible = !1),
                                    (l.joints[h.jointName] = p),
                                    l.add(p)
                                }
                                var f = l.joints[h.jointName]
                                null !== d &&
                                  (f.matrix.fromArray(d.transform.matrix),
                                  f.matrix.decompose(f.position, f.rotation, f.scale),
                                  (f.jointRadius = d.radius)),
                                  (f.visible = null !== d)
                              }
                              var m = l.joints['index-finger-tip'],
                                v = l.joints['thumb-tip'],
                                g = m.position.distanceTo(v.position),
                                y = 0.02,
                                b = 0.005
                              l.inputState.pinching && g > y + b
                                ? ((l.inputState.pinching = !1),
                                  this.dispatchEvent({
                                    type: 'pinchend',
                                    handedness: e.handedness,
                                    target: this,
                                  }))
                                : !l.inputState.pinching &&
                                  g <= y - b &&
                                  ((l.inputState.pinching = !0),
                                  this.dispatchEvent({
                                    type: 'pinchstart',
                                    handedness: e.handedness,
                                    target: this,
                                  }))
                            } else
                              null !== a &&
                                null !== (r = t.getPose(e.targetRaySpace, n)) &&
                                (a.matrix.fromArray(r.transform.matrix),
                                a.matrix.decompose(a.position, a.rotation, a.scale)),
                                null !== s &&
                                  e.gripSpace &&
                                  null !== (i = t.getPose(e.gripSpace, n)) &&
                                  (s.matrix.fromArray(i.transform.matrix),
                                  s.matrix.decompose(s.position, s.rotation, s.scale))
                          return (
                            null !== a && (a.visible = null !== r),
                            null !== s && (s.visible = null !== i),
                            null !== l && (l.visible = null !== o),
                            this
                          )
                        },
                      }),
                      Object.assign(ul.prototype, qn.prototype),
                      (fl.prototype = Object.assign(Object.create(pl.prototype), {
                        constructor: fl,
                        isWebGL1Renderer: !0,
                      }))
                    var ml = (function () {
                        function e(e, t) {
                          Object.defineProperty(this, 'isFogExp2', { value: !0 }),
                            (this.name = ''),
                            (this.color = new Li(e)),
                            (this.density = void 0 !== t ? t : 25e-5)
                        }
                        var t = e.prototype
                        return (
                          (t.clone = function () {
                            return new e(this.color, this.density)
                          }),
                          (t.toJSON = function () {
                            return {
                              type: 'FogExp2',
                              color: this.color.getHex(),
                              density: this.density,
                            }
                          }),
                          e
                        )
                      })(),
                      vl = (function () {
                        function e(e, t, n) {
                          Object.defineProperty(this, 'isFog', { value: !0 }),
                            (this.name = ''),
                            (this.color = new Li(e)),
                            (this.near = void 0 !== t ? t : 1),
                            (this.far = void 0 !== n ? n : 1e3)
                        }
                        var t = e.prototype
                        return (
                          (t.clone = function () {
                            return new e(this.color, this.near, this.far)
                          }),
                          (t.toJSON = function () {
                            return {
                              type: 'Fog',
                              color: this.color.getHex(),
                              near: this.near,
                              far: this.far,
                            }
                          }),
                          e
                        )
                      })(),
                      gl = (function (e) {
                        function t() {
                          var t
                          return (
                            (t = e.call(this) || this),
                            Object.defineProperty(zn(t), 'isScene', { value: !0 }),
                            (t.type = 'Scene'),
                            (t.background = null),
                            (t.environment = null),
                            (t.fog = null),
                            (t.overrideMaterial = null),
                            (t.autoUpdate = !0),
                            'undefined' !== typeof __THREE_DEVTOOLS__ &&
                              __THREE_DEVTOOLS__.dispatchEvent(
                                new CustomEvent('observe', { detail: zn(t) }),
                              ),
                            t
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.copy = function (t, n) {
                            return (
                              e.prototype.copy.call(this, t, n),
                              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
                            )
                          }),
                          (n.toJSON = function (t) {
                            var n = e.prototype.toJSON.call(this, t)
                            return (
                              null !== this.background &&
                                (n.object.background = this.background.toJSON(t)),
                              null !== this.environment &&
                                (n.object.environment = this.environment.toJSON(t)),
                              null !== this.fog && (n.object.fog = this.fog.toJSON()),
                              n
                            )
                          }),
                          t
                        )
                      })(si)
                    function yl(e, t) {
                      ;(this.array = e),
                        (this.stride = t),
                        (this.count = void 0 !== e ? e.length / t : 0),
                        (this.usage = Tn),
                        (this.updateRange = { offset: 0, count: -1 }),
                        (this.version = 0),
                        (this.uuid = Kn.generateUUID())
                    }
                    Object.defineProperty(yl.prototype, 'needsUpdate', {
                      set: function (e) {
                        !0 === e && this.version++
                      },
                    }),
                      Object.assign(yl.prototype, {
                        isInterleavedBuffer: !0,
                        onUploadCallback: function () {},
                        setUsage: function (e) {
                          return (this.usage = e), this
                        },
                        copy: function (e) {
                          return (
                            (this.array = new e.array.constructor(e.array)),
                            (this.count = e.count),
                            (this.stride = e.stride),
                            (this.usage = e.usage),
                            this
                          )
                        },
                        copyAt: function (e, t, n) {
                          ;(e *= this.stride), (n *= t.stride)
                          for (var r = 0, i = this.stride; r < i; r++)
                            this.array[e + r] = t.array[n + r]
                          return this
                        },
                        set: function (e, t) {
                          return void 0 === t && (t = 0), this.array.set(e, t), this
                        },
                        clone: function (e) {
                          void 0 === e.arrayBuffers && (e.arrayBuffers = {}),
                            void 0 === this.array.buffer._uuid &&
                              (this.array.buffer._uuid = Kn.generateUUID()),
                            void 0 === e.arrayBuffers[this.array.buffer._uuid] &&
                              (e.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer)
                          var t = new yl(
                            new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),
                            this.stride,
                          )
                          return t.setUsage(this.usage), t
                        },
                        onUpload: function (e) {
                          return (this.onUploadCallback = e), this
                        },
                        toJSON: function (e) {
                          return (
                            void 0 === e.arrayBuffers && (e.arrayBuffers = {}),
                            void 0 === this.array.buffer._uuid &&
                              (this.array.buffer._uuid = Kn.generateUUID()),
                            void 0 === e.arrayBuffers[this.array.buffer._uuid] &&
                              (e.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,
                            }
                          )
                        },
                      })
                    var bl,
                      Al = new lr()
                    function wl(e, t, n, r) {
                      ;(this.name = ''),
                        (this.data = e),
                        (this.itemSize = t),
                        (this.offset = n),
                        (this.normalized = !0 === r)
                    }
                    function xl(e) {
                      Di.call(this),
                        (this.type = 'SpriteMaterial'),
                        (this.color = new Li(16777215)),
                        (this.map = null),
                        (this.alphaMap = null),
                        (this.rotation = 0),
                        (this.sizeAttenuation = !0),
                        (this.transparent = !0),
                        this.setValues(e)
                    }
                    Object.defineProperties(wl.prototype, {
                      count: {
                        get: function () {
                          return this.data.count
                        },
                      },
                      array: {
                        get: function () {
                          return this.data.array
                        },
                      },
                      needsUpdate: {
                        set: function (e) {
                          this.data.needsUpdate = e
                        },
                      },
                    }),
                      Object.assign(wl.prototype, {
                        isInterleavedBufferAttribute: !0,
                        applyMatrix4: function (e) {
                          for (var t = 0, n = this.data.count; t < n; t++)
                            (Al.x = this.getX(t)),
                              (Al.y = this.getY(t)),
                              (Al.z = this.getZ(t)),
                              Al.applyMatrix4(e),
                              this.setXYZ(t, Al.x, Al.y, Al.z)
                          return this
                        },
                        setX: function (e, t) {
                          return (this.data.array[e * this.data.stride + this.offset] = t), this
                        },
                        setY: function (e, t) {
                          return (this.data.array[e * this.data.stride + this.offset + 1] = t), this
                        },
                        setZ: function (e, t) {
                          return (this.data.array[e * this.data.stride + this.offset + 2] = t), this
                        },
                        setW: function (e, t) {
                          return (this.data.array[e * this.data.stride + this.offset + 3] = t), this
                        },
                        getX: function (e) {
                          return this.data.array[e * this.data.stride + this.offset]
                        },
                        getY: function (e) {
                          return this.data.array[e * this.data.stride + this.offset + 1]
                        },
                        getZ: function (e) {
                          return this.data.array[e * this.data.stride + this.offset + 2]
                        },
                        getW: function (e) {
                          return this.data.array[e * this.data.stride + this.offset + 3]
                        },
                        setXY: function (e, t, n) {
                          return (
                            (e = e * this.data.stride + this.offset),
                            (this.data.array[e + 0] = t),
                            (this.data.array[e + 1] = n),
                            this
                          )
                        },
                        setXYZ: function (e, t, n, r) {
                          return (
                            (e = e * this.data.stride + this.offset),
                            (this.data.array[e + 0] = t),
                            (this.data.array[e + 1] = n),
                            (this.data.array[e + 2] = r),
                            this
                          )
                        },
                        setXYZW: function (e, t, n, r, i) {
                          return (
                            (e = e * this.data.stride + this.offset),
                            (this.data.array[e + 0] = t),
                            (this.data.array[e + 1] = n),
                            (this.data.array[e + 2] = r),
                            (this.data.array[e + 3] = i),
                            this
                          )
                        },
                        clone: function (e) {
                          if (void 0 === e) {
                            console.log(
                              'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.',
                            )
                            for (var t = [], n = 0; n < this.count; n++)
                              for (
                                var r = n * this.data.stride + this.offset, i = 0;
                                i < this.itemSize;
                                i++
                              )
                                t.push(this.data.array[r + i])
                            return new Fi(
                              new this.array.constructor(t),
                              this.itemSize,
                              this.normalized,
                            )
                          }
                          return (
                            void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}),
                            void 0 === e.interleavedBuffers[this.data.uuid] &&
                              (e.interleavedBuffers[this.data.uuid] = this.data.clone(e)),
                            new wl(
                              e.interleavedBuffers[this.data.uuid],
                              this.itemSize,
                              this.offset,
                              this.normalized,
                            )
                          )
                        },
                        toJSON: function (e) {
                          if (void 0 === e) {
                            console.log(
                              'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.',
                            )
                            for (var t = [], n = 0; n < this.count; n++)
                              for (
                                var r = n * this.data.stride + this.offset, i = 0;
                                i < this.itemSize;
                                i++
                              )
                                t.push(this.data.array[r + i])
                            return {
                              itemSize: this.itemSize,
                              type: this.array.constructor.name,
                              array: t,
                              normalized: this.normalized,
                            }
                          }
                          return (
                            void 0 === e.interleavedBuffers && (e.interleavedBuffers = {}),
                            void 0 === e.interleavedBuffers[this.data.uuid] &&
                              (e.interleavedBuffers[this.data.uuid] = this.data.toJSON(e)),
                            {
                              isInterleavedBufferAttribute: !0,
                              itemSize: this.itemSize,
                              data: this.data.uuid,
                              offset: this.offset,
                              normalized: this.normalized,
                            }
                          )
                        },
                      }),
                      (xl.prototype = Object.create(Di.prototype)),
                      (xl.prototype.constructor = xl),
                      (xl.prototype.isSpriteMaterial = !0),
                      (xl.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.map = e.map),
                          (this.alphaMap = e.alphaMap),
                          (this.rotation = e.rotation),
                          (this.sizeAttenuation = e.sizeAttenuation),
                          this
                        )
                      })
                    var El = new lr(),
                      Ml = new lr(),
                      _l = new lr(),
                      Tl = new Jn(),
                      Sl = new Jn(),
                      Cl = new Fr(),
                      Ll = new lr(),
                      Rl = new lr(),
                      Pl = new lr(),
                      Dl = new Jn(),
                      Ol = new Jn(),
                      Il = new Jn()
                    function Bl(e) {
                      if ((si.call(this), (this.type = 'Sprite'), void 0 === bl)) {
                        bl = new ro()
                        var t = new yl(
                          new Float32Array([
                            -0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, 0.5,
                            0, 0, 1,
                          ]),
                          5,
                        )
                        bl.setIndex([0, 1, 2, 0, 2, 3]),
                          bl.setAttribute('position', new wl(t, 3, 0, !1)),
                          bl.setAttribute('uv', new wl(t, 2, 3, !1))
                      }
                      ;(this.geometry = bl),
                        (this.material = void 0 !== e ? e : new xl()),
                        (this.center = new Jn(0.5, 0.5))
                    }
                    function Fl(e, t, n, r, i, o) {
                      Tl.subVectors(e, n).addScalar(0.5).multiply(r),
                        void 0 !== i
                          ? ((Sl.x = o * Tl.x - i * Tl.y), (Sl.y = i * Tl.x + o * Tl.y))
                          : Sl.copy(Tl),
                        e.copy(t),
                        (e.x += Sl.x),
                        (e.y += Sl.y),
                        e.applyMatrix4(Cl)
                    }
                    Bl.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: Bl,
                      isSprite: !0,
                      raycast: function (e, t) {
                        null === e.camera &&
                          console.error(
                            'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.',
                          ),
                          Ml.setFromMatrixScale(this.matrixWorld),
                          Cl.copy(e.camera.matrixWorld),
                          this.modelViewMatrix.multiplyMatrices(
                            e.camera.matrixWorldInverse,
                            this.matrixWorld,
                          ),
                          _l.setFromMatrixPosition(this.modelViewMatrix),
                          e.camera.isPerspectiveCamera &&
                            !1 === this.material.sizeAttenuation &&
                            Ml.multiplyScalar(-_l.z)
                        var n,
                          r,
                          i = this.material.rotation
                        0 !== i && ((r = Math.cos(i)), (n = Math.sin(i)))
                        var o = this.center
                        Fl(Ll.set(-0.5, -0.5, 0), _l, o, Ml, n, r),
                          Fl(Rl.set(0.5, -0.5, 0), _l, o, Ml, n, r),
                          Fl(Pl.set(0.5, 0.5, 0), _l, o, Ml, n, r),
                          Dl.set(0, 0),
                          Ol.set(1, 0),
                          Il.set(1, 1)
                        var a = e.ray.intersectTriangle(Ll, Rl, Pl, !1, El)
                        if (
                          null !== a ||
                          (Fl(Rl.set(-0.5, 0.5, 0), _l, o, Ml, n, r),
                          Ol.set(0, 1),
                          null !== (a = e.ray.intersectTriangle(Ll, Pl, Rl, !1, El)))
                        ) {
                          var s = e.ray.origin.distanceTo(El)
                          s < e.near ||
                            s > e.far ||
                            t.push({
                              distance: s,
                              point: El.clone(),
                              uv: xi.getUV(El, Ll, Rl, Pl, Dl, Ol, Il, new Jn()),
                              face: null,
                              object: this,
                            })
                        }
                      },
                      copy: function (e) {
                        return (
                          si.prototype.copy.call(this, e),
                          void 0 !== e.center && this.center.copy(e.center),
                          (this.material = e.material),
                          this
                        )
                      },
                    })
                    var kl = new lr(),
                      Nl = new lr()
                    function Ul() {
                      si.call(this),
                        (this._currentLevel = 0),
                        (this.type = 'LOD'),
                        Object.defineProperties(this, { levels: { enumerable: !0, value: [] } }),
                        (this.autoUpdate = !0)
                    }
                    Ul.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: Ul,
                      isLOD: !0,
                      copy: function (e) {
                        si.prototype.copy.call(this, e, !1)
                        for (var t = e.levels, n = 0, r = t.length; n < r; n++) {
                          var i = t[n]
                          this.addLevel(i.object.clone(), i.distance)
                        }
                        return (this.autoUpdate = e.autoUpdate), this
                      },
                      addLevel: function (e, t) {
                        void 0 === t && (t = 0), (t = Math.abs(t))
                        var n,
                          r = this.levels
                        for (n = 0; n < r.length && !(t < r[n].distance); n++);
                        return r.splice(n, 0, { distance: t, object: e }), this.add(e), this
                      },
                      getCurrentLevel: function () {
                        return this._currentLevel
                      },
                      getObjectForDistance: function (e) {
                        var t = this.levels
                        if (t.length > 0) {
                          var n, r
                          for (n = 1, r = t.length; n < r && !(e < t[n].distance); n++);
                          return t[n - 1].object
                        }
                        return null
                      },
                      raycast: function (e, t) {
                        if (this.levels.length > 0) {
                          kl.setFromMatrixPosition(this.matrixWorld)
                          var n = e.ray.origin.distanceTo(kl)
                          this.getObjectForDistance(n).raycast(e, t)
                        }
                      },
                      update: function (e) {
                        var t = this.levels
                        if (t.length > 1) {
                          kl.setFromMatrixPosition(e.matrixWorld),
                            Nl.setFromMatrixPosition(this.matrixWorld)
                          var n,
                            r,
                            i = kl.distanceTo(Nl) / e.zoom
                          for (
                            t[0].object.visible = !0, n = 1, r = t.length;
                            n < r && i >= t[n].distance;
                            n++
                          )
                            (t[n - 1].object.visible = !1), (t[n].object.visible = !0)
                          for (this._currentLevel = n - 1; n < r; n++) t[n].object.visible = !1
                        }
                      },
                      toJSON: function (e) {
                        var t = si.prototype.toJSON.call(this, e)
                        !1 === this.autoUpdate && (t.object.autoUpdate = !1), (t.object.levels = [])
                        for (var n = this.levels, r = 0, i = n.length; r < i; r++) {
                          var o = n[r]
                          t.object.levels.push({ object: o.object.uuid, distance: o.distance })
                        }
                        return t
                      },
                    })
                    var Hl = new lr(),
                      Gl = new ir(),
                      zl = new ir(),
                      jl = new lr(),
                      Vl = new Fr()
                    function Wl(e, t) {
                      e &&
                        e.isGeometry &&
                        console.error(
                          'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                        ),
                        xo.call(this, e, t),
                        (this.type = 'SkinnedMesh'),
                        (this.bindMode = 'attached'),
                        (this.bindMatrix = new Fr()),
                        (this.bindMatrixInverse = new Fr())
                    }
                    function ql() {
                      si.call(this), (this.type = 'Bone')
                    }
                    ;(Wl.prototype = Object.assign(Object.create(xo.prototype), {
                      constructor: Wl,
                      isSkinnedMesh: !0,
                      copy: function (e) {
                        return (
                          xo.prototype.copy.call(this, e),
                          (this.bindMode = e.bindMode),
                          this.bindMatrix.copy(e.bindMatrix),
                          this.bindMatrixInverse.copy(e.bindMatrixInverse),
                          (this.skeleton = e.skeleton),
                          this
                        )
                      },
                      bind: function (e, t) {
                        ;(this.skeleton = e),
                          void 0 === t &&
                            (this.updateMatrixWorld(!0),
                            this.skeleton.calculateInverses(),
                            (t = this.matrixWorld)),
                          this.bindMatrix.copy(t),
                          this.bindMatrixInverse.copy(t).invert()
                      },
                      pose: function () {
                        this.skeleton.pose()
                      },
                      normalizeSkinWeights: function () {
                        for (
                          var e = new ir(),
                            t = this.geometry.attributes.skinWeight,
                            n = 0,
                            r = t.count;
                          n < r;
                          n++
                        ) {
                          ;(e.x = t.getX(n)),
                            (e.y = t.getY(n)),
                            (e.z = t.getZ(n)),
                            (e.w = t.getW(n))
                          var i = 1 / e.manhattanLength()
                          i !== 1 / 0 ? e.multiplyScalar(i) : e.set(1, 0, 0, 0),
                            t.setXYZW(n, e.x, e.y, e.z, e.w)
                        }
                      },
                      updateMatrixWorld: function (e) {
                        xo.prototype.updateMatrixWorld.call(this, e),
                          '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: function (e, t) {
                        var n = this.skeleton,
                          r = this.geometry
                        Gl.fromBufferAttribute(r.attributes.skinIndex, e),
                          zl.fromBufferAttribute(r.attributes.skinWeight, e),
                          Hl.fromBufferAttribute(r.attributes.position, e).applyMatrix4(
                            this.bindMatrix,
                          ),
                          t.set(0, 0, 0)
                        for (var i = 0; i < 4; i++) {
                          var o = zl.getComponent(i)
                          if (0 !== o) {
                            var a = Gl.getComponent(i)
                            Vl.multiplyMatrices(n.bones[a].matrixWorld, n.boneInverses[a]),
                              t.addScaledVector(jl.copy(Hl).applyMatrix4(Vl), o)
                          }
                        }
                        return t.applyMatrix4(this.bindMatrixInverse)
                      },
                    })),
                      (ql.prototype = Object.assign(Object.create(si.prototype), {
                        constructor: ql,
                        isBone: !0,
                      }))
                    var Xl = new Fr(),
                      Yl = new Fr()
                    function Ql(e, t) {
                      void 0 === e && (e = []),
                        void 0 === t && (t = []),
                        (this.uuid = Kn.generateUUID()),
                        (this.bones = e.slice(0)),
                        (this.boneInverses = t),
                        (this.boneMatrices = null),
                        (this.boneTexture = null),
                        (this.boneTextureSize = 0),
                        (this.frame = -1),
                        this.init()
                    }
                    Object.assign(Ql.prototype, {
                      init: function () {
                        var e = this.bones,
                          t = this.boneInverses
                        if (((this.boneMatrices = new Float32Array(16 * e.length)), 0 === t.length))
                          this.calculateInverses()
                        else if (e.length !== t.length) {
                          console.warn(
                            'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.',
                          ),
                            (this.boneInverses = [])
                          for (var n = 0, r = this.bones.length; n < r; n++)
                            this.boneInverses.push(new Fr())
                        }
                      },
                      calculateInverses: function () {
                        this.boneInverses.length = 0
                        for (var e = 0, t = this.bones.length; e < t; e++) {
                          var n = new Fr()
                          this.bones[e] && n.copy(this.bones[e].matrixWorld).invert(),
                            this.boneInverses.push(n)
                        }
                      },
                      pose: function () {
                        for (var e = 0, t = this.bones.length; e < t; e++) {
                          var n = this.bones[e]
                          n && n.matrixWorld.copy(this.boneInverses[e]).invert()
                        }
                        for (var r = 0, i = this.bones.length; r < i; r++) {
                          var o = this.bones[r]
                          o &&
                            (o.parent && o.parent.isBone
                              ? (o.matrix.copy(o.parent.matrixWorld).invert(),
                                o.matrix.multiply(o.matrixWorld))
                              : o.matrix.copy(o.matrixWorld),
                            o.matrix.decompose(o.position, o.quaternion, o.scale))
                        }
                      },
                      update: function () {
                        for (
                          var e = this.bones,
                            t = this.boneInverses,
                            n = this.boneMatrices,
                            r = this.boneTexture,
                            i = 0,
                            o = e.length;
                          i < o;
                          i++
                        ) {
                          var a = e[i] ? e[i].matrixWorld : Yl
                          Xl.multiplyMatrices(a, t[i]), Xl.toArray(n, 16 * i)
                        }
                        null !== r && (r.needsUpdate = !0)
                      },
                      clone: function () {
                        return new Ql(this.bones, this.boneInverses)
                      },
                      getBoneByName: function (e) {
                        for (var t = 0, n = this.bones.length; t < n; t++) {
                          var r = this.bones[t]
                          if (r.name === e) return r
                        }
                      },
                      dispose: function () {
                        null !== this.boneTexture &&
                          (this.boneTexture.dispose(), (this.boneTexture = null))
                      },
                      fromJSON: function (e, t) {
                        this.uuid = e.uuid
                        for (var n = 0, r = e.bones.length; n < r; n++) {
                          var i = e.bones[n],
                            o = t[i]
                          void 0 === o &&
                            (console.warn('THREE.Skeleton: No bone found with UUID:', i),
                            (o = new ql())),
                            this.bones.push(o),
                            this.boneInverses.push(new Fr().fromArray(e.boneInverses[n]))
                        }
                        return this.init(), this
                      },
                      toJSON: function () {
                        var e = {
                          metadata: {
                            version: 4.5,
                            type: 'Skeleton',
                            generator: 'Skeleton.toJSON',
                          },
                          bones: [],
                          boneInverses: [],
                        }
                        e.uuid = this.uuid
                        for (
                          var t = this.bones, n = this.boneInverses, r = 0, i = t.length;
                          r < i;
                          r++
                        ) {
                          var o = t[r]
                          e.bones.push(o.uuid)
                          var a = n[r]
                          e.boneInverses.push(a.toArray())
                        }
                        return e
                      },
                    })
                    var Zl = new Fr(),
                      Kl = new Fr(),
                      Jl = [],
                      $l = new xo()
                    function ec(e, t, n) {
                      xo.call(this, e, t),
                        (this.instanceMatrix = new Fi(new Float32Array(16 * n), 16)),
                        (this.instanceColor = null),
                        (this.count = n),
                        (this.frustumCulled = !1)
                    }
                    function tc(e) {
                      Di.call(this),
                        (this.type = 'LineBasicMaterial'),
                        (this.color = new Li(16777215)),
                        (this.linewidth = 1),
                        (this.linecap = 'round'),
                        (this.linejoin = 'round'),
                        (this.morphTargets = !1),
                        this.setValues(e)
                    }
                    ;(ec.prototype = Object.assign(Object.create(xo.prototype), {
                      constructor: ec,
                      isInstancedMesh: !0,
                      copy: function (e) {
                        return (
                          xo.prototype.copy.call(this, e),
                          this.instanceMatrix.copy(e.instanceMatrix),
                          null !== e.instanceColor &&
                            (this.instanceColor = e.instanceColor.clone()),
                          (this.count = e.count),
                          this
                        )
                      },
                      getColorAt: function (e, t) {
                        t.fromArray(this.instanceColor.array, 3 * e)
                      },
                      getMatrixAt: function (e, t) {
                        t.fromArray(this.instanceMatrix.array, 16 * e)
                      },
                      raycast: function (e, t) {
                        var n = this.matrixWorld,
                          r = this.count
                        if (
                          (($l.geometry = this.geometry),
                          ($l.material = this.material),
                          void 0 !== $l.material)
                        )
                          for (var i = 0; i < r; i++) {
                            this.getMatrixAt(i, Zl),
                              Kl.multiplyMatrices(n, Zl),
                              ($l.matrixWorld = Kl),
                              $l.raycast(e, Jl)
                            for (var o = 0, a = Jl.length; o < a; o++) {
                              var s = Jl[o]
                              ;(s.instanceId = i), (s.object = this), t.push(s)
                            }
                            Jl.length = 0
                          }
                      },
                      setColorAt: function (e, t) {
                        null === this.instanceColor &&
                          (this.instanceColor = new Fi(new Float32Array(3 * this.count), 3)),
                          t.toArray(this.instanceColor.array, 3 * e)
                      },
                      setMatrixAt: function (e, t) {
                        t.toArray(this.instanceMatrix.array, 16 * e)
                      },
                      updateMorphTargets: function () {},
                      dispose: function () {
                        this.dispatchEvent({ type: 'dispose' })
                      },
                    })),
                      (tc.prototype = Object.create(Di.prototype)),
                      (tc.prototype.constructor = tc),
                      (tc.prototype.isLineBasicMaterial = !0),
                      (tc.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.linewidth = e.linewidth),
                          (this.linecap = e.linecap),
                          (this.linejoin = e.linejoin),
                          (this.morphTargets = e.morphTargets),
                          this
                        )
                      })
                    var nc = new lr(),
                      rc = new lr(),
                      ic = new Fr(),
                      oc = new Br(),
                      ac = new Sr()
                    function sc(e, t) {
                      void 0 === e && (e = new ro()),
                        void 0 === t && (t = new tc()),
                        si.call(this),
                        (this.type = 'Line'),
                        (this.geometry = e),
                        (this.material = t),
                        this.updateMorphTargets()
                    }
                    sc.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: sc,
                      isLine: !0,
                      copy: function (e) {
                        return (
                          si.prototype.copy.call(this, e),
                          (this.material = e.material),
                          (this.geometry = e.geometry),
                          this
                        )
                      },
                      computeLineDistances: function () {
                        var e = this.geometry
                        if (e.isBufferGeometry)
                          if (null === e.index) {
                            for (
                              var t = e.attributes.position, n = [0], r = 1, i = t.count;
                              r < i;
                              r++
                            )
                              nc.fromBufferAttribute(t, r - 1),
                                rc.fromBufferAttribute(t, r),
                                (n[r] = n[r - 1]),
                                (n[r] += nc.distanceTo(rc))
                            e.setAttribute('lineDistance', new Wi(n, 1))
                          } else
                            console.warn(
                              'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.',
                            )
                        else
                          e.isGeometry &&
                            console.error(
                              'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        return this
                      },
                      raycast: function (e, t) {
                        var n = this.geometry,
                          r = this.matrixWorld,
                          i = e.params.Line.threshold
                        if (
                          (null === n.boundingSphere && n.computeBoundingSphere(),
                          ac.copy(n.boundingSphere),
                          ac.applyMatrix4(r),
                          (ac.radius += i),
                          !1 !== e.ray.intersectsSphere(ac))
                        ) {
                          ic.copy(r).invert(), oc.copy(e.ray).applyMatrix4(ic)
                          var o = i / ((this.scale.x + this.scale.y + this.scale.z) / 3),
                            a = o * o,
                            s = new lr(),
                            l = new lr(),
                            c = new lr(),
                            u = new lr(),
                            h = this.isLineSegments ? 2 : 1
                          if (n.isBufferGeometry) {
                            var d = n.index,
                              p = n.attributes.position
                            if (null !== d)
                              for (var f = d.array, m = 0, v = f.length - 1; m < v; m += h) {
                                var g = f[m],
                                  y = f[m + 1]
                                if (
                                  (s.fromBufferAttribute(p, g),
                                  l.fromBufferAttribute(p, y),
                                  !(oc.distanceSqToSegment(s, l, u, c) > a))
                                ) {
                                  u.applyMatrix4(this.matrixWorld)
                                  var b = e.ray.origin.distanceTo(u)
                                  b < e.near ||
                                    b > e.far ||
                                    t.push({
                                      distance: b,
                                      point: c.clone().applyMatrix4(this.matrixWorld),
                                      index: m,
                                      face: null,
                                      faceIndex: null,
                                      object: this,
                                    })
                                }
                              }
                            else
                              for (var A = 0, w = p.count - 1; A < w; A += h)
                                if (
                                  (s.fromBufferAttribute(p, A),
                                  l.fromBufferAttribute(p, A + 1),
                                  !(oc.distanceSqToSegment(s, l, u, c) > a))
                                ) {
                                  u.applyMatrix4(this.matrixWorld)
                                  var x = e.ray.origin.distanceTo(u)
                                  x < e.near ||
                                    x > e.far ||
                                    t.push({
                                      distance: x,
                                      point: c.clone().applyMatrix4(this.matrixWorld),
                                      index: A,
                                      face: null,
                                      faceIndex: null,
                                      object: this,
                                    })
                                }
                          } else
                            n.isGeometry &&
                              console.error(
                                'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                              )
                        }
                      },
                      updateMorphTargets: function () {
                        var e = this.geometry
                        if (e.isBufferGeometry) {
                          var t = e.morphAttributes,
                            n = Object.keys(t)
                          if (n.length > 0) {
                            var r = t[n[0]]
                            if (void 0 !== r) {
                              ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {})
                              for (var i = 0, o = r.length; i < o; i++) {
                                var a = r[i].name || String(i)
                                this.morphTargetInfluences.push(0),
                                  (this.morphTargetDictionary[a] = i)
                              }
                            }
                          }
                        } else {
                          var s = e.morphTargets
                          void 0 !== s &&
                            s.length > 0 &&
                            console.error(
                              'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        }
                      },
                    })
                    var lc = new lr(),
                      cc = new lr()
                    function uc(e, t) {
                      sc.call(this, e, t), (this.type = 'LineSegments')
                    }
                    function hc(e, t) {
                      sc.call(this, e, t), (this.type = 'LineLoop')
                    }
                    function dc(e) {
                      Di.call(this),
                        (this.type = 'PointsMaterial'),
                        (this.color = new Li(16777215)),
                        (this.map = null),
                        (this.alphaMap = null),
                        (this.size = 1),
                        (this.sizeAttenuation = !0),
                        (this.morphTargets = !1),
                        this.setValues(e)
                    }
                    ;(uc.prototype = Object.assign(Object.create(sc.prototype), {
                      constructor: uc,
                      isLineSegments: !0,
                      computeLineDistances: function () {
                        var e = this.geometry
                        if (e.isBufferGeometry)
                          if (null === e.index) {
                            for (
                              var t = e.attributes.position, n = [], r = 0, i = t.count;
                              r < i;
                              r += 2
                            )
                              lc.fromBufferAttribute(t, r),
                                cc.fromBufferAttribute(t, r + 1),
                                (n[r] = 0 === r ? 0 : n[r - 1]),
                                (n[r + 1] = n[r] + lc.distanceTo(cc))
                            e.setAttribute('lineDistance', new Wi(n, 1))
                          } else
                            console.warn(
                              'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.',
                            )
                        else
                          e.isGeometry &&
                            console.error(
                              'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        return this
                      },
                    })),
                      (hc.prototype = Object.assign(Object.create(sc.prototype), {
                        constructor: hc,
                        isLineLoop: !0,
                      })),
                      (dc.prototype = Object.create(Di.prototype)),
                      (dc.prototype.constructor = dc),
                      (dc.prototype.isPointsMaterial = !0),
                      (dc.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.map = e.map),
                          (this.alphaMap = e.alphaMap),
                          (this.size = e.size),
                          (this.sizeAttenuation = e.sizeAttenuation),
                          (this.morphTargets = e.morphTargets),
                          this
                        )
                      })
                    var pc = new Fr(),
                      fc = new Br(),
                      mc = new Sr(),
                      vc = new lr()
                    function gc(e, t) {
                      void 0 === e && (e = new ro()),
                        void 0 === t && (t = new dc()),
                        si.call(this),
                        (this.type = 'Points'),
                        (this.geometry = e),
                        (this.material = t),
                        this.updateMorphTargets()
                    }
                    function yc(e, t, n, r, i, o, a) {
                      var s = fc.distanceSqToPoint(e)
                      if (s < n) {
                        var l = new lr()
                        fc.closestPointToPoint(e, l), l.applyMatrix4(r)
                        var c = i.ray.origin.distanceTo(l)
                        if (c < i.near || c > i.far) return
                        o.push({
                          distance: c,
                          distanceToRay: Math.sqrt(s),
                          point: l,
                          index: t,
                          face: null,
                          object: a,
                        })
                      }
                    }
                    function bc(e, t, n, r, i, o, a, s, l) {
                      nr.call(this, e, t, n, r, i, o, a, s, l),
                        (this.format = void 0 !== a ? a : Ne),
                        (this.minFilter = void 0 !== o ? o : Ae),
                        (this.magFilter = void 0 !== i ? i : Ae),
                        (this.generateMipmaps = !1)
                      var c = this
                      function u() {
                        ;(c.needsUpdate = !0), e.requestVideoFrameCallback(u)
                      }
                      'requestVideoFrameCallback' in e && e.requestVideoFrameCallback(u)
                    }
                    function Ac(e, t, n, r, i, o, a, s, l, c, u, h) {
                      nr.call(this, null, o, a, s, l, c, r, i, u, h),
                        (this.image = { width: t, height: n }),
                        (this.mipmaps = e),
                        (this.flipY = !1),
                        (this.generateMipmaps = !1)
                    }
                    function wc(e, t, n, r, i, o, a, s, l) {
                      nr.call(this, e, t, n, r, i, o, a, s, l), (this.needsUpdate = !0)
                    }
                    function xc(e, t, n, r, i, o, a, s, l, c) {
                      if ((c = void 0 !== c ? c : je) !== je && c !== Ve)
                        throw new Error(
                          'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat',
                        )
                      void 0 === n && c === je && (n = Ce),
                        void 0 === n && c === Ve && (n = Fe),
                        nr.call(this, null, r, i, o, a, s, c, n, l),
                        (this.image = { width: e, height: t }),
                        (this.magFilter = void 0 !== a ? a : me),
                        (this.minFilter = void 0 !== s ? s : me),
                        (this.flipY = !1),
                        (this.generateMipmaps = !1)
                    }
                    ;(gc.prototype = Object.assign(Object.create(si.prototype), {
                      constructor: gc,
                      isPoints: !0,
                      copy: function (e) {
                        return (
                          si.prototype.copy.call(this, e),
                          (this.material = e.material),
                          (this.geometry = e.geometry),
                          this
                        )
                      },
                      raycast: function (e, t) {
                        var n = this.geometry,
                          r = this.matrixWorld,
                          i = e.params.Points.threshold
                        if (
                          (null === n.boundingSphere && n.computeBoundingSphere(),
                          mc.copy(n.boundingSphere),
                          mc.applyMatrix4(r),
                          (mc.radius += i),
                          !1 !== e.ray.intersectsSphere(mc))
                        ) {
                          pc.copy(r).invert(), fc.copy(e.ray).applyMatrix4(pc)
                          var o = i / ((this.scale.x + this.scale.y + this.scale.z) / 3),
                            a = o * o
                          if (n.isBufferGeometry) {
                            var s = n.index,
                              l = n.attributes.position
                            if (null !== s)
                              for (var c = s.array, u = 0, h = c.length; u < h; u++) {
                                var d = c[u]
                                vc.fromBufferAttribute(l, d), yc(vc, d, a, r, e, t, this)
                              }
                            else
                              for (var p = 0, f = l.count; p < f; p++)
                                vc.fromBufferAttribute(l, p), yc(vc, p, a, r, e, t, this)
                          } else
                            console.error(
                              'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        }
                      },
                      updateMorphTargets: function () {
                        var e = this.geometry
                        if (e.isBufferGeometry) {
                          var t = e.morphAttributes,
                            n = Object.keys(t)
                          if (n.length > 0) {
                            var r = t[n[0]]
                            if (void 0 !== r) {
                              ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {})
                              for (var i = 0, o = r.length; i < o; i++) {
                                var a = r[i].name || String(i)
                                this.morphTargetInfluences.push(0),
                                  (this.morphTargetDictionary[a] = i)
                              }
                            }
                          }
                        } else {
                          var s = e.morphTargets
                          void 0 !== s &&
                            s.length > 0 &&
                            console.error(
                              'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.',
                            )
                        }
                      },
                    })),
                      (bc.prototype = Object.assign(Object.create(nr.prototype), {
                        constructor: bc,
                        clone: function () {
                          return new this.constructor(this.image).copy(this)
                        },
                        isVideoTexture: !0,
                        update: function () {
                          var e = this.image
                          !1 === 'requestVideoFrameCallback' in e &&
                            e.readyState >= e.HAVE_CURRENT_DATA &&
                            (this.needsUpdate = !0)
                        },
                      })),
                      (Ac.prototype = Object.create(nr.prototype)),
                      (Ac.prototype.constructor = Ac),
                      (Ac.prototype.isCompressedTexture = !0),
                      (wc.prototype = Object.create(nr.prototype)),
                      (wc.prototype.constructor = wc),
                      (wc.prototype.isCanvasTexture = !0),
                      (xc.prototype = Object.create(nr.prototype)),
                      (xc.prototype.constructor = xc),
                      (xc.prototype.isDepthTexture = !0)
                    var Ec = (function (e) {
                        function t(t, n, r, i) {
                          var o
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 8),
                            void 0 === r && (r = 0),
                            void 0 === i && (i = 2 * Math.PI),
                            ((o = e.call(this) || this).type = 'CircleGeometry'),
                            (o.parameters = {
                              radius: t,
                              segments: n,
                              thetaStart: r,
                              thetaLength: i,
                            }),
                            (n = Math.max(3, n))
                          var a = [],
                            s = [],
                            l = [],
                            c = [],
                            u = new lr(),
                            h = new Jn()
                          s.push(0, 0, 0), l.push(0, 0, 1), c.push(0.5, 0.5)
                          for (var d = 0, p = 3; d <= n; d++, p += 3) {
                            var f = r + (d / n) * i
                            ;(u.x = t * Math.cos(f)),
                              (u.y = t * Math.sin(f)),
                              s.push(u.x, u.y, u.z),
                              l.push(0, 0, 1),
                              (h.x = (s[p] / t + 1) / 2),
                              (h.y = (s[p + 1] / t + 1) / 2),
                              c.push(h.x, h.y)
                          }
                          for (var m = 1; m <= n; m++) a.push(m, m + 1, 0)
                          return (
                            o.setIndex(a),
                            o.setAttribute('position', new Wi(s, 3)),
                            o.setAttribute('normal', new Wi(l, 3)),
                            o.setAttribute('uv', new Wi(c, 2)),
                            o
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      Mc = (function (e) {
                        function t(t, n, r, i, o, a, s, l) {
                          var c
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 1),
                            void 0 === r && (r = 1),
                            void 0 === i && (i = 8),
                            void 0 === o && (o = 1),
                            void 0 === a && (a = !1),
                            void 0 === s && (s = 0),
                            void 0 === l && (l = 2 * Math.PI),
                            ((c = e.call(this) || this).type = 'CylinderGeometry'),
                            (c.parameters = {
                              radiusTop: t,
                              radiusBottom: n,
                              height: r,
                              radialSegments: i,
                              heightSegments: o,
                              openEnded: a,
                              thetaStart: s,
                              thetaLength: l,
                            })
                          var u = zn(c)
                          ;(i = Math.floor(i)), (o = Math.floor(o))
                          var h = [],
                            d = [],
                            p = [],
                            f = [],
                            m = 0,
                            v = [],
                            g = r / 2,
                            y = 0
                          function b() {
                            for (
                              var e = new lr(), a = new lr(), c = 0, b = (n - t) / r, A = 0;
                              A <= o;
                              A++
                            ) {
                              for (var w = [], x = A / o, E = x * (n - t) + t, M = 0; M <= i; M++) {
                                var _ = M / i,
                                  T = _ * l + s,
                                  S = Math.sin(T),
                                  C = Math.cos(T)
                                ;(a.x = E * S),
                                  (a.y = -x * r + g),
                                  (a.z = E * C),
                                  d.push(a.x, a.y, a.z),
                                  e.set(S, b, C).normalize(),
                                  p.push(e.x, e.y, e.z),
                                  f.push(_, 1 - x),
                                  w.push(m++)
                              }
                              v.push(w)
                            }
                            for (var L = 0; L < i; L++)
                              for (var R = 0; R < o; R++) {
                                var P = v[R][L],
                                  D = v[R + 1][L],
                                  O = v[R + 1][L + 1],
                                  I = v[R][L + 1]
                                h.push(P, D, I), h.push(D, O, I), (c += 6)
                              }
                            u.addGroup(y, c, 0), (y += c)
                          }
                          function A(e) {
                            for (
                              var r = m,
                                o = new Jn(),
                                a = new lr(),
                                c = 0,
                                v = !0 === e ? t : n,
                                b = !0 === e ? 1 : -1,
                                A = 1;
                              A <= i;
                              A++
                            )
                              d.push(0, g * b, 0), p.push(0, b, 0), f.push(0.5, 0.5), m++
                            for (var w = m, x = 0; x <= i; x++) {
                              var E = (x / i) * l + s,
                                M = Math.cos(E),
                                _ = Math.sin(E)
                              ;(a.x = v * _),
                                (a.y = g * b),
                                (a.z = v * M),
                                d.push(a.x, a.y, a.z),
                                p.push(0, b, 0),
                                (o.x = 0.5 * M + 0.5),
                                (o.y = 0.5 * _ * b + 0.5),
                                f.push(o.x, o.y),
                                m++
                            }
                            for (var T = 0; T < i; T++) {
                              var S = r + T,
                                C = w + T
                              !0 === e ? h.push(C, C + 1, S) : h.push(C + 1, C, S), (c += 3)
                            }
                            u.addGroup(y, c, !0 === e ? 1 : 2), (y += c)
                          }
                          return (
                            b(),
                            !1 === a && (t > 0 && A(!0), n > 0 && A(!1)),
                            c.setIndex(h),
                            c.setAttribute('position', new Wi(d, 3)),
                            c.setAttribute('normal', new Wi(p, 3)),
                            c.setAttribute('uv', new Wi(f, 2)),
                            c
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      _c = (function (e) {
                        function t(t, n, r, i, o, a, s) {
                          var l
                          return (
                            void 0 === t && (t = 1),
                            void 0 === n && (n = 1),
                            void 0 === r && (r = 8),
                            void 0 === i && (i = 1),
                            void 0 === o && (o = !1),
                            void 0 === a && (a = 0),
                            void 0 === s && (s = 2 * Math.PI),
                            ((l = e.call(this, 0, t, n, r, i, o, a, s) || this).type =
                              'ConeGeometry'),
                            (l.parameters = {
                              radius: t,
                              height: n,
                              radialSegments: r,
                              heightSegments: i,
                              openEnded: o,
                              thetaStart: a,
                              thetaLength: s,
                            }),
                            l
                          )
                        }
                        return Gn(t, e), t
                      })(Mc),
                      Tc = (function (e) {
                        function t(t, n, r, i) {
                          var o
                          void 0 === r && (r = 1),
                            void 0 === i && (i = 0),
                            ((o = e.call(this) || this).type = 'PolyhedronGeometry'),
                            (o.parameters = { vertices: t, indices: n, radius: r, detail: i })
                          var a = [],
                            s = []
                          function l(e) {
                            for (
                              var t = new lr(), r = new lr(), i = new lr(), o = 0;
                              o < n.length;
                              o += 3
                            )
                              f(n[o + 0], t), f(n[o + 1], r), f(n[o + 2], i), c(t, r, i, e)
                          }
                          function c(e, t, n, r) {
                            for (var i = r + 1, o = [], a = 0; a <= i; a++) {
                              o[a] = []
                              for (
                                var s = e.clone().lerp(n, a / i),
                                  l = t.clone().lerp(n, a / i),
                                  c = i - a,
                                  u = 0;
                                u <= c;
                                u++
                              )
                                o[a][u] = 0 === u && a === i ? s : s.clone().lerp(l, u / c)
                            }
                            for (var h = 0; h < i; h++)
                              for (var d = 0; d < 2 * (i - h) - 1; d++) {
                                var f = Math.floor(d / 2)
                                d % 2 === 0
                                  ? (p(o[h][f + 1]), p(o[h + 1][f]), p(o[h][f]))
                                  : (p(o[h][f + 1]), p(o[h + 1][f + 1]), p(o[h + 1][f]))
                              }
                          }
                          function u(e) {
                            for (var t = new lr(), n = 0; n < a.length; n += 3)
                              (t.x = a[n + 0]),
                                (t.y = a[n + 1]),
                                (t.z = a[n + 2]),
                                t.normalize().multiplyScalar(e),
                                (a[n + 0] = t.x),
                                (a[n + 1] = t.y),
                                (a[n + 2] = t.z)
                          }
                          function h() {
                            for (var e = new lr(), t = 0; t < a.length; t += 3) {
                              ;(e.x = a[t + 0]), (e.y = a[t + 1]), (e.z = a[t + 2])
                              var n = g(e) / 2 / Math.PI + 0.5,
                                r = y(e) / Math.PI + 0.5
                              s.push(n, 1 - r)
                            }
                            m(), d()
                          }
                          function d() {
                            for (var e = 0; e < s.length; e += 6) {
                              var t = s[e + 0],
                                n = s[e + 2],
                                r = s[e + 4],
                                i = Math.max(t, n, r),
                                o = Math.min(t, n, r)
                              i > 0.9 &&
                                o < 0.1 &&
                                (t < 0.2 && (s[e + 0] += 1),
                                n < 0.2 && (s[e + 2] += 1),
                                r < 0.2 && (s[e + 4] += 1))
                            }
                          }
                          function p(e) {
                            a.push(e.x, e.y, e.z)
                          }
                          function f(e, n) {
                            var r = 3 * e
                            ;(n.x = t[r + 0]), (n.y = t[r + 1]), (n.z = t[r + 2])
                          }
                          function m() {
                            for (
                              var e = new lr(),
                                t = new lr(),
                                n = new lr(),
                                r = new lr(),
                                i = new Jn(),
                                o = new Jn(),
                                l = new Jn(),
                                c = 0,
                                u = 0;
                              c < a.length;
                              c += 9, u += 6
                            ) {
                              e.set(a[c + 0], a[c + 1], a[c + 2]),
                                t.set(a[c + 3], a[c + 4], a[c + 5]),
                                n.set(a[c + 6], a[c + 7], a[c + 8]),
                                i.set(s[u + 0], s[u + 1]),
                                o.set(s[u + 2], s[u + 3]),
                                l.set(s[u + 4], s[u + 5]),
                                r.copy(e).add(t).add(n).divideScalar(3)
                              var h = g(r)
                              v(i, u + 0, e, h), v(o, u + 2, t, h), v(l, u + 4, n, h)
                            }
                          }
                          function v(e, t, n, r) {
                            r < 0 && 1 === e.x && (s[t] = e.x - 1),
                              0 === n.x && 0 === n.z && (s[t] = r / 2 / Math.PI + 0.5)
                          }
                          function g(e) {
                            return Math.atan2(e.z, -e.x)
                          }
                          function y(e) {
                            return Math.atan2(-e.y, Math.sqrt(e.x * e.x + e.z * e.z))
                          }
                          return (
                            l(i),
                            u(r),
                            h(),
                            o.setAttribute('position', new Wi(a, 3)),
                            o.setAttribute('normal', new Wi(a.slice(), 3)),
                            o.setAttribute('uv', new Wi(s, 2)),
                            0 === i ? o.computeVertexNormals() : o.normalizeNormals(),
                            o
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      Sc = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === t && (t = 1), void 0 === n && (n = 0)
                          var i = (1 + Math.sqrt(5)) / 2,
                            o = 1 / i,
                            a = [
                              -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,
                              -o,
                              -i,
                              0,
                              -o,
                              i,
                              0,
                              o,
                              -i,
                              0,
                              o,
                              i,
                              -o,
                              -i,
                              0,
                              -o,
                              i,
                              0,
                              o,
                              -i,
                              0,
                              o,
                              i,
                              0,
                              -i,
                              0,
                              -o,
                              i,
                              0,
                              -o,
                              -i,
                              0,
                              o,
                              i,
                              0,
                              o,
                            ],
                            s = [
                              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,
                            ]
                          return (
                            ((r = e.call(this, a, s, t, n) || this).type = 'DodecahedronGeometry'),
                            (r.parameters = { radius: t, detail: n }),
                            r
                          )
                        }
                        return Gn(t, e), t
                      })(Tc),
                      Cc = new lr(),
                      Lc = new lr(),
                      Rc = new lr(),
                      Pc = new xi(),
                      Dc = (function (e) {
                        function t(t, n) {
                          var r
                          if (
                            (((r = e.call(this) || this).type = 'EdgesGeometry'),
                            (r.parameters = { thresholdAngle: n }),
                            (n = void 0 !== n ? n : 1),
                            !0 === t.isGeometry)
                          )
                            return (
                              console.error(
                                'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                              ),
                              zn(r)
                            )
                          for (
                            var i = 4,
                              o = Math.pow(10, i),
                              a = Math.cos(Kn.DEG2RAD * n),
                              s = t.getIndex(),
                              l = t.getAttribute('position'),
                              c = s ? s.count : l.count,
                              u = [0, 0, 0],
                              h = ['a', 'b', 'c'],
                              d = new Array(3),
                              p = {},
                              f = [],
                              m = 0;
                            m < c;
                            m += 3
                          ) {
                            s
                              ? ((u[0] = s.getX(m)), (u[1] = s.getX(m + 1)), (u[2] = s.getX(m + 2)))
                              : ((u[0] = m), (u[1] = m + 1), (u[2] = m + 2))
                            var v = Pc.a,
                              g = Pc.b,
                              y = Pc.c
                            if (
                              (v.fromBufferAttribute(l, u[0]),
                              g.fromBufferAttribute(l, u[1]),
                              y.fromBufferAttribute(l, u[2]),
                              Pc.getNormal(Rc),
                              (d[0] =
                                Math.round(v.x * o) +
                                ',' +
                                Math.round(v.y * o) +
                                ',' +
                                Math.round(v.z * o)),
                              (d[1] =
                                Math.round(g.x * o) +
                                ',' +
                                Math.round(g.y * o) +
                                ',' +
                                Math.round(g.z * o)),
                              (d[2] =
                                Math.round(y.x * o) +
                                ',' +
                                Math.round(y.y * o) +
                                ',' +
                                Math.round(y.z * o)),
                              d[0] !== d[1] && d[1] !== d[2] && d[2] !== d[0])
                            )
                              for (var b = 0; b < 3; b++) {
                                var A = (b + 1) % 3,
                                  w = d[b],
                                  x = d[A],
                                  E = Pc[h[b]],
                                  M = Pc[h[A]],
                                  _ = w + '_' + x,
                                  T = x + '_' + w
                                T in p && p[T]
                                  ? (Rc.dot(p[T].normal) <= a &&
                                      (f.push(E.x, E.y, E.z), f.push(M.x, M.y, M.z)),
                                    (p[T] = null))
                                  : _ in p ||
                                    (p[_] = { index0: u[b], index1: u[A], normal: Rc.clone() })
                              }
                          }
                          for (var S in p)
                            if (p[S]) {
                              var C = p[S],
                                L = C.index0,
                                R = C.index1
                              Cc.fromBufferAttribute(l, L),
                                Lc.fromBufferAttribute(l, R),
                                f.push(Cc.x, Cc.y, Cc.z),
                                f.push(Lc.x, Lc.y, Lc.z)
                            }
                          return r.setAttribute('position', new Wi(f, 3)), r
                        }
                        return Gn(t, e), t
                      })(ro),
                      Oc = {
                        triangulate: function (e, t, n) {
                          n = n || 2
                          var r,
                            i,
                            o,
                            a,
                            s,
                            l,
                            c,
                            u = t && t.length,
                            h = u ? t[0] * n : e.length,
                            d = Ic(e, 0, h, n, !0),
                            p = []
                          if (!d || d.next === d.prev) return p
                          if ((u && (d = Gc(e, t, d, n)), e.length > 80 * n)) {
                            ;(r = o = e[0]), (i = a = e[1])
                            for (var f = n; f < h; f += n)
                              (s = e[f]) < r && (r = s),
                                (l = e[f + 1]) < i && (i = l),
                                s > o && (o = s),
                                l > a && (a = l)
                            c = 0 !== (c = Math.max(o - r, a - i)) ? 1 / c : 0
                          }
                          return Fc(d, p, n, r, i, c), p
                        },
                      }
                    function Ic(e, t, n, r, i) {
                      var o, a
                      if (i === uu(e, t, n, r) > 0)
                        for (o = t; o < n; o += r) a = su(o, e[o], e[o + 1], a)
                      else for (o = n - r; o >= t; o -= r) a = su(o, e[o], e[o + 1], a)
                      return a && $c(a, a.next) && (lu(a), (a = a.next)), a
                    }
                    function Bc(e, t) {
                      if (!e) return e
                      t || (t = e)
                      var n,
                        r = e
                      do {
                        if (
                          ((n = !1), r.steiner || (!$c(r, r.next) && 0 !== Jc(r.prev, r, r.next)))
                        )
                          r = r.next
                        else {
                          if ((lu(r), (r = t = r.prev) === r.next)) break
                          n = !0
                        }
                      } while (n || r !== t)
                      return t
                    }
                    function Fc(e, t, n, r, i, o, a) {
                      if (e) {
                        !a && o && qc(e, r, i, o)
                        for (var s, l, c = e; e.prev !== e.next; )
                          if (((s = e.prev), (l = e.next), o ? Nc(e, r, i, o) : kc(e)))
                            t.push(s.i / n),
                              t.push(e.i / n),
                              t.push(l.i / n),
                              lu(e),
                              (e = l.next),
                              (c = l.next)
                          else if ((e = l) === c) {
                            a
                              ? 1 === a
                                ? Fc((e = Uc(Bc(e), t, n)), t, n, r, i, o, 2)
                                : 2 === a && Hc(e, t, n, r, i, o)
                              : Fc(Bc(e), t, n, r, i, o, 1)
                            break
                          }
                      }
                    }
                    function kc(e) {
                      var t = e.prev,
                        n = e,
                        r = e.next
                      if (Jc(t, n, r) >= 0) return !1
                      for (var i = e.next.next; i !== e.prev; ) {
                        if (
                          Zc(t.x, t.y, n.x, n.y, r.x, r.y, i.x, i.y) &&
                          Jc(i.prev, i, i.next) >= 0
                        )
                          return !1
                        i = i.next
                      }
                      return !0
                    }
                    function Nc(e, t, n, r) {
                      var i = e.prev,
                        o = e,
                        a = e.next
                      if (Jc(i, o, a) >= 0) return !1
                      for (
                        var s = i.x < o.x ? (i.x < a.x ? i.x : a.x) : o.x < a.x ? o.x : a.x,
                          l = i.y < o.y ? (i.y < a.y ? i.y : a.y) : o.y < a.y ? o.y : a.y,
                          c = i.x > o.x ? (i.x > a.x ? i.x : a.x) : o.x > a.x ? o.x : a.x,
                          u = i.y > o.y ? (i.y > a.y ? i.y : a.y) : o.y > a.y ? o.y : a.y,
                          h = Yc(s, l, t, n, r),
                          d = Yc(c, u, t, n, r),
                          p = e.prevZ,
                          f = e.nextZ;
                        p && p.z >= h && f && f.z <= d;

                      ) {
                        if (
                          p !== e.prev &&
                          p !== e.next &&
                          Zc(i.x, i.y, o.x, o.y, a.x, a.y, p.x, p.y) &&
                          Jc(p.prev, p, p.next) >= 0
                        )
                          return !1
                        if (
                          ((p = p.prevZ),
                          f !== e.prev &&
                            f !== e.next &&
                            Zc(i.x, i.y, o.x, o.y, a.x, a.y, f.x, f.y) &&
                            Jc(f.prev, f, f.next) >= 0)
                        )
                          return !1
                        f = f.nextZ
                      }
                      for (; p && p.z >= h; ) {
                        if (
                          p !== e.prev &&
                          p !== e.next &&
                          Zc(i.x, i.y, o.x, o.y, a.x, a.y, p.x, p.y) &&
                          Jc(p.prev, p, p.next) >= 0
                        )
                          return !1
                        p = p.prevZ
                      }
                      for (; f && f.z <= d; ) {
                        if (
                          f !== e.prev &&
                          f !== e.next &&
                          Zc(i.x, i.y, o.x, o.y, a.x, a.y, f.x, f.y) &&
                          Jc(f.prev, f, f.next) >= 0
                        )
                          return !1
                        f = f.nextZ
                      }
                      return !0
                    }
                    function Uc(e, t, n) {
                      var r = e
                      do {
                        var i = r.prev,
                          o = r.next.next
                        !$c(i, o) &&
                          eu(i, r, r.next, o) &&
                          iu(i, o) &&
                          iu(o, i) &&
                          (t.push(i.i / n),
                          t.push(r.i / n),
                          t.push(o.i / n),
                          lu(r),
                          lu(r.next),
                          (r = e = o)),
                          (r = r.next)
                      } while (r !== e)
                      return Bc(r)
                    }
                    function Hc(e, t, n, r, i, o) {
                      var a = e
                      do {
                        for (var s = a.next.next; s !== a.prev; ) {
                          if (a.i !== s.i && Kc(a, s)) {
                            var l = au(a, s)
                            return (
                              (a = Bc(a, a.next)),
                              (l = Bc(l, l.next)),
                              Fc(a, t, n, r, i, o),
                              void Fc(l, t, n, r, i, o)
                            )
                          }
                          s = s.next
                        }
                        a = a.next
                      } while (a !== e)
                    }
                    function Gc(e, t, n, r) {
                      var i,
                        o,
                        a,
                        s = []
                      for (i = 0, o = t.length; i < o; i++)
                        (a = Ic(e, t[i] * r, i < o - 1 ? t[i + 1] * r : e.length, r, !1)) ===
                          a.next && (a.steiner = !0),
                          s.push(Qc(a))
                      for (s.sort(zc), i = 0; i < s.length; i++) jc(s[i], n), (n = Bc(n, n.next))
                      return n
                    }
                    function zc(e, t) {
                      return e.x - t.x
                    }
                    function jc(e, t) {
                      if ((t = Vc(e, t))) {
                        var n = au(t, e)
                        Bc(t, t.next), Bc(n, n.next)
                      }
                    }
                    function Vc(e, t) {
                      var n,
                        r = t,
                        i = e.x,
                        o = e.y,
                        a = -1 / 0
                      do {
                        if (o <= r.y && o >= r.next.y && r.next.y !== r.y) {
                          var s = r.x + ((o - r.y) * (r.next.x - r.x)) / (r.next.y - r.y)
                          if (s <= i && s > a) {
                            if (((a = s), s === i)) {
                              if (o === r.y) return r
                              if (o === r.next.y) return r.next
                            }
                            n = r.x < r.next.x ? r : r.next
                          }
                        }
                        r = r.next
                      } while (r !== t)
                      if (!n) return null
                      if (i === a) return n
                      var l,
                        c = n,
                        u = n.x,
                        h = n.y,
                        d = 1 / 0
                      r = n
                      do {
                        i >= r.x &&
                          r.x >= u &&
                          i !== r.x &&
                          Zc(o < h ? i : a, o, u, h, o < h ? a : i, o, r.x, r.y) &&
                          ((l = Math.abs(o - r.y) / (i - r.x)),
                          iu(r, e) &&
                            (l < d || (l === d && (r.x > n.x || (r.x === n.x && Wc(n, r))))) &&
                            ((n = r), (d = l))),
                          (r = r.next)
                      } while (r !== c)
                      return n
                    }
                    function Wc(e, t) {
                      return Jc(e.prev, e, t.prev) < 0 && Jc(t.next, e, e.next) < 0
                    }
                    function qc(e, t, n, r) {
                      var i = e
                      do {
                        null === i.z && (i.z = Yc(i.x, i.y, t, n, r)),
                          (i.prevZ = i.prev),
                          (i.nextZ = i.next),
                          (i = i.next)
                      } while (i !== e)
                      ;(i.prevZ.nextZ = null), (i.prevZ = null), Xc(i)
                    }
                    function Xc(e) {
                      var t,
                        n,
                        r,
                        i,
                        o,
                        a,
                        s,
                        l,
                        c = 1
                      do {
                        for (n = e, e = null, o = null, a = 0; n; ) {
                          for (a++, r = n, s = 0, t = 0; t < c && (s++, (r = r.nextZ)); t++);
                          for (l = c; s > 0 || (l > 0 && r); )
                            0 !== s && (0 === l || !r || n.z <= r.z)
                              ? ((i = n), (n = n.nextZ), s--)
                              : ((i = r), (r = r.nextZ), l--),
                              o ? (o.nextZ = i) : (e = i),
                              (i.prevZ = o),
                              (o = i)
                          n = r
                        }
                        ;(o.nextZ = null), (c *= 2)
                      } while (a > 1)
                      return e
                    }
                    function Yc(e, t, n, r, i) {
                      return (
                        (e =
                          1431655765 &
                          ((e =
                            858993459 &
                            ((e =
                              252645135 &
                              ((e = 16711935 & ((e = 32767 * (e - n) * i) | (e << 8))) |
                                (e << 4))) |
                              (e << 2))) |
                            (e << 1))) |
                        ((t =
                          1431655765 &
                          ((t =
                            858993459 &
                            ((t =
                              252645135 &
                              ((t = 16711935 & ((t = 32767 * (t - r) * i) | (t << 8))) |
                                (t << 4))) |
                              (t << 2))) |
                            (t << 1))) <<
                          1)
                      )
                    }
                    function Qc(e) {
                      var t = e,
                        n = e
                      do {
                        ;(t.x < n.x || (t.x === n.x && t.y < n.y)) && (n = t), (t = t.next)
                      } while (t !== e)
                      return n
                    }
                    function Zc(e, t, n, r, i, o, a, s) {
                      return (
                        (i - a) * (t - s) - (e - a) * (o - s) >= 0 &&
                        (e - a) * (r - s) - (n - a) * (t - s) >= 0 &&
                        (n - a) * (o - s) - (i - a) * (r - s) >= 0
                      )
                    }
                    function Kc(e, t) {
                      return (
                        e.next.i !== t.i &&
                        e.prev.i !== t.i &&
                        !ru(e, t) &&
                        ((iu(e, t) &&
                          iu(t, e) &&
                          ou(e, t) &&
                          (Jc(e.prev, e, t.prev) || Jc(e, t.prev, t))) ||
                          ($c(e, t) && Jc(e.prev, e, e.next) > 0 && Jc(t.prev, t, t.next) > 0))
                      )
                    }
                    function Jc(e, t, n) {
                      return (t.y - e.y) * (n.x - t.x) - (t.x - e.x) * (n.y - t.y)
                    }
                    function $c(e, t) {
                      return e.x === t.x && e.y === t.y
                    }
                    function eu(e, t, n, r) {
                      var i = nu(Jc(e, t, n)),
                        o = nu(Jc(e, t, r)),
                        a = nu(Jc(n, r, e)),
                        s = nu(Jc(n, r, t))
                      return (
                        (i !== o && a !== s) ||
                        !(0 !== i || !tu(e, n, t)) ||
                        !(0 !== o || !tu(e, r, t)) ||
                        !(0 !== a || !tu(n, e, r)) ||
                        !(0 !== s || !tu(n, t, r))
                      )
                    }
                    function tu(e, t, n) {
                      return (
                        t.x <= Math.max(e.x, n.x) &&
                        t.x >= Math.min(e.x, n.x) &&
                        t.y <= Math.max(e.y, n.y) &&
                        t.y >= Math.min(e.y, n.y)
                      )
                    }
                    function nu(e) {
                      return e > 0 ? 1 : e < 0 ? -1 : 0
                    }
                    function ru(e, t) {
                      var n = e
                      do {
                        if (
                          n.i !== e.i &&
                          n.next.i !== e.i &&
                          n.i !== t.i &&
                          n.next.i !== t.i &&
                          eu(n, n.next, e, t)
                        )
                          return !0
                        n = n.next
                      } while (n !== e)
                      return !1
                    }
                    function iu(e, t) {
                      return Jc(e.prev, e, e.next) < 0
                        ? Jc(e, t, e.next) >= 0 && Jc(e, e.prev, t) >= 0
                        : Jc(e, t, e.prev) < 0 || Jc(e, e.next, t) < 0
                    }
                    function ou(e, t) {
                      var n = e,
                        r = !1,
                        i = (e.x + t.x) / 2,
                        o = (e.y + t.y) / 2
                      do {
                        n.y > o !== n.next.y > o &&
                          n.next.y !== n.y &&
                          i < ((n.next.x - n.x) * (o - n.y)) / (n.next.y - n.y) + n.x &&
                          (r = !r),
                          (n = n.next)
                      } while (n !== e)
                      return r
                    }
                    function au(e, t) {
                      var n = new cu(e.i, e.x, e.y),
                        r = new cu(t.i, t.x, t.y),
                        i = e.next,
                        o = t.prev
                      return (
                        (e.next = t),
                        (t.prev = e),
                        (n.next = i),
                        (i.prev = n),
                        (r.next = n),
                        (n.prev = r),
                        (o.next = r),
                        (r.prev = o),
                        r
                      )
                    }
                    function su(e, t, n, r) {
                      var i = new cu(e, t, n)
                      return (
                        r
                          ? ((i.next = r.next), (i.prev = r), (r.next.prev = i), (r.next = i))
                          : ((i.prev = i), (i.next = i)),
                        i
                      )
                    }
                    function lu(e) {
                      ;(e.next.prev = e.prev),
                        (e.prev.next = e.next),
                        e.prevZ && (e.prevZ.nextZ = e.nextZ),
                        e.nextZ && (e.nextZ.prevZ = e.prevZ)
                    }
                    function cu(e, t, n) {
                      ;(this.i = e),
                        (this.x = t),
                        (this.y = n),
                        (this.prev = null),
                        (this.next = null),
                        (this.z = null),
                        (this.prevZ = null),
                        (this.nextZ = null),
                        (this.steiner = !1)
                    }
                    function uu(e, t, n, r) {
                      for (var i = 0, o = t, a = n - r; o < n; o += r)
                        (i += (e[a] - e[o]) * (e[o + 1] + e[a + 1])), (a = o)
                      return i
                    }
                    var hu = {
                      area: function (e) {
                        for (var t = e.length, n = 0, r = t - 1, i = 0; i < t; r = i++)
                          n += e[r].x * e[i].y - e[i].x * e[r].y
                        return 0.5 * n
                      },
                      isClockWise: function (e) {
                        return hu.area(e) < 0
                      },
                      triangulateShape: function (e, t) {
                        var n = [],
                          r = [],
                          i = []
                        du(e), pu(n, e)
                        var o = e.length
                        t.forEach(du)
                        for (var a = 0; a < t.length; a++)
                          r.push(o), (o += t[a].length), pu(n, t[a])
                        for (var s = Oc.triangulate(n, r), l = 0; l < s.length; l += 3)
                          i.push(s.slice(l, l + 3))
                        return i
                      },
                    }
                    function du(e) {
                      var t = e.length
                      t > 2 && e[t - 1].equals(e[0]) && e.pop()
                    }
                    function pu(e, t) {
                      for (var n = 0; n < t.length; n++) e.push(t[n].x), e.push(t[n].y)
                    }
                    var fu = (function (e) {
                        function t(t, n) {
                          var r
                          ;((r = e.call(this) || this).type = 'ExtrudeGeometry'),
                            (r.parameters = { shapes: t, options: n }),
                            (t = Array.isArray(t) ? t : [t])
                          for (var i = zn(r), o = [], a = [], s = 0, l = t.length; s < l; s++)
                            c(t[s])
                          function c(e) {
                            var t = [],
                              r = void 0 !== n.curveSegments ? n.curveSegments : 12,
                              s = void 0 !== n.steps ? n.steps : 1,
                              l = void 0 !== n.depth ? n.depth : 100,
                              c = void 0 === n.bevelEnabled || n.bevelEnabled,
                              u = void 0 !== n.bevelThickness ? n.bevelThickness : 6,
                              h = void 0 !== n.bevelSize ? n.bevelSize : u - 2,
                              d = void 0 !== n.bevelOffset ? n.bevelOffset : 0,
                              p = void 0 !== n.bevelSegments ? n.bevelSegments : 3,
                              f = n.extrudePath,
                              m = void 0 !== n.UVGenerator ? n.UVGenerator : mu
                            void 0 !== n.amount &&
                              (console.warn(
                                'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.',
                              ),
                              (l = n.amount))
                            var v,
                              g,
                              y,
                              b,
                              A,
                              w = !1
                            f &&
                              ((v = f.getSpacedPoints(s)),
                              (w = !0),
                              (c = !1),
                              (g = f.computeFrenetFrames(s, !1)),
                              (y = new lr()),
                              (b = new lr()),
                              (A = new lr())),
                              c || ((p = 0), (u = 0), (h = 0), (d = 0))
                            var x = e.extractPoints(r),
                              E = x.shape,
                              M = x.holes
                            if (!hu.isClockWise(E)) {
                              E = E.reverse()
                              for (var _ = 0, T = M.length; _ < T; _++) {
                                var S = M[_]
                                hu.isClockWise(S) && (M[_] = S.reverse())
                              }
                            }
                            for (
                              var C = hu.triangulateShape(E, M), L = E, R = 0, P = M.length;
                              R < P;
                              R++
                            ) {
                              var D = M[R]
                              E = E.concat(D)
                            }
                            function O(e, t, n) {
                              return (
                                t || console.error('THREE.ExtrudeGeometry: vec does not exist'),
                                t.clone().multiplyScalar(n).add(e)
                              )
                            }
                            var I = E.length,
                              B = C.length
                            function F(e, t, n) {
                              var r,
                                i,
                                o,
                                a = e.x - t.x,
                                s = e.y - t.y,
                                l = n.x - e.x,
                                c = n.y - e.y,
                                u = a * a + s * s,
                                h = a * c - s * l
                              if (Math.abs(h) > Number.EPSILON) {
                                var d = Math.sqrt(u),
                                  p = Math.sqrt(l * l + c * c),
                                  f = t.x - s / d,
                                  m = t.y + a / d,
                                  v =
                                    ((n.x - c / p - f) * c - (n.y + l / p - m) * l) /
                                    (a * c - s * l),
                                  g = (r = f + a * v - e.x) * r + (i = m + s * v - e.y) * i
                                if (g <= 2) return new Jn(r, i)
                                o = Math.sqrt(g / 2)
                              } else {
                                var y = !1
                                a > Number.EPSILON
                                  ? l > Number.EPSILON && (y = !0)
                                  : a < -Number.EPSILON
                                  ? l < -Number.EPSILON && (y = !0)
                                  : Math.sign(s) === Math.sign(c) && (y = !0),
                                  y
                                    ? ((r = -s), (i = a), (o = Math.sqrt(u)))
                                    : ((r = a), (i = s), (o = Math.sqrt(u / 2)))
                              }
                              return new Jn(r / o, i / o)
                            }
                            for (
                              var k = [], N = 0, U = L.length, H = U - 1, G = N + 1;
                              N < U;
                              N++, H++, G++
                            )
                              H === U && (H = 0), G === U && (G = 0), (k[N] = F(L[N], L[H], L[G]))
                            for (var z, j = [], V = k.concat(), W = 0, q = M.length; W < q; W++) {
                              var X = M[W]
                              z = []
                              for (
                                var Y = 0, Q = X.length, Z = Q - 1, K = Y + 1;
                                Y < Q;
                                Y++, Z++, K++
                              )
                                Z === Q && (Z = 0), K === Q && (K = 0), (z[Y] = F(X[Y], X[Z], X[K]))
                              j.push(z), (V = V.concat(z))
                            }
                            for (var J = 0; J < p; J++) {
                              for (
                                var $ = J / p,
                                  ee = u * Math.cos(($ * Math.PI) / 2),
                                  te = h * Math.sin(($ * Math.PI) / 2) + d,
                                  ne = 0,
                                  re = L.length;
                                ne < re;
                                ne++
                              ) {
                                var ie = O(L[ne], k[ne], te)
                                Oe(ie.x, ie.y, -ee)
                              }
                              for (var oe = 0, ae = M.length; oe < ae; oe++) {
                                var se = M[oe]
                                z = j[oe]
                                for (var le = 0, ce = se.length; le < ce; le++) {
                                  var ue = O(se[le], z[le], te)
                                  Oe(ue.x, ue.y, -ee)
                                }
                              }
                            }
                            for (var he = h + d, de = 0; de < I; de++) {
                              var pe = c ? O(E[de], V[de], he) : E[de]
                              w
                                ? (b.copy(g.normals[0]).multiplyScalar(pe.x),
                                  y.copy(g.binormals[0]).multiplyScalar(pe.y),
                                  A.copy(v[0]).add(b).add(y),
                                  Oe(A.x, A.y, A.z))
                                : Oe(pe.x, pe.y, 0)
                            }
                            for (var fe = 1; fe <= s; fe++)
                              for (var me = 0; me < I; me++) {
                                var ve = c ? O(E[me], V[me], he) : E[me]
                                w
                                  ? (b.copy(g.normals[fe]).multiplyScalar(ve.x),
                                    y.copy(g.binormals[fe]).multiplyScalar(ve.y),
                                    A.copy(v[fe]).add(b).add(y),
                                    Oe(A.x, A.y, A.z))
                                  : Oe(ve.x, ve.y, (l / s) * fe)
                              }
                            for (var ge = p - 1; ge >= 0; ge--) {
                              for (
                                var ye = ge / p,
                                  be = u * Math.cos((ye * Math.PI) / 2),
                                  Ae = h * Math.sin((ye * Math.PI) / 2) + d,
                                  we = 0,
                                  xe = L.length;
                                we < xe;
                                we++
                              ) {
                                var Ee = O(L[we], k[we], Ae)
                                Oe(Ee.x, Ee.y, l + be)
                              }
                              for (var Me = 0, _e = M.length; Me < _e; Me++) {
                                var Te = M[Me]
                                z = j[Me]
                                for (var Se = 0, Ce = Te.length; Se < Ce; Se++) {
                                  var Le = O(Te[Se], z[Se], Ae)
                                  w
                                    ? Oe(Le.x, Le.y + v[s - 1].y, v[s - 1].x + be)
                                    : Oe(Le.x, Le.y, l + be)
                                }
                              }
                            }
                            function Re() {
                              var e = o.length / 3
                              if (c) {
                                for (var t = 0, n = I * t, r = 0; r < B; r++) {
                                  var a = C[r]
                                  Ie(a[2] + n, a[1] + n, a[0] + n)
                                }
                                n = I * (t = s + 2 * p)
                                for (var l = 0; l < B; l++) {
                                  var u = C[l]
                                  Ie(u[0] + n, u[1] + n, u[2] + n)
                                }
                              } else {
                                for (var h = 0; h < B; h++) {
                                  var d = C[h]
                                  Ie(d[2], d[1], d[0])
                                }
                                for (var f = 0; f < B; f++) {
                                  var m = C[f]
                                  Ie(m[0] + I * s, m[1] + I * s, m[2] + I * s)
                                }
                              }
                              i.addGroup(e, o.length / 3 - e, 0)
                            }
                            function Pe() {
                              var e = o.length / 3,
                                t = 0
                              De(L, t), (t += L.length)
                              for (var n = 0, r = M.length; n < r; n++) {
                                var a = M[n]
                                De(a, t), (t += a.length)
                              }
                              i.addGroup(e, o.length / 3 - e, 1)
                            }
                            function De(e, t) {
                              for (var n = e.length; --n >= 0; ) {
                                var r = n,
                                  i = n - 1
                                i < 0 && (i = e.length - 1)
                                for (var o = 0, a = s + 2 * p; o < a; o++) {
                                  var l = I * o,
                                    c = I * (o + 1)
                                  Be(t + r + l, t + i + l, t + i + c, t + r + c)
                                }
                              }
                            }
                            function Oe(e, n, r) {
                              t.push(e), t.push(n), t.push(r)
                            }
                            function Ie(e, t, n) {
                              Fe(e), Fe(t), Fe(n)
                              var r = o.length / 3,
                                a = m.generateTopUV(i, o, r - 3, r - 2, r - 1)
                              ke(a[0]), ke(a[1]), ke(a[2])
                            }
                            function Be(e, t, n, r) {
                              Fe(e), Fe(t), Fe(r), Fe(t), Fe(n), Fe(r)
                              var a = o.length / 3,
                                s = m.generateSideWallUV(i, o, a - 6, a - 3, a - 2, a - 1)
                              ke(s[0]), ke(s[1]), ke(s[3]), ke(s[1]), ke(s[2]), ke(s[3])
                            }
                            function Fe(e) {
                              o.push(t[3 * e + 0]), o.push(t[3 * e + 1]), o.push(t[3 * e + 2])
                            }
                            function ke(e) {
                              a.push(e.x), a.push(e.y)
                            }
                            Re(), Pe()
                          }
                          return (
                            r.setAttribute('position', new Wi(o, 3)),
                            r.setAttribute('uv', new Wi(a, 2)),
                            r.computeVertexNormals(),
                            r
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.toJSON = function () {
                            var e = ro.prototype.toJSON.call(this)
                            return vu(this.parameters.shapes, this.parameters.options, e)
                          }),
                          t
                        )
                      })(ro),
                      mu = {
                        generateTopUV: function (e, t, n, r, i) {
                          var o = t[3 * n],
                            a = t[3 * n + 1],
                            s = t[3 * r],
                            l = t[3 * r + 1],
                            c = t[3 * i],
                            u = t[3 * i + 1]
                          return [new Jn(o, a), new Jn(s, l), new Jn(c, u)]
                        },
                        generateSideWallUV: function (e, t, n, r, i, o) {
                          var a = t[3 * n],
                            s = t[3 * n + 1],
                            l = t[3 * n + 2],
                            c = t[3 * r],
                            u = t[3 * r + 1],
                            h = t[3 * r + 2],
                            d = t[3 * i],
                            p = t[3 * i + 1],
                            f = t[3 * i + 2],
                            m = t[3 * o],
                            v = t[3 * o + 1],
                            g = t[3 * o + 2]
                          return Math.abs(s - u) < 0.01
                            ? [
                                new Jn(a, 1 - l),
                                new Jn(c, 1 - h),
                                new Jn(d, 1 - f),
                                new Jn(m, 1 - g),
                              ]
                            : [
                                new Jn(s, 1 - l),
                                new Jn(u, 1 - h),
                                new Jn(p, 1 - f),
                                new Jn(v, 1 - g),
                              ]
                        },
                      }
                    function vu(e, t, n) {
                      if (((n.shapes = []), Array.isArray(e)))
                        for (var r = 0, i = e.length; r < i; r++) {
                          var o = e[r]
                          n.shapes.push(o.uuid)
                        }
                      else n.shapes.push(e.uuid)
                      return (
                        void 0 !== t.extrudePath &&
                          (n.options.extrudePath = t.extrudePath.toJSON()),
                        n
                      )
                    }
                    var gu = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === t && (t = 1), void 0 === n && (n = 0)
                          var i = (1 + Math.sqrt(5)) / 2,
                            o = [
                              -1,
                              i,
                              0,
                              1,
                              i,
                              0,
                              -1,
                              -i,
                              0,
                              1,
                              -i,
                              0,
                              0,
                              -1,
                              i,
                              0,
                              1,
                              i,
                              0,
                              -1,
                              -i,
                              0,
                              1,
                              -i,
                              i,
                              0,
                              -1,
                              i,
                              0,
                              1,
                              -i,
                              0,
                              -1,
                              -i,
                              0,
                              1,
                            ],
                            a = [
                              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,
                            ]
                          return (
                            ((r = e.call(this, o, a, t, n) || this).type = 'IcosahedronGeometry'),
                            (r.parameters = { radius: t, detail: n }),
                            r
                          )
                        }
                        return Gn(t, e), t
                      })(Tc),
                      yu = (function (e) {
                        function t(t, n, r, i) {
                          var o
                          void 0 === n && (n = 12),
                            void 0 === r && (r = 0),
                            void 0 === i && (i = 2 * Math.PI),
                            ((o = e.call(this) || this).type = 'LatheGeometry'),
                            (o.parameters = { points: t, segments: n, phiStart: r, phiLength: i }),
                            (n = Math.floor(n)),
                            (i = Kn.clamp(i, 0, 2 * Math.PI))
                          for (
                            var a = [],
                              s = [],
                              l = [],
                              c = 1 / n,
                              u = new lr(),
                              h = new Jn(),
                              d = 0;
                            d <= n;
                            d++
                          )
                            for (
                              var p = r + d * c * i, f = Math.sin(p), m = Math.cos(p), v = 0;
                              v <= t.length - 1;
                              v++
                            )
                              (u.x = t[v].x * f),
                                (u.y = t[v].y),
                                (u.z = t[v].x * m),
                                s.push(u.x, u.y, u.z),
                                (h.x = d / n),
                                (h.y = v / (t.length - 1)),
                                l.push(h.x, h.y)
                          for (var g = 0; g < n; g++)
                            for (var y = 0; y < t.length - 1; y++) {
                              var b = y + g * t.length,
                                A = b,
                                w = b + t.length,
                                x = b + t.length + 1,
                                E = b + 1
                              a.push(A, w, E), a.push(w, x, E)
                            }
                          if (
                            (o.setIndex(a),
                            o.setAttribute('position', new Wi(s, 3)),
                            o.setAttribute('uv', new Wi(l, 2)),
                            o.computeVertexNormals(),
                            i === 2 * Math.PI)
                          )
                            for (
                              var M = o.attributes.normal.array,
                                _ = new lr(),
                                T = new lr(),
                                S = new lr(),
                                C = n * t.length * 3,
                                L = 0,
                                R = 0;
                              L < t.length;
                              L++, R += 3
                            )
                              (_.x = M[R + 0]),
                                (_.y = M[R + 1]),
                                (_.z = M[R + 2]),
                                (T.x = M[C + R + 0]),
                                (T.y = M[C + R + 1]),
                                (T.z = M[C + R + 2]),
                                S.addVectors(_, T).normalize(),
                                (M[R + 0] = M[C + R + 0] = S.x),
                                (M[R + 1] = M[C + R + 1] = S.y),
                                (M[R + 2] = M[C + R + 2] = S.z)
                          return o
                        }
                        return Gn(t, e), t
                      })(ro),
                      bu = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === t && (t = 1), void 0 === n && (n = 0)
                          var i = [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1],
                            o = [
                              0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4,
                              2,
                            ]
                          return (
                            ((r = e.call(this, i, o, t, n) || this).type = 'OctahedronGeometry'),
                            (r.parameters = { radius: t, detail: n }),
                            r
                          )
                        }
                        return Gn(t, e), t
                      })(Tc)
                    function Au(e, t, n) {
                      ro.call(this),
                        (this.type = 'ParametricGeometry'),
                        (this.parameters = { func: e, slices: t, stacks: n })
                      var r = [],
                        i = [],
                        o = [],
                        a = [],
                        s = 1e-5,
                        l = new lr(),
                        c = new lr(),
                        u = new lr(),
                        h = new lr(),
                        d = new lr()
                      e.length < 3 &&
                        console.error(
                          'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.',
                        )
                      for (var p = t + 1, f = 0; f <= n; f++)
                        for (var m = f / n, v = 0; v <= t; v++) {
                          var g = v / t
                          e(g, m, c),
                            i.push(c.x, c.y, c.z),
                            g - s >= 0
                              ? (e(g - s, m, u), h.subVectors(c, u))
                              : (e(g + s, m, u), h.subVectors(u, c)),
                            m - s >= 0
                              ? (e(g, m - s, u), d.subVectors(c, u))
                              : (e(g, m + s, u), d.subVectors(u, c)),
                            l.crossVectors(h, d).normalize(),
                            o.push(l.x, l.y, l.z),
                            a.push(g, m)
                        }
                      for (var y = 0; y < n; y++)
                        for (var b = 0; b < t; b++) {
                          var A = y * p + b,
                            w = y * p + b + 1,
                            x = (y + 1) * p + b + 1,
                            E = (y + 1) * p + b
                          r.push(A, w, E), r.push(w, x, E)
                        }
                      this.setIndex(r),
                        this.setAttribute('position', new Wi(i, 3)),
                        this.setAttribute('normal', new Wi(o, 3)),
                        this.setAttribute('uv', new Wi(a, 2))
                    }
                    ;(Au.prototype = Object.create(ro.prototype)), (Au.prototype.constructor = Au)
                    var wu = (function (e) {
                        function t(t, n, r, i, o, a) {
                          var s
                          void 0 === t && (t = 0.5),
                            void 0 === n && (n = 1),
                            void 0 === r && (r = 8),
                            void 0 === i && (i = 1),
                            void 0 === o && (o = 0),
                            void 0 === a && (a = 2 * Math.PI),
                            ((s = e.call(this) || this).type = 'RingGeometry'),
                            (s.parameters = {
                              innerRadius: t,
                              outerRadius: n,
                              thetaSegments: r,
                              phiSegments: i,
                              thetaStart: o,
                              thetaLength: a,
                            }),
                            (r = Math.max(3, r))
                          for (
                            var l = [],
                              c = [],
                              u = [],
                              h = [],
                              d = t,
                              p = (n - t) / (i = Math.max(1, i)),
                              f = new lr(),
                              m = new Jn(),
                              v = 0;
                            v <= i;
                            v++
                          ) {
                            for (var g = 0; g <= r; g++) {
                              var y = o + (g / r) * a
                              ;(f.x = d * Math.cos(y)),
                                (f.y = d * Math.sin(y)),
                                c.push(f.x, f.y, f.z),
                                u.push(0, 0, 1),
                                (m.x = (f.x / n + 1) / 2),
                                (m.y = (f.y / n + 1) / 2),
                                h.push(m.x, m.y)
                            }
                            d += p
                          }
                          for (var b = 0; b < i; b++)
                            for (var A = b * (r + 1), w = 0; w < r; w++) {
                              var x = w + A,
                                E = x,
                                M = x + r + 1,
                                _ = x + r + 2,
                                T = x + 1
                              l.push(E, M, T), l.push(M, _, T)
                            }
                          return (
                            s.setIndex(l),
                            s.setAttribute('position', new Wi(c, 3)),
                            s.setAttribute('normal', new Wi(u, 3)),
                            s.setAttribute('uv', new Wi(h, 2)),
                            s
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      xu = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === n && (n = 12),
                            ((r = e.call(this) || this).type = 'ShapeGeometry'),
                            (r.parameters = { shapes: t, curveSegments: n })
                          var i = [],
                            o = [],
                            a = [],
                            s = [],
                            l = 0,
                            c = 0
                          if (!1 === Array.isArray(t)) h(t)
                          else
                            for (var u = 0; u < t.length; u++)
                              h(t[u]), r.addGroup(l, c, u), (l += c), (c = 0)
                          function h(e) {
                            var t = o.length / 3,
                              r = e.extractPoints(n),
                              l = r.shape,
                              u = r.holes
                            !1 === hu.isClockWise(l) && (l = l.reverse())
                            for (var h = 0, d = u.length; h < d; h++) {
                              var p = u[h]
                              !0 === hu.isClockWise(p) && (u[h] = p.reverse())
                            }
                            for (
                              var f = hu.triangulateShape(l, u), m = 0, v = u.length;
                              m < v;
                              m++
                            ) {
                              var g = u[m]
                              l = l.concat(g)
                            }
                            for (var y = 0, b = l.length; y < b; y++) {
                              var A = l[y]
                              o.push(A.x, A.y, 0), a.push(0, 0, 1), s.push(A.x, A.y)
                            }
                            for (var w = 0, x = f.length; w < x; w++) {
                              var E = f[w],
                                M = E[0] + t,
                                _ = E[1] + t,
                                T = E[2] + t
                              i.push(M, _, T), (c += 3)
                            }
                          }
                          return (
                            r.setIndex(i),
                            r.setAttribute('position', new Wi(o, 3)),
                            r.setAttribute('normal', new Wi(a, 3)),
                            r.setAttribute('uv', new Wi(s, 2)),
                            r
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.toJSON = function () {
                            var e = ro.prototype.toJSON.call(this)
                            return Eu(this.parameters.shapes, e)
                          }),
                          t
                        )
                      })(ro)
                    function Eu(e, t) {
                      if (((t.shapes = []), Array.isArray(e)))
                        for (var n = 0, r = e.length; n < r; n++) {
                          var i = e[n]
                          t.shapes.push(i.uuid)
                        }
                      else t.shapes.push(e.uuid)
                      return t
                    }
                    var Mu = (function (e) {
                        function t(t, n, r, i, o, a, s) {
                          var l
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 8),
                            void 0 === r && (r = 6),
                            void 0 === i && (i = 0),
                            void 0 === o && (o = 2 * Math.PI),
                            void 0 === a && (a = 0),
                            void 0 === s && (s = Math.PI),
                            ((l = e.call(this) || this).type = 'SphereGeometry'),
                            (l.parameters = {
                              radius: t,
                              widthSegments: n,
                              heightSegments: r,
                              phiStart: i,
                              phiLength: o,
                              thetaStart: a,
                              thetaLength: s,
                            }),
                            (n = Math.max(3, Math.floor(n))),
                            (r = Math.max(2, Math.floor(r)))
                          for (
                            var c = Math.min(a + s, Math.PI),
                              u = 0,
                              h = [],
                              d = new lr(),
                              p = new lr(),
                              f = [],
                              m = [],
                              v = [],
                              g = [],
                              y = 0;
                            y <= r;
                            y++
                          ) {
                            var b = [],
                              A = y / r,
                              w = 0
                            0 == y && 0 == a
                              ? (w = 0.5 / n)
                              : y == r && c == Math.PI && (w = -0.5 / n)
                            for (var x = 0; x <= n; x++) {
                              var E = x / n
                              ;(d.x = -t * Math.cos(i + E * o) * Math.sin(a + A * s)),
                                (d.y = t * Math.cos(a + A * s)),
                                (d.z = t * Math.sin(i + E * o) * Math.sin(a + A * s)),
                                m.push(d.x, d.y, d.z),
                                p.copy(d).normalize(),
                                v.push(p.x, p.y, p.z),
                                g.push(E + w, 1 - A),
                                b.push(u++)
                            }
                            h.push(b)
                          }
                          for (var M = 0; M < r; M++)
                            for (var _ = 0; _ < n; _++) {
                              var T = h[M][_ + 1],
                                S = h[M][_],
                                C = h[M + 1][_],
                                L = h[M + 1][_ + 1]
                              ;(0 !== M || a > 0) && f.push(T, S, L),
                                (M !== r - 1 || c < Math.PI) && f.push(S, C, L)
                            }
                          return (
                            l.setIndex(f),
                            l.setAttribute('position', new Wi(m, 3)),
                            l.setAttribute('normal', new Wi(v, 3)),
                            l.setAttribute('uv', new Wi(g, 2)),
                            l
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      _u = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === t && (t = 1), void 0 === n && (n = 0)
                          var i = [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1],
                            o = [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1]
                          return (
                            ((r = e.call(this, i, o, t, n) || this).type = 'TetrahedronGeometry'),
                            (r.parameters = { radius: t, detail: n }),
                            r
                          )
                        }
                        return Gn(t, e), t
                      })(Tc),
                      Tu = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === n && (n = {})
                          var i = n.font
                          if (!i || !i.isFont)
                            return (
                              console.error(
                                'THREE.TextGeometry: font parameter is not an instance of THREE.Font.',
                              ),
                              new ro() || zn(r)
                            )
                          var o = i.generateShapes(t, n.size)
                          return (
                            (n.depth = void 0 !== n.height ? n.height : 50),
                            void 0 === n.bevelThickness && (n.bevelThickness = 10),
                            void 0 === n.bevelSize && (n.bevelSize = 8),
                            void 0 === n.bevelEnabled && (n.bevelEnabled = !1),
                            ((r = e.call(this, o, n) || this).type = 'TextGeometry'),
                            r
                          )
                        }
                        return Gn(t, e), t
                      })(fu),
                      Su = (function (e) {
                        function t(t, n, r, i, o) {
                          var a
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 0.4),
                            void 0 === r && (r = 8),
                            void 0 === i && (i = 6),
                            void 0 === o && (o = 2 * Math.PI),
                            ((a = e.call(this) || this).type = 'TorusGeometry'),
                            (a.parameters = {
                              radius: t,
                              tube: n,
                              radialSegments: r,
                              tubularSegments: i,
                              arc: o,
                            }),
                            (r = Math.floor(r)),
                            (i = Math.floor(i))
                          for (
                            var s = [],
                              l = [],
                              c = [],
                              u = [],
                              h = new lr(),
                              d = new lr(),
                              p = new lr(),
                              f = 0;
                            f <= r;
                            f++
                          )
                            for (var m = 0; m <= i; m++) {
                              var v = (m / i) * o,
                                g = (f / r) * Math.PI * 2
                              ;(d.x = (t + n * Math.cos(g)) * Math.cos(v)),
                                (d.y = (t + n * Math.cos(g)) * Math.sin(v)),
                                (d.z = n * Math.sin(g)),
                                l.push(d.x, d.y, d.z),
                                (h.x = t * Math.cos(v)),
                                (h.y = t * Math.sin(v)),
                                p.subVectors(d, h).normalize(),
                                c.push(p.x, p.y, p.z),
                                u.push(m / i),
                                u.push(f / r)
                            }
                          for (var y = 1; y <= r; y++)
                            for (var b = 1; b <= i; b++) {
                              var A = (i + 1) * y + b - 1,
                                w = (i + 1) * (y - 1) + b - 1,
                                x = (i + 1) * (y - 1) + b,
                                E = (i + 1) * y + b
                              s.push(A, w, E), s.push(w, x, E)
                            }
                          return (
                            a.setIndex(s),
                            a.setAttribute('position', new Wi(l, 3)),
                            a.setAttribute('normal', new Wi(c, 3)),
                            a.setAttribute('uv', new Wi(u, 2)),
                            a
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      Cu = (function (e) {
                        function t(t, n, r, i, o, a) {
                          var s
                          void 0 === t && (t = 1),
                            void 0 === n && (n = 0.4),
                            void 0 === r && (r = 64),
                            void 0 === i && (i = 8),
                            void 0 === o && (o = 2),
                            void 0 === a && (a = 3),
                            ((s = e.call(this) || this).type = 'TorusKnotGeometry'),
                            (s.parameters = {
                              radius: t,
                              tube: n,
                              tubularSegments: r,
                              radialSegments: i,
                              p: o,
                              q: a,
                            }),
                            (r = Math.floor(r)),
                            (i = Math.floor(i))
                          for (
                            var l = [],
                              c = [],
                              u = [],
                              h = [],
                              d = new lr(),
                              p = new lr(),
                              f = new lr(),
                              m = new lr(),
                              v = new lr(),
                              g = new lr(),
                              y = new lr(),
                              b = 0;
                            b <= r;
                            ++b
                          ) {
                            var A = (b / r) * o * Math.PI * 2
                            P(A, o, a, t, f),
                              P(A + 0.01, o, a, t, m),
                              g.subVectors(m, f),
                              y.addVectors(m, f),
                              v.crossVectors(g, y),
                              y.crossVectors(v, g),
                              v.normalize(),
                              y.normalize()
                            for (var w = 0; w <= i; ++w) {
                              var x = (w / i) * Math.PI * 2,
                                E = -n * Math.cos(x),
                                M = n * Math.sin(x)
                              ;(d.x = f.x + (E * y.x + M * v.x)),
                                (d.y = f.y + (E * y.y + M * v.y)),
                                (d.z = f.z + (E * y.z + M * v.z)),
                                c.push(d.x, d.y, d.z),
                                p.subVectors(d, f).normalize(),
                                u.push(p.x, p.y, p.z),
                                h.push(b / r),
                                h.push(w / i)
                            }
                          }
                          for (var _ = 1; _ <= r; _++)
                            for (var T = 1; T <= i; T++) {
                              var S = (i + 1) * (_ - 1) + (T - 1),
                                C = (i + 1) * _ + (T - 1),
                                L = (i + 1) * _ + T,
                                R = (i + 1) * (_ - 1) + T
                              l.push(S, C, R), l.push(C, L, R)
                            }
                          function P(e, t, n, r, i) {
                            var o = Math.cos(e),
                              a = Math.sin(e),
                              s = (n / t) * e,
                              l = Math.cos(s)
                            ;(i.x = r * (2 + l) * 0.5 * o),
                              (i.y = r * (2 + l) * a * 0.5),
                              (i.z = r * Math.sin(s) * 0.5)
                          }
                          return (
                            s.setIndex(l),
                            s.setAttribute('position', new Wi(c, 3)),
                            s.setAttribute('normal', new Wi(u, 3)),
                            s.setAttribute('uv', new Wi(h, 2)),
                            s
                          )
                        }
                        return Gn(t, e), t
                      })(ro),
                      Lu = (function (e) {
                        function t(t, n, r, i, o) {
                          var a
                          void 0 === n && (n = 64),
                            void 0 === r && (r = 1),
                            void 0 === i && (i = 8),
                            void 0 === o && (o = !1),
                            ((a = e.call(this) || this).type = 'TubeGeometry'),
                            (a.parameters = {
                              path: t,
                              tubularSegments: n,
                              radius: r,
                              radialSegments: i,
                              closed: o,
                            })
                          var s = t.computeFrenetFrames(n, o)
                          ;(a.tangents = s.tangents),
                            (a.normals = s.normals),
                            (a.binormals = s.binormals)
                          var l = new lr(),
                            c = new lr(),
                            u = new Jn(),
                            h = new lr(),
                            d = [],
                            p = [],
                            f = [],
                            m = []
                          function v() {
                            for (var e = 0; e < n; e++) g(e)
                            g(!1 === o ? n : 0), b(), y()
                          }
                          function g(e) {
                            h = t.getPointAt(e / n, h)
                            for (var o = s.normals[e], a = s.binormals[e], u = 0; u <= i; u++) {
                              var f = (u / i) * Math.PI * 2,
                                m = Math.sin(f),
                                v = -Math.cos(f)
                              ;(c.x = v * o.x + m * a.x),
                                (c.y = v * o.y + m * a.y),
                                (c.z = v * o.z + m * a.z),
                                c.normalize(),
                                p.push(c.x, c.y, c.z),
                                (l.x = h.x + r * c.x),
                                (l.y = h.y + r * c.y),
                                (l.z = h.z + r * c.z),
                                d.push(l.x, l.y, l.z)
                            }
                          }
                          function y() {
                            for (var e = 1; e <= n; e++)
                              for (var t = 1; t <= i; t++) {
                                var r = (i + 1) * (e - 1) + (t - 1),
                                  o = (i + 1) * e + (t - 1),
                                  a = (i + 1) * e + t,
                                  s = (i + 1) * (e - 1) + t
                                m.push(r, o, s), m.push(o, a, s)
                              }
                          }
                          function b() {
                            for (var e = 0; e <= n; e++)
                              for (var t = 0; t <= i; t++)
                                (u.x = e / n), (u.y = t / i), f.push(u.x, u.y)
                          }
                          return (
                            v(),
                            a.setIndex(m),
                            a.setAttribute('position', new Wi(d, 3)),
                            a.setAttribute('normal', new Wi(p, 3)),
                            a.setAttribute('uv', new Wi(f, 2)),
                            a
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.toJSON = function () {
                            var e = ro.prototype.toJSON.call(this)
                            return (e.path = this.parameters.path.toJSON()), e
                          }),
                          t
                        )
                      })(ro),
                      Ru = (function (e) {
                        function t(t) {
                          var n
                          if (
                            (((n = e.call(this) || this).type = 'WireframeGeometry'),
                            !0 === t.isGeometry)
                          )
                            return (
                              console.error(
                                'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.',
                              ),
                              zn(n)
                            )
                          var r = [],
                            i = [0, 0],
                            o = {},
                            a = new lr()
                          if (null !== t.index) {
                            var s = t.attributes.position,
                              l = t.index,
                              c = t.groups
                            0 === c.length && (c = [{ start: 0, count: l.count, materialIndex: 0 }])
                            for (var u = 0, h = c.length; u < h; ++u)
                              for (var d = c[u], p = d.start, f = p, m = p + d.count; f < m; f += 3)
                                for (var v = 0; v < 3; v++) {
                                  var g = l.getX(f + v),
                                    y = l.getX(f + ((v + 1) % 3))
                                  ;(i[0] = Math.min(g, y)), (i[1] = Math.max(g, y))
                                  var b = i[0] + ',' + i[1]
                                  void 0 === o[b] && (o[b] = { index1: i[0], index2: i[1] })
                                }
                            for (var A in o) {
                              var w = o[A]
                              a.fromBufferAttribute(s, w.index1),
                                r.push(a.x, a.y, a.z),
                                a.fromBufferAttribute(s, w.index2),
                                r.push(a.x, a.y, a.z)
                            }
                          } else
                            for (var x = t.attributes.position, E = 0, M = x.count / 3; E < M; E++)
                              for (var _ = 0; _ < 3; _++) {
                                var T = 3 * E + _
                                a.fromBufferAttribute(x, T), r.push(a.x, a.y, a.z)
                                var S = 3 * E + ((_ + 1) % 3)
                                a.fromBufferAttribute(x, S), r.push(a.x, a.y, a.z)
                              }
                          return n.setAttribute('position', new Wi(r, 3)), n
                        }
                        return Gn(t, e), t
                      })(ro),
                      Pu = Object.freeze({
                        __proto__: null,
                        BoxGeometry: _o,
                        BoxBufferGeometry: _o,
                        CircleGeometry: Ec,
                        CircleBufferGeometry: Ec,
                        ConeGeometry: _c,
                        ConeBufferGeometry: _c,
                        CylinderGeometry: Mc,
                        CylinderBufferGeometry: Mc,
                        DodecahedronGeometry: Sc,
                        DodecahedronBufferGeometry: Sc,
                        EdgesGeometry: Dc,
                        ExtrudeGeometry: fu,
                        ExtrudeBufferGeometry: fu,
                        IcosahedronGeometry: gu,
                        IcosahedronBufferGeometry: gu,
                        LatheGeometry: yu,
                        LatheBufferGeometry: yu,
                        OctahedronGeometry: bu,
                        OctahedronBufferGeometry: bu,
                        ParametricGeometry: Au,
                        ParametricBufferGeometry: Au,
                        PlaneGeometry: Wo,
                        PlaneBufferGeometry: Wo,
                        PolyhedronGeometry: Tc,
                        PolyhedronBufferGeometry: Tc,
                        RingGeometry: wu,
                        RingBufferGeometry: wu,
                        ShapeGeometry: xu,
                        ShapeBufferGeometry: xu,
                        SphereGeometry: Mu,
                        SphereBufferGeometry: Mu,
                        TetrahedronGeometry: _u,
                        TetrahedronBufferGeometry: _u,
                        TextGeometry: Tu,
                        TextBufferGeometry: Tu,
                        TorusGeometry: Su,
                        TorusBufferGeometry: Su,
                        TorusKnotGeometry: Cu,
                        TorusKnotBufferGeometry: Cu,
                        TubeGeometry: Lu,
                        TubeBufferGeometry: Lu,
                        WireframeGeometry: Ru,
                      })
                    function Du(e) {
                      Di.call(this),
                        (this.type = 'ShadowMaterial'),
                        (this.color = new Li(0)),
                        (this.transparent = !0),
                        this.setValues(e)
                    }
                    function Ou(e) {
                      Po.call(this, e), (this.type = 'RawShaderMaterial')
                    }
                    function Iu(e) {
                      Di.call(this),
                        (this.defines = { STANDARD: '' }),
                        (this.type = 'MeshStandardMaterial'),
                        (this.color = new Li(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 Li(0)),
                        (this.emissiveIntensity = 1),
                        (this.emissiveMap = null),
                        (this.bumpMap = null),
                        (this.bumpScale = 1),
                        (this.normalMap = null),
                        (this.normalMapType = ln),
                        (this.normalScale = new Jn(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 = 0.98),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.wireframeLinecap = 'round'),
                        (this.wireframeLinejoin = 'round'),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        (this.vertexTangents = !1),
                        this.setValues(e)
                    }
                    function Bu(e) {
                      Iu.call(this),
                        (this.defines = { STANDARD: '', PHYSICAL: '' }),
                        (this.type = 'MeshPhysicalMaterial'),
                        (this.clearcoat = 0),
                        (this.clearcoatMap = null),
                        (this.clearcoatRoughness = 0),
                        (this.clearcoatRoughnessMap = null),
                        (this.clearcoatNormalScale = new Jn(1, 1)),
                        (this.clearcoatNormalMap = null),
                        (this.reflectivity = 0.5),
                        Object.defineProperty(this, 'ior', {
                          get: function () {
                            return (1 + 0.4 * this.reflectivity) / (1 - 0.4 * this.reflectivity)
                          },
                          set: function (e) {
                            this.reflectivity = Kn.clamp((2.5 * (e - 1)) / (e + 1), 0, 1)
                          },
                        }),
                        (this.sheen = null),
                        (this.transmission = 0),
                        (this.transmissionMap = null),
                        this.setValues(e)
                    }
                    function Fu(e) {
                      Di.call(this),
                        (this.type = 'MeshPhongMaterial'),
                        (this.color = new Li(16777215)),
                        (this.specular = new Li(1118481)),
                        (this.shininess = 30),
                        (this.map = null),
                        (this.lightMap = null),
                        (this.lightMapIntensity = 1),
                        (this.aoMap = null),
                        (this.aoMapIntensity = 1),
                        (this.emissive = new Li(0)),
                        (this.emissiveIntensity = 1),
                        (this.emissiveMap = null),
                        (this.bumpMap = null),
                        (this.bumpScale = 1),
                        (this.normalMap = null),
                        (this.normalMapType = ln),
                        (this.normalScale = new Jn(1, 1)),
                        (this.displacementMap = null),
                        (this.displacementScale = 1),
                        (this.displacementBias = 0),
                        (this.specularMap = null),
                        (this.alphaMap = null),
                        (this.envMap = null),
                        (this.combine = Z),
                        (this.reflectivity = 1),
                        (this.refractionRatio = 0.98),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.wireframeLinecap = 'round'),
                        (this.wireframeLinejoin = 'round'),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        this.setValues(e)
                    }
                    function ku(e) {
                      Di.call(this),
                        (this.defines = { TOON: '' }),
                        (this.type = 'MeshToonMaterial'),
                        (this.color = new Li(16777215)),
                        (this.map = null),
                        (this.gradientMap = null),
                        (this.lightMap = null),
                        (this.lightMapIntensity = 1),
                        (this.aoMap = null),
                        (this.aoMapIntensity = 1),
                        (this.emissive = new Li(0)),
                        (this.emissiveIntensity = 1),
                        (this.emissiveMap = null),
                        (this.bumpMap = null),
                        (this.bumpScale = 1),
                        (this.normalMap = null),
                        (this.normalMapType = ln),
                        (this.normalScale = new Jn(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.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        this.setValues(e)
                    }
                    function Nu(e) {
                      Di.call(this),
                        (this.type = 'MeshNormalMaterial'),
                        (this.bumpMap = null),
                        (this.bumpScale = 1),
                        (this.normalMap = null),
                        (this.normalMapType = ln),
                        (this.normalScale = new Jn(1, 1)),
                        (this.displacementMap = null),
                        (this.displacementScale = 1),
                        (this.displacementBias = 0),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.fog = !1),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        this.setValues(e)
                    }
                    function Uu(e) {
                      Di.call(this),
                        (this.type = 'MeshLambertMaterial'),
                        (this.color = new Li(16777215)),
                        (this.map = null),
                        (this.lightMap = null),
                        (this.lightMapIntensity = 1),
                        (this.aoMap = null),
                        (this.aoMapIntensity = 1),
                        (this.emissive = new Li(0)),
                        (this.emissiveIntensity = 1),
                        (this.emissiveMap = null),
                        (this.specularMap = null),
                        (this.alphaMap = null),
                        (this.envMap = null),
                        (this.combine = Z),
                        (this.reflectivity = 1),
                        (this.refractionRatio = 0.98),
                        (this.wireframe = !1),
                        (this.wireframeLinewidth = 1),
                        (this.wireframeLinecap = 'round'),
                        (this.wireframeLinejoin = 'round'),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        this.setValues(e)
                    }
                    function Hu(e) {
                      Di.call(this),
                        (this.defines = { MATCAP: '' }),
                        (this.type = 'MeshMatcapMaterial'),
                        (this.color = new Li(16777215)),
                        (this.matcap = null),
                        (this.map = null),
                        (this.bumpMap = null),
                        (this.bumpScale = 1),
                        (this.normalMap = null),
                        (this.normalMapType = ln),
                        (this.normalScale = new Jn(1, 1)),
                        (this.displacementMap = null),
                        (this.displacementScale = 1),
                        (this.displacementBias = 0),
                        (this.alphaMap = null),
                        (this.skinning = !1),
                        (this.morphTargets = !1),
                        (this.morphNormals = !1),
                        this.setValues(e)
                    }
                    function Gu(e) {
                      tc.call(this),
                        (this.type = 'LineDashedMaterial'),
                        (this.scale = 1),
                        (this.dashSize = 3),
                        (this.gapSize = 1),
                        this.setValues(e)
                    }
                    ;(Du.prototype = Object.create(Di.prototype)),
                      (Du.prototype.constructor = Du),
                      (Du.prototype.isShadowMaterial = !0),
                      (Du.prototype.copy = function (e) {
                        return Di.prototype.copy.call(this, e), this.color.copy(e.color), this
                      }),
                      (Ou.prototype = Object.create(Po.prototype)),
                      (Ou.prototype.constructor = Ou),
                      (Ou.prototype.isRawShaderMaterial = !0),
                      (Iu.prototype = Object.create(Di.prototype)),
                      (Iu.prototype.constructor = Iu),
                      (Iu.prototype.isMeshStandardMaterial = !0),
                      (Iu.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          (this.defines = { STANDARD: '' }),
                          this.color.copy(e.color),
                          (this.roughness = e.roughness),
                          (this.metalness = e.metalness),
                          (this.map = e.map),
                          (this.lightMap = e.lightMap),
                          (this.lightMapIntensity = e.lightMapIntensity),
                          (this.aoMap = e.aoMap),
                          (this.aoMapIntensity = e.aoMapIntensity),
                          this.emissive.copy(e.emissive),
                          (this.emissiveMap = e.emissiveMap),
                          (this.emissiveIntensity = e.emissiveIntensity),
                          (this.bumpMap = e.bumpMap),
                          (this.bumpScale = e.bumpScale),
                          (this.normalMap = e.normalMap),
                          (this.normalMapType = e.normalMapType),
                          this.normalScale.copy(e.normalScale),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.roughnessMap = e.roughnessMap),
                          (this.metalnessMap = e.metalnessMap),
                          (this.alphaMap = e.alphaMap),
                          (this.envMap = e.envMap),
                          (this.envMapIntensity = e.envMapIntensity),
                          (this.refractionRatio = e.refractionRatio),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.wireframeLinecap = e.wireframeLinecap),
                          (this.wireframeLinejoin = e.wireframeLinejoin),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          (this.vertexTangents = e.vertexTangents),
                          this
                        )
                      }),
                      (Bu.prototype = Object.create(Iu.prototype)),
                      (Bu.prototype.constructor = Bu),
                      (Bu.prototype.isMeshPhysicalMaterial = !0),
                      (Bu.prototype.copy = function (e) {
                        return (
                          Iu.prototype.copy.call(this, e),
                          (this.defines = { STANDARD: '', PHYSICAL: '' }),
                          (this.clearcoat = e.clearcoat),
                          (this.clearcoatMap = e.clearcoatMap),
                          (this.clearcoatRoughness = e.clearcoatRoughness),
                          (this.clearcoatRoughnessMap = e.clearcoatRoughnessMap),
                          (this.clearcoatNormalMap = e.clearcoatNormalMap),
                          this.clearcoatNormalScale.copy(e.clearcoatNormalScale),
                          (this.reflectivity = e.reflectivity),
                          e.sheen
                            ? (this.sheen = (this.sheen || new Li()).copy(e.sheen))
                            : (this.sheen = null),
                          (this.transmission = e.transmission),
                          (this.transmissionMap = e.transmissionMap),
                          this
                        )
                      }),
                      (Fu.prototype = Object.create(Di.prototype)),
                      (Fu.prototype.constructor = Fu),
                      (Fu.prototype.isMeshPhongMaterial = !0),
                      (Fu.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          this.specular.copy(e.specular),
                          (this.shininess = e.shininess),
                          (this.map = e.map),
                          (this.lightMap = e.lightMap),
                          (this.lightMapIntensity = e.lightMapIntensity),
                          (this.aoMap = e.aoMap),
                          (this.aoMapIntensity = e.aoMapIntensity),
                          this.emissive.copy(e.emissive),
                          (this.emissiveMap = e.emissiveMap),
                          (this.emissiveIntensity = e.emissiveIntensity),
                          (this.bumpMap = e.bumpMap),
                          (this.bumpScale = e.bumpScale),
                          (this.normalMap = e.normalMap),
                          (this.normalMapType = e.normalMapType),
                          this.normalScale.copy(e.normalScale),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.specularMap = e.specularMap),
                          (this.alphaMap = e.alphaMap),
                          (this.envMap = e.envMap),
                          (this.combine = e.combine),
                          (this.reflectivity = e.reflectivity),
                          (this.refractionRatio = e.refractionRatio),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.wireframeLinecap = e.wireframeLinecap),
                          (this.wireframeLinejoin = e.wireframeLinejoin),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          this
                        )
                      }),
                      (ku.prototype = Object.create(Di.prototype)),
                      (ku.prototype.constructor = ku),
                      (ku.prototype.isMeshToonMaterial = !0),
                      (ku.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.map = e.map),
                          (this.gradientMap = e.gradientMap),
                          (this.lightMap = e.lightMap),
                          (this.lightMapIntensity = e.lightMapIntensity),
                          (this.aoMap = e.aoMap),
                          (this.aoMapIntensity = e.aoMapIntensity),
                          this.emissive.copy(e.emissive),
                          (this.emissiveMap = e.emissiveMap),
                          (this.emissiveIntensity = e.emissiveIntensity),
                          (this.bumpMap = e.bumpMap),
                          (this.bumpScale = e.bumpScale),
                          (this.normalMap = e.normalMap),
                          (this.normalMapType = e.normalMapType),
                          this.normalScale.copy(e.normalScale),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.alphaMap = e.alphaMap),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.wireframeLinecap = e.wireframeLinecap),
                          (this.wireframeLinejoin = e.wireframeLinejoin),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          this
                        )
                      }),
                      (Nu.prototype = Object.create(Di.prototype)),
                      (Nu.prototype.constructor = Nu),
                      (Nu.prototype.isMeshNormalMaterial = !0),
                      (Nu.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          (this.bumpMap = e.bumpMap),
                          (this.bumpScale = e.bumpScale),
                          (this.normalMap = e.normalMap),
                          (this.normalMapType = e.normalMapType),
                          this.normalScale.copy(e.normalScale),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          this
                        )
                      }),
                      (Uu.prototype = Object.create(Di.prototype)),
                      (Uu.prototype.constructor = Uu),
                      (Uu.prototype.isMeshLambertMaterial = !0),
                      (Uu.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          this.color.copy(e.color),
                          (this.map = e.map),
                          (this.lightMap = e.lightMap),
                          (this.lightMapIntensity = e.lightMapIntensity),
                          (this.aoMap = e.aoMap),
                          (this.aoMapIntensity = e.aoMapIntensity),
                          this.emissive.copy(e.emissive),
                          (this.emissiveMap = e.emissiveMap),
                          (this.emissiveIntensity = e.emissiveIntensity),
                          (this.specularMap = e.specularMap),
                          (this.alphaMap = e.alphaMap),
                          (this.envMap = e.envMap),
                          (this.combine = e.combine),
                          (this.reflectivity = e.reflectivity),
                          (this.refractionRatio = e.refractionRatio),
                          (this.wireframe = e.wireframe),
                          (this.wireframeLinewidth = e.wireframeLinewidth),
                          (this.wireframeLinecap = e.wireframeLinecap),
                          (this.wireframeLinejoin = e.wireframeLinejoin),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          this
                        )
                      }),
                      (Hu.prototype = Object.create(Di.prototype)),
                      (Hu.prototype.constructor = Hu),
                      (Hu.prototype.isMeshMatcapMaterial = !0),
                      (Hu.prototype.copy = function (e) {
                        return (
                          Di.prototype.copy.call(this, e),
                          (this.defines = { MATCAP: '' }),
                          this.color.copy(e.color),
                          (this.matcap = e.matcap),
                          (this.map = e.map),
                          (this.bumpMap = e.bumpMap),
                          (this.bumpScale = e.bumpScale),
                          (this.normalMap = e.normalMap),
                          (this.normalMapType = e.normalMapType),
                          this.normalScale.copy(e.normalScale),
                          (this.displacementMap = e.displacementMap),
                          (this.displacementScale = e.displacementScale),
                          (this.displacementBias = e.displacementBias),
                          (this.alphaMap = e.alphaMap),
                          (this.skinning = e.skinning),
                          (this.morphTargets = e.morphTargets),
                          (this.morphNormals = e.morphNormals),
                          this
                        )
                      }),
                      (Gu.prototype = Object.create(tc.prototype)),
                      (Gu.prototype.constructor = Gu),
                      (Gu.prototype.isLineDashedMaterial = !0),
                      (Gu.prototype.copy = function (e) {
                        return (
                          tc.prototype.copy.call(this, e),
                          (this.scale = e.scale),
                          (this.dashSize = e.dashSize),
                          (this.gapSize = e.gapSize),
                          this
                        )
                      })
                    var zu = Object.freeze({
                        __proto__: null,
                        ShadowMaterial: Du,
                        SpriteMaterial: xl,
                        RawShaderMaterial: Ou,
                        ShaderMaterial: Po,
                        PointsMaterial: dc,
                        MeshPhysicalMaterial: Bu,
                        MeshStandardMaterial: Iu,
                        MeshPhongMaterial: Fu,
                        MeshToonMaterial: ku,
                        MeshNormalMaterial: Nu,
                        MeshLambertMaterial: Uu,
                        MeshDepthMaterial: Qs,
                        MeshDistanceMaterial: Zs,
                        MeshBasicMaterial: Oi,
                        MeshMatcapMaterial: Hu,
                        LineDashedMaterial: Gu,
                        LineBasicMaterial: tc,
                        Material: Di,
                      }),
                      ju = {
                        arraySlice: function (e, t, n) {
                          return ju.isTypedArray(e)
                            ? new e.constructor(e.subarray(t, void 0 !== n ? n : e.length))
                            : e.slice(t, n)
                        },
                        convertArray: function (e, t, n) {
                          return !e || (!n && e.constructor === t)
                            ? e
                            : 'number' === typeof t.BYTES_PER_ELEMENT
                            ? new t(e)
                            : Array.prototype.slice.call(e)
                        },
                        isTypedArray: function (e) {
                          return ArrayBuffer.isView(e) && !(e instanceof DataView)
                        },
                        getKeyframeOrder: function (e) {
                          function t(t, n) {
                            return e[t] - e[n]
                          }
                          for (var n = e.length, r = new Array(n), i = 0; i !== n; ++i) r[i] = i
                          return r.sort(t), r
                        },
                        sortedArray: function (e, t, n) {
                          for (
                            var r = e.length, i = new e.constructor(r), o = 0, a = 0;
                            a !== r;
                            ++o
                          )
                            for (var s = n[o] * t, l = 0; l !== t; ++l) i[a++] = e[s + l]
                          return i
                        },
                        flattenJSON: function (e, t, n, r) {
                          for (var i = 1, o = e[0]; void 0 !== o && void 0 === o[r]; ) o = e[i++]
                          if (void 0 !== o) {
                            var a = o[r]
                            if (void 0 !== a)
                              if (Array.isArray(a))
                                do {
                                  void 0 !== (a = o[r]) && (t.push(o.time), n.push.apply(n, a)),
                                    (o = e[i++])
                                } while (void 0 !== o)
                              else if (void 0 !== a.toArray)
                                do {
                                  void 0 !== (a = o[r]) && (t.push(o.time), a.toArray(n, n.length)),
                                    (o = e[i++])
                                } while (void 0 !== o)
                              else
                                do {
                                  void 0 !== (a = o[r]) && (t.push(o.time), n.push(a)), (o = e[i++])
                                } while (void 0 !== o)
                          }
                        },
                        subclip: function (e, t, n, r, i) {
                          void 0 === i && (i = 30)
                          var o = e.clone()
                          o.name = t
                          for (var a = [], s = 0; s < o.tracks.length; ++s) {
                            for (
                              var l = o.tracks[s], c = l.getValueSize(), u = [], h = [], d = 0;
                              d < l.times.length;
                              ++d
                            ) {
                              var p = l.times[d] * i
                              if (!(p < n || p >= r)) {
                                u.push(l.times[d])
                                for (var f = 0; f < c; ++f) h.push(l.values[d * c + f])
                              }
                            }
                            0 !== u.length &&
                              ((l.times = ju.convertArray(u, l.times.constructor)),
                              (l.values = ju.convertArray(h, l.values.constructor)),
                              a.push(l))
                          }
                          o.tracks = a
                          for (var m = 1 / 0, v = 0; v < o.tracks.length; ++v)
                            m > o.tracks[v].times[0] && (m = o.tracks[v].times[0])
                          for (var g = 0; g < o.tracks.length; ++g) o.tracks[g].shift(-1 * m)
                          return o.resetDuration(), o
                        },
                        makeClipAdditive: function (e, t, n, r) {
                          void 0 === t && (t = 0),
                            void 0 === n && (n = e),
                            void 0 === r && (r = 30),
                            r <= 0 && (r = 30)
                          for (
                            var i = n.tracks.length,
                              o = t / r,
                              a = function (t) {
                                var r = n.tracks[t],
                                  i = r.ValueTypeName
                                if ('bool' === i || 'string' === i) return 'continue'
                                var a = e.tracks.find(function (e) {
                                  return e.name === r.name && e.ValueTypeName === i
                                })
                                if (void 0 === a) return 'continue'
                                var s = 0,
                                  l = r.getValueSize()
                                r.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline &&
                                  (s = l / 3)
                                var c = 0,
                                  u = a.getValueSize()
                                a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline &&
                                  (c = u / 3)
                                var h = r.times.length - 1,
                                  d = void 0
                                if (o <= r.times[0]) {
                                  var p = s,
                                    f = l - s
                                  d = ju.arraySlice(r.values, p, f)
                                } else if (o >= r.times[h]) {
                                  var m = h * l + s,
                                    v = m + l - s
                                  d = ju.arraySlice(r.values, m, v)
                                } else {
                                  var g = r.createInterpolant(),
                                    y = s,
                                    b = l - s
                                  g.evaluate(o), (d = ju.arraySlice(g.resultBuffer, y, b))
                                }
                                'quaternion' === i &&
                                  new sr().fromArray(d).normalize().conjugate().toArray(d)
                                for (var A = a.times.length, w = 0; w < A; ++w) {
                                  var x = w * u + c
                                  if ('quaternion' === i)
                                    sr.multiplyQuaternionsFlat(a.values, x, d, 0, a.values, x)
                                  else
                                    for (var E = u - 2 * c, M = 0; M < E; ++M)
                                      a.values[x + M] -= d[M]
                                }
                              },
                              s = 0;
                            s < i;
                            ++s
                          )
                            a(s)
                          return (e.blendMode = Xt), e
                        },
                      }
                    function Vu(e, t, n, r) {
                      ;(this.parameterPositions = e),
                        (this._cachedIndex = 0),
                        (this.resultBuffer = void 0 !== r ? r : new t.constructor(n)),
                        (this.sampleValues = t),
                        (this.valueSize = n)
                    }
                    function Wu(e, t, n, r) {
                      Vu.call(this, e, t, n, r),
                        (this._weightPrev = -0),
                        (this._offsetPrev = -0),
                        (this._weightNext = -0),
                        (this._offsetNext = -0)
                    }
                    function qu(e, t, n, r) {
                      Vu.call(this, e, t, n, r)
                    }
                    function Xu(e, t, n, r) {
                      Vu.call(this, e, t, n, r)
                    }
                    function Yu(e, t, n, r) {
                      if (void 0 === e)
                        throw new Error('THREE.KeyframeTrack: track name is undefined')
                      if (void 0 === t || 0 === t.length)
                        throw new Error('THREE.KeyframeTrack: no keyframes in track named ' + e)
                      ;(this.name = e),
                        (this.times = ju.convertArray(t, this.TimeBufferType)),
                        (this.values = ju.convertArray(n, this.ValueBufferType)),
                        this.setInterpolation(r || this.DefaultInterpolation)
                    }
                    function Qu(e, t, n) {
                      Yu.call(this, e, t, n)
                    }
                    function Zu(e, t, n, r) {
                      Yu.call(this, e, t, n, r)
                    }
                    function Ku(e, t, n, r) {
                      Yu.call(this, e, t, n, r)
                    }
                    function Ju(e, t, n, r) {
                      Vu.call(this, e, t, n, r)
                    }
                    function $u(e, t, n, r) {
                      Yu.call(this, e, t, n, r)
                    }
                    function eh(e, t, n, r) {
                      Yu.call(this, e, t, n, r)
                    }
                    function th(e, t, n, r) {
                      Yu.call(this, e, t, n, r)
                    }
                    function nh(e, t, n, r) {
                      void 0 === t && (t = -1),
                        void 0 === r && (r = qt),
                        (this.name = e),
                        (this.tracks = n),
                        (this.duration = t),
                        (this.blendMode = r),
                        (this.uuid = Kn.generateUUID()),
                        this.duration < 0 && this.resetDuration()
                    }
                    function rh(e) {
                      switch (e.toLowerCase()) {
                        case 'scalar':
                        case 'double':
                        case 'float':
                        case 'number':
                        case 'integer':
                          return Ku
                        case 'vector':
                        case 'vector2':
                        case 'vector3':
                        case 'vector4':
                          return th
                        case 'color':
                          return Zu
                        case 'quaternion':
                          return $u
                        case 'bool':
                        case 'boolean':
                          return Qu
                        case 'string':
                          return eh
                      }
                      throw new Error('THREE.KeyframeTrack: Unsupported typeName: ' + e)
                    }
                    function ih(e) {
                      if (void 0 === e.type)
                        throw new Error('THREE.KeyframeTrack: track type undefined, can not parse')
                      var t = rh(e.type)
                      if (void 0 === e.times) {
                        var n = [],
                          r = []
                        ju.flattenJSON(e.keys, n, r, 'value'), (e.times = n), (e.values = r)
                      }
                      return void 0 !== t.parse
                        ? t.parse(e)
                        : new t(e.name, e.times, e.values, e.interpolation)
                    }
                    Object.assign(Vu.prototype, {
                      evaluate: function (e) {
                        var t = this.parameterPositions,
                          n = this._cachedIndex,
                          r = t[n],
                          i = t[n - 1]
                        e: {
                          t: {
                            var o
                            n: {
                              r: if (!(e < r)) {
                                for (var a = n + 2; ; ) {
                                  if (void 0 === r) {
                                    if (e < i) break r
                                    return (
                                      (n = t.length),
                                      (this._cachedIndex = n),
                                      this.afterEnd_(n - 1, e, i)
                                    )
                                  }
                                  if (n === a) break
                                  if (((i = r), e < (r = t[++n]))) break t
                                }
                                o = t.length
                                break n
                              }
                              if (e >= i) break e
                              var s = t[1]
                              e < s && ((n = 2), (i = s))
                              for (var l = n - 2; ; ) {
                                if (void 0 === i)
                                  return (this._cachedIndex = 0), this.beforeStart_(0, e, r)
                                if (n === l) break
                                if (((r = i), e >= (i = t[--n - 1]))) break t
                              }
                              ;(o = n), (n = 0)
                            }
                            for (; n < o; ) {
                              var c = (n + o) >>> 1
                              e < t[c] ? (o = c) : (n = c + 1)
                            }
                            if (((r = t[n]), void 0 === (i = t[n - 1])))
                              return (this._cachedIndex = 0), this.beforeStart_(0, e, r)
                            if (void 0 === r)
                              return (
                                (n = t.length), (this._cachedIndex = n), this.afterEnd_(n - 1, i, e)
                              )
                          }
                          ;(this._cachedIndex = n), this.intervalChanged_(n, i, r)
                        }
                        return this.interpolate_(n, i, e, r)
                      },
                      settings: null,
                      DefaultSettings_: {},
                      getSettings_: function () {
                        return this.settings || this.DefaultSettings_
                      },
                      copySampleValue_: function (e) {
                        for (
                          var t = this.resultBuffer,
                            n = this.sampleValues,
                            r = this.valueSize,
                            i = e * r,
                            o = 0;
                          o !== r;
                          ++o
                        )
                          t[o] = n[i + o]
                        return t
                      },
                      interpolate_: function () {
                        throw new Error('call to abstract method')
                      },
                      intervalChanged_: function () {},
                    }),
                      Object.assign(Vu.prototype, {
                        beforeStart_: Vu.prototype.copySampleValue_,
                        afterEnd_: Vu.prototype.copySampleValue_,
                      }),
                      (Wu.prototype = Object.assign(Object.create(Vu.prototype), {
                        constructor: Wu,
                        DefaultSettings_: { endingStart: jt, endingEnd: jt },
                        intervalChanged_: function (e, t, n) {
                          var r = this.parameterPositions,
                            i = e - 2,
                            o = e + 1,
                            a = r[i],
                            s = r[o]
                          if (void 0 === a)
                            switch (this.getSettings_().endingStart) {
                              case Vt:
                                ;(i = e), (a = 2 * t - n)
                                break
                              case Wt:
                                a = t + r[(i = r.length - 2)] - r[i + 1]
                                break
                              default:
                                ;(i = e), (a = n)
                            }
                          if (void 0 === s)
                            switch (this.getSettings_().endingEnd) {
                              case Vt:
                                ;(o = e), (s = 2 * n - t)
                                break
                              case Wt:
                                ;(o = 1), (s = n + r[1] - r[0])
                                break
                              default:
                                ;(o = e - 1), (s = t)
                            }
                          var l = 0.5 * (n - t),
                            c = this.valueSize
                          ;(this._weightPrev = l / (t - a)),
                            (this._weightNext = l / (s - n)),
                            (this._offsetPrev = i * c),
                            (this._offsetNext = o * c)
                        },
                        interpolate_: function (e, t, n, r) {
                          for (
                            var i = this.resultBuffer,
                              o = this.sampleValues,
                              a = this.valueSize,
                              s = e * a,
                              l = s - a,
                              c = this._offsetPrev,
                              u = this._offsetNext,
                              h = this._weightPrev,
                              d = this._weightNext,
                              p = (n - t) / (r - t),
                              f = p * p,
                              m = f * p,
                              v = -h * m + 2 * h * f - h * p,
                              g = (1 + h) * m + (-1.5 - 2 * h) * f + (-0.5 + h) * p + 1,
                              y = (-1 - d) * m + (1.5 + d) * f + 0.5 * p,
                              b = d * m - d * f,
                              A = 0;
                            A !== a;
                            ++A
                          )
                            i[A] = v * o[c + A] + g * o[l + A] + y * o[s + A] + b * o[u + A]
                          return i
                        },
                      })),
                      (qu.prototype = Object.assign(Object.create(Vu.prototype), {
                        constructor: qu,
                        interpolate_: function (e, t, n, r) {
                          for (
                            var i = this.resultBuffer,
                              o = this.sampleValues,
                              a = this.valueSize,
                              s = e * a,
                              l = s - a,
                              c = (n - t) / (r - t),
                              u = 1 - c,
                              h = 0;
                            h !== a;
                            ++h
                          )
                            i[h] = o[l + h] * u + o[s + h] * c
                          return i
                        },
                      })),
                      (Xu.prototype = Object.assign(Object.create(Vu.prototype), {
                        constructor: Xu,
                        interpolate_: function (e) {
                          return this.copySampleValue_(e - 1)
                        },
                      })),
                      Object.assign(Yu, {
                        toJSON: function (e) {
                          var t,
                            n = e.constructor
                          if (void 0 !== n.toJSON) t = n.toJSON(e)
                          else {
                            t = {
                              name: e.name,
                              times: ju.convertArray(e.times, Array),
                              values: ju.convertArray(e.values, Array),
                            }
                            var r = e.getInterpolation()
                            r !== e.DefaultInterpolation && (t.interpolation = r)
                          }
                          return (t.type = e.ValueTypeName), t
                        },
                      }),
                      Object.assign(Yu.prototype, {
                        constructor: Yu,
                        TimeBufferType: Float32Array,
                        ValueBufferType: Float32Array,
                        DefaultInterpolation: Gt,
                        InterpolantFactoryMethodDiscrete: function (e) {
                          return new Xu(this.times, this.values, this.getValueSize(), e)
                        },
                        InterpolantFactoryMethodLinear: function (e) {
                          return new qu(this.times, this.values, this.getValueSize(), e)
                        },
                        InterpolantFactoryMethodSmooth: function (e) {
                          return new Wu(this.times, this.values, this.getValueSize(), e)
                        },
                        setInterpolation: function (e) {
                          var t
                          switch (e) {
                            case Ht:
                              t = this.InterpolantFactoryMethodDiscrete
                              break
                            case Gt:
                              t = this.InterpolantFactoryMethodLinear
                              break
                            case zt:
                              t = this.InterpolantFactoryMethodSmooth
                          }
                          if (void 0 === t) {
                            var n =
                              'unsupported interpolation for ' +
                              this.ValueTypeName +
                              ' keyframe track named ' +
                              this.name
                            if (void 0 === this.createInterpolant) {
                              if (e === this.DefaultInterpolation) throw new Error(n)
                              this.setInterpolation(this.DefaultInterpolation)
                            }
                            return console.warn('THREE.KeyframeTrack:', n), this
                          }
                          return (this.createInterpolant = t), this
                        },
                        getInterpolation: function () {
                          switch (this.createInterpolant) {
                            case this.InterpolantFactoryMethodDiscrete:
                              return Ht
                            case this.InterpolantFactoryMethodLinear:
                              return Gt
                            case this.InterpolantFactoryMethodSmooth:
                              return zt
                          }
                        },
                        getValueSize: function () {
                          return this.values.length / this.times.length
                        },
                        shift: function (e) {
                          if (0 !== e)
                            for (var t = this.times, n = 0, r = t.length; n !== r; ++n) t[n] += e
                          return this
                        },
                        scale: function (e) {
                          if (1 !== e)
                            for (var t = this.times, n = 0, r = t.length; n !== r; ++n) t[n] *= e
                          return this
                        },
                        trim: function (e, t) {
                          for (
                            var n = this.times, r = n.length, i = 0, o = r - 1;
                            i !== r && n[i] < e;

                          )
                            ++i
                          for (; -1 !== o && n[o] > t; ) --o
                          if ((++o, 0 !== i || o !== r)) {
                            i >= o && (i = (o = Math.max(o, 1)) - 1)
                            var a = this.getValueSize()
                            ;(this.times = ju.arraySlice(n, i, o)),
                              (this.values = ju.arraySlice(this.values, i * a, o * a))
                          }
                          return this
                        },
                        validate: function () {
                          var e = !0,
                            t = this.getValueSize()
                          t - Math.floor(t) !== 0 &&
                            (console.error(
                              'THREE.KeyframeTrack: Invalid value size in track.',
                              this,
                            ),
                            (e = !1))
                          var n = this.times,
                            r = this.values,
                            i = n.length
                          0 === i &&
                            (console.error('THREE.KeyframeTrack: Track is empty.', this), (e = !1))
                          for (var o = null, a = 0; a !== i; a++) {
                            var s = n[a]
                            if ('number' === typeof s && isNaN(s)) {
                              console.error(
                                'THREE.KeyframeTrack: Time is not a valid number.',
                                this,
                                a,
                                s,
                              ),
                                (e = !1)
                              break
                            }
                            if (null !== o && o > s) {
                              console.error(
                                'THREE.KeyframeTrack: Out of order keys.',
                                this,
                                a,
                                s,
                                o,
                              ),
                                (e = !1)
                              break
                            }
                            o = s
                          }
                          if (void 0 !== r && ju.isTypedArray(r))
                            for (var l = 0, c = r.length; l !== c; ++l) {
                              var u = r[l]
                              if (isNaN(u)) {
                                console.error(
                                  'THREE.KeyframeTrack: Value is not a valid number.',
                                  this,
                                  l,
                                  u,
                                ),
                                  (e = !1)
                                break
                              }
                            }
                          return e
                        },
                        optimize: function () {
                          for (
                            var e = ju.arraySlice(this.times),
                              t = ju.arraySlice(this.values),
                              n = this.getValueSize(),
                              r = this.getInterpolation() === zt,
                              i = e.length - 1,
                              o = 1,
                              a = 1;
                            a < i;
                            ++a
                          ) {
                            var s = !1,
                              l = e[a]
                            if (l !== e[a + 1] && (1 !== a || l !== e[0]))
                              if (r) s = !0
                              else
                                for (var c = a * n, u = c - n, h = c + n, d = 0; d !== n; ++d) {
                                  var p = t[c + d]
                                  if (p !== t[u + d] || p !== t[h + d]) {
                                    s = !0
                                    break
                                  }
                                }
                            if (s) {
                              if (a !== o) {
                                e[o] = e[a]
                                for (var f = a * n, m = o * n, v = 0; v !== n; ++v)
                                  t[m + v] = t[f + v]
                              }
                              ++o
                            }
                          }
                          if (i > 0) {
                            e[o] = e[i]
                            for (var g = i * n, y = o * n, b = 0; b !== n; ++b) t[y + b] = t[g + b]
                            ++o
                          }
                          return (
                            o !== e.length
                              ? ((this.times = ju.arraySlice(e, 0, o)),
                                (this.values = ju.arraySlice(t, 0, o * n)))
                              : ((this.times = e), (this.values = t)),
                            this
                          )
                        },
                        clone: function () {
                          var e = ju.arraySlice(this.times, 0),
                            t = ju.arraySlice(this.values, 0),
                            n = new (0, this.constructor)(this.name, e, t)
                          return (n.createInterpolant = this.createInterpolant), n
                        },
                      }),
                      (Qu.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: Qu,
                        ValueTypeName: 'bool',
                        ValueBufferType: Array,
                        DefaultInterpolation: Ht,
                        InterpolantFactoryMethodLinear: void 0,
                        InterpolantFactoryMethodSmooth: void 0,
                      })),
                      (Zu.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: Zu,
                        ValueTypeName: 'color',
                      })),
                      (Ku.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: Ku,
                        ValueTypeName: 'number',
                      })),
                      (Ju.prototype = Object.assign(Object.create(Vu.prototype), {
                        constructor: Ju,
                        interpolate_: function (e, t, n, r) {
                          for (
                            var i = this.resultBuffer,
                              o = this.sampleValues,
                              a = this.valueSize,
                              s = (n - t) / (r - t),
                              l = e * a,
                              c = l + a;
                            l !== c;
                            l += 4
                          )
                            sr.slerpFlat(i, 0, o, l - a, o, l, s)
                          return i
                        },
                      })),
                      ($u.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: $u,
                        ValueTypeName: 'quaternion',
                        DefaultInterpolation: Gt,
                        InterpolantFactoryMethodLinear: function (e) {
                          return new Ju(this.times, this.values, this.getValueSize(), e)
                        },
                        InterpolantFactoryMethodSmooth: void 0,
                      })),
                      (eh.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: eh,
                        ValueTypeName: 'string',
                        ValueBufferType: Array,
                        DefaultInterpolation: Ht,
                        InterpolantFactoryMethodLinear: void 0,
                        InterpolantFactoryMethodSmooth: void 0,
                      })),
                      (th.prototype = Object.assign(Object.create(Yu.prototype), {
                        constructor: th,
                        ValueTypeName: 'vector',
                      })),
                      Object.assign(nh, {
                        parse: function (e) {
                          for (
                            var t = [], n = e.tracks, r = 1 / (e.fps || 1), i = 0, o = n.length;
                            i !== o;
                            ++i
                          )
                            t.push(ih(n[i]).scale(r))
                          var a = new nh(e.name, e.duration, t, e.blendMode)
                          return (a.uuid = e.uuid), a
                        },
                        toJSON: function (e) {
                          for (
                            var t = [],
                              n = e.tracks,
                              r = {
                                name: e.name,
                                duration: e.duration,
                                tracks: t,
                                uuid: e.uuid,
                                blendMode: e.blendMode,
                              },
                              i = 0,
                              o = n.length;
                            i !== o;
                            ++i
                          )
                            t.push(Yu.toJSON(n[i]))
                          return r
                        },
                        CreateFromMorphTargetSequence: function (e, t, n, r) {
                          for (var i = t.length, o = [], a = 0; a < i; a++) {
                            var s = [],
                              l = []
                            s.push((a + i - 1) % i, a, (a + 1) % i), l.push(0, 1, 0)
                            var c = ju.getKeyframeOrder(s)
                            ;(s = ju.sortedArray(s, 1, c)),
                              (l = ju.sortedArray(l, 1, c)),
                              r || 0 !== s[0] || (s.push(i), l.push(l[0])),
                              o.push(
                                new Ku('.morphTargetInfluences[' + t[a].name + ']', s, l).scale(
                                  1 / n,
                                ),
                              )
                          }
                          return new nh(e, -1, o)
                        },
                        findByName: function (e, t) {
                          var n = e
                          if (!Array.isArray(e)) {
                            var r = e
                            n = (r.geometry && r.geometry.animations) || r.animations
                          }
                          for (var i = 0; i < n.length; i++) if (n[i].name === t) return n[i]
                          return null
                        },
                        CreateClipsFromMorphTargetSequences: function (e, t, n) {
                          for (
                            var r = {}, i = /^([\w-]*?)([\d]+)$/, o = 0, a = e.length;
                            o < a;
                            o++
                          ) {
                            var s = e[o],
                              l = s.name.match(i)
                            if (l && l.length > 1) {
                              var c = l[1],
                                u = r[c]
                              u || (r[c] = u = []), u.push(s)
                            }
                          }
                          var h = []
                          for (var d in r) h.push(nh.CreateFromMorphTargetSequence(d, r[d], t, n))
                          return h
                        },
                        parseAnimation: function (e, t) {
                          if (!e)
                            return (
                              console.error(
                                'THREE.AnimationClip: No animation in JSONLoader data.',
                              ),
                              null
                            )
                          for (
                            var n = function (e, t, n, r, i) {
                                if (0 !== n.length) {
                                  var o = [],
                                    a = []
                                  ju.flattenJSON(n, o, a, r),
                                    0 !== o.length && i.push(new e(t, o, a))
                                }
                              },
                              r = [],
                              i = e.name || 'default',
                              o = e.fps || 30,
                              a = e.blendMode,
                              s = e.length || -1,
                              l = e.hierarchy || [],
                              c = 0;
                            c < l.length;
                            c++
                          ) {
                            var u = l[c].keys
                            if (u && 0 !== u.length)
                              if (u[0].morphTargets) {
                                var h = {},
                                  d = void 0
                                for (d = 0; d < u.length; d++)
                                  if (u[d].morphTargets)
                                    for (var p = 0; p < u[d].morphTargets.length; p++)
                                      h[u[d].morphTargets[p]] = -1
                                for (var f in h) {
                                  for (
                                    var m = [], v = [], g = 0;
                                    g !== u[d].morphTargets.length;
                                    ++g
                                  ) {
                                    var y = u[d]
                                    m.push(y.time), v.push(y.morphTarget === f ? 1 : 0)
                                  }
                                  r.push(new Ku('.morphTargetInfluence[' + f + ']', m, v))
                                }
                                s = h.length * (o || 1)
                              } else {
                                var b = '.bones[' + t[c].name + ']'
                                n(th, b + '.position', u, 'pos', r),
                                  n($u, b + '.quaternion', u, 'rot', r),
                                  n(th, b + '.scale', u, 'scl', r)
                              }
                          }
                          return 0 === r.length ? null : new nh(i, s, r, a)
                        },
                      }),
                      Object.assign(nh.prototype, {
                        resetDuration: function () {
                          for (var e = 0, t = 0, n = this.tracks.length; t !== n; ++t) {
                            var r = this.tracks[t]
                            e = Math.max(e, r.times[r.times.length - 1])
                          }
                          return (this.duration = e), this
                        },
                        trim: function () {
                          for (var e = 0; e < this.tracks.length; e++)
                            this.tracks[e].trim(0, this.duration)
                          return this
                        },
                        validate: function () {
                          for (var e = !0, t = 0; t < this.tracks.length; t++)
                            e = e && this.tracks[t].validate()
                          return e
                        },
                        optimize: function () {
                          for (var e = 0; e < this.tracks.length; e++) this.tracks[e].optimize()
                          return this
                        },
                        clone: function () {
                          for (var e = [], t = 0; t < this.tracks.length; t++)
                            e.push(this.tracks[t].clone())
                          return new nh(this.name, this.duration, e, this.blendMode)
                        },
                        toJSON: function () {
                          return nh.toJSON(this)
                        },
                      })
                    var oh = {
                      enabled: !1,
                      files: {},
                      add: function (e, t) {
                        !1 !== this.enabled && (this.files[e] = t)
                      },
                      get: function (e) {
                        if (!1 !== this.enabled) return this.files[e]
                      },
                      remove: function (e) {
                        delete this.files[e]
                      },
                      clear: function () {
                        this.files = {}
                      },
                    }
                    function ah(e, t, n) {
                      var r = this,
                        i = !1,
                        o = 0,
                        a = 0,
                        s = void 0,
                        l = []
                      ;(this.onStart = void 0),
                        (this.onLoad = e),
                        (this.onProgress = t),
                        (this.onError = n),
                        (this.itemStart = function (e) {
                          a++, !1 === i && void 0 !== r.onStart && r.onStart(e, o, a), (i = !0)
                        }),
                        (this.itemEnd = function (e) {
                          o++,
                            void 0 !== r.onProgress && r.onProgress(e, o, a),
                            o === a && ((i = !1), void 0 !== r.onLoad && r.onLoad())
                        }),
                        (this.itemError = function (e) {
                          void 0 !== r.onError && r.onError(e)
                        }),
                        (this.resolveURL = function (e) {
                          return s ? s(e) : e
                        }),
                        (this.setURLModifier = function (e) {
                          return (s = e), this
                        }),
                        (this.addHandler = function (e, t) {
                          return l.push(e, t), this
                        }),
                        (this.removeHandler = function (e) {
                          var t = l.indexOf(e)
                          return -1 !== t && l.splice(t, 2), this
                        }),
                        (this.getHandler = function (e) {
                          for (var t = 0, n = l.length; t < n; t += 2) {
                            var r = l[t],
                              i = l[t + 1]
                            if ((r.global && (r.lastIndex = 0), r.test(e))) return i
                          }
                          return null
                        })
                    }
                    var sh = new ah()
                    function lh(e) {
                      ;(this.manager = void 0 !== e ? e : sh),
                        (this.crossOrigin = 'anonymous'),
                        (this.withCredentials = !1),
                        (this.path = ''),
                        (this.resourcePath = ''),
                        (this.requestHeader = {})
                    }
                    Object.assign(lh.prototype, {
                      load: function () {},
                      loadAsync: function (e, t) {
                        var n = this
                        return new Promise(function (r, i) {
                          n.load(e, r, t, i)
                        })
                      },
                      parse: function () {},
                      setCrossOrigin: function (e) {
                        return (this.crossOrigin = e), this
                      },
                      setWithCredentials: function (e) {
                        return (this.withCredentials = e), this
                      },
                      setPath: function (e) {
                        return (this.path = e), this
                      },
                      setResourcePath: function (e) {
                        return (this.resourcePath = e), this
                      },
                      setRequestHeader: function (e) {
                        return (this.requestHeader = e), this
                      },
                    })
                    var ch = {}
                    function uh(e) {
                      lh.call(this, e)
                    }
                    function hh(e) {
                      lh.call(this, e)
                    }
                    function dh(e) {
                      lh.call(this, e)
                    }
                    function ph(e) {
                      lh.call(this, e)
                    }
                    function fh(e) {
                      lh.call(this, e)
                    }
                    function mh(e) {
                      lh.call(this, e)
                    }
                    function vh(e) {
                      lh.call(this, e)
                    }
                    function gh() {
                      ;(this.type = 'Curve'), (this.arcLengthDivisions = 200)
                    }
                    function yh(e, t, n, r, i, o, a, s) {
                      gh.call(this),
                        (this.type = 'EllipseCurve'),
                        (this.aX = e || 0),
                        (this.aY = t || 0),
                        (this.xRadius = n || 1),
                        (this.yRadius = r || 1),
                        (this.aStartAngle = i || 0),
                        (this.aEndAngle = o || 2 * Math.PI),
                        (this.aClockwise = a || !1),
                        (this.aRotation = s || 0)
                    }
                    function bh(e, t, n, r, i, o) {
                      yh.call(this, e, t, n, n, r, i, o), (this.type = 'ArcCurve')
                    }
                    function Ah() {
                      var e = 0,
                        t = 0,
                        n = 0,
                        r = 0
                      function i(i, o, a, s) {
                        ;(e = i),
                          (t = a),
                          (n = -3 * i + 3 * o - 2 * a - s),
                          (r = 2 * i - 2 * o + a + s)
                      }
                      return {
                        initCatmullRom: function (e, t, n, r, o) {
                          i(t, n, o * (n - e), o * (r - t))
                        },
                        initNonuniformCatmullRom: function (e, t, n, r, o, a, s) {
                          var l = (t - e) / o - (n - e) / (o + a) + (n - t) / a,
                            c = (n - t) / a - (r - t) / (a + s) + (r - n) / s
                          i(t, n, (l *= a), (c *= a))
                        },
                        calc: function (i) {
                          var o = i * i
                          return e + t * i + n * o + r * (o * i)
                        },
                      }
                    }
                    ;(uh.prototype = Object.assign(Object.create(lh.prototype), {
                      constructor: uh,
                      load: function (e, t, n, r) {
                        void 0 === e && (e = ''),
                          void 0 !== this.path && (e = this.path + e),
                          (e = this.manager.resolveURL(e))
                        var i = this,
                          o = oh.get(e)
                        if (void 0 !== o)
                          return (
                            i.manager.itemStart(e),
                            setTimeout(function () {
                              t && t(o), i.manager.itemEnd(e)
                            }, 0),
                            o
                          )
                        if (void 0 === ch[e]) {
                          var a,
                            s = /^data:(.*?)(;base64)?,(.*)$/,
                            l = e.match(s)
                          if (l) {
                            var c = l[1],
                              u = !!l[2],
                              h = l[3]
                            ;(h = decodeURIComponent(h)), u && (h = atob(h))
                            try {
                              var d,
                                p = (this.responseType || '').toLowerCase()
                              switch (p) {
                                case 'arraybuffer':
                                case 'blob':
                                  for (var f = new Uint8Array(h.length), m = 0; m < h.length; m++)
                                    f[m] = h.charCodeAt(m)
                                  d = 'blob' === p ? new Blob([f.buffer], { type: c }) : f.buffer
                                  break
                                case 'document':
                                  var v = new DOMParser()
                                  d = v.parseFromString(h, c)
                                  break
                                case 'json':
                                  d = JSON.parse(h)
                                  break
                                default:
                                  d = h
                              }
                              setTimeout(function () {
                                t && t(d), i.manager.itemEnd(e)
                              }, 0)
                            } catch (y) {
                              setTimeout(function () {
                                r && r(y), i.manager.itemError(e), i.manager.itemEnd(e)
                              }, 0)
                            }
                          } else {
                            for (var g in ((ch[e] = []),
                            ch[e].push({ onLoad: t, onProgress: n, onError: r }),
                            (a = new XMLHttpRequest()).open('GET', e, !0),
                            a.addEventListener(
                              'load',
                              function (t) {
                                var n = this.response,
                                  r = ch[e]
                                if ((delete ch[e], 200 === this.status || 0 === this.status)) {
                                  0 === this.status &&
                                    console.warn('THREE.FileLoader: HTTP Status 0 received.'),
                                    oh.add(e, n)
                                  for (var o = 0, a = r.length; o < a; o++) {
                                    var s = r[o]
                                    s.onLoad && s.onLoad(n)
                                  }
                                  i.manager.itemEnd(e)
                                } else {
                                  for (var l = 0, c = r.length; l < c; l++) {
                                    var u = r[l]
                                    u.onError && u.onError(t)
                                  }
                                  i.manager.itemError(e), i.manager.itemEnd(e)
                                }
                              },
                              !1,
                            ),
                            a.addEventListener(
                              'progress',
                              function (t) {
                                for (var n = ch[e], r = 0, i = n.length; r < i; r++) {
                                  var o = n[r]
                                  o.onProgress && o.onProgress(t)
                                }
                              },
                              !1,
                            ),
                            a.addEventListener(
                              'error',
                              function (t) {
                                var n = ch[e]
                                delete ch[e]
                                for (var r = 0, o = n.length; r < o; r++) {
                                  var a = n[r]
                                  a.onError && a.onError(t)
                                }
                                i.manager.itemError(e), i.manager.itemEnd(e)
                              },
                              !1,
                            ),
                            a.addEventListener(
                              'abort',
                              function (t) {
                                var n = ch[e]
                                delete ch[e]
                                for (var r = 0, o = n.length; r < o; r++) {
                                  var a = n[r]
                                  a.onError && a.onError(t)
                                }
                                i.manager.itemError(e), i.manager.itemEnd(e)
                              },
                              !1,
                            ),
                            void 0 !== this.responseType && (a.responseType = this.responseType),
                            void 0 !== this.withCredentials &&
                              (a.withCredentials = this.withCredentials),
                            a.overrideMimeType &&
                              a.overrideMimeType(
                                void 0 !== this.mimeType ? this.mimeType : 'text/plain',
                              ),
                            this.requestHeader))
                              a.setRequestHeader(g, this.requestHeader[g])
                            a.send(null)
                          }
                          return i.manager.itemStart(e), a
                        }
                        ch[e].push({ onLoad: t, onProgress: n, onError: r })
                      },
                      setResponseType: function (e) {
                        return (this.responseType = e), this
                      },
                      setMimeType: function (e) {
                        return (this.mimeType = e), this
                      },
                    })),
                      (hh.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: hh,
                        load: function (t, n, r, i) {
                          var o = this,
                            a = new uh(o.manager)
                          a.setPath(o.path),
                            a.setRequestHeader(o.requestHeader),
                            a.setWithCredentials(o.withCredentials),
                            a.load(
                              t,
                              function (r) {
                                try {
                                  n(o.parse(JSON.parse(r)))
                                } catch (e) {
                                  i ? i(e) : console.error(e), o.manager.itemError(t)
                                }
                              },
                              r,
                              i,
                            )
                        },
                        parse: function (e) {
                          for (var t = [], n = 0; n < e.length; n++) {
                            var r = nh.parse(e[n])
                            t.push(r)
                          }
                          return t
                        },
                      })),
                      (dh.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: dh,
                        load: function (e, t, n, r) {
                          var i = this,
                            o = [],
                            a = new Ac(),
                            s = new uh(this.manager)
                          s.setPath(this.path),
                            s.setResponseType('arraybuffer'),
                            s.setRequestHeader(this.requestHeader),
                            s.setWithCredentials(i.withCredentials)
                          var l = 0
                          function c(c) {
                            s.load(
                              e[c],
                              function (e) {
                                var n = i.parse(e, !0)
                                ;(o[c] = {
                                  width: n.width,
                                  height: n.height,
                                  format: n.format,
                                  mipmaps: n.mipmaps,
                                }),
                                  6 === (l += 1) &&
                                    (1 === n.mipmapCount && (a.minFilter = Ae),
                                    (a.image = o),
                                    (a.format = n.format),
                                    (a.needsUpdate = !0),
                                    t && t(a))
                              },
                              n,
                              r,
                            )
                          }
                          if (Array.isArray(e)) for (var u = 0, h = e.length; u < h; ++u) c(u)
                          else
                            s.load(
                              e,
                              function (e) {
                                var n = i.parse(e, !0)
                                if (n.isCubemap) {
                                  for (
                                    var r = n.mipmaps.length / n.mipmapCount, s = 0;
                                    s < r;
                                    s++
                                  ) {
                                    o[s] = { mipmaps: [] }
                                    for (var l = 0; l < n.mipmapCount; l++)
                                      o[s].mipmaps.push(n.mipmaps[s * n.mipmapCount + l]),
                                        (o[s].format = n.format),
                                        (o[s].width = n.width),
                                        (o[s].height = n.height)
                                  }
                                  a.image = o
                                } else
                                  (a.image.width = n.width),
                                    (a.image.height = n.height),
                                    (a.mipmaps = n.mipmaps)
                                1 === n.mipmapCount && (a.minFilter = Ae),
                                  (a.format = n.format),
                                  (a.needsUpdate = !0),
                                  t && t(a)
                              },
                              n,
                              r,
                            )
                          return a
                        },
                      })),
                      (ph.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: ph,
                        load: function (e, t, n, r) {
                          void 0 !== this.path && (e = this.path + e),
                            (e = this.manager.resolveURL(e))
                          var i = this,
                            o = oh.get(e)
                          if (void 0 !== o)
                            return (
                              i.manager.itemStart(e),
                              setTimeout(function () {
                                t && t(o), i.manager.itemEnd(e)
                              }, 0),
                              o
                            )
                          var a = document.createElementNS('http://www.w3.org/1999/xhtml', 'img')
                          function s() {
                            a.removeEventListener('load', s, !1),
                              a.removeEventListener('error', l, !1),
                              oh.add(e, this),
                              t && t(this),
                              i.manager.itemEnd(e)
                          }
                          function l(t) {
                            a.removeEventListener('load', s, !1),
                              a.removeEventListener('error', l, !1),
                              r && r(t),
                              i.manager.itemError(e),
                              i.manager.itemEnd(e)
                          }
                          return (
                            a.addEventListener('load', s, !1),
                            a.addEventListener('error', l, !1),
                            'data:' !== e.substr(0, 5) &&
                              void 0 !== this.crossOrigin &&
                              (a.crossOrigin = this.crossOrigin),
                            i.manager.itemStart(e),
                            (a.src = e),
                            a
                          )
                        },
                      })),
                      (fh.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: fh,
                        load: function (e, t, n, r) {
                          var i = new ko(),
                            o = new ph(this.manager)
                          o.setCrossOrigin(this.crossOrigin), o.setPath(this.path)
                          var a = 0
                          function s(n) {
                            o.load(
                              e[n],
                              function (e) {
                                ;(i.images[n] = e), 6 === ++a && ((i.needsUpdate = !0), t && t(i))
                              },
                              void 0,
                              r,
                            )
                          }
                          for (var l = 0; l < e.length; ++l) s(l)
                          return i
                        },
                      })),
                      (mh.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: mh,
                        load: function (e, t, n, r) {
                          var i = this,
                            o = new Uo(),
                            a = new uh(this.manager)
                          return (
                            a.setResponseType('arraybuffer'),
                            a.setRequestHeader(this.requestHeader),
                            a.setPath(this.path),
                            a.setWithCredentials(i.withCredentials),
                            a.load(
                              e,
                              function (e) {
                                var n = i.parse(e)
                                n &&
                                  (void 0 !== n.image
                                    ? (o.image = n.image)
                                    : void 0 !== n.data &&
                                      ((o.image.width = n.width),
                                      (o.image.height = n.height),
                                      (o.image.data = n.data)),
                                  (o.wrapS = void 0 !== n.wrapS ? n.wrapS : pe),
                                  (o.wrapT = void 0 !== n.wrapT ? n.wrapT : pe),
                                  (o.magFilter = void 0 !== n.magFilter ? n.magFilter : Ae),
                                  (o.minFilter = void 0 !== n.minFilter ? n.minFilter : Ae),
                                  (o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1),
                                  void 0 !== n.encoding && (o.encoding = n.encoding),
                                  void 0 !== n.flipY && (o.flipY = n.flipY),
                                  void 0 !== n.format && (o.format = n.format),
                                  void 0 !== n.type && (o.type = n.type),
                                  void 0 !== n.mipmaps &&
                                    ((o.mipmaps = n.mipmaps), (o.minFilter = Ee)),
                                  1 === n.mipmapCount && (o.minFilter = Ae),
                                  (o.needsUpdate = !0),
                                  t && t(o, n))
                              },
                              n,
                              r,
                            ),
                            o
                          )
                        },
                      })),
                      (vh.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: vh,
                        load: function (e, t, n, r) {
                          var i = new nr(),
                            o = new ph(this.manager)
                          return (
                            o.setCrossOrigin(this.crossOrigin),
                            o.setPath(this.path),
                            o.load(
                              e,
                              function (n) {
                                i.image = n
                                var r =
                                  e.search(/\.jpe?g($|\?)/i) > 0 ||
                                  0 === e.search(/^data\:image\/jpeg/)
                                ;(i.format = r ? Ne : Ue),
                                  (i.needsUpdate = !0),
                                  void 0 !== t && t(i)
                              },
                              n,
                              r,
                            ),
                            i
                          )
                        },
                      })),
                      Object.assign(gh.prototype, {
                        getPoint: function () {
                          return console.warn('THREE.Curve: .getPoint() not implemented.'), null
                        },
                        getPointAt: function (e, t) {
                          var n = this.getUtoTmapping(e)
                          return this.getPoint(n, t)
                        },
                        getPoints: function (e) {
                          void 0 === e && (e = 5)
                          for (var t = [], n = 0; n <= e; n++) t.push(this.getPoint(n / e))
                          return t
                        },
                        getSpacedPoints: function (e) {
                          void 0 === e && (e = 5)
                          for (var t = [], n = 0; n <= e; n++) t.push(this.getPointAt(n / e))
                          return t
                        },
                        getLength: function () {
                          var e = this.getLengths()
                          return e[e.length - 1]
                        },
                        getLengths: function (e) {
                          if (
                            (void 0 === e && (e = this.arcLengthDivisions),
                            this.cacheArcLengths &&
                              this.cacheArcLengths.length === e + 1 &&
                              !this.needsUpdate)
                          )
                            return this.cacheArcLengths
                          this.needsUpdate = !1
                          var t,
                            n = [],
                            r = this.getPoint(0),
                            i = 0
                          n.push(0)
                          for (var o = 1; o <= e; o++)
                            (i += (t = this.getPoint(o / e)).distanceTo(r)), n.push(i), (r = t)
                          return (this.cacheArcLengths = n), n
                        },
                        updateArcLengths: function () {
                          ;(this.needsUpdate = !0), this.getLengths()
                        },
                        getUtoTmapping: function (e, t) {
                          var n,
                            r = this.getLengths(),
                            i = 0,
                            o = r.length
                          n = t || e * r[o - 1]
                          for (var a, s = 0, l = o - 1; s <= l; )
                            if ((a = r[(i = Math.floor(s + (l - s) / 2))] - n) < 0) s = i + 1
                            else {
                              if (!(a > 0)) {
                                l = i
                                break
                              }
                              l = i - 1
                            }
                          if (r[(i = l)] === n) return i / (o - 1)
                          var c = r[i]
                          return (i + (n - c) / (r[i + 1] - c)) / (o - 1)
                        },
                        getTangent: function (e, t) {
                          var n = 1e-4,
                            r = e - n,
                            i = e + n
                          r < 0 && (r = 0), i > 1 && (i = 1)
                          var o = this.getPoint(r),
                            a = this.getPoint(i),
                            s = t || (o.isVector2 ? new Jn() : new lr())
                          return s.copy(a).sub(o).normalize(), s
                        },
                        getTangentAt: function (e, t) {
                          var n = this.getUtoTmapping(e)
                          return this.getTangent(n, t)
                        },
                        computeFrenetFrames: function (e, t) {
                          for (
                            var n = new lr(),
                              r = [],
                              i = [],
                              o = [],
                              a = new lr(),
                              s = new Fr(),
                              l = 0;
                            l <= e;
                            l++
                          ) {
                            var c = l / e
                            ;(r[l] = this.getTangentAt(c, new lr())), r[l].normalize()
                          }
                          ;(i[0] = new lr()), (o[0] = new lr())
                          var u = Number.MAX_VALUE,
                            h = Math.abs(r[0].x),
                            d = Math.abs(r[0].y),
                            p = Math.abs(r[0].z)
                          h <= u && ((u = h), n.set(1, 0, 0)),
                            d <= u && ((u = d), n.set(0, 1, 0)),
                            p <= u && n.set(0, 0, 1),
                            a.crossVectors(r[0], n).normalize(),
                            i[0].crossVectors(r[0], a),
                            o[0].crossVectors(r[0], i[0])
                          for (var f = 1; f <= e; f++) {
                            if (
                              ((i[f] = i[f - 1].clone()),
                              (o[f] = o[f - 1].clone()),
                              a.crossVectors(r[f - 1], r[f]),
                              a.length() > Number.EPSILON)
                            ) {
                              a.normalize()
                              var m = Math.acos(Kn.clamp(r[f - 1].dot(r[f]), -1, 1))
                              i[f].applyMatrix4(s.makeRotationAxis(a, m))
                            }
                            o[f].crossVectors(r[f], i[f])
                          }
                          if (!0 === t) {
                            var v = Math.acos(Kn.clamp(i[0].dot(i[e]), -1, 1))
                            ;(v /= e), r[0].dot(a.crossVectors(i[0], i[e])) > 0 && (v = -v)
                            for (var g = 1; g <= e; g++)
                              i[g].applyMatrix4(s.makeRotationAxis(r[g], v * g)),
                                o[g].crossVectors(r[g], i[g])
                          }
                          return { tangents: r, normals: i, binormals: o }
                        },
                        clone: function () {
                          return new this.constructor().copy(this)
                        },
                        copy: function (e) {
                          return (this.arcLengthDivisions = e.arcLengthDivisions), this
                        },
                        toJSON: function () {
                          var e = {
                            metadata: { version: 4.5, type: 'Curve', generator: 'Curve.toJSON' },
                          }
                          return (
                            (e.arcLengthDivisions = this.arcLengthDivisions),
                            (e.type = this.type),
                            e
                          )
                        },
                        fromJSON: function (e) {
                          return (this.arcLengthDivisions = e.arcLengthDivisions), this
                        },
                      }),
                      (yh.prototype = Object.create(gh.prototype)),
                      (yh.prototype.constructor = yh),
                      (yh.prototype.isEllipseCurve = !0),
                      (yh.prototype.getPoint = function (e, t) {
                        for (
                          var n = t || new Jn(),
                            r = 2 * Math.PI,
                            i = this.aEndAngle - this.aStartAngle,
                            o = Math.abs(i) < Number.EPSILON;
                          i < 0;

                        )
                          i += r
                        for (; i > r; ) i -= r
                        i < Number.EPSILON && (i = o ? 0 : r),
                          !0 !== this.aClockwise || o || (i === r ? (i = -r) : (i -= r))
                        var a = this.aStartAngle + e * i,
                          s = this.aX + this.xRadius * Math.cos(a),
                          l = this.aY + this.yRadius * Math.sin(a)
                        if (0 !== this.aRotation) {
                          var c = Math.cos(this.aRotation),
                            u = Math.sin(this.aRotation),
                            h = s - this.aX,
                            d = l - this.aY
                          ;(s = h * c - d * u + this.aX), (l = h * u + d * c + this.aY)
                        }
                        return n.set(s, l)
                      }),
                      (yh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          (this.aX = e.aX),
                          (this.aY = e.aY),
                          (this.xRadius = e.xRadius),
                          (this.yRadius = e.yRadius),
                          (this.aStartAngle = e.aStartAngle),
                          (this.aEndAngle = e.aEndAngle),
                          (this.aClockwise = e.aClockwise),
                          (this.aRotation = e.aRotation),
                          this
                        )
                      }),
                      (yh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (
                          (e.aX = this.aX),
                          (e.aY = this.aY),
                          (e.xRadius = this.xRadius),
                          (e.yRadius = this.yRadius),
                          (e.aStartAngle = this.aStartAngle),
                          (e.aEndAngle = this.aEndAngle),
                          (e.aClockwise = this.aClockwise),
                          (e.aRotation = this.aRotation),
                          e
                        )
                      }),
                      (yh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          (this.aX = e.aX),
                          (this.aY = e.aY),
                          (this.xRadius = e.xRadius),
                          (this.yRadius = e.yRadius),
                          (this.aStartAngle = e.aStartAngle),
                          (this.aEndAngle = e.aEndAngle),
                          (this.aClockwise = e.aClockwise),
                          (this.aRotation = e.aRotation),
                          this
                        )
                      }),
                      (bh.prototype = Object.create(yh.prototype)),
                      (bh.prototype.constructor = bh),
                      (bh.prototype.isArcCurve = !0)
                    var wh = new lr(),
                      xh = new Ah(),
                      Eh = new Ah(),
                      Mh = new Ah()
                    function _h(e, t, n, r) {
                      void 0 === e && (e = []),
                        void 0 === t && (t = !1),
                        void 0 === n && (n = 'centripetal'),
                        void 0 === r && (r = 0.5),
                        gh.call(this),
                        (this.type = 'CatmullRomCurve3'),
                        (this.points = e),
                        (this.closed = t),
                        (this.curveType = n),
                        (this.tension = r)
                    }
                    function Th(e, t, n, r, i) {
                      var o = 0.5 * (r - t),
                        a = 0.5 * (i - n),
                        s = e * e
                      return (
                        (2 * n - 2 * r + o + a) * (e * s) +
                        (-3 * n + 3 * r - 2 * o - a) * s +
                        o * e +
                        n
                      )
                    }
                    function Sh(e, t) {
                      var n = 1 - e
                      return n * n * t
                    }
                    function Ch(e, t) {
                      return 2 * (1 - e) * e * t
                    }
                    function Lh(e, t) {
                      return e * e * t
                    }
                    function Rh(e, t, n, r) {
                      return Sh(e, t) + Ch(e, n) + Lh(e, r)
                    }
                    function Ph(e, t) {
                      var n = 1 - e
                      return n * n * n * t
                    }
                    function Dh(e, t) {
                      var n = 1 - e
                      return 3 * n * n * e * t
                    }
                    function Oh(e, t) {
                      return 3 * (1 - e) * e * e * t
                    }
                    function Ih(e, t) {
                      return e * e * e * t
                    }
                    function Bh(e, t, n, r, i) {
                      return Ph(e, t) + Dh(e, n) + Oh(e, r) + Ih(e, i)
                    }
                    function Fh(e, t, n, r) {
                      void 0 === e && (e = new Jn()),
                        void 0 === t && (t = new Jn()),
                        void 0 === n && (n = new Jn()),
                        void 0 === r && (r = new Jn()),
                        gh.call(this),
                        (this.type = 'CubicBezierCurve'),
                        (this.v0 = e),
                        (this.v1 = t),
                        (this.v2 = n),
                        (this.v3 = r)
                    }
                    function kh(e, t, n, r) {
                      void 0 === e && (e = new lr()),
                        void 0 === t && (t = new lr()),
                        void 0 === n && (n = new lr()),
                        void 0 === r && (r = new lr()),
                        gh.call(this),
                        (this.type = 'CubicBezierCurve3'),
                        (this.v0 = e),
                        (this.v1 = t),
                        (this.v2 = n),
                        (this.v3 = r)
                    }
                    function Nh(e, t) {
                      void 0 === e && (e = new Jn()),
                        void 0 === t && (t = new Jn()),
                        gh.call(this),
                        (this.type = 'LineCurve'),
                        (this.v1 = e),
                        (this.v2 = t)
                    }
                    function Uh(e, t) {
                      void 0 === e && (e = new lr()),
                        void 0 === t && (t = new lr()),
                        gh.call(this),
                        (this.type = 'LineCurve3'),
                        (this.v1 = e),
                        (this.v2 = t)
                    }
                    function Hh(e, t, n) {
                      void 0 === e && (e = new Jn()),
                        void 0 === t && (t = new Jn()),
                        void 0 === n && (n = new Jn()),
                        gh.call(this),
                        (this.type = 'QuadraticBezierCurve'),
                        (this.v0 = e),
                        (this.v1 = t),
                        (this.v2 = n)
                    }
                    function Gh(e, t, n) {
                      void 0 === e && (e = new lr()),
                        void 0 === t && (t = new lr()),
                        void 0 === n && (n = new lr()),
                        gh.call(this),
                        (this.type = 'QuadraticBezierCurve3'),
                        (this.v0 = e),
                        (this.v1 = t),
                        (this.v2 = n)
                    }
                    function zh(e) {
                      void 0 === e && (e = []),
                        gh.call(this),
                        (this.type = 'SplineCurve'),
                        (this.points = e)
                    }
                    ;(_h.prototype = Object.create(gh.prototype)),
                      (_h.prototype.constructor = _h),
                      (_h.prototype.isCatmullRomCurve3 = !0),
                      (_h.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new lr())
                        var n,
                          r,
                          i = t,
                          o = this.points,
                          a = o.length,
                          s = (a - (this.closed ? 0 : 1)) * e,
                          l = Math.floor(s),
                          c = s - l
                        this.closed
                          ? (l += l > 0 ? 0 : (Math.floor(Math.abs(l) / a) + 1) * a)
                          : 0 === c && l === a - 1 && ((l = a - 2), (c = 1)),
                          this.closed || l > 0
                            ? (n = o[(l - 1) % a])
                            : (wh.subVectors(o[0], o[1]).add(o[0]), (n = wh))
                        var u = o[l % a],
                          h = o[(l + 1) % a]
                        if (
                          (this.closed || l + 2 < a
                            ? (r = o[(l + 2) % a])
                            : (wh.subVectors(o[a - 1], o[a - 2]).add(o[a - 1]), (r = wh)),
                          'centripetal' === this.curveType || 'chordal' === this.curveType)
                        ) {
                          var d = 'chordal' === this.curveType ? 0.5 : 0.25,
                            p = Math.pow(n.distanceToSquared(u), d),
                            f = Math.pow(u.distanceToSquared(h), d),
                            m = Math.pow(h.distanceToSquared(r), d)
                          f < 1e-4 && (f = 1),
                            p < 1e-4 && (p = f),
                            m < 1e-4 && (m = f),
                            xh.initNonuniformCatmullRom(n.x, u.x, h.x, r.x, p, f, m),
                            Eh.initNonuniformCatmullRom(n.y, u.y, h.y, r.y, p, f, m),
                            Mh.initNonuniformCatmullRom(n.z, u.z, h.z, r.z, p, f, m)
                        } else
                          'catmullrom' === this.curveType &&
                            (xh.initCatmullRom(n.x, u.x, h.x, r.x, this.tension),
                            Eh.initCatmullRom(n.y, u.y, h.y, r.y, this.tension),
                            Mh.initCatmullRom(n.z, u.z, h.z, r.z, this.tension))
                        return i.set(xh.calc(c), Eh.calc(c), Mh.calc(c)), i
                      }),
                      (_h.prototype.copy = function (e) {
                        gh.prototype.copy.call(this, e), (this.points = [])
                        for (var t = 0, n = e.points.length; t < n; t++) {
                          var r = e.points[t]
                          this.points.push(r.clone())
                        }
                        return (
                          (this.closed = e.closed),
                          (this.curveType = e.curveType),
                          (this.tension = e.tension),
                          this
                        )
                      }),
                      (_h.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        e.points = []
                        for (var t = 0, n = this.points.length; t < n; t++) {
                          var r = this.points[t]
                          e.points.push(r.toArray())
                        }
                        return (
                          (e.closed = this.closed),
                          (e.curveType = this.curveType),
                          (e.tension = this.tension),
                          e
                        )
                      }),
                      (_h.prototype.fromJSON = function (e) {
                        gh.prototype.fromJSON.call(this, e), (this.points = [])
                        for (var t = 0, n = e.points.length; t < n; t++) {
                          var r = e.points[t]
                          this.points.push(new lr().fromArray(r))
                        }
                        return (
                          (this.closed = e.closed),
                          (this.curveType = e.curveType),
                          (this.tension = e.tension),
                          this
                        )
                      }),
                      (Fh.prototype = Object.create(gh.prototype)),
                      (Fh.prototype.constructor = Fh),
                      (Fh.prototype.isCubicBezierCurve = !0),
                      (Fh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new Jn())
                        var n = t,
                          r = this.v0,
                          i = this.v1,
                          o = this.v2,
                          a = this.v3
                        return n.set(Bh(e, r.x, i.x, o.x, a.x), Bh(e, r.y, i.y, o.y, a.y)), n
                      }),
                      (Fh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v0.copy(e.v0),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this.v3.copy(e.v3),
                          this
                        )
                      }),
                      (Fh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (
                          (e.v0 = this.v0.toArray()),
                          (e.v1 = this.v1.toArray()),
                          (e.v2 = this.v2.toArray()),
                          (e.v3 = this.v3.toArray()),
                          e
                        )
                      }),
                      (Fh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v0.fromArray(e.v0),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this.v3.fromArray(e.v3),
                          this
                        )
                      }),
                      (kh.prototype = Object.create(gh.prototype)),
                      (kh.prototype.constructor = kh),
                      (kh.prototype.isCubicBezierCurve3 = !0),
                      (kh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new lr())
                        var n = t,
                          r = this.v0,
                          i = this.v1,
                          o = this.v2,
                          a = this.v3
                        return (
                          n.set(
                            Bh(e, r.x, i.x, o.x, a.x),
                            Bh(e, r.y, i.y, o.y, a.y),
                            Bh(e, r.z, i.z, o.z, a.z),
                          ),
                          n
                        )
                      }),
                      (kh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v0.copy(e.v0),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this.v3.copy(e.v3),
                          this
                        )
                      }),
                      (kh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (
                          (e.v0 = this.v0.toArray()),
                          (e.v1 = this.v1.toArray()),
                          (e.v2 = this.v2.toArray()),
                          (e.v3 = this.v3.toArray()),
                          e
                        )
                      }),
                      (kh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v0.fromArray(e.v0),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this.v3.fromArray(e.v3),
                          this
                        )
                      }),
                      (Nh.prototype = Object.create(gh.prototype)),
                      (Nh.prototype.constructor = Nh),
                      (Nh.prototype.isLineCurve = !0),
                      (Nh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new Jn())
                        var n = t
                        return (
                          1 === e
                            ? n.copy(this.v2)
                            : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(e).add(this.v1)),
                          n
                        )
                      }),
                      (Nh.prototype.getPointAt = function (e, t) {
                        return this.getPoint(e, t)
                      }),
                      (Nh.prototype.getTangent = function (e, t) {
                        var n = t || new Jn()
                        return n.copy(this.v2).sub(this.v1).normalize(), n
                      }),
                      (Nh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this
                        )
                      }),
                      (Nh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (e.v1 = this.v1.toArray()), (e.v2 = this.v2.toArray()), e
                      }),
                      (Nh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this
                        )
                      }),
                      (Uh.prototype = Object.create(gh.prototype)),
                      (Uh.prototype.constructor = Uh),
                      (Uh.prototype.isLineCurve3 = !0),
                      (Uh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new lr())
                        var n = t
                        return (
                          1 === e
                            ? n.copy(this.v2)
                            : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(e).add(this.v1)),
                          n
                        )
                      }),
                      (Uh.prototype.getPointAt = function (e, t) {
                        return this.getPoint(e, t)
                      }),
                      (Uh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this
                        )
                      }),
                      (Uh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (e.v1 = this.v1.toArray()), (e.v2 = this.v2.toArray()), e
                      }),
                      (Uh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this
                        )
                      }),
                      (Hh.prototype = Object.create(gh.prototype)),
                      (Hh.prototype.constructor = Hh),
                      (Hh.prototype.isQuadraticBezierCurve = !0),
                      (Hh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new Jn())
                        var n = t,
                          r = this.v0,
                          i = this.v1,
                          o = this.v2
                        return n.set(Rh(e, r.x, i.x, o.x), Rh(e, r.y, i.y, o.y)), n
                      }),
                      (Hh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v0.copy(e.v0),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this
                        )
                      }),
                      (Hh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (
                          (e.v0 = this.v0.toArray()),
                          (e.v1 = this.v1.toArray()),
                          (e.v2 = this.v2.toArray()),
                          e
                        )
                      }),
                      (Hh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v0.fromArray(e.v0),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this
                        )
                      }),
                      (Gh.prototype = Object.create(gh.prototype)),
                      (Gh.prototype.constructor = Gh),
                      (Gh.prototype.isQuadraticBezierCurve3 = !0),
                      (Gh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new lr())
                        var n = t,
                          r = this.v0,
                          i = this.v1,
                          o = this.v2
                        return (
                          n.set(Rh(e, r.x, i.x, o.x), Rh(e, r.y, i.y, o.y), Rh(e, r.z, i.z, o.z)), n
                        )
                      }),
                      (Gh.prototype.copy = function (e) {
                        return (
                          gh.prototype.copy.call(this, e),
                          this.v0.copy(e.v0),
                          this.v1.copy(e.v1),
                          this.v2.copy(e.v2),
                          this
                        )
                      }),
                      (Gh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        return (
                          (e.v0 = this.v0.toArray()),
                          (e.v1 = this.v1.toArray()),
                          (e.v2 = this.v2.toArray()),
                          e
                        )
                      }),
                      (Gh.prototype.fromJSON = function (e) {
                        return (
                          gh.prototype.fromJSON.call(this, e),
                          this.v0.fromArray(e.v0),
                          this.v1.fromArray(e.v1),
                          this.v2.fromArray(e.v2),
                          this
                        )
                      }),
                      (zh.prototype = Object.create(gh.prototype)),
                      (zh.prototype.constructor = zh),
                      (zh.prototype.isSplineCurve = !0),
                      (zh.prototype.getPoint = function (e, t) {
                        void 0 === t && (t = new Jn())
                        var n = t,
                          r = this.points,
                          i = (r.length - 1) * e,
                          o = Math.floor(i),
                          a = i - o,
                          s = r[0 === o ? o : o - 1],
                          l = r[o],
                          c = r[o > r.length - 2 ? r.length - 1 : o + 1],
                          u = r[o > r.length - 3 ? r.length - 1 : o + 2]
                        return n.set(Th(a, s.x, l.x, c.x, u.x), Th(a, s.y, l.y, c.y, u.y)), n
                      }),
                      (zh.prototype.copy = function (e) {
                        gh.prototype.copy.call(this, e), (this.points = [])
                        for (var t = 0, n = e.points.length; t < n; t++) {
                          var r = e.points[t]
                          this.points.push(r.clone())
                        }
                        return this
                      }),
                      (zh.prototype.toJSON = function () {
                        var e = gh.prototype.toJSON.call(this)
                        e.points = []
                        for (var t = 0, n = this.points.length; t < n; t++) {
                          var r = this.points[t]
                          e.points.push(r.toArray())
                        }
                        return e
                      }),
                      (zh.prototype.fromJSON = function (e) {
                        gh.prototype.fromJSON.call(this, e), (this.points = [])
                        for (var t = 0, n = e.points.length; t < n; t++) {
                          var r = e.points[t]
                          this.points.push(new Jn().fromArray(r))
                        }
                        return this
                      })
                    var jh = Object.freeze({
                      __proto__: null,
                      ArcCurve: bh,
                      CatmullRomCurve3: _h,
                      CubicBezierCurve: Fh,
                      CubicBezierCurve3: kh,
                      EllipseCurve: yh,
                      LineCurve: Nh,
                      LineCurve3: Uh,
                      QuadraticBezierCurve: Hh,
                      QuadraticBezierCurve3: Gh,
                      SplineCurve: zh,
                    })
                    function Vh() {
                      gh.call(this),
                        (this.type = 'CurvePath'),
                        (this.curves = []),
                        (this.autoClose = !1)
                    }
                    function Wh(e) {
                      Vh.call(this),
                        (this.type = 'Path'),
                        (this.currentPoint = new Jn()),
                        e && this.setFromPoints(e)
                    }
                    function qh(e) {
                      Wh.call(this, e),
                        (this.uuid = Kn.generateUUID()),
                        (this.type = 'Shape'),
                        (this.holes = [])
                    }
                    function Xh(e, t) {
                      void 0 === t && (t = 1),
                        si.call(this),
                        (this.type = 'Light'),
                        (this.color = new Li(e)),
                        (this.intensity = t)
                    }
                    function Yh(e, t, n) {
                      Xh.call(this, e, n),
                        (this.type = 'HemisphereLight'),
                        this.position.copy(si.DefaultUp),
                        this.updateMatrix(),
                        (this.groundColor = new Li(t))
                    }
                    function Qh(e) {
                      ;(this.camera = e),
                        (this.bias = 0),
                        (this.normalBias = 0),
                        (this.radius = 1),
                        (this.mapSize = new Jn(512, 512)),
                        (this.map = null),
                        (this.mapPass = null),
                        (this.matrix = new Fr()),
                        (this.autoUpdate = !0),
                        (this.needsUpdate = !1),
                        (this._frustum = new zo()),
                        (this._frameExtents = new Jn(1, 1)),
                        (this._viewportCount = 1),
                        (this._viewports = [new ir(0, 0, 1, 1)])
                    }
                    function Zh() {
                      Qh.call(this, new Oo(50, 1, 0.5, 500)), (this.focus = 1)
                    }
                    function Kh(e, t, n, r, i, o) {
                      Xh.call(this, e, t),
                        (this.type = 'SpotLight'),
                        this.position.copy(si.DefaultUp),
                        this.updateMatrix(),
                        (this.target = new si()),
                        Object.defineProperty(this, 'power', {
                          get: function () {
                            return this.intensity * Math.PI
                          },
                          set: function (e) {
                            this.intensity = e / Math.PI
                          },
                        }),
                        (this.distance = void 0 !== n ? n : 0),
                        (this.angle = void 0 !== r ? r : Math.PI / 3),
                        (this.penumbra = void 0 !== i ? i : 0),
                        (this.decay = void 0 !== o ? o : 1),
                        (this.shadow = new Zh())
                    }
                    function Jh() {
                      Qh.call(this, new Oo(90, 1, 0.5, 500)),
                        (this._frameExtents = new Jn(4, 2)),
                        (this._viewportCount = 6),
                        (this._viewports = [
                          new ir(2, 1, 1, 1),
                          new ir(0, 1, 1, 1),
                          new ir(3, 1, 1, 1),
                          new ir(1, 1, 1, 1),
                          new ir(3, 0, 1, 1),
                          new ir(1, 0, 1, 1),
                        ]),
                        (this._cubeDirections = [
                          new lr(1, 0, 0),
                          new lr(-1, 0, 0),
                          new lr(0, 0, 1),
                          new lr(0, 0, -1),
                          new lr(0, 1, 0),
                          new lr(0, -1, 0),
                        ]),
                        (this._cubeUps = [
                          new lr(0, 1, 0),
                          new lr(0, 1, 0),
                          new lr(0, 1, 0),
                          new lr(0, 1, 0),
                          new lr(0, 0, 1),
                          new lr(0, 0, -1),
                        ])
                    }
                    function $h(e, t, n, r) {
                      Xh.call(this, e, t),
                        (this.type = 'PointLight'),
                        Object.defineProperty(this, 'power', {
                          get: function () {
                            return 4 * this.intensity * Math.PI
                          },
                          set: function (e) {
                            this.intensity = e / (4 * Math.PI)
                          },
                        }),
                        (this.distance = void 0 !== n ? n : 0),
                        (this.decay = void 0 !== r ? r : 1),
                        (this.shadow = new Jh())
                    }
                    function ed(e, t, n, r, i, o) {
                      void 0 === e && (e = -1),
                        void 0 === t && (t = 1),
                        void 0 === n && (n = 1),
                        void 0 === r && (r = -1),
                        void 0 === i && (i = 0.1),
                        void 0 === o && (o = 2e3),
                        Do.call(this),
                        (this.type = 'OrthographicCamera'),
                        (this.zoom = 1),
                        (this.view = null),
                        (this.left = e),
                        (this.right = t),
                        (this.top = n),
                        (this.bottom = r),
                        (this.near = i),
                        (this.far = o),
                        this.updateProjectionMatrix()
                    }
                    function td() {
                      Qh.call(this, new ed(-5, 5, 5, -5, 0.5, 500))
                    }
                    function nd(e, t) {
                      Xh.call(this, e, t),
                        (this.type = 'DirectionalLight'),
                        this.position.copy(si.DefaultUp),
                        this.updateMatrix(),
                        (this.target = new si()),
                        (this.shadow = new td())
                    }
                    function rd(e, t) {
                      Xh.call(this, e, t), (this.type = 'AmbientLight')
                    }
                    function id(e, t, n, r) {
                      Xh.call(this, e, t),
                        (this.type = 'RectAreaLight'),
                        (this.width = void 0 !== n ? n : 10),
                        (this.height = void 0 !== r ? r : 10)
                    }
                    ;(Vh.prototype = Object.assign(Object.create(gh.prototype), {
                      constructor: Vh,
                      add: function (e) {
                        this.curves.push(e)
                      },
                      closePath: function () {
                        var e = this.curves[0].getPoint(0),
                          t = this.curves[this.curves.length - 1].getPoint(1)
                        e.equals(t) || this.curves.push(new Nh(t, e))
                      },
                      getPoint: function (e) {
                        for (
                          var t = e * this.getLength(), n = this.getCurveLengths(), r = 0;
                          r < n.length;

                        ) {
                          if (n[r] >= t) {
                            var i = n[r] - t,
                              o = this.curves[r],
                              a = o.getLength(),
                              s = 0 === a ? 0 : 1 - i / a
                            return o.getPointAt(s)
                          }
                          r++
                        }
                        return null
                      },
                      getLength: function () {
                        var e = this.getCurveLengths()
                        return e[e.length - 1]
                      },
                      updateArcLengths: function () {
                        ;(this.needsUpdate = !0), (this.cacheLengths = null), this.getCurveLengths()
                      },
                      getCurveLengths: function () {
                        if (this.cacheLengths && this.cacheLengths.length === this.curves.length)
                          return this.cacheLengths
                        for (var e = [], t = 0, n = 0, r = this.curves.length; n < r; n++)
                          (t += this.curves[n].getLength()), e.push(t)
                        return (this.cacheLengths = e), e
                      },
                      getSpacedPoints: function (e) {
                        void 0 === e && (e = 40)
                        for (var t = [], n = 0; n <= e; n++) t.push(this.getPoint(n / e))
                        return this.autoClose && t.push(t[0]), t
                      },
                      getPoints: function (e) {
                        void 0 === e && (e = 12)
                        for (var t, n = [], r = 0, i = this.curves; r < i.length; r++)
                          for (
                            var o = i[r],
                              a =
                                o && o.isEllipseCurve
                                  ? 2 * e
                                  : o && (o.isLineCurve || o.isLineCurve3)
                                  ? 1
                                  : o && o.isSplineCurve
                                  ? e * o.points.length
                                  : e,
                              s = o.getPoints(a),
                              l = 0;
                            l < s.length;
                            l++
                          ) {
                            var c = s[l]
                            ;(t && t.equals(c)) || (n.push(c), (t = c))
                          }
                        return (
                          this.autoClose &&
                            n.length > 1 &&
                            !n[n.length - 1].equals(n[0]) &&
                            n.push(n[0]),
                          n
                        )
                      },
                      copy: function (e) {
                        gh.prototype.copy.call(this, e), (this.curves = [])
                        for (var t = 0, n = e.curves.length; t < n; t++) {
                          var r = e.curves[t]
                          this.curves.push(r.clone())
                        }
                        return (this.autoClose = e.autoClose), this
                      },
                      toJSON: function () {
                        var e = gh.prototype.toJSON.call(this)
                        ;(e.autoClose = this.autoClose), (e.curves = [])
                        for (var t = 0, n = this.curves.length; t < n; t++) {
                          var r = this.curves[t]
                          e.curves.push(r.toJSON())
                        }
                        return e
                      },
                      fromJSON: function (e) {
                        gh.prototype.fromJSON.call(this, e),
                          (this.autoClose = e.autoClose),
                          (this.curves = [])
                        for (var t = 0, n = e.curves.length; t < n; t++) {
                          var r = e.curves[t]
                          this.curves.push(new jh[r.type]().fromJSON(r))
                        }
                        return this
                      },
                    })),
                      (Wh.prototype = Object.assign(Object.create(Vh.prototype), {
                        constructor: Wh,
                        setFromPoints: function (e) {
                          this.moveTo(e[0].x, e[0].y)
                          for (var t = 1, n = e.length; t < n; t++) this.lineTo(e[t].x, e[t].y)
                          return this
                        },
                        moveTo: function (e, t) {
                          return this.currentPoint.set(e, t), this
                        },
                        lineTo: function (e, t) {
                          var n = new Nh(this.currentPoint.clone(), new Jn(e, t))
                          return this.curves.push(n), this.currentPoint.set(e, t), this
                        },
                        quadraticCurveTo: function (e, t, n, r) {
                          var i = new Hh(this.currentPoint.clone(), new Jn(e, t), new Jn(n, r))
                          return this.curves.push(i), this.currentPoint.set(n, r), this
                        },
                        bezierCurveTo: function (e, t, n, r, i, o) {
                          var a = new Fh(
                            this.currentPoint.clone(),
                            new Jn(e, t),
                            new Jn(n, r),
                            new Jn(i, o),
                          )
                          return this.curves.push(a), this.currentPoint.set(i, o), this
                        },
                        splineThru: function (e) {
                          var t = new zh([this.currentPoint.clone()].concat(e))
                          return this.curves.push(t), this.currentPoint.copy(e[e.length - 1]), this
                        },
                        arc: function (e, t, n, r, i, o) {
                          var a = this.currentPoint.x,
                            s = this.currentPoint.y
                          return this.absarc(e + a, t + s, n, r, i, o), this
                        },
                        absarc: function (e, t, n, r, i, o) {
                          return this.absellipse(e, t, n, n, r, i, o), this
                        },
                        ellipse: function (e, t, n, r, i, o, a, s) {
                          var l = this.currentPoint.x,
                            c = this.currentPoint.y
                          return this.absellipse(e + l, t + c, n, r, i, o, a, s), this
                        },
                        absellipse: function (e, t, n, r, i, o, a, s) {
                          var l = new yh(e, t, n, r, i, o, a, s)
                          if (this.curves.length > 0) {
                            var c = l.getPoint(0)
                            c.equals(this.currentPoint) || this.lineTo(c.x, c.y)
                          }
                          this.curves.push(l)
                          var u = l.getPoint(1)
                          return this.currentPoint.copy(u), this
                        },
                        copy: function (e) {
                          return (
                            Vh.prototype.copy.call(this, e),
                            this.currentPoint.copy(e.currentPoint),
                            this
                          )
                        },
                        toJSON: function () {
                          var e = Vh.prototype.toJSON.call(this)
                          return (e.currentPoint = this.currentPoint.toArray()), e
                        },
                        fromJSON: function (e) {
                          return (
                            Vh.prototype.fromJSON.call(this, e),
                            this.currentPoint.fromArray(e.currentPoint),
                            this
                          )
                        },
                      })),
                      (qh.prototype = Object.assign(Object.create(Wh.prototype), {
                        constructor: qh,
                        getPointsHoles: function (e) {
                          for (var t = [], n = 0, r = this.holes.length; n < r; n++)
                            t[n] = this.holes[n].getPoints(e)
                          return t
                        },
                        extractPoints: function (e) {
                          return { shape: this.getPoints(e), holes: this.getPointsHoles(e) }
                        },
                        copy: function (e) {
                          Wh.prototype.copy.call(this, e), (this.holes = [])
                          for (var t = 0, n = e.holes.length; t < n; t++) {
                            var r = e.holes[t]
                            this.holes.push(r.clone())
                          }
                          return this
                        },
                        toJSON: function () {
                          var e = Wh.prototype.toJSON.call(this)
                          ;(e.uuid = this.uuid), (e.holes = [])
                          for (var t = 0, n = this.holes.length; t < n; t++) {
                            var r = this.holes[t]
                            e.holes.push(r.toJSON())
                          }
                          return e
                        },
                        fromJSON: function (e) {
                          Wh.prototype.fromJSON.call(this, e),
                            (this.uuid = e.uuid),
                            (this.holes = [])
                          for (var t = 0, n = e.holes.length; t < n; t++) {
                            var r = e.holes[t]
                            this.holes.push(new Wh().fromJSON(r))
                          }
                          return this
                        },
                      })),
                      (Xh.prototype = Object.assign(Object.create(si.prototype), {
                        constructor: Xh,
                        isLight: !0,
                        copy: function (e) {
                          return (
                            si.prototype.copy.call(this, e),
                            this.color.copy(e.color),
                            (this.intensity = e.intensity),
                            this
                          )
                        },
                        toJSON: function (e) {
                          var t = si.prototype.toJSON.call(this, e)
                          return (
                            (t.object.color = this.color.getHex()),
                            (t.object.intensity = this.intensity),
                            void 0 !== this.groundColor &&
                              (t.object.groundColor = this.groundColor.getHex()),
                            void 0 !== this.distance && (t.object.distance = this.distance),
                            void 0 !== this.angle && (t.object.angle = this.angle),
                            void 0 !== this.decay && (t.object.decay = this.decay),
                            void 0 !== this.penumbra && (t.object.penumbra = this.penumbra),
                            void 0 !== this.shadow && (t.object.shadow = this.shadow.toJSON()),
                            t
                          )
                        },
                      })),
                      (Yh.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: Yh,
                        isHemisphereLight: !0,
                        copy: function (e) {
                          return (
                            Xh.prototype.copy.call(this, e),
                            this.groundColor.copy(e.groundColor),
                            this
                          )
                        },
                      })),
                      Object.assign(Qh.prototype, {
                        _projScreenMatrix: new Fr(),
                        _lightPositionWorld: new lr(),
                        _lookTarget: new lr(),
                        getViewportCount: function () {
                          return this._viewportCount
                        },
                        getFrustum: function () {
                          return this._frustum
                        },
                        updateMatrices: function (e) {
                          var t = this.camera,
                            n = this.matrix,
                            r = this._projScreenMatrix,
                            i = this._lookTarget,
                            o = this._lightPositionWorld
                          o.setFromMatrixPosition(e.matrixWorld),
                            t.position.copy(o),
                            i.setFromMatrixPosition(e.target.matrixWorld),
                            t.lookAt(i),
                            t.updateMatrixWorld(),
                            r.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse),
                            this._frustum.setFromProjectionMatrix(r),
                            n.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1),
                            n.multiply(t.projectionMatrix),
                            n.multiply(t.matrixWorldInverse)
                        },
                        getViewport: function (e) {
                          return this._viewports[e]
                        },
                        getFrameExtents: function () {
                          return this._frameExtents
                        },
                        copy: function (e) {
                          return (
                            (this.camera = e.camera.clone()),
                            (this.bias = e.bias),
                            (this.radius = e.radius),
                            this.mapSize.copy(e.mapSize),
                            this
                          )
                        },
                        clone: function () {
                          return new this.constructor().copy(this)
                        },
                        toJSON: function () {
                          var e = {}
                          return (
                            0 !== this.bias && (e.bias = this.bias),
                            0 !== this.normalBias && (e.normalBias = this.normalBias),
                            1 !== this.radius && (e.radius = this.radius),
                            (512 === this.mapSize.x && 512 === this.mapSize.y) ||
                              (e.mapSize = this.mapSize.toArray()),
                            (e.camera = this.camera.toJSON(!1).object),
                            delete e.camera.matrix,
                            e
                          )
                        },
                      }),
                      (Zh.prototype = Object.assign(Object.create(Qh.prototype), {
                        constructor: Zh,
                        isSpotLightShadow: !0,
                        updateMatrices: function (e) {
                          var t = this.camera,
                            n = 2 * Kn.RAD2DEG * e.angle * this.focus,
                            r = this.mapSize.width / this.mapSize.height,
                            i = e.distance || t.far
                          ;(n === t.fov && r === t.aspect && i === t.far) ||
                            ((t.fov = n), (t.aspect = r), (t.far = i), t.updateProjectionMatrix()),
                            Qh.prototype.updateMatrices.call(this, e)
                        },
                      })),
                      (Kh.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: Kh,
                        isSpotLight: !0,
                        copy: function (e) {
                          return (
                            Xh.prototype.copy.call(this, e),
                            (this.distance = e.distance),
                            (this.angle = e.angle),
                            (this.penumbra = e.penumbra),
                            (this.decay = e.decay),
                            (this.target = e.target.clone()),
                            (this.shadow = e.shadow.clone()),
                            this
                          )
                        },
                      })),
                      (Jh.prototype = Object.assign(Object.create(Qh.prototype), {
                        constructor: Jh,
                        isPointLightShadow: !0,
                        updateMatrices: function (e, t) {
                          void 0 === t && (t = 0)
                          var n = this.camera,
                            r = this.matrix,
                            i = this._lightPositionWorld,
                            o = this._lookTarget,
                            a = this._projScreenMatrix
                          i.setFromMatrixPosition(e.matrixWorld),
                            n.position.copy(i),
                            o.copy(n.position),
                            o.add(this._cubeDirections[t]),
                            n.up.copy(this._cubeUps[t]),
                            n.lookAt(o),
                            n.updateMatrixWorld(),
                            r.makeTranslation(-i.x, -i.y, -i.z),
                            a.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse),
                            this._frustum.setFromProjectionMatrix(a)
                        },
                      })),
                      ($h.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: $h,
                        isPointLight: !0,
                        copy: function (e) {
                          return (
                            Xh.prototype.copy.call(this, e),
                            (this.distance = e.distance),
                            (this.decay = e.decay),
                            (this.shadow = e.shadow.clone()),
                            this
                          )
                        },
                      })),
                      (ed.prototype = Object.assign(Object.create(Do.prototype), {
                        constructor: ed,
                        isOrthographicCamera: !0,
                        copy: function (e, t) {
                          return (
                            Do.prototype.copy.call(this, e, t),
                            (this.left = e.left),
                            (this.right = e.right),
                            (this.top = e.top),
                            (this.bottom = e.bottom),
                            (this.near = e.near),
                            (this.far = e.far),
                            (this.zoom = e.zoom),
                            (this.view = null === e.view ? null : Object.assign({}, e.view)),
                            this
                          )
                        },
                        setViewOffset: function (e, t, n, r, i, o) {
                          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 = e),
                            (this.view.fullHeight = t),
                            (this.view.offsetX = n),
                            (this.view.offsetY = r),
                            (this.view.width = i),
                            (this.view.height = o),
                            this.updateProjectionMatrix()
                        },
                        clearViewOffset: function () {
                          null !== this.view && (this.view.enabled = !1),
                            this.updateProjectionMatrix()
                        },
                        updateProjectionMatrix: function () {
                          var e = (this.right - this.left) / (2 * this.zoom),
                            t = (this.top - this.bottom) / (2 * this.zoom),
                            n = (this.right + this.left) / 2,
                            r = (this.top + this.bottom) / 2,
                            i = n - e,
                            o = n + e,
                            a = r + t,
                            s = r - t
                          if (null !== this.view && this.view.enabled) {
                            var l = (this.right - this.left) / this.view.fullWidth / this.zoom,
                              c = (this.top - this.bottom) / this.view.fullHeight / this.zoom
                            ;(o = (i += l * this.view.offsetX) + l * this.view.width),
                              (s = (a -= c * this.view.offsetY) - c * this.view.height)
                          }
                          this.projectionMatrix.makeOrthographic(i, o, a, s, this.near, this.far),
                            this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
                        },
                        toJSON: function (e) {
                          var t = si.prototype.toJSON.call(this, e)
                          return (
                            (t.object.zoom = this.zoom),
                            (t.object.left = this.left),
                            (t.object.right = this.right),
                            (t.object.top = this.top),
                            (t.object.bottom = this.bottom),
                            (t.object.near = this.near),
                            (t.object.far = this.far),
                            null !== this.view && (t.object.view = Object.assign({}, this.view)),
                            t
                          )
                        },
                      })),
                      (td.prototype = Object.assign(Object.create(Qh.prototype), {
                        constructor: td,
                        isDirectionalLightShadow: !0,
                        updateMatrices: function (e) {
                          Qh.prototype.updateMatrices.call(this, e)
                        },
                      })),
                      (nd.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: nd,
                        isDirectionalLight: !0,
                        copy: function (e) {
                          return (
                            Xh.prototype.copy.call(this, e),
                            (this.target = e.target.clone()),
                            (this.shadow = e.shadow.clone()),
                            this
                          )
                        },
                      })),
                      (rd.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: rd,
                        isAmbientLight: !0,
                      })),
                      (id.prototype = Object.assign(Object.create(Xh.prototype), {
                        constructor: id,
                        isRectAreaLight: !0,
                        copy: function (e) {
                          return (
                            Xh.prototype.copy.call(this, e),
                            (this.width = e.width),
                            (this.height = e.height),
                            this
                          )
                        },
                        toJSON: function (e) {
                          var t = Xh.prototype.toJSON.call(this, e)
                          return (t.object.width = this.width), (t.object.height = this.height), t
                        },
                      }))
                    var od = (function () {
                      function e() {
                        Object.defineProperty(this, 'isSphericalHarmonics3', { value: !0 }),
                          (this.coefficients = [])
                        for (var e = 0; e < 9; e++) this.coefficients.push(new lr())
                      }
                      var t = e.prototype
                      return (
                        (t.set = function (e) {
                          for (var t = 0; t < 9; t++) this.coefficients[t].copy(e[t])
                          return this
                        }),
                        (t.zero = function () {
                          for (var e = 0; e < 9; e++) this.coefficients[e].set(0, 0, 0)
                          return this
                        }),
                        (t.getAt = function (e, t) {
                          var n = e.x,
                            r = e.y,
                            i = e.z,
                            o = this.coefficients
                          return (
                            t.copy(o[0]).multiplyScalar(0.282095),
                            t.addScaledVector(o[1], 0.488603 * r),
                            t.addScaledVector(o[2], 0.488603 * i),
                            t.addScaledVector(o[3], 0.488603 * n),
                            t.addScaledVector(o[4], n * r * 1.092548),
                            t.addScaledVector(o[5], r * i * 1.092548),
                            t.addScaledVector(o[6], 0.315392 * (3 * i * i - 1)),
                            t.addScaledVector(o[7], n * i * 1.092548),
                            t.addScaledVector(o[8], 0.546274 * (n * n - r * r)),
                            t
                          )
                        }),
                        (t.getIrradianceAt = function (e, t) {
                          var n = e.x,
                            r = e.y,
                            i = e.z,
                            o = this.coefficients
                          return (
                            t.copy(o[0]).multiplyScalar(0.886227),
                            t.addScaledVector(o[1], 1.023328 * r),
                            t.addScaledVector(o[2], 1.023328 * i),
                            t.addScaledVector(o[3], 1.023328 * n),
                            t.addScaledVector(o[4], 0.858086 * n * r),
                            t.addScaledVector(o[5], 0.858086 * r * i),
                            t.addScaledVector(o[6], 0.743125 * i * i - 0.247708),
                            t.addScaledVector(o[7], 0.858086 * n * i),
                            t.addScaledVector(o[8], 0.429043 * (n * n - r * r)),
                            t
                          )
                        }),
                        (t.add = function (e) {
                          for (var t = 0; t < 9; t++) this.coefficients[t].add(e.coefficients[t])
                          return this
                        }),
                        (t.addScaledSH = function (e, t) {
                          for (var n = 0; n < 9; n++)
                            this.coefficients[n].addScaledVector(e.coefficients[n], t)
                          return this
                        }),
                        (t.scale = function (e) {
                          for (var t = 0; t < 9; t++) this.coefficients[t].multiplyScalar(e)
                          return this
                        }),
                        (t.lerp = function (e, t) {
                          for (var n = 0; n < 9; n++)
                            this.coefficients[n].lerp(e.coefficients[n], t)
                          return this
                        }),
                        (t.equals = function (e) {
                          for (var t = 0; t < 9; t++)
                            if (!this.coefficients[t].equals(e.coefficients[t])) return !1
                          return !0
                        }),
                        (t.copy = function (e) {
                          return this.set(e.coefficients)
                        }),
                        (t.clone = function () {
                          return new this.constructor().copy(this)
                        }),
                        (t.fromArray = function (e, t) {
                          void 0 === t && (t = 0)
                          for (var n = this.coefficients, r = 0; r < 9; r++)
                            n[r].fromArray(e, t + 3 * r)
                          return this
                        }),
                        (t.toArray = function (e, t) {
                          void 0 === e && (e = []), void 0 === t && (t = 0)
                          for (var n = this.coefficients, r = 0; r < 9; r++)
                            n[r].toArray(e, t + 3 * r)
                          return e
                        }),
                        (e.getBasisAt = function (e, t) {
                          var n = e.x,
                            r = e.y,
                            i = e.z
                          ;(t[0] = 0.282095),
                            (t[1] = 0.488603 * r),
                            (t[2] = 0.488603 * i),
                            (t[3] = 0.488603 * n),
                            (t[4] = 1.092548 * n * r),
                            (t[5] = 1.092548 * r * i),
                            (t[6] = 0.315392 * (3 * i * i - 1)),
                            (t[7] = 1.092548 * n * i),
                            (t[8] = 0.546274 * (n * n - r * r))
                        }),
                        e
                      )
                    })()
                    function ad(e, t) {
                      Xh.call(this, void 0, t),
                        (this.type = 'LightProbe'),
                        (this.sh = void 0 !== e ? e : new od())
                    }
                    function sd(e) {
                      lh.call(this, e), (this.textures = {})
                    }
                    ;(ad.prototype = Object.assign(Object.create(Xh.prototype), {
                      constructor: ad,
                      isLightProbe: !0,
                      copy: function (e) {
                        return Xh.prototype.copy.call(this, e), this.sh.copy(e.sh), this
                      },
                      fromJSON: function (e) {
                        return (this.intensity = e.intensity), this.sh.fromArray(e.sh), this
                      },
                      toJSON: function (e) {
                        var t = Xh.prototype.toJSON.call(this, e)
                        return (t.object.sh = this.sh.toArray()), t
                      },
                    })),
                      (sd.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: sd,
                        load: function (t, n, r, i) {
                          var o = this,
                            a = new uh(o.manager)
                          a.setPath(o.path),
                            a.setRequestHeader(o.requestHeader),
                            a.setWithCredentials(o.withCredentials),
                            a.load(
                              t,
                              function (r) {
                                try {
                                  n(o.parse(JSON.parse(r)))
                                } catch (e) {
                                  i ? i(e) : console.error(e), o.manager.itemError(t)
                                }
                              },
                              r,
                              i,
                            )
                        },
                        parse: function (e) {
                          var t = this.textures
                          function n(e) {
                            return (
                              void 0 === t[e] &&
                                console.warn('THREE.MaterialLoader: Undefined texture', e),
                              t[e]
                            )
                          }
                          var r = new zu[e.type]()
                          if (
                            (void 0 !== e.uuid && (r.uuid = e.uuid),
                            void 0 !== e.name && (r.name = e.name),
                            void 0 !== e.color && void 0 !== r.color && r.color.setHex(e.color),
                            void 0 !== e.roughness && (r.roughness = e.roughness),
                            void 0 !== e.metalness && (r.metalness = e.metalness),
                            void 0 !== e.sheen && (r.sheen = new Li().setHex(e.sheen)),
                            void 0 !== e.emissive &&
                              void 0 !== r.emissive &&
                              r.emissive.setHex(e.emissive),
                            void 0 !== e.specular &&
                              void 0 !== r.specular &&
                              r.specular.setHex(e.specular),
                            void 0 !== e.shininess && (r.shininess = e.shininess),
                            void 0 !== e.clearcoat && (r.clearcoat = e.clearcoat),
                            void 0 !== e.clearcoatRoughness &&
                              (r.clearcoatRoughness = e.clearcoatRoughness),
                            void 0 !== e.fog && (r.fog = e.fog),
                            void 0 !== e.flatShading && (r.flatShading = e.flatShading),
                            void 0 !== e.blending && (r.blending = e.blending),
                            void 0 !== e.combine && (r.combine = e.combine),
                            void 0 !== e.side && (r.side = e.side),
                            void 0 !== e.opacity && (r.opacity = e.opacity),
                            void 0 !== e.transparent && (r.transparent = e.transparent),
                            void 0 !== e.alphaTest && (r.alphaTest = e.alphaTest),
                            void 0 !== e.depthTest && (r.depthTest = e.depthTest),
                            void 0 !== e.depthWrite && (r.depthWrite = e.depthWrite),
                            void 0 !== e.colorWrite && (r.colorWrite = e.colorWrite),
                            void 0 !== e.stencilWrite && (r.stencilWrite = e.stencilWrite),
                            void 0 !== e.stencilWriteMask &&
                              (r.stencilWriteMask = e.stencilWriteMask),
                            void 0 !== e.stencilFunc && (r.stencilFunc = e.stencilFunc),
                            void 0 !== e.stencilRef && (r.stencilRef = e.stencilRef),
                            void 0 !== e.stencilFuncMask && (r.stencilFuncMask = e.stencilFuncMask),
                            void 0 !== e.stencilFail && (r.stencilFail = e.stencilFail),
                            void 0 !== e.stencilZFail && (r.stencilZFail = e.stencilZFail),
                            void 0 !== e.stencilZPass && (r.stencilZPass = e.stencilZPass),
                            void 0 !== e.wireframe && (r.wireframe = e.wireframe),
                            void 0 !== e.wireframeLinewidth &&
                              (r.wireframeLinewidth = e.wireframeLinewidth),
                            void 0 !== e.wireframeLinecap &&
                              (r.wireframeLinecap = e.wireframeLinecap),
                            void 0 !== e.wireframeLinejoin &&
                              (r.wireframeLinejoin = e.wireframeLinejoin),
                            void 0 !== e.rotation && (r.rotation = e.rotation),
                            1 !== e.linewidth && (r.linewidth = e.linewidth),
                            void 0 !== e.dashSize && (r.dashSize = e.dashSize),
                            void 0 !== e.gapSize && (r.gapSize = e.gapSize),
                            void 0 !== e.scale && (r.scale = e.scale),
                            void 0 !== e.polygonOffset && (r.polygonOffset = e.polygonOffset),
                            void 0 !== e.polygonOffsetFactor &&
                              (r.polygonOffsetFactor = e.polygonOffsetFactor),
                            void 0 !== e.polygonOffsetUnits &&
                              (r.polygonOffsetUnits = e.polygonOffsetUnits),
                            void 0 !== e.skinning && (r.skinning = e.skinning),
                            void 0 !== e.morphTargets && (r.morphTargets = e.morphTargets),
                            void 0 !== e.morphNormals && (r.morphNormals = e.morphNormals),
                            void 0 !== e.dithering && (r.dithering = e.dithering),
                            void 0 !== e.vertexTangents && (r.vertexTangents = e.vertexTangents),
                            void 0 !== e.visible && (r.visible = e.visible),
                            void 0 !== e.toneMapped && (r.toneMapped = e.toneMapped),
                            void 0 !== e.userData && (r.userData = e.userData),
                            void 0 !== e.vertexColors &&
                              ('number' === typeof e.vertexColors
                                ? (r.vertexColors = e.vertexColors > 0)
                                : (r.vertexColors = e.vertexColors)),
                            void 0 !== e.uniforms)
                          )
                            for (var i in e.uniforms) {
                              var o = e.uniforms[i]
                              switch (((r.uniforms[i] = {}), o.type)) {
                                case 't':
                                  r.uniforms[i].value = n(o.value)
                                  break
                                case 'c':
                                  r.uniforms[i].value = new Li().setHex(o.value)
                                  break
                                case 'v2':
                                  r.uniforms[i].value = new Jn().fromArray(o.value)
                                  break
                                case 'v3':
                                  r.uniforms[i].value = new lr().fromArray(o.value)
                                  break
                                case 'v4':
                                  r.uniforms[i].value = new ir().fromArray(o.value)
                                  break
                                case 'm3':
                                  r.uniforms[i].value = new $n().fromArray(o.value)
                                  break
                                case 'm4':
                                  r.uniforms[i].value = new Fr().fromArray(o.value)
                                  break
                                default:
                                  r.uniforms[i].value = o.value
                              }
                            }
                          if (
                            (void 0 !== e.defines && (r.defines = e.defines),
                            void 0 !== e.vertexShader && (r.vertexShader = e.vertexShader),
                            void 0 !== e.fragmentShader && (r.fragmentShader = e.fragmentShader),
                            void 0 !== e.extensions)
                          )
                            for (var a in e.extensions) r.extensions[a] = e.extensions[a]
                          if (
                            (void 0 !== e.shading && (r.flatShading = 1 === e.shading),
                            void 0 !== e.size && (r.size = e.size),
                            void 0 !== e.sizeAttenuation && (r.sizeAttenuation = e.sizeAttenuation),
                            void 0 !== e.map && (r.map = n(e.map)),
                            void 0 !== e.matcap && (r.matcap = n(e.matcap)),
                            void 0 !== e.alphaMap && (r.alphaMap = n(e.alphaMap)),
                            void 0 !== e.bumpMap && (r.bumpMap = n(e.bumpMap)),
                            void 0 !== e.bumpScale && (r.bumpScale = e.bumpScale),
                            void 0 !== e.normalMap && (r.normalMap = n(e.normalMap)),
                            void 0 !== e.normalMapType && (r.normalMapType = e.normalMapType),
                            void 0 !== e.normalScale)
                          ) {
                            var s = e.normalScale
                            !1 === Array.isArray(s) && (s = [s, s]),
                              (r.normalScale = new Jn().fromArray(s))
                          }
                          return (
                            void 0 !== e.displacementMap &&
                              (r.displacementMap = n(e.displacementMap)),
                            void 0 !== e.displacementScale &&
                              (r.displacementScale = e.displacementScale),
                            void 0 !== e.displacementBias &&
                              (r.displacementBias = e.displacementBias),
                            void 0 !== e.roughnessMap && (r.roughnessMap = n(e.roughnessMap)),
                            void 0 !== e.metalnessMap && (r.metalnessMap = n(e.metalnessMap)),
                            void 0 !== e.emissiveMap && (r.emissiveMap = n(e.emissiveMap)),
                            void 0 !== e.emissiveIntensity &&
                              (r.emissiveIntensity = e.emissiveIntensity),
                            void 0 !== e.specularMap && (r.specularMap = n(e.specularMap)),
                            void 0 !== e.envMap && (r.envMap = n(e.envMap)),
                            void 0 !== e.envMapIntensity && (r.envMapIntensity = e.envMapIntensity),
                            void 0 !== e.reflectivity && (r.reflectivity = e.reflectivity),
                            void 0 !== e.refractionRatio && (r.refractionRatio = e.refractionRatio),
                            void 0 !== e.lightMap && (r.lightMap = n(e.lightMap)),
                            void 0 !== e.lightMapIntensity &&
                              (r.lightMapIntensity = e.lightMapIntensity),
                            void 0 !== e.aoMap && (r.aoMap = n(e.aoMap)),
                            void 0 !== e.aoMapIntensity && (r.aoMapIntensity = e.aoMapIntensity),
                            void 0 !== e.gradientMap && (r.gradientMap = n(e.gradientMap)),
                            void 0 !== e.clearcoatMap && (r.clearcoatMap = n(e.clearcoatMap)),
                            void 0 !== e.clearcoatRoughnessMap &&
                              (r.clearcoatRoughnessMap = n(e.clearcoatRoughnessMap)),
                            void 0 !== e.clearcoatNormalMap &&
                              (r.clearcoatNormalMap = n(e.clearcoatNormalMap)),
                            void 0 !== e.clearcoatNormalScale &&
                              (r.clearcoatNormalScale = new Jn().fromArray(e.clearcoatNormalScale)),
                            void 0 !== e.transmission && (r.transmission = e.transmission),
                            void 0 !== e.transmissionMap &&
                              (r.transmissionMap = n(e.transmissionMap)),
                            r
                          )
                        },
                        setTextures: function (e) {
                          return (this.textures = e), this
                        },
                      }))
                    var ld = {
                      decodeText: function (t) {
                        if ('undefined' !== typeof TextDecoder) return new TextDecoder().decode(t)
                        for (var n = '', r = 0, i = t.length; r < i; r++)
                          n += String.fromCharCode(t[r])
                        try {
                          return decodeURIComponent(escape(n))
                        } catch (e) {
                          return n
                        }
                      },
                      extractUrlBase: function (e) {
                        var t = e.lastIndexOf('/')
                        return -1 === t ? './' : e.substr(0, t + 1)
                      },
                    }
                    function cd() {
                      ro.call(this),
                        (this.type = 'InstancedBufferGeometry'),
                        (this.instanceCount = 1 / 0)
                    }
                    function ud(e, t, n, r) {
                      'number' === typeof n &&
                        ((r = n),
                        (n = !1),
                        console.error(
                          'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.',
                        )),
                        Fi.call(this, e, t, n),
                        (this.meshPerAttribute = r || 1)
                    }
                    function hd(e) {
                      lh.call(this, e)
                    }
                    ;(cd.prototype = Object.assign(Object.create(ro.prototype), {
                      constructor: cd,
                      isInstancedBufferGeometry: !0,
                      copy: function (e) {
                        return (
                          ro.prototype.copy.call(this, e),
                          (this.instanceCount = e.instanceCount),
                          this
                        )
                      },
                      clone: function () {
                        return new this.constructor().copy(this)
                      },
                      toJSON: function () {
                        var e = ro.prototype.toJSON.call(this)
                        return (
                          (e.instanceCount = this.instanceCount),
                          (e.isInstancedBufferGeometry = !0),
                          e
                        )
                      },
                    })),
                      (ud.prototype = Object.assign(Object.create(Fi.prototype), {
                        constructor: ud,
                        isInstancedBufferAttribute: !0,
                        copy: function (e) {
                          return (
                            Fi.prototype.copy.call(this, e),
                            (this.meshPerAttribute = e.meshPerAttribute),
                            this
                          )
                        },
                        toJSON: function () {
                          var e = Fi.prototype.toJSON.call(this)
                          return (
                            (e.meshPerAttribute = this.meshPerAttribute),
                            (e.isInstancedBufferAttribute = !0),
                            e
                          )
                        },
                      })),
                      (hd.prototype = Object.assign(Object.create(lh.prototype), {
                        constructor: hd,
                        load: function (t, n, r, i) {
                          var o = this,
                            a = new uh(o.manager)
                          a.setPath(o.path),
                            a.setRequestHeader(o.requestHeader),
                            a.setWithCredentials(o.withCredentials),
                            a.load(
                              t,
                              function (r) {
                                try {
                                  n(o.parse(JSON.parse(r)))
                                } catch (e) {
                                  i ? i(e) : console.error(e), o.manager.itemError(t)
                                }
                              },
                              r,
                              i,
                            )
                        },
                        parse: function (e) {
                          var t = {},
                            n = {}
                          function r(e, n) {
                            if (void 0 !== t[n]) return t[n]
                            var r = e.interleavedBuffers[n],
                              o = i(e, r.buffer),
                              a = new yl(Qi(r.type, o), r.stride)
                            return (a.uuid = r.uuid), (t[n] = a), a
                          }
                          function i(e, t) {
                            if (void 0 !== n[t]) return n[t]
                            var r = e.arrayBuffers[t],
                              i = new Uint32Array(r).buffer
                            return (n[t] = i), i
                          }
                          var o = e.isInstancedBufferGeometry ? new cd() : new ro(),
                            a = e.data.index
                          if (void 0 !== a) {
                            var s = Qi(a.type, a.array)
                            o.setIndex(new Fi(s, 1))
                          }
                          var l = e.data.attributes
                          for (var c in l) {
                            var u = l[c],
                              h = void 0
                            if (u.isInterleavedBufferAttribute)
                              h = new wl(r(e.data, u.data), u.itemSize, u.offset, u.normalized)
                            else {
                              var d = Qi(u.type, u.array)
                              h = new (u.isInstancedBufferAttribute ? ud : Fi)(
                                d,
                                u.itemSize,
                                u.normalized,
                              )
                            }
                            void 0 !== u.name && (h.name = u.name), o.setAttribute(c, h)
                          }
                          var p = e.data.morphAttributes
                          if (p)
                            for (var f in p) {
                              for (var m = p[f], v = [], g = 0, y = m.length; g < y; g++) {
                                var b = m[g],
                                  A = void 0
                                ;(A = b.isInterleavedBufferAttribute
                                  ? new wl(r(e.data, b.data), b.itemSize, b.offset, b.normalized)
                                  : new Fi(Qi(b.type, b.array), b.itemSize, b.normalized)),
                                  void 0 !== b.name && (A.name = b.name),
                                  v.push(A)
                              }
                              o.morphAttributes[f] = v
                            }
                          e.data.morphTargetsRelative && (o.morphTargetsRelative = !0)
                          var w = e.data.groups || e.data.drawcalls || e.data.offsets
                          if (void 0 !== w)
                            for (var x = 0, E = w.length; x !== E; ++x) {
                              var M = w[x]
                              o.addGroup(M.start, M.count, M.materialIndex)
                            }
                          var _ = e.data.boundingSphere
                          if (void 0 !== _) {
                            var T = new lr()
                            void 0 !== _.center && T.fromArray(_.center),
                              (o.boundingSphere = new Sr(T, _.radius))
                          }
                          return (
                            e.name && (o.name = e.name), e.userData && (o.userData = e.userData), o
                          )
                        },
                      }))
                    var dd = (function (e) {
                        function t(t) {
                          return e.call(this, t) || this
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.load = function (e, t, n, r) {
                            var i = this,
                              o = '' === this.path ? ld.extractUrlBase(e) : this.path
                            this.resourcePath = this.resourcePath || o
                            var a = new uh(this.manager)
                            a.setPath(this.path),
                              a.setRequestHeader(this.requestHeader),
                              a.setWithCredentials(this.withCredentials),
                              a.load(
                                e,
                                function (n) {
                                  var o = null
                                  try {
                                    o = JSON.parse(n)
                                  } catch (s) {
                                    return (
                                      void 0 !== r && r(s),
                                      void console.error(
                                        "THREE:ObjectLoader: Can't parse " + e + '.',
                                        s.message,
                                      )
                                    )
                                  }
                                  var a = o.metadata
                                  void 0 !== a &&
                                  void 0 !== a.type &&
                                  'geometry' !== a.type.toLowerCase()
                                    ? i.parse(o, t)
                                    : console.error("THREE.ObjectLoader: Can't load " + e)
                                },
                                n,
                                r,
                              )
                          }),
                          (n.parse = function (e, t) {
                            var n = this.parseAnimations(e.animations),
                              r = this.parseShapes(e.shapes),
                              i = this.parseGeometries(e.geometries, r),
                              o = this.parseImages(e.images, function () {
                                void 0 !== t && t(l)
                              }),
                              a = this.parseTextures(e.textures, o),
                              s = this.parseMaterials(e.materials, a),
                              l = this.parseObject(e.object, i, s, n),
                              c = this.parseSkeletons(e.skeletons, l)
                            if ((this.bindSkeletons(l, c), void 0 !== t)) {
                              var u = !1
                              for (var h in o)
                                if (o[h] instanceof HTMLImageElement) {
                                  u = !0
                                  break
                                }
                              !1 === u && t(l)
                            }
                            return l
                          }),
                          (n.parseShapes = function (e) {
                            var t = {}
                            if (void 0 !== e)
                              for (var n = 0, r = e.length; n < r; n++) {
                                var i = new qh().fromJSON(e[n])
                                t[i.uuid] = i
                              }
                            return t
                          }),
                          (n.parseSkeletons = function (e, t) {
                            var n = {},
                              r = {}
                            if (
                              (t.traverse(function (e) {
                                e.isBone && (r[e.uuid] = e)
                              }),
                              void 0 !== e)
                            )
                              for (var i = 0, o = e.length; i < o; i++) {
                                var a = new Ql().fromJSON(e[i], r)
                                n[a.uuid] = a
                              }
                            return n
                          }),
                          (n.parseGeometries = function (e, t) {
                            var n,
                              r = {}
                            if (void 0 !== e)
                              for (var i = new hd(), o = 0, a = e.length; o < a; o++) {
                                var s = void 0,
                                  l = e[o]
                                switch (l.type) {
                                  case 'PlaneGeometry':
                                  case 'PlaneBufferGeometry':
                                    s = new Pu[l.type](
                                      l.width,
                                      l.height,
                                      l.widthSegments,
                                      l.heightSegments,
                                    )
                                    break
                                  case 'BoxGeometry':
                                  case 'BoxBufferGeometry':
                                    s = new Pu[l.type](
                                      l.width,
                                      l.height,
                                      l.depth,
                                      l.widthSegments,
                                      l.heightSegments,
                                      l.depthSegments,
                                    )
                                    break
                                  case 'CircleGeometry':
                                  case 'CircleBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radius,
                                      l.segments,
                                      l.thetaStart,
                                      l.thetaLength,
                                    )
                                    break
                                  case 'CylinderGeometry':
                                  case 'CylinderBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radiusTop,
                                      l.radiusBottom,
                                      l.height,
                                      l.radialSegments,
                                      l.heightSegments,
                                      l.openEnded,
                                      l.thetaStart,
                                      l.thetaLength,
                                    )
                                    break
                                  case 'ConeGeometry':
                                  case 'ConeBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radius,
                                      l.height,
                                      l.radialSegments,
                                      l.heightSegments,
                                      l.openEnded,
                                      l.thetaStart,
                                      l.thetaLength,
                                    )
                                    break
                                  case 'SphereGeometry':
                                  case 'SphereBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radius,
                                      l.widthSegments,
                                      l.heightSegments,
                                      l.phiStart,
                                      l.phiLength,
                                      l.thetaStart,
                                      l.thetaLength,
                                    )
                                    break
                                  case 'DodecahedronGeometry':
                                  case 'DodecahedronBufferGeometry':
                                  case 'IcosahedronGeometry':
                                  case 'IcosahedronBufferGeometry':
                                  case 'OctahedronGeometry':
                                  case 'OctahedronBufferGeometry':
                                  case 'TetrahedronGeometry':
                                  case 'TetrahedronBufferGeometry':
                                    s = new Pu[l.type](l.radius, l.detail)
                                    break
                                  case 'RingGeometry':
                                  case 'RingBufferGeometry':
                                    s = new Pu[l.type](
                                      l.innerRadius,
                                      l.outerRadius,
                                      l.thetaSegments,
                                      l.phiSegments,
                                      l.thetaStart,
                                      l.thetaLength,
                                    )
                                    break
                                  case 'TorusGeometry':
                                  case 'TorusBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radius,
                                      l.tube,
                                      l.radialSegments,
                                      l.tubularSegments,
                                      l.arc,
                                    )
                                    break
                                  case 'TorusKnotGeometry':
                                  case 'TorusKnotBufferGeometry':
                                    s = new Pu[l.type](
                                      l.radius,
                                      l.tube,
                                      l.tubularSegments,
                                      l.radialSegments,
                                      l.p,
                                      l.q,
                                    )
                                    break
                                  case 'TubeGeometry':
                                  case 'TubeBufferGeometry':
                                    s = new Pu[l.type](
                                      new jh[l.path.type]().fromJSON(l.path),
                                      l.tubularSegments,
                                      l.radius,
                                      l.radialSegments,
                                      l.closed,
                                    )
                                    break
                                  case 'LatheGeometry':
                                  case 'LatheBufferGeometry':
                                    s = new Pu[l.type](
                                      l.points,
                                      l.segments,
                                      l.phiStart,
                                      l.phiLength,
                                    )
                                    break
                                  case 'PolyhedronGeometry':
                                  case 'PolyhedronBufferGeometry':
                                    s = new Pu[l.type](l.vertices, l.indices, l.radius, l.details)
                                    break
                                  case 'ShapeGeometry':
                                  case 'ShapeBufferGeometry':
                                    n = []
                                    for (var c = 0, u = l.shapes.length; c < u; c++) {
                                      var h = t[l.shapes[c]]
                                      n.push(h)
                                    }
                                    s = new Pu[l.type](n, l.curveSegments)
                                    break
                                  case 'ExtrudeGeometry':
                                  case 'ExtrudeBufferGeometry':
                                    n = []
                                    for (var d = 0, p = l.shapes.length; d < p; d++) {
                                      var f = t[l.shapes[d]]
                                      n.push(f)
                                    }
                                    var m = l.options.extrudePath
                                    void 0 !== m &&
                                      (l.options.extrudePath = new jh[m.type]().fromJSON(m)),
                                      (s = new Pu[l.type](n, l.options))
                                    break
                                  case 'BufferGeometry':
                                  case 'InstancedBufferGeometry':
                                    s = i.parse(l)
                                    break
                                  case 'Geometry':
                                    'THREE' in window && 'LegacyJSONLoader' in THREE
                                      ? (s = new THREE.LegacyJSONLoader().parse(
                                          l,
                                          this.resourcePath,
                                        ).geometry)
                                      : console.error(
                                          'THREE.ObjectLoader: You have to import LegacyJSONLoader in order load geometry data of type "Geometry".',
                                        )
                                    break
                                  default:
                                    console.warn(
                                      'THREE.ObjectLoader: Unsupported geometry type "' +
                                        l.type +
                                        '"',
                                    )
                                    continue
                                }
                                ;(s.uuid = l.uuid),
                                  void 0 !== l.name && (s.name = l.name),
                                  !0 === s.isBufferGeometry &&
                                    void 0 !== l.userData &&
                                    (s.userData = l.userData),
                                  (r[l.uuid] = s)
                              }
                            return r
                          }),
                          (n.parseMaterials = function (e, t) {
                            var n = {},
                              r = {}
                            if (void 0 !== e) {
                              var i = new sd()
                              i.setTextures(t)
                              for (var o = 0, a = e.length; o < a; o++) {
                                var s = e[o]
                                if ('MultiMaterial' === s.type) {
                                  for (var l = [], c = 0; c < s.materials.length; c++) {
                                    var u = s.materials[c]
                                    void 0 === n[u.uuid] && (n[u.uuid] = i.parse(u)),
                                      l.push(n[u.uuid])
                                  }
                                  r[s.uuid] = l
                                } else
                                  void 0 === n[s.uuid] && (n[s.uuid] = i.parse(s)),
                                    (r[s.uuid] = n[s.uuid])
                              }
                            }
                            return r
                          }),
                          (n.parseAnimations = function (e) {
                            var t = {}
                            if (void 0 !== e)
                              for (var n = 0; n < e.length; n++) {
                                var r = e[n],
                                  i = nh.parse(r)
                                t[i.uuid] = i
                              }
                            return t
                          }),
                          (n.parseImages = function (e, t) {
                            var n,
                              r = this,
                              i = {}
                            function o(e) {
                              return (
                                r.manager.itemStart(e),
                                n.load(
                                  e,
                                  function () {
                                    r.manager.itemEnd(e)
                                  },
                                  void 0,
                                  function () {
                                    r.manager.itemError(e), r.manager.itemEnd(e)
                                  },
                                )
                              )
                            }
                            function a(e) {
                              if ('string' === typeof e) {
                                var t = e
                                return o(
                                  /^(\/\/)|([a-z]+:(\/\/)?)/i.test(t) ? t : r.resourcePath + t,
                                )
                              }
                              return e.data
                                ? { data: Qi(e.type, e.data), width: e.width, height: e.height }
                                : null
                            }
                            if (void 0 !== e && e.length > 0) {
                              var s = new ah(t)
                              ;(n = new ph(s)).setCrossOrigin(this.crossOrigin)
                              for (var l = 0, c = e.length; l < c; l++) {
                                var u = e[l],
                                  h = u.url
                                if (Array.isArray(h)) {
                                  i[u.uuid] = []
                                  for (var d = 0, p = h.length; d < p; d++) {
                                    var f = a(h[d])
                                    null !== f &&
                                      (f instanceof HTMLImageElement
                                        ? i[u.uuid].push(f)
                                        : i[u.uuid].push(new Uo(f.data, f.width, f.height)))
                                  }
                                } else {
                                  var m = a(u.url)
                                  null !== m && (i[u.uuid] = m)
                                }
                              }
                            }
                            return i
                          }),
                          (n.parseTextures = function (e, t) {
                            function n(e, t) {
                              return 'number' === typeof e
                                ? e
                                : (console.warn(
                                    'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.',
                                    e,
                                  ),
                                  t[e])
                            }
                            var r = {}
                            if (void 0 !== e)
                              for (var i = 0, o = e.length; i < o; i++) {
                                var a = e[i]
                                void 0 === a.image &&
                                  console.warn(
                                    'THREE.ObjectLoader: No "image" specified for',
                                    a.uuid,
                                  ),
                                  void 0 === t[a.image] &&
                                    console.warn('THREE.ObjectLoader: Undefined image', a.image)
                                var s = void 0,
                                  l = t[a.image]
                                Array.isArray(l)
                                  ? ((s = new ko(l)), 6 === l.length && (s.needsUpdate = !0))
                                  : ((s =
                                      l && l.data ? new Uo(l.data, l.width, l.height) : new nr(l)),
                                    l && (s.needsUpdate = !0)),
                                  (s.uuid = a.uuid),
                                  void 0 !== a.name && (s.name = a.name),
                                  void 0 !== a.mapping && (s.mapping = n(a.mapping, pd)),
                                  void 0 !== a.offset && s.offset.fromArray(a.offset),
                                  void 0 !== a.repeat && s.repeat.fromArray(a.repeat),
                                  void 0 !== a.center && s.center.fromArray(a.center),
                                  void 0 !== a.rotation && (s.rotation = a.rotation),
                                  void 0 !== a.wrap &&
                                    ((s.wrapS = n(a.wrap[0], fd)), (s.wrapT = n(a.wrap[1], fd))),
                                  void 0 !== a.format && (s.format = a.format),
                                  void 0 !== a.type && (s.type = a.type),
                                  void 0 !== a.encoding && (s.encoding = a.encoding),
                                  void 0 !== a.minFilter && (s.minFilter = n(a.minFilter, md)),
                                  void 0 !== a.magFilter && (s.magFilter = n(a.magFilter, md)),
                                  void 0 !== a.anisotropy && (s.anisotropy = a.anisotropy),
                                  void 0 !== a.flipY && (s.flipY = a.flipY),
                                  void 0 !== a.premultiplyAlpha &&
                                    (s.premultiplyAlpha = a.premultiplyAlpha),
                                  void 0 !== a.unpackAlignment &&
                                    (s.unpackAlignment = a.unpackAlignment),
                                  (r[a.uuid] = s)
                              }
                            return r
                          }),
                          (n.parseObject = function (e, t, n, r) {
                            var i, o, a
                            function s(e) {
                              return (
                                void 0 === t[e] &&
                                  console.warn('THREE.ObjectLoader: Undefined geometry', e),
                                t[e]
                              )
                            }
                            function l(e) {
                              if (void 0 !== e) {
                                if (Array.isArray(e)) {
                                  for (var t = [], r = 0, i = e.length; r < i; r++) {
                                    var o = e[r]
                                    void 0 === n[o] &&
                                      console.warn('THREE.ObjectLoader: Undefined material', o),
                                      t.push(n[o])
                                  }
                                  return t
                                }
                                return (
                                  void 0 === n[e] &&
                                    console.warn('THREE.ObjectLoader: Undefined material', e),
                                  n[e]
                                )
                              }
                            }
                            switch (e.type) {
                              case 'Scene':
                                ;(i = new gl()),
                                  void 0 !== e.background &&
                                    Number.isInteger(e.background) &&
                                    (i.background = new Li(e.background)),
                                  void 0 !== e.fog &&
                                    ('Fog' === e.fog.type
                                      ? (i.fog = new vl(e.fog.color, e.fog.near, e.fog.far))
                                      : 'FogExp2' === e.fog.type &&
                                        (i.fog = new ml(e.fog.color, e.fog.density)))
                                break
                              case 'PerspectiveCamera':
                                ;(i = new Oo(e.fov, e.aspect, e.near, e.far)),
                                  void 0 !== e.focus && (i.focus = e.focus),
                                  void 0 !== e.zoom && (i.zoom = e.zoom),
                                  void 0 !== e.filmGauge && (i.filmGauge = e.filmGauge),
                                  void 0 !== e.filmOffset && (i.filmOffset = e.filmOffset),
                                  void 0 !== e.view && (i.view = Object.assign({}, e.view))
                                break
                              case 'OrthographicCamera':
                                ;(i = new ed(e.left, e.right, e.top, e.bottom, e.near, e.far)),
                                  void 0 !== e.zoom && (i.zoom = e.zoom),
                                  void 0 !== e.view && (i.view = Object.assign({}, e.view))
                                break
                              case 'AmbientLight':
                                i = new rd(e.color, e.intensity)
                                break
                              case 'DirectionalLight':
                                i = new nd(e.color, e.intensity)
                                break
                              case 'PointLight':
                                i = new $h(e.color, e.intensity, e.distance, e.decay)
                                break
                              case 'RectAreaLight':
                                i = new id(e.color, e.intensity, e.width, e.height)
                                break
                              case 'SpotLight':
                                i = new Kh(
                                  e.color,
                                  e.intensity,
                                  e.distance,
                                  e.angle,
                                  e.penumbra,
                                  e.decay,
                                )
                                break
                              case 'HemisphereLight':
                                i = new Yh(e.color, e.groundColor, e.intensity)
                                break
                              case 'LightProbe':
                                i = new ad().fromJSON(e)
                                break
                              case 'SkinnedMesh':
                                ;(i = new Wl((o = s(e.geometry)), (a = l(e.material)))),
                                  void 0 !== e.bindMode && (i.bindMode = e.bindMode),
                                  void 0 !== e.bindMatrix && i.bindMatrix.fromArray(e.bindMatrix),
                                  void 0 !== e.skeleton && (i.skeleton = e.skeleton)
                                break
                              case 'Mesh':
                                i = new xo((o = s(e.geometry)), (a = l(e.material)))
                                break
                              case 'InstancedMesh':
                                ;(o = s(e.geometry)), (a = l(e.material))
                                var c = e.count,
                                  u = e.instanceMatrix
                                ;(i = new ec(o, a, c)).instanceMatrix = new Fi(
                                  new Float32Array(u.array),
                                  16,
                                )
                                break
                              case 'LOD':
                                i = new Ul()
                                break
                              case 'Line':
                                i = new sc(s(e.geometry), l(e.material))
                                break
                              case 'LineLoop':
                                i = new hc(s(e.geometry), l(e.material))
                                break
                              case 'LineSegments':
                                i = new uc(s(e.geometry), l(e.material))
                                break
                              case 'PointCloud':
                              case 'Points':
                                i = new gc(s(e.geometry), l(e.material))
                                break
                              case 'Sprite':
                                i = new Bl(l(e.material))
                                break
                              case 'Group':
                                i = new rl()
                                break
                              case 'Bone':
                                i = new ql()
                                break
                              default:
                                i = new si()
                            }
                            if (
                              ((i.uuid = e.uuid),
                              void 0 !== e.name && (i.name = e.name),
                              void 0 !== e.matrix
                                ? (i.matrix.fromArray(e.matrix),
                                  void 0 !== e.matrixAutoUpdate &&
                                    (i.matrixAutoUpdate = e.matrixAutoUpdate),
                                  i.matrixAutoUpdate &&
                                    i.matrix.decompose(i.position, i.quaternion, i.scale))
                                : (void 0 !== e.position && i.position.fromArray(e.position),
                                  void 0 !== e.rotation && i.rotation.fromArray(e.rotation),
                                  void 0 !== e.quaternion && i.quaternion.fromArray(e.quaternion),
                                  void 0 !== e.scale && i.scale.fromArray(e.scale)),
                              void 0 !== e.castShadow && (i.castShadow = e.castShadow),
                              void 0 !== e.receiveShadow && (i.receiveShadow = e.receiveShadow),
                              e.shadow &&
                                (void 0 !== e.shadow.bias && (i.shadow.bias = e.shadow.bias),
                                void 0 !== e.shadow.normalBias &&
                                  (i.shadow.normalBias = e.shadow.normalBias),
                                void 0 !== e.shadow.radius && (i.shadow.radius = e.shadow.radius),
                                void 0 !== e.shadow.mapSize &&
                                  i.shadow.mapSize.fromArray(e.shadow.mapSize),
                                void 0 !== e.shadow.camera &&
                                  (i.shadow.camera = this.parseObject(e.shadow.camera))),
                              void 0 !== e.visible && (i.visible = e.visible),
                              void 0 !== e.frustumCulled && (i.frustumCulled = e.frustumCulled),
                              void 0 !== e.renderOrder && (i.renderOrder = e.renderOrder),
                              void 0 !== e.userData && (i.userData = e.userData),
                              void 0 !== e.layers && (i.layers.mask = e.layers),
                              void 0 !== e.children)
                            )
                              for (var h = e.children, d = 0; d < h.length; d++)
                                i.add(this.parseObject(h[d], t, n, r))
                            if (void 0 !== e.animations)
                              for (var p = e.animations, f = 0; f < p.length; f++) {
                                var m = p[f]
                                i.animations.push(r[m])
                              }
                            if ('LOD' === e.type) {
                              void 0 !== e.autoUpdate && (i.autoUpdate = e.autoUpdate)
                              for (var v = e.levels, g = 0; g < v.length; g++) {
                                var y = v[g],
                                  b = i.getObjectByProperty('uuid', y.object)
                                void 0 !== b && i.addLevel(b, y.distance)
                              }
                            }
                            return i
                          }),
                          (n.bindSkeletons = function (e, t) {
                            0 !== Object.keys(t).length &&
                              e.traverse(function (e) {
                                if (!0 === e.isSkinnedMesh && void 0 !== e.skeleton) {
                                  var n = t[e.skeleton]
                                  void 0 === n
                                    ? console.warn(
                                        'THREE.ObjectLoader: No skeleton found with UUID:',
                                        e.skeleton,
                                      )
                                    : e.bind(n, e.bindMatrix)
                                }
                              })
                          }),
                          (n.setTexturePath = function (e) {
                            return (
                              console.warn(
                                'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().',
                              ),
                              this.setResourcePath(e)
                            )
                          }),
                          t
                        )
                      })(lh),
                      pd = {
                        UVMapping: oe,
                        CubeReflectionMapping: ae,
                        CubeRefractionMapping: se,
                        EquirectangularReflectionMapping: le,
                        EquirectangularRefractionMapping: ce,
                        CubeUVReflectionMapping: ue,
                        CubeUVRefractionMapping: he,
                      },
                      fd = {
                        RepeatWrapping: de,
                        ClampToEdgeWrapping: pe,
                        MirroredRepeatWrapping: fe,
                      },
                      md = {
                        NearestFilter: me,
                        NearestMipmapNearestFilter: ve,
                        NearestMipmapLinearFilter: ye,
                        LinearFilter: Ae,
                        LinearMipmapNearestFilter: we,
                        LinearMipmapLinearFilter: Ee,
                      }
                    function vd(e) {
                      'undefined' === typeof createImageBitmap &&
                        console.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.'),
                        'undefined' === typeof fetch &&
                          console.warn('THREE.ImageBitmapLoader: fetch() not supported.'),
                        lh.call(this, e),
                        (this.options = { premultiplyAlpha: 'none' })
                    }
                    function gd() {
                      ;(this.type = 'ShapePath'),
                        (this.color = new Li()),
                        (this.subPaths = []),
                        (this.currentPath = null)
                    }
                    ;(vd.prototype = Object.assign(Object.create(lh.prototype), {
                      constructor: vd,
                      isImageBitmapLoader: !0,
                      setOptions: function (e) {
                        return (this.options = e), this
                      },
                      load: function (e, t, n, r) {
                        void 0 === e && (e = ''),
                          void 0 !== this.path && (e = this.path + e),
                          (e = this.manager.resolveURL(e))
                        var i = this,
                          o = oh.get(e)
                        if (void 0 !== o)
                          return (
                            i.manager.itemStart(e),
                            setTimeout(function () {
                              t && t(o), i.manager.itemEnd(e)
                            }, 0),
                            o
                          )
                        var a = {}
                        ;(a.credentials =
                          'anonymous' === this.crossOrigin ? 'same-origin' : 'include'),
                          fetch(e, a)
                            .then(function (e) {
                              return e.blob()
                            })
                            .then(function (e) {
                              return createImageBitmap(e, i.options)
                            })
                            .then(function (n) {
                              oh.add(e, n), t && t(n), i.manager.itemEnd(e)
                            })
                            .catch(function (t) {
                              r && r(t), i.manager.itemError(e), i.manager.itemEnd(e)
                            }),
                          i.manager.itemStart(e)
                      },
                    })),
                      Object.assign(gd.prototype, {
                        moveTo: function (e, t) {
                          return (
                            (this.currentPath = new Wh()),
                            this.subPaths.push(this.currentPath),
                            this.currentPath.moveTo(e, t),
                            this
                          )
                        },
                        lineTo: function (e, t) {
                          return this.currentPath.lineTo(e, t), this
                        },
                        quadraticCurveTo: function (e, t, n, r) {
                          return this.currentPath.quadraticCurveTo(e, t, n, r), this
                        },
                        bezierCurveTo: function (e, t, n, r, i, o) {
                          return this.currentPath.bezierCurveTo(e, t, n, r, i, o), this
                        },
                        splineThru: function (e) {
                          return this.currentPath.splineThru(e), this
                        },
                        toShapes: function (e, t) {
                          function n(e) {
                            for (var t = [], n = 0, r = e.length; n < r; n++) {
                              var i = e[n],
                                o = new qh()
                              ;(o.curves = i.curves), t.push(o)
                            }
                            return t
                          }
                          function r(e, t) {
                            for (var n = t.length, r = !1, i = n - 1, o = 0; o < n; i = o++) {
                              var a = t[i],
                                s = t[o],
                                l = s.x - a.x,
                                c = s.y - a.y
                              if (Math.abs(c) > Number.EPSILON) {
                                if (
                                  (c < 0 && ((a = t[o]), (l = -l), (s = t[i]), (c = -c)),
                                  e.y < a.y || e.y > s.y)
                                )
                                  continue
                                if (e.y === a.y) {
                                  if (e.x === a.x) return !0
                                } else {
                                  var u = c * (e.x - a.x) - l * (e.y - a.y)
                                  if (0 === u) return !0
                                  if (u < 0) continue
                                  r = !r
                                }
                              } else {
                                if (e.y !== a.y) continue
                                if ((s.x <= e.x && e.x <= a.x) || (a.x <= e.x && e.x <= s.x))
                                  return !0
                              }
                            }
                            return r
                          }
                          var i,
                            o,
                            a,
                            s = hu.isClockWise,
                            l = this.subPaths
                          if (0 === l.length) return []
                          if (!0 === t) return n(l)
                          var c = []
                          if (1 === l.length)
                            return (o = l[0]), ((a = new qh()).curves = o.curves), c.push(a), c
                          var u = !s(l[0].getPoints())
                          u = e ? !u : u
                          var h,
                            d,
                            p = [],
                            f = [],
                            m = [],
                            v = 0
                          ;(f[v] = void 0), (m[v] = [])
                          for (var g = 0, y = l.length; g < y; g++)
                            (i = s((h = (o = l[g]).getPoints()))),
                              (i = e ? !i : i)
                                ? (!u && f[v] && v++,
                                  (f[v] = { s: new qh(), p: h }),
                                  (f[v].s.curves = o.curves),
                                  u && v++,
                                  (m[v] = []))
                                : m[v].push({ h: o, p: h[0] })
                          if (!f[0]) return n(l)
                          if (f.length > 1) {
                            for (var b = !1, A = [], w = 0, x = f.length; w < x; w++) p[w] = []
                            for (var E = 0, M = f.length; E < M; E++)
                              for (var _ = m[E], T = 0; T < _.length; T++) {
                                for (var S = _[T], C = !0, L = 0; L < f.length; L++)
                                  r(S.p, f[L].p) &&
                                    (E !== L && A.push({ froms: E, tos: L, hole: T }),
                                    C ? ((C = !1), p[L].push(S)) : (b = !0))
                                C && p[E].push(S)
                              }
                            A.length > 0 && (b || (m = p))
                          }
                          for (var R = 0, P = f.length; R < P; R++) {
                            ;(a = f[R].s), c.push(a)
                            for (var D = 0, O = (d = m[R]).length; D < O; D++) a.holes.push(d[D].h)
                          }
                          return c
                        },
                      })
                    var yd,
                      bd = (function () {
                        function e(e) {
                          Object.defineProperty(this, 'isFont', { value: !0 }),
                            (this.type = 'Font'),
                            (this.data = e)
                        }
                        return (
                          (e.prototype.generateShapes = function (e, t) {
                            void 0 === t && (t = 100)
                            for (
                              var n = [], r = Ad(e, t, this.data), i = 0, o = r.length;
                              i < o;
                              i++
                            )
                              Array.prototype.push.apply(n, r[i].toShapes())
                            return n
                          }),
                          e
                        )
                      })()
                    function Ad(e, t, n) {
                      for (
                        var r = Array.from ? Array.from(e) : String(e).split(''),
                          i = t / n.resolution,
                          o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * i,
                          a = [],
                          s = 0,
                          l = 0,
                          c = 0;
                        c < r.length;
                        c++
                      ) {
                        var u = r[c]
                        if ('\n' === u) (s = 0), (l -= o)
                        else {
                          var h = wd(u, i, s, l, n)
                          ;(s += h.offsetX), a.push(h.path)
                        }
                      }
                      return a
                    }
                    function wd(e, t, n, r, i) {
                      var o = i.glyphs[e] || i.glyphs['?']
                      if (o) {
                        var a,
                          s,
                          l,
                          c,
                          u,
                          h,
                          d,
                          p,
                          f = new gd()
                        if (o.o)
                          for (
                            var m = o._cachedOutline || (o._cachedOutline = o.o.split(' ')),
                              v = 0,
                              g = m.length;
                            v < g;

                          )
                            switch (m[v++]) {
                              case 'm':
                                ;(a = m[v++] * t + n), (s = m[v++] * t + r), f.moveTo(a, s)
                                break
                              case 'l':
                                ;(a = m[v++] * t + n), (s = m[v++] * t + r), f.lineTo(a, s)
                                break
                              case 'q':
                                ;(l = m[v++] * t + n),
                                  (c = m[v++] * t + r),
                                  (u = m[v++] * t + n),
                                  (h = m[v++] * t + r),
                                  f.quadraticCurveTo(u, h, l, c)
                                break
                              case 'b':
                                ;(l = m[v++] * t + n),
                                  (c = m[v++] * t + r),
                                  (u = m[v++] * t + n),
                                  (h = m[v++] * t + r),
                                  (d = m[v++] * t + n),
                                  (p = m[v++] * t + r),
                                  f.bezierCurveTo(u, h, d, p, l, c)
                            }
                        return { offsetX: o.ha * t, path: f }
                      }
                      console.error(
                        'THREE.Font: character "' +
                          e +
                          '" does not exists in font family ' +
                          i.familyName +
                          '.',
                      )
                    }
                    function xd(e) {
                      lh.call(this, e)
                    }
                    xd.prototype = Object.assign(Object.create(lh.prototype), {
                      constructor: xd,
                      load: function (t, n, r, i) {
                        var o = this,
                          a = new uh(this.manager)
                        a.setPath(this.path),
                          a.setRequestHeader(this.requestHeader),
                          a.setWithCredentials(o.withCredentials),
                          a.load(
                            t,
                            function (t) {
                              var r
                              try {
                                r = JSON.parse(t)
                              } catch (e) {
                                console.warn(
                                  'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.',
                                ),
                                  (r = JSON.parse(t.substring(65, t.length - 2)))
                              }
                              var i = o.parse(r)
                              n && n(i)
                            },
                            r,
                            i,
                          )
                      },
                      parse: function (e) {
                        return new bd(e)
                      },
                    })
                    var Ed = {
                      getContext: function () {
                        return (
                          void 0 === yd &&
                            (yd = new (window.AudioContext || window.webkitAudioContext)()),
                          yd
                        )
                      },
                      setContext: function (e) {
                        yd = e
                      },
                    }
                    function Md(e) {
                      lh.call(this, e)
                    }
                    function _d(e, t, n) {
                      ad.call(this, void 0, n)
                      var r = new Li().set(e),
                        i = new Li().set(t),
                        o = new lr(r.r, r.g, r.b),
                        a = new lr(i.r, i.g, i.b),
                        s = Math.sqrt(Math.PI),
                        l = s * Math.sqrt(0.75)
                      this.sh.coefficients[0].copy(o).add(a).multiplyScalar(s),
                        this.sh.coefficients[1].copy(o).sub(a).multiplyScalar(l)
                    }
                    function Td(e, t) {
                      ad.call(this, void 0, t)
                      var n = new Li().set(e)
                      this.sh.coefficients[0]
                        .set(n.r, n.g, n.b)
                        .multiplyScalar(2 * Math.sqrt(Math.PI))
                    }
                    ;(Md.prototype = Object.assign(Object.create(lh.prototype), {
                      constructor: Md,
                      load: function (t, n, r, i) {
                        var o = this,
                          a = new uh(o.manager)
                        a.setResponseType('arraybuffer'),
                          a.setPath(o.path),
                          a.setRequestHeader(o.requestHeader),
                          a.setWithCredentials(o.withCredentials),
                          a.load(
                            t,
                            function (r) {
                              try {
                                var a = r.slice(0)
                                Ed.getContext().decodeAudioData(a, function (e) {
                                  n(e)
                                })
                              } catch (e) {
                                i ? i(e) : console.error(e), o.manager.itemError(t)
                              }
                            },
                            r,
                            i,
                          )
                      },
                    })),
                      (_d.prototype = Object.assign(Object.create(ad.prototype), {
                        constructor: _d,
                        isHemisphereLightProbe: !0,
                        copy: function (e) {
                          return ad.prototype.copy.call(this, e), this
                        },
                        toJSON: function (e) {
                          return ad.prototype.toJSON.call(this, e)
                        },
                      })),
                      (Td.prototype = Object.assign(Object.create(ad.prototype), {
                        constructor: Td,
                        isAmbientLightProbe: !0,
                        copy: function (e) {
                          return ad.prototype.copy.call(this, e), this
                        },
                        toJSON: function (e) {
                          return ad.prototype.toJSON.call(this, e)
                        },
                      }))
                    var Sd = new Fr(),
                      Cd = new Fr()
                    function Ld() {
                      ;(this.type = 'StereoCamera'),
                        (this.aspect = 1),
                        (this.eyeSep = 0.064),
                        (this.cameraL = new Oo()),
                        this.cameraL.layers.enable(1),
                        (this.cameraL.matrixAutoUpdate = !1),
                        (this.cameraR = new Oo()),
                        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,
                        })
                    }
                    Object.assign(Ld.prototype, {
                      update: function (e) {
                        var t = this._cache
                        if (
                          t.focus !== e.focus ||
                          t.fov !== e.fov ||
                          t.aspect !== e.aspect * this.aspect ||
                          t.near !== e.near ||
                          t.far !== e.far ||
                          t.zoom !== e.zoom ||
                          t.eyeSep !== this.eyeSep
                        ) {
                          ;(t.focus = e.focus),
                            (t.fov = e.fov),
                            (t.aspect = e.aspect * this.aspect),
                            (t.near = e.near),
                            (t.far = e.far),
                            (t.zoom = e.zoom),
                            (t.eyeSep = this.eyeSep)
                          var n,
                            r,
                            i = e.projectionMatrix.clone(),
                            o = t.eyeSep / 2,
                            a = (o * t.near) / t.focus,
                            s = (t.near * Math.tan(Kn.DEG2RAD * t.fov * 0.5)) / t.zoom
                          ;(Cd.elements[12] = -o),
                            (Sd.elements[12] = o),
                            (n = -s * t.aspect + a),
                            (r = s * t.aspect + a),
                            (i.elements[0] = (2 * t.near) / (r - n)),
                            (i.elements[8] = (r + n) / (r - n)),
                            this.cameraL.projectionMatrix.copy(i),
                            (n = -s * t.aspect - a),
                            (r = s * t.aspect - a),
                            (i.elements[0] = (2 * t.near) / (r - n)),
                            (i.elements[8] = (r + n) / (r - n)),
                            this.cameraR.projectionMatrix.copy(i)
                        }
                        this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(Cd),
                          this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(Sd)
                      },
                    })
                    var Rd = (function () {
                      function e(e) {
                        ;(this.autoStart = void 0 === e || e),
                          (this.startTime = 0),
                          (this.oldTime = 0),
                          (this.elapsedTime = 0),
                          (this.running = !1)
                      }
                      var t = e.prototype
                      return (
                        (t.start = function () {
                          ;(this.startTime = Pd()),
                            (this.oldTime = this.startTime),
                            (this.elapsedTime = 0),
                            (this.running = !0)
                        }),
                        (t.stop = function () {
                          this.getElapsedTime(), (this.running = !1), (this.autoStart = !1)
                        }),
                        (t.getElapsedTime = function () {
                          return this.getDelta(), this.elapsedTime
                        }),
                        (t.getDelta = function () {
                          var e = 0
                          if (this.autoStart && !this.running) return this.start(), 0
                          if (this.running) {
                            var t = Pd()
                            ;(e = (t - this.oldTime) / 1e3),
                              (this.oldTime = t),
                              (this.elapsedTime += e)
                          }
                          return e
                        }),
                        e
                      )
                    })()
                    function Pd() {
                      return ('undefined' === typeof performance ? Date : performance).now()
                    }
                    var Dd = new lr(),
                      Od = new sr(),
                      Id = new lr(),
                      Bd = new lr(),
                      Fd = (function (e) {
                        function t() {
                          var t
                          return (
                            ((t = e.call(this) || this).type = 'AudioListener'),
                            (t.context = Ed.getContext()),
                            (t.gain = t.context.createGain()),
                            t.gain.connect(t.context.destination),
                            (t.filter = null),
                            (t.timeDelta = 0),
                            (t._clock = new Rd()),
                            t
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.getInput = function () {
                            return this.gain
                          }),
                          (n.removeFilter = function () {
                            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
                            )
                          }),
                          (n.getFilter = function () {
                            return this.filter
                          }),
                          (n.setFilter = function (e) {
                            return (
                              null !== this.filter
                                ? (this.gain.disconnect(this.filter),
                                  this.filter.disconnect(this.context.destination))
                                : this.gain.disconnect(this.context.destination),
                              (this.filter = e),
                              this.gain.connect(this.filter),
                              this.filter.connect(this.context.destination),
                              this
                            )
                          }),
                          (n.getMasterVolume = function () {
                            return this.gain.gain.value
                          }),
                          (n.setMasterVolume = function (e) {
                            return (
                              this.gain.gain.setTargetAtTime(e, this.context.currentTime, 0.01),
                              this
                            )
                          }),
                          (n.updateMatrixWorld = function (t) {
                            e.prototype.updateMatrixWorld.call(this, t)
                            var n = this.context.listener,
                              r = this.up
                            if (
                              ((this.timeDelta = this._clock.getDelta()),
                              this.matrixWorld.decompose(Dd, Od, Id),
                              Bd.set(0, 0, -1).applyQuaternion(Od),
                              n.positionX)
                            ) {
                              var i = this.context.currentTime + this.timeDelta
                              n.positionX.linearRampToValueAtTime(Dd.x, i),
                                n.positionY.linearRampToValueAtTime(Dd.y, i),
                                n.positionZ.linearRampToValueAtTime(Dd.z, i),
                                n.forwardX.linearRampToValueAtTime(Bd.x, i),
                                n.forwardY.linearRampToValueAtTime(Bd.y, i),
                                n.forwardZ.linearRampToValueAtTime(Bd.z, i),
                                n.upX.linearRampToValueAtTime(r.x, i),
                                n.upY.linearRampToValueAtTime(r.y, i),
                                n.upZ.linearRampToValueAtTime(r.z, i)
                            } else
                              n.setPosition(Dd.x, Dd.y, Dd.z),
                                n.setOrientation(Bd.x, Bd.y, Bd.z, r.x, r.y, r.z)
                          }),
                          t
                        )
                      })(si),
                      kd = (function (e) {
                        function t(t) {
                          var n
                          return (
                            ((n = e.call(this) || this).type = 'Audio'),
                            (n.listener = t),
                            (n.context = t.context),
                            (n.gain = n.context.createGain()),
                            n.gain.connect(t.getInput()),
                            (n.autoplay = !1),
                            (n.buffer = null),
                            (n.detune = 0),
                            (n.loop = !1),
                            (n.loopStart = 0),
                            (n.loopEnd = 0),
                            (n.offset = 0),
                            (n.duration = void 0),
                            (n.playbackRate = 1),
                            (n.isPlaying = !1),
                            (n.hasPlaybackControl = !0),
                            (n.source = null),
                            (n.sourceType = 'empty'),
                            (n._startedAt = 0),
                            (n._progress = 0),
                            (n._connected = !1),
                            (n.filters = []),
                            n
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.getOutput = function () {
                            return this.gain
                          }),
                          (n.setNodeSource = function (e) {
                            return (
                              (this.hasPlaybackControl = !1),
                              (this.sourceType = 'audioNode'),
                              (this.source = e),
                              this.connect(),
                              this
                            )
                          }),
                          (n.setMediaElementSource = function (e) {
                            return (
                              (this.hasPlaybackControl = !1),
                              (this.sourceType = 'mediaNode'),
                              (this.source = this.context.createMediaElementSource(e)),
                              this.connect(),
                              this
                            )
                          }),
                          (n.setMediaStreamSource = function (e) {
                            return (
                              (this.hasPlaybackControl = !1),
                              (this.sourceType = 'mediaStreamNode'),
                              (this.source = this.context.createMediaStreamSource(e)),
                              this.connect(),
                              this
                            )
                          }),
                          (n.setBuffer = function (e) {
                            return (
                              (this.buffer = e),
                              (this.sourceType = 'buffer'),
                              this.autoplay && this.play(),
                              this
                            )
                          }),
                          (n.play = function (e) {
                            if ((void 0 === e && (e = 0), !0 !== this.isPlaying)) {
                              if (!1 !== this.hasPlaybackControl) {
                                this._startedAt = this.context.currentTime + e
                                var t = this.context.createBufferSource()
                                return (
                                  (t.buffer = this.buffer),
                                  (t.loop = this.loop),
                                  (t.loopStart = this.loopStart),
                                  (t.loopEnd = this.loopEnd),
                                  (t.onended = this.onEnded.bind(this)),
                                  t.start(
                                    this._startedAt,
                                    this._progress + this.offset,
                                    this.duration,
                                  ),
                                  (this.isPlaying = !0),
                                  (this.source = t),
                                  this.setDetune(this.detune),
                                  this.setPlaybackRate(this.playbackRate),
                                  this.connect()
                                )
                              }
                              console.warn('THREE.Audio: this Audio has no playback control.')
                            } else console.warn('THREE.Audio: Audio is already playing.')
                          }),
                          (n.pause = function () {
                            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.')
                          }),
                          (n.stop = function () {
                            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.')
                          }),
                          (n.connect = function () {
                            if (this.filters.length > 0) {
                              this.source.connect(this.filters[0])
                              for (var e = 1, t = this.filters.length; e < t; e++)
                                this.filters[e - 1].connect(this.filters[e])
                              this.filters[this.filters.length - 1].connect(this.getOutput())
                            } else this.source.connect(this.getOutput())
                            return (this._connected = !0), this
                          }),
                          (n.disconnect = function () {
                            if (this.filters.length > 0) {
                              this.source.disconnect(this.filters[0])
                              for (var e = 1, t = this.filters.length; e < t; e++)
                                this.filters[e - 1].disconnect(this.filters[e])
                              this.filters[this.filters.length - 1].disconnect(this.getOutput())
                            } else this.source.disconnect(this.getOutput())
                            return (this._connected = !1), this
                          }),
                          (n.getFilters = function () {
                            return this.filters
                          }),
                          (n.setFilters = function (e) {
                            return (
                              e || (e = []),
                              !0 === this._connected
                                ? (this.disconnect(), (this.filters = e.slice()), this.connect())
                                : (this.filters = e.slice()),
                              this
                            )
                          }),
                          (n.setDetune = function (e) {
                            if (((this.detune = e), void 0 !== this.source.detune))
                              return (
                                !0 === this.isPlaying &&
                                  this.source.detune.setTargetAtTime(
                                    this.detune,
                                    this.context.currentTime,
                                    0.01,
                                  ),
                                this
                              )
                          }),
                          (n.getDetune = function () {
                            return this.detune
                          }),
                          (n.getFilter = function () {
                            return this.getFilters()[0]
                          }),
                          (n.setFilter = function (e) {
                            return this.setFilters(e ? [e] : [])
                          }),
                          (n.setPlaybackRate = function (e) {
                            if (!1 !== this.hasPlaybackControl)
                              return (
                                (this.playbackRate = e),
                                !0 === this.isPlaying &&
                                  this.source.playbackRate.setTargetAtTime(
                                    this.playbackRate,
                                    this.context.currentTime,
                                    0.01,
                                  ),
                                this
                              )
                            console.warn('THREE.Audio: this Audio has no playback control.')
                          }),
                          (n.getPlaybackRate = function () {
                            return this.playbackRate
                          }),
                          (n.onEnded = function () {
                            this.isPlaying = !1
                          }),
                          (n.getLoop = function () {
                            return !1 === this.hasPlaybackControl
                              ? (console.warn('THREE.Audio: this Audio has no playback control.'),
                                !1)
                              : this.loop
                          }),
                          (n.setLoop = function (e) {
                            if (!1 !== this.hasPlaybackControl)
                              return (
                                (this.loop = e),
                                !0 === this.isPlaying && (this.source.loop = this.loop),
                                this
                              )
                            console.warn('THREE.Audio: this Audio has no playback control.')
                          }),
                          (n.setLoopStart = function (e) {
                            return (this.loopStart = e), this
                          }),
                          (n.setLoopEnd = function (e) {
                            return (this.loopEnd = e), this
                          }),
                          (n.getVolume = function () {
                            return this.gain.gain.value
                          }),
                          (n.setVolume = function (e) {
                            return (
                              this.gain.gain.setTargetAtTime(e, this.context.currentTime, 0.01),
                              this
                            )
                          }),
                          t
                        )
                      })(si),
                      Nd = new lr(),
                      Ud = new sr(),
                      Hd = new lr(),
                      Gd = new lr(),
                      zd = (function (e) {
                        function t(t) {
                          var n
                          return (
                            ((n = e.call(this, t) || this).panner = n.context.createPanner()),
                            (n.panner.panningModel = 'HRTF'),
                            n.panner.connect(n.gain),
                            n
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.getOutput = function () {
                            return this.panner
                          }),
                          (n.getRefDistance = function () {
                            return this.panner.refDistance
                          }),
                          (n.setRefDistance = function (e) {
                            return (this.panner.refDistance = e), this
                          }),
                          (n.getRolloffFactor = function () {
                            return this.panner.rolloffFactor
                          }),
                          (n.setRolloffFactor = function (e) {
                            return (this.panner.rolloffFactor = e), this
                          }),
                          (n.getDistanceModel = function () {
                            return this.panner.distanceModel
                          }),
                          (n.setDistanceModel = function (e) {
                            return (this.panner.distanceModel = e), this
                          }),
                          (n.getMaxDistance = function () {
                            return this.panner.maxDistance
                          }),
                          (n.setMaxDistance = function (e) {
                            return (this.panner.maxDistance = e), this
                          }),
                          (n.setDirectionalCone = function (e, t, n) {
                            return (
                              (this.panner.coneInnerAngle = e),
                              (this.panner.coneOuterAngle = t),
                              (this.panner.coneOuterGain = n),
                              this
                            )
                          }),
                          (n.updateMatrixWorld = function (t) {
                            if (
                              (e.prototype.updateMatrixWorld.call(this, t),
                              !0 !== this.hasPlaybackControl || !1 !== this.isPlaying)
                            ) {
                              this.matrixWorld.decompose(Nd, Ud, Hd),
                                Gd.set(0, 0, 1).applyQuaternion(Ud)
                              var n = this.panner
                              if (n.positionX) {
                                var r = this.context.currentTime + this.listener.timeDelta
                                n.positionX.linearRampToValueAtTime(Nd.x, r),
                                  n.positionY.linearRampToValueAtTime(Nd.y, r),
                                  n.positionZ.linearRampToValueAtTime(Nd.z, r),
                                  n.orientationX.linearRampToValueAtTime(Gd.x, r),
                                  n.orientationY.linearRampToValueAtTime(Gd.y, r),
                                  n.orientationZ.linearRampToValueAtTime(Gd.z, r)
                              } else
                                n.setPosition(Nd.x, Nd.y, Nd.z), n.setOrientation(Gd.x, Gd.y, Gd.z)
                            }
                          }),
                          t
                        )
                      })(kd),
                      jd = (function () {
                        function e(e, t) {
                          void 0 === t && (t = 2048),
                            (this.analyser = e.context.createAnalyser()),
                            (this.analyser.fftSize = t),
                            (this.data = new Uint8Array(this.analyser.frequencyBinCount)),
                            e.getOutput().connect(this.analyser)
                        }
                        var t = e.prototype
                        return (
                          (t.getFrequencyData = function () {
                            return this.analyser.getByteFrequencyData(this.data), this.data
                          }),
                          (t.getAverageFrequency = function () {
                            for (var e = 0, t = this.getFrequencyData(), n = 0; n < t.length; n++)
                              e += t[n]
                            return e / t.length
                          }),
                          e
                        )
                      })()
                    function Vd(e, t, n) {
                      var r, i, o
                      switch (((this.binding = e), (this.valueSize = n), t)) {
                        case 'quaternion':
                          ;(r = this._slerp),
                            (i = this._slerpAdditive),
                            (o = this._setAdditiveIdentityQuaternion),
                            (this.buffer = new Float64Array(6 * n)),
                            (this._workIndex = 5)
                          break
                        case 'string':
                        case 'bool':
                          ;(r = this._select),
                            (i = this._select),
                            (o = this._setAdditiveIdentityOther),
                            (this.buffer = new Array(5 * n))
                          break
                        default:
                          ;(r = this._lerp),
                            (i = this._lerpAdditive),
                            (o = this._setAdditiveIdentityNumeric),
                            (this.buffer = new Float64Array(5 * n))
                      }
                      ;(this._mixBufferRegion = r),
                        (this._mixBufferRegionAdditive = i),
                        (this._setIdentity = o),
                        (this._origIndex = 3),
                        (this._addIndex = 4),
                        (this.cumulativeWeight = 0),
                        (this.cumulativeWeightAdditive = 0),
                        (this.useCount = 0),
                        (this.referenceCount = 0)
                    }
                    Object.assign(Vd.prototype, {
                      accumulate: function (e, t) {
                        var n = this.buffer,
                          r = this.valueSize,
                          i = e * r + r,
                          o = this.cumulativeWeight
                        if (0 === o) {
                          for (var a = 0; a !== r; ++a) n[i + a] = n[a]
                          o = t
                        } else {
                          var s = t / (o += t)
                          this._mixBufferRegion(n, i, 0, s, r)
                        }
                        this.cumulativeWeight = o
                      },
                      accumulateAdditive: function (e) {
                        var t = this.buffer,
                          n = this.valueSize,
                          r = n * this._addIndex
                        0 === this.cumulativeWeightAdditive && this._setIdentity(),
                          this._mixBufferRegionAdditive(t, r, 0, e, n),
                          (this.cumulativeWeightAdditive += e)
                      },
                      apply: function (e) {
                        var t = this.valueSize,
                          n = this.buffer,
                          r = e * t + t,
                          i = this.cumulativeWeight,
                          o = this.cumulativeWeightAdditive,
                          a = this.binding
                        if (
                          ((this.cumulativeWeight = 0), (this.cumulativeWeightAdditive = 0), i < 1)
                        ) {
                          var s = t * this._origIndex
                          this._mixBufferRegion(n, r, s, 1 - i, t)
                        }
                        o > 0 && this._mixBufferRegionAdditive(n, r, this._addIndex * t, 1, t)
                        for (var l = t, c = t + t; l !== c; ++l)
                          if (n[l] !== n[l + t]) {
                            a.setValue(n, r)
                            break
                          }
                      },
                      saveOriginalState: function () {
                        var e = this.binding,
                          t = this.buffer,
                          n = this.valueSize,
                          r = n * this._origIndex
                        e.getValue(t, r)
                        for (var i = n, o = r; i !== o; ++i) t[i] = t[r + (i % n)]
                        this._setIdentity(),
                          (this.cumulativeWeight = 0),
                          (this.cumulativeWeightAdditive = 0)
                      },
                      restoreOriginalState: function () {
                        var e = 3 * this.valueSize
                        this.binding.setValue(this.buffer, e)
                      },
                      _setAdditiveIdentityNumeric: function () {
                        for (
                          var e = this._addIndex * this.valueSize, t = e + this.valueSize, n = e;
                          n < t;
                          n++
                        )
                          this.buffer[n] = 0
                      },
                      _setAdditiveIdentityQuaternion: function () {
                        this._setAdditiveIdentityNumeric(),
                          (this.buffer[this._addIndex * this.valueSize + 3] = 1)
                      },
                      _setAdditiveIdentityOther: function () {
                        for (
                          var e = this._origIndex * this.valueSize,
                            t = this._addIndex * this.valueSize,
                            n = 0;
                          n < this.valueSize;
                          n++
                        )
                          this.buffer[t + n] = this.buffer[e + n]
                      },
                      _select: function (e, t, n, r, i) {
                        if (r >= 0.5) for (var o = 0; o !== i; ++o) e[t + o] = e[n + o]
                      },
                      _slerp: function (e, t, n, r) {
                        sr.slerpFlat(e, t, e, t, e, n, r)
                      },
                      _slerpAdditive: function (e, t, n, r, i) {
                        var o = this._workIndex * i
                        sr.multiplyQuaternionsFlat(e, o, e, t, e, n),
                          sr.slerpFlat(e, t, e, t, e, o, r)
                      },
                      _lerp: function (e, t, n, r, i) {
                        for (var o = 1 - r, a = 0; a !== i; ++a) {
                          var s = t + a
                          e[s] = e[s] * o + e[n + a] * r
                        }
                      },
                      _lerpAdditive: function (e, t, n, r, i) {
                        for (var o = 0; o !== i; ++o) {
                          var a = t + o
                          e[a] = e[a] + e[n + o] * r
                        }
                      },
                    })
                    var Wd = '\\[\\]\\.:\\/',
                      qd = new RegExp('[' + Wd + ']', 'g'),
                      Xd = '[^' + Wd + ']',
                      Yd = '[^' + Wd.replace('\\.', '') + ']',
                      Qd = /((?:WC+[\/:])*)/.source.replace('WC', Xd),
                      Zd = /(WCOD+)?/.source.replace('WCOD', Yd),
                      Kd = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace('WC', Xd),
                      Jd = /\.(WC+)(?:\[(.+)\])?/.source.replace('WC', Xd),
                      $d = new RegExp('^' + Qd + Zd + Kd + Jd + '$'),
                      ep = ['material', 'materials', 'bones']
                    function tp(e, t, n) {
                      var r = n || np.parseTrackName(t)
                      ;(this._targetGroup = e), (this._bindings = e.subscribe_(t, r))
                    }
                    function np(e, t, n) {
                      ;(this.path = t),
                        (this.parsedPath = n || np.parseTrackName(t)),
                        (this.node = np.findNode(e, this.parsedPath.nodeName) || e),
                        (this.rootNode = e)
                    }
                    function rp() {
                      ;(this.uuid = Kn.generateUUID()),
                        (this._objects = Array.prototype.slice.call(arguments)),
                        (this.nCachedObjects_ = 0)
                      var e = {}
                      this._indicesByUUID = e
                      for (var t = 0, n = arguments.length; t !== n; ++t) e[arguments[t].uuid] = t
                      ;(this._paths = []),
                        (this._parsedPaths = []),
                        (this._bindings = []),
                        (this._bindingsIndicesByPath = {})
                      var r = this
                      this.stats = {
                        objects: {
                          get total() {
                            return r._objects.length
                          },
                          get inUse() {
                            return this.total - r.nCachedObjects_
                          },
                        },
                        get bindingsPerObject() {
                          return r._bindings.length
                        },
                      }
                    }
                    Object.assign(tp.prototype, {
                      getValue: function (e, t) {
                        this.bind()
                        var n = this._targetGroup.nCachedObjects_,
                          r = this._bindings[n]
                        void 0 !== r && r.getValue(e, t)
                      },
                      setValue: function (e, t) {
                        for (
                          var n = this._bindings,
                            r = this._targetGroup.nCachedObjects_,
                            i = n.length;
                          r !== i;
                          ++r
                        )
                          n[r].setValue(e, t)
                      },
                      bind: function () {
                        for (
                          var e = this._bindings,
                            t = this._targetGroup.nCachedObjects_,
                            n = e.length;
                          t !== n;
                          ++t
                        )
                          e[t].bind()
                      },
                      unbind: function () {
                        for (
                          var e = this._bindings,
                            t = this._targetGroup.nCachedObjects_,
                            n = e.length;
                          t !== n;
                          ++t
                        )
                          e[t].unbind()
                      },
                    }),
                      Object.assign(np, {
                        Composite: tp,
                        create: function (e, t, n) {
                          return e && e.isAnimationObjectGroup
                            ? new np.Composite(e, t, n)
                            : new np(e, t, n)
                        },
                        sanitizeNodeName: function (e) {
                          return e.replace(/\s/g, '_').replace(qd, '')
                        },
                        parseTrackName: function (e) {
                          var t = $d.exec(e)
                          if (!t) throw new Error('PropertyBinding: Cannot parse trackName: ' + e)
                          var n = {
                              nodeName: t[2],
                              objectName: t[3],
                              objectIndex: t[4],
                              propertyName: t[5],
                              propertyIndex: t[6],
                            },
                            r = n.nodeName && n.nodeName.lastIndexOf('.')
                          if (void 0 !== r && -1 !== r) {
                            var i = n.nodeName.substring(r + 1)
                            ;-1 !== ep.indexOf(i) &&
                              ((n.nodeName = n.nodeName.substring(0, r)), (n.objectName = i))
                          }
                          if (null === n.propertyName || 0 === n.propertyName.length)
                            throw new Error(
                              'PropertyBinding: can not parse propertyName from trackName: ' + e,
                            )
                          return n
                        },
                        findNode: function (e, t) {
                          if (
                            !t ||
                            '' === t ||
                            '.' === t ||
                            -1 === t ||
                            t === e.name ||
                            t === e.uuid
                          )
                            return e
                          if (e.skeleton) {
                            var n = e.skeleton.getBoneByName(t)
                            if (void 0 !== n) return n
                          }
                          if (e.children) {
                            var r = (function e(n) {
                              for (var r = 0; r < n.length; r++) {
                                var i = n[r]
                                if (i.name === t || i.uuid === t) return i
                                var o = e(i.children)
                                if (o) return o
                              }
                              return null
                            })(e.children)
                            if (r) return r
                          }
                          return null
                        },
                      }),
                      Object.assign(np.prototype, {
                        _getValue_unavailable: function () {},
                        _setValue_unavailable: function () {},
                        BindingType: {
                          Direct: 0,
                          EntireArray: 1,
                          ArrayElement: 2,
                          HasFromToArray: 3,
                        },
                        Versioning: { None: 0, NeedsUpdate: 1, MatrixWorldNeedsUpdate: 2 },
                        GetterByBindingType: [
                          function (e, t) {
                            e[t] = this.node[this.propertyName]
                          },
                          function (e, t) {
                            for (var n = this.resolvedProperty, r = 0, i = n.length; r !== i; ++r)
                              e[t++] = n[r]
                          },
                          function (e, t) {
                            e[t] = this.resolvedProperty[this.propertyIndex]
                          },
                          function (e, t) {
                            this.resolvedProperty.toArray(e, t)
                          },
                        ],
                        SetterByBindingTypeAndVersioning: [
                          [
                            function (e, t) {
                              this.targetObject[this.propertyName] = e[t]
                            },
                            function (e, t) {
                              ;(this.targetObject[this.propertyName] = e[t]),
                                (this.targetObject.needsUpdate = !0)
                            },
                            function (e, t) {
                              ;(this.targetObject[this.propertyName] = e[t]),
                                (this.targetObject.matrixWorldNeedsUpdate = !0)
                            },
                          ],
                          [
                            function (e, t) {
                              for (var n = this.resolvedProperty, r = 0, i = n.length; r !== i; ++r)
                                n[r] = e[t++]
                            },
                            function (e, t) {
                              for (var n = this.resolvedProperty, r = 0, i = n.length; r !== i; ++r)
                                n[r] = e[t++]
                              this.targetObject.needsUpdate = !0
                            },
                            function (e, t) {
                              for (var n = this.resolvedProperty, r = 0, i = n.length; r !== i; ++r)
                                n[r] = e[t++]
                              this.targetObject.matrixWorldNeedsUpdate = !0
                            },
                          ],
                          [
                            function (e, t) {
                              this.resolvedProperty[this.propertyIndex] = e[t]
                            },
                            function (e, t) {
                              ;(this.resolvedProperty[this.propertyIndex] = e[t]),
                                (this.targetObject.needsUpdate = !0)
                            },
                            function (e, t) {
                              ;(this.resolvedProperty[this.propertyIndex] = e[t]),
                                (this.targetObject.matrixWorldNeedsUpdate = !0)
                            },
                          ],
                          [
                            function (e, t) {
                              this.resolvedProperty.fromArray(e, t)
                            },
                            function (e, t) {
                              this.resolvedProperty.fromArray(e, t),
                                (this.targetObject.needsUpdate = !0)
                            },
                            function (e, t) {
                              this.resolvedProperty.fromArray(e, t),
                                (this.targetObject.matrixWorldNeedsUpdate = !0)
                            },
                          ],
                        ],
                        getValue: function (e, t) {
                          this.bind(), this.getValue(e, t)
                        },
                        setValue: function (e, t) {
                          this.bind(), this.setValue(e, t)
                        },
                        bind: function () {
                          var e = this.node,
                            t = this.parsedPath,
                            n = t.objectName,
                            r = t.propertyName,
                            i = t.propertyIndex
                          if (
                            (e ||
                              ((e = np.findNode(this.rootNode, t.nodeName) || this.rootNode),
                              (this.node = e)),
                            (this.getValue = this._getValue_unavailable),
                            (this.setValue = this._setValue_unavailable),
                            e)
                          ) {
                            if (n) {
                              var o = t.objectIndex
                              switch (n) {
                                case 'materials':
                                  if (!e.material)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to material as node does not have a material.',
                                      this,
                                    )
                                  if (!e.material.materials)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.',
                                      this,
                                    )
                                  e = e.material.materials
                                  break
                                case 'bones':
                                  if (!e.skeleton)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.',
                                      this,
                                    )
                                  e = e.skeleton.bones
                                  for (var a = 0; a < e.length; a++)
                                    if (e[a].name === o) {
                                      o = a
                                      break
                                    }
                                  break
                                default:
                                  if (void 0 === e[n])
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to objectName of node undefined.',
                                      this,
                                    )
                                  e = e[n]
                              }
                              if (void 0 !== o) {
                                if (void 0 === e[o])
                                  return void console.error(
                                    'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.',
                                    this,
                                    e,
                                  )
                                e = e[o]
                              }
                            }
                            var s = e[r]
                            if (void 0 !== s) {
                              var l = this.Versioning.None
                              ;(this.targetObject = e),
                                void 0 !== e.needsUpdate
                                  ? (l = this.Versioning.NeedsUpdate)
                                  : void 0 !== e.matrixWorldNeedsUpdate &&
                                    (l = this.Versioning.MatrixWorldNeedsUpdate)
                              var c = this.BindingType.Direct
                              if (void 0 !== i) {
                                if ('morphTargetInfluences' === r) {
                                  if (!e.geometry)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.',
                                      this,
                                    )
                                  if (!e.geometry.isBufferGeometry)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.',
                                      this,
                                    )
                                  if (!e.geometry.morphAttributes)
                                    return void console.error(
                                      'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.',
                                      this,
                                    )
                                  void 0 !== e.morphTargetDictionary[i] &&
                                    (i = e.morphTargetDictionary[i])
                                }
                                ;(c = this.BindingType.ArrayElement),
                                  (this.resolvedProperty = s),
                                  (this.propertyIndex = i)
                              } else
                                void 0 !== s.fromArray && void 0 !== s.toArray
                                  ? ((c = this.BindingType.HasFromToArray),
                                    (this.resolvedProperty = s))
                                  : Array.isArray(s)
                                  ? ((c = this.BindingType.EntireArray),
                                    (this.resolvedProperty = s))
                                  : (this.propertyName = r)
                              ;(this.getValue = this.GetterByBindingType[c]),
                                (this.setValue = this.SetterByBindingTypeAndVersioning[c][l])
                            } else {
                              var u = t.nodeName
                              console.error(
                                'THREE.PropertyBinding: Trying to update property for track: ' +
                                  u +
                                  '.' +
                                  r +
                                  " but it wasn't found.",
                                e,
                              )
                            }
                          } else
                            console.error(
                              'THREE.PropertyBinding: Trying to update node for track: ' +
                                this.path +
                                " but it wasn't found.",
                            )
                        },
                        unbind: function () {
                          ;(this.node = null),
                            (this.getValue = this._getValue_unbound),
                            (this.setValue = this._setValue_unbound)
                        },
                      }),
                      Object.assign(np.prototype, {
                        _getValue_unbound: np.prototype.getValue,
                        _setValue_unbound: np.prototype.setValue,
                      }),
                      Object.assign(rp.prototype, {
                        isAnimationObjectGroup: !0,
                        add: function () {
                          for (
                            var e = this._objects,
                              t = this._indicesByUUID,
                              n = this._paths,
                              r = this._parsedPaths,
                              i = this._bindings,
                              o = i.length,
                              a = void 0,
                              s = e.length,
                              l = this.nCachedObjects_,
                              c = 0,
                              u = arguments.length;
                            c !== u;
                            ++c
                          ) {
                            var h = arguments[c],
                              d = h.uuid,
                              p = t[d]
                            if (void 0 === p) {
                              ;(p = s++), (t[d] = p), e.push(h)
                              for (var f = 0, m = o; f !== m; ++f) i[f].push(new np(h, n[f], r[f]))
                            } else if (p < l) {
                              a = e[p]
                              var v = --l,
                                g = e[v]
                              ;(t[g.uuid] = p), (e[p] = g), (t[d] = v), (e[v] = h)
                              for (var y = 0, b = o; y !== b; ++y) {
                                var A = i[y],
                                  w = A[v],
                                  x = A[p]
                                ;(A[p] = w), void 0 === x && (x = new np(h, n[y], r[y])), (A[v] = x)
                              }
                            } else
                              e[p] !== 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: function () {
                          for (
                            var e = this._objects,
                              t = this._indicesByUUID,
                              n = this._bindings,
                              r = n.length,
                              i = this.nCachedObjects_,
                              o = 0,
                              a = arguments.length;
                            o !== a;
                            ++o
                          ) {
                            var s = arguments[o],
                              l = s.uuid,
                              c = t[l]
                            if (void 0 !== c && c >= i) {
                              var u = i++,
                                h = e[u]
                              ;(t[h.uuid] = c), (e[c] = h), (t[l] = u), (e[u] = s)
                              for (var d = 0, p = r; d !== p; ++d) {
                                var f = n[d],
                                  m = f[u],
                                  v = f[c]
                                ;(f[c] = m), (f[u] = v)
                              }
                            }
                          }
                          this.nCachedObjects_ = i
                        },
                        uncache: function () {
                          for (
                            var e = this._objects,
                              t = this._indicesByUUID,
                              n = this._bindings,
                              r = n.length,
                              i = this.nCachedObjects_,
                              o = e.length,
                              a = 0,
                              s = arguments.length;
                            a !== s;
                            ++a
                          ) {
                            var l = arguments[a].uuid,
                              c = t[l]
                            if (void 0 !== c)
                              if ((delete t[l], c < i)) {
                                var u = --i,
                                  h = e[u],
                                  d = --o,
                                  p = e[d]
                                ;(t[h.uuid] = c), (e[c] = h), (t[p.uuid] = u), (e[u] = p), e.pop()
                                for (var f = 0, m = r; f !== m; ++f) {
                                  var v = n[f],
                                    g = v[u],
                                    y = v[d]
                                  ;(v[c] = g), (v[u] = y), v.pop()
                                }
                              } else {
                                var b = --o,
                                  A = e[b]
                                b > 0 && (t[A.uuid] = c), (e[c] = A), e.pop()
                                for (var w = 0, x = r; w !== x; ++w) {
                                  var E = n[w]
                                  ;(E[c] = E[b]), E.pop()
                                }
                              }
                          }
                          this.nCachedObjects_ = i
                        },
                        subscribe_: function (e, t) {
                          var n = this._bindingsIndicesByPath,
                            r = n[e],
                            i = this._bindings
                          if (void 0 !== r) return i[r]
                          var o = this._paths,
                            a = this._parsedPaths,
                            s = this._objects,
                            l = s.length,
                            c = this.nCachedObjects_,
                            u = new Array(l)
                          ;(r = i.length), (n[e] = r), o.push(e), a.push(t), i.push(u)
                          for (var h = c, d = s.length; h !== d; ++h) {
                            var p = s[h]
                            u[h] = new np(p, e, t)
                          }
                          return u
                        },
                        unsubscribe_: function (e) {
                          var t = this._bindingsIndicesByPath,
                            n = t[e]
                          if (void 0 !== n) {
                            var r = this._paths,
                              i = this._parsedPaths,
                              o = this._bindings,
                              a = o.length - 1,
                              s = o[a]
                            ;(t[e[a]] = n),
                              (o[n] = s),
                              o.pop(),
                              (i[n] = i[a]),
                              i.pop(),
                              (r[n] = r[a]),
                              r.pop()
                          }
                        },
                      })
                    var ip = (function () {
                      function e(e, t, n, r) {
                        void 0 === n && (n = null),
                          void 0 === r && (r = t.blendMode),
                          (this._mixer = e),
                          (this._clip = t),
                          (this._localRoot = n),
                          (this.blendMode = r)
                        for (
                          var i = t.tracks,
                            o = i.length,
                            a = new Array(o),
                            s = { endingStart: jt, endingEnd: jt },
                            l = 0;
                          l !== o;
                          ++l
                        ) {
                          var c = i[l].createInterpolant(null)
                          ;(a[l] = c), (c.settings = s)
                        }
                        ;(this._interpolantSettings = s),
                          (this._interpolants = a),
                          (this._propertyBindings = new Array(o)),
                          (this._cacheIndex = null),
                          (this._byClipCacheIndex = null),
                          (this._timeScaleInterpolant = null),
                          (this._weightInterpolant = null),
                          (this.loop = Nt),
                          (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)
                      }
                      var t = e.prototype
                      return (
                        (t.play = function () {
                          return this._mixer._activateAction(this), this
                        }),
                        (t.stop = function () {
                          return this._mixer._deactivateAction(this), this.reset()
                        }),
                        (t.reset = function () {
                          return (
                            (this.paused = !1),
                            (this.enabled = !0),
                            (this.time = 0),
                            (this._loopCount = -1),
                            (this._startTime = null),
                            this.stopFading().stopWarping()
                          )
                        }),
                        (t.isRunning = function () {
                          return (
                            this.enabled &&
                            !this.paused &&
                            0 !== this.timeScale &&
                            null === this._startTime &&
                            this._mixer._isActiveAction(this)
                          )
                        }),
                        (t.isScheduled = function () {
                          return this._mixer._isActiveAction(this)
                        }),
                        (t.startAt = function (e) {
                          return (this._startTime = e), this
                        }),
                        (t.setLoop = function (e, t) {
                          return (this.loop = e), (this.repetitions = t), this
                        }),
                        (t.setEffectiveWeight = function (e) {
                          return (
                            (this.weight = e),
                            (this._effectiveWeight = this.enabled ? e : 0),
                            this.stopFading()
                          )
                        }),
                        (t.getEffectiveWeight = function () {
                          return this._effectiveWeight
                        }),
                        (t.fadeIn = function (e) {
                          return this._scheduleFading(e, 0, 1)
                        }),
                        (t.fadeOut = function (e) {
                          return this._scheduleFading(e, 1, 0)
                        }),
                        (t.crossFadeFrom = function (e, t, n) {
                          if ((e.fadeOut(t), this.fadeIn(t), n)) {
                            var r = this._clip.duration,
                              i = e._clip.duration,
                              o = i / r,
                              a = r / i
                            e.warp(1, o, t), this.warp(a, 1, t)
                          }
                          return this
                        }),
                        (t.crossFadeTo = function (e, t, n) {
                          return e.crossFadeFrom(this, t, n)
                        }),
                        (t.stopFading = function () {
                          var e = this._weightInterpolant
                          return (
                            null !== e &&
                              ((this._weightInterpolant = null),
                              this._mixer._takeBackControlInterpolant(e)),
                            this
                          )
                        }),
                        (t.setEffectiveTimeScale = function (e) {
                          return (
                            (this.timeScale = e),
                            (this._effectiveTimeScale = this.paused ? 0 : e),
                            this.stopWarping()
                          )
                        }),
                        (t.getEffectiveTimeScale = function () {
                          return this._effectiveTimeScale
                        }),
                        (t.setDuration = function (e) {
                          return (this.timeScale = this._clip.duration / e), this.stopWarping()
                        }),
                        (t.syncWith = function (e) {
                          return (
                            (this.time = e.time), (this.timeScale = e.timeScale), this.stopWarping()
                          )
                        }),
                        (t.halt = function (e) {
                          return this.warp(this._effectiveTimeScale, 0, e)
                        }),
                        (t.warp = function (e, t, n) {
                          var r = this._mixer,
                            i = r.time,
                            o = this.timeScale,
                            a = this._timeScaleInterpolant
                          null === a &&
                            ((a = r._lendControlInterpolant()), (this._timeScaleInterpolant = a))
                          var s = a.parameterPositions,
                            l = a.sampleValues
                          return (s[0] = i), (s[1] = i + n), (l[0] = e / o), (l[1] = t / o), this
                        }),
                        (t.stopWarping = function () {
                          var e = this._timeScaleInterpolant
                          return (
                            null !== e &&
                              ((this._timeScaleInterpolant = null),
                              this._mixer._takeBackControlInterpolant(e)),
                            this
                          )
                        }),
                        (t.getMixer = function () {
                          return this._mixer
                        }),
                        (t.getClip = function () {
                          return this._clip
                        }),
                        (t.getRoot = function () {
                          return this._localRoot || this._mixer._root
                        }),
                        (t._update = function (e, t, n, r) {
                          if (this.enabled) {
                            var i = this._startTime
                            if (null !== i) {
                              var o = (e - i) * n
                              if (o < 0 || 0 === n) return
                              ;(this._startTime = null), (t = n * o)
                            }
                            t *= this._updateTimeScale(e)
                            var a = this._updateTime(t),
                              s = this._updateWeight(e)
                            if (s > 0) {
                              var l = this._interpolants,
                                c = this._propertyBindings
                              switch (this.blendMode) {
                                case Xt:
                                  for (var u = 0, h = l.length; u !== h; ++u)
                                    l[u].evaluate(a), c[u].accumulateAdditive(s)
                                  break
                                case qt:
                                default:
                                  for (var d = 0, p = l.length; d !== p; ++d)
                                    l[d].evaluate(a), c[d].accumulate(r, s)
                              }
                            }
                          } else this._updateWeight(e)
                        }),
                        (t._updateWeight = function (e) {
                          var t = 0
                          if (this.enabled) {
                            t = this.weight
                            var n = this._weightInterpolant
                            if (null !== n) {
                              var r = n.evaluate(e)[0]
                              ;(t *= r),
                                e > n.parameterPositions[1] &&
                                  (this.stopFading(), 0 === r && (this.enabled = !1))
                            }
                          }
                          return (this._effectiveWeight = t), t
                        }),
                        (t._updateTimeScale = function (e) {
                          var t = 0
                          if (!this.paused) {
                            t = this.timeScale
                            var n = this._timeScaleInterpolant
                            null !== n &&
                              ((t *= n.evaluate(e)[0]),
                              e > n.parameterPositions[1] &&
                                (this.stopWarping(),
                                0 === t ? (this.paused = !0) : (this.timeScale = t)))
                          }
                          return (this._effectiveTimeScale = t), t
                        }),
                        (t._updateTime = function (e) {
                          var t = this._clip.duration,
                            n = this.loop,
                            r = this.time + e,
                            i = this._loopCount,
                            o = n === Ut
                          if (0 === e) return -1 === i ? r : o && 1 === (1 & i) ? t - r : r
                          if (n === kt) {
                            ;-1 === i && ((this._loopCount = 0), this._setEndings(!0, !0, !1))
                            e: {
                              if (r >= t) r = t
                              else {
                                if (!(r < 0)) {
                                  this.time = r
                                  break e
                                }
                                r = 0
                              }
                              this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1),
                                (this.time = r),
                                this._mixer.dispatchEvent({
                                  type: 'finished',
                                  action: this,
                                  direction: e < 0 ? -1 : 1,
                                })
                            }
                          } else {
                            if (
                              (-1 === i &&
                                (e >= 0
                                  ? ((i = 0), this._setEndings(!0, 0 === this.repetitions, o))
                                  : this._setEndings(0 === this.repetitions, !0, o)),
                              r >= t || r < 0)
                            ) {
                              var a = Math.floor(r / t)
                              ;(r -= t * a), (i += Math.abs(a))
                              var s = this.repetitions - i
                              if (s <= 0)
                                this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1),
                                  (r = e > 0 ? t : 0),
                                  (this.time = r),
                                  this._mixer.dispatchEvent({
                                    type: 'finished',
                                    action: this,
                                    direction: e > 0 ? 1 : -1,
                                  })
                              else {
                                if (1 === s) {
                                  var l = e < 0
                                  this._setEndings(l, !l, o)
                                } else this._setEndings(!1, !1, o)
                                ;(this._loopCount = i),
                                  (this.time = r),
                                  this._mixer.dispatchEvent({
                                    type: 'loop',
                                    action: this,
                                    loopDelta: a,
                                  })
                              }
                            } else this.time = r
                            if (o && 1 === (1 & i)) return t - r
                          }
                          return r
                        }),
                        (t._setEndings = function (e, t, n) {
                          var r = this._interpolantSettings
                          n
                            ? ((r.endingStart = Vt), (r.endingEnd = Vt))
                            : ((r.endingStart = e ? (this.zeroSlopeAtStart ? Vt : jt) : Wt),
                              (r.endingEnd = t ? (this.zeroSlopeAtEnd ? Vt : jt) : Wt))
                        }),
                        (t._scheduleFading = function (e, t, n) {
                          var r = this._mixer,
                            i = r.time,
                            o = this._weightInterpolant
                          null === o &&
                            ((o = r._lendControlInterpolant()), (this._weightInterpolant = o))
                          var a = o.parameterPositions,
                            s = o.sampleValues
                          return (a[0] = i), (s[0] = t), (a[1] = i + e), (s[1] = n), this
                        }),
                        e
                      )
                    })()
                    function op(e) {
                      ;(this._root = e),
                        this._initMemoryManager(),
                        (this._accuIndex = 0),
                        (this.time = 0),
                        (this.timeScale = 1)
                    }
                    op.prototype = Object.assign(Object.create(qn.prototype), {
                      constructor: op,
                      _bindAction: function (e, t) {
                        var n = e._localRoot || this._root,
                          r = e._clip.tracks,
                          i = r.length,
                          o = e._propertyBindings,
                          a = e._interpolants,
                          s = n.uuid,
                          l = this._bindingsByRootAndName,
                          c = l[s]
                        void 0 === c && ((c = {}), (l[s] = c))
                        for (var u = 0; u !== i; ++u) {
                          var h = r[u],
                            d = h.name,
                            p = c[d]
                          if (void 0 !== p) o[u] = p
                          else {
                            if (void 0 !== (p = o[u])) {
                              null === p._cacheIndex &&
                                (++p.referenceCount, this._addInactiveBinding(p, s, d))
                              continue
                            }
                            var f = t && t._propertyBindings[u].binding.parsedPath
                            ++(p = new Vd(np.create(n, d, f), h.ValueTypeName, h.getValueSize()))
                              .referenceCount,
                              this._addInactiveBinding(p, s, d),
                              (o[u] = p)
                          }
                          a[u].resultBuffer = p.buffer
                        }
                      },
                      _activateAction: function (e) {
                        if (!this._isActiveAction(e)) {
                          if (null === e._cacheIndex) {
                            var t = (e._localRoot || this._root).uuid,
                              n = e._clip.uuid,
                              r = this._actionsByClip[n]
                            this._bindAction(e, r && r.knownActions[0]),
                              this._addInactiveAction(e, n, t)
                          }
                          for (var i = e._propertyBindings, o = 0, a = i.length; o !== a; ++o) {
                            var s = i[o]
                            0 === s.useCount++ && (this._lendBinding(s), s.saveOriginalState())
                          }
                          this._lendAction(e)
                        }
                      },
                      _deactivateAction: function (e) {
                        if (this._isActiveAction(e)) {
                          for (var t = e._propertyBindings, n = 0, r = t.length; n !== r; ++n) {
                            var i = t[n]
                            0 === --i.useCount &&
                              (i.restoreOriginalState(), this._takeBackBinding(i))
                          }
                          this._takeBackAction(e)
                        }
                      },
                      _initMemoryManager: function () {
                        ;(this._actions = []),
                          (this._nActiveActions = 0),
                          (this._actionsByClip = {}),
                          (this._bindings = []),
                          (this._nActiveBindings = 0),
                          (this._bindingsByRootAndName = {}),
                          (this._controlInterpolants = []),
                          (this._nActiveControlInterpolants = 0)
                        var e = this
                        this.stats = {
                          actions: {
                            get total() {
                              return e._actions.length
                            },
                            get inUse() {
                              return e._nActiveActions
                            },
                          },
                          bindings: {
                            get total() {
                              return e._bindings.length
                            },
                            get inUse() {
                              return e._nActiveBindings
                            },
                          },
                          controlInterpolants: {
                            get total() {
                              return e._controlInterpolants.length
                            },
                            get inUse() {
                              return e._nActiveControlInterpolants
                            },
                          },
                        }
                      },
                      _isActiveAction: function (e) {
                        var t = e._cacheIndex
                        return null !== t && t < this._nActiveActions
                      },
                      _addInactiveAction: function (e, t, n) {
                        var r = this._actions,
                          i = this._actionsByClip,
                          o = i[t]
                        if (void 0 === o)
                          (o = { knownActions: [e], actionByRoot: {} }),
                            (e._byClipCacheIndex = 0),
                            (i[t] = o)
                        else {
                          var a = o.knownActions
                          ;(e._byClipCacheIndex = a.length), a.push(e)
                        }
                        ;(e._cacheIndex = r.length), r.push(e), (o.actionByRoot[n] = e)
                      },
                      _removeInactiveAction: function (e) {
                        var t = this._actions,
                          n = t[t.length - 1],
                          r = e._cacheIndex
                        ;(n._cacheIndex = r), (t[r] = n), t.pop(), (e._cacheIndex = null)
                        var i = e._clip.uuid,
                          o = this._actionsByClip,
                          a = o[i],
                          s = a.knownActions,
                          l = s[s.length - 1],
                          c = e._byClipCacheIndex
                        ;(l._byClipCacheIndex = c),
                          (s[c] = l),
                          s.pop(),
                          (e._byClipCacheIndex = null),
                          delete a.actionByRoot[(e._localRoot || this._root).uuid],
                          0 === s.length && delete o[i],
                          this._removeInactiveBindingsForAction(e)
                      },
                      _removeInactiveBindingsForAction: function (e) {
                        for (var t = e._propertyBindings, n = 0, r = t.length; n !== r; ++n) {
                          var i = t[n]
                          0 === --i.referenceCount && this._removeInactiveBinding(i)
                        }
                      },
                      _lendAction: function (e) {
                        var t = this._actions,
                          n = e._cacheIndex,
                          r = this._nActiveActions++,
                          i = t[r]
                        ;(e._cacheIndex = r), (t[r] = e), (i._cacheIndex = n), (t[n] = i)
                      },
                      _takeBackAction: function (e) {
                        var t = this._actions,
                          n = e._cacheIndex,
                          r = --this._nActiveActions,
                          i = t[r]
                        ;(e._cacheIndex = r), (t[r] = e), (i._cacheIndex = n), (t[n] = i)
                      },
                      _addInactiveBinding: function (e, t, n) {
                        var r = this._bindingsByRootAndName,
                          i = this._bindings,
                          o = r[t]
                        void 0 === o && ((o = {}), (r[t] = o)),
                          (o[n] = e),
                          (e._cacheIndex = i.length),
                          i.push(e)
                      },
                      _removeInactiveBinding: function (e) {
                        var t = this._bindings,
                          n = e.binding,
                          r = n.rootNode.uuid,
                          i = n.path,
                          o = this._bindingsByRootAndName,
                          a = o[r],
                          s = t[t.length - 1],
                          l = e._cacheIndex
                        ;(s._cacheIndex = l),
                          (t[l] = s),
                          t.pop(),
                          delete a[i],
                          0 === Object.keys(a).length && delete o[r]
                      },
                      _lendBinding: function (e) {
                        var t = this._bindings,
                          n = e._cacheIndex,
                          r = this._nActiveBindings++,
                          i = t[r]
                        ;(e._cacheIndex = r), (t[r] = e), (i._cacheIndex = n), (t[n] = i)
                      },
                      _takeBackBinding: function (e) {
                        var t = this._bindings,
                          n = e._cacheIndex,
                          r = --this._nActiveBindings,
                          i = t[r]
                        ;(e._cacheIndex = r), (t[r] = e), (i._cacheIndex = n), (t[n] = i)
                      },
                      _lendControlInterpolant: function () {
                        var e = this._controlInterpolants,
                          t = this._nActiveControlInterpolants++,
                          n = e[t]
                        return (
                          void 0 === n &&
                            (((n = new qu(
                              new Float32Array(2),
                              new Float32Array(2),
                              1,
                              this._controlInterpolantsResultBuffer,
                            )).__cacheIndex = t),
                            (e[t] = n)),
                          n
                        )
                      },
                      _takeBackControlInterpolant: function (e) {
                        var t = this._controlInterpolants,
                          n = e.__cacheIndex,
                          r = --this._nActiveControlInterpolants,
                          i = t[r]
                        ;(e.__cacheIndex = r), (t[r] = e), (i.__cacheIndex = n), (t[n] = i)
                      },
                      _controlInterpolantsResultBuffer: new Float32Array(1),
                      clipAction: function (e, t, n) {
                        var r = t || this._root,
                          i = r.uuid,
                          o = 'string' === typeof e ? nh.findByName(r, e) : e,
                          a = null !== o ? o.uuid : e,
                          s = this._actionsByClip[a],
                          l = null
                        if ((void 0 === n && (n = null !== o ? o.blendMode : qt), void 0 !== s)) {
                          var c = s.actionByRoot[i]
                          if (void 0 !== c && c.blendMode === n) return c
                          ;(l = s.knownActions[0]), null === o && (o = l._clip)
                        }
                        if (null === o) return null
                        var u = new ip(this, o, t, n)
                        return this._bindAction(u, l), this._addInactiveAction(u, a, i), u
                      },
                      existingAction: function (e, t) {
                        var n = t || this._root,
                          r = n.uuid,
                          i = 'string' === typeof e ? nh.findByName(n, e) : e,
                          o = i ? i.uuid : e,
                          a = this._actionsByClip[o]
                        return (void 0 !== a && a.actionByRoot[r]) || null
                      },
                      stopAllAction: function () {
                        for (var e = this._actions, t = this._nActiveActions - 1; t >= 0; --t)
                          e[t].stop()
                        return this
                      },
                      update: function (e) {
                        e *= this.timeScale
                        for (
                          var t = this._actions,
                            n = this._nActiveActions,
                            r = (this.time += e),
                            i = Math.sign(e),
                            o = (this._accuIndex ^= 1),
                            a = 0;
                          a !== n;
                          ++a
                        )
                          t[a]._update(r, e, i, o)
                        for (var s = this._bindings, l = this._nActiveBindings, c = 0; c !== l; ++c)
                          s[c].apply(o)
                        return this
                      },
                      setTime: function (e) {
                        this.time = 0
                        for (var t = 0; t < this._actions.length; t++) this._actions[t].time = 0
                        return this.update(e)
                      },
                      getRoot: function () {
                        return this._root
                      },
                      uncacheClip: function (e) {
                        var t = this._actions,
                          n = e.uuid,
                          r = this._actionsByClip,
                          i = r[n]
                        if (void 0 !== i) {
                          for (var o = i.knownActions, a = 0, s = o.length; a !== s; ++a) {
                            var l = o[a]
                            this._deactivateAction(l)
                            var c = l._cacheIndex,
                              u = t[t.length - 1]
                            ;(l._cacheIndex = null),
                              (l._byClipCacheIndex = null),
                              (u._cacheIndex = c),
                              (t[c] = u),
                              t.pop(),
                              this._removeInactiveBindingsForAction(l)
                          }
                          delete r[n]
                        }
                      },
                      uncacheRoot: function (e) {
                        var t = e.uuid,
                          n = this._actionsByClip
                        for (var r in n) {
                          var i = n[r].actionByRoot[t]
                          void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i))
                        }
                        var o = this._bindingsByRootAndName[t]
                        if (void 0 !== o)
                          for (var a in o) {
                            var s = o[a]
                            s.restoreOriginalState(), this._removeInactiveBinding(s)
                          }
                      },
                      uncacheAction: function (e, t) {
                        var n = this.existingAction(e, t)
                        null !== n && (this._deactivateAction(n), this._removeInactiveAction(n))
                      },
                    })
                    var ap = (function () {
                      function e(e) {
                        'string' === typeof e &&
                          (console.warn('THREE.Uniform: Type parameter is no longer needed.'),
                          (e = arguments[1])),
                          (this.value = e)
                      }
                      return (
                        (e.prototype.clone = function () {
                          return new e(
                            void 0 === this.value.clone ? this.value : this.value.clone(),
                          )
                        }),
                        e
                      )
                    })()
                    function sp(e, t, n) {
                      yl.call(this, e, t), (this.meshPerAttribute = n || 1)
                    }
                    function lp(e, t, n, r, i) {
                      ;(this.buffer = e),
                        (this.type = t),
                        (this.itemSize = n),
                        (this.elementSize = r),
                        (this.count = i),
                        (this.version = 0)
                    }
                    function cp(e, t, n, r) {
                      ;(this.ray = new Br(e, t)),
                        (this.near = n || 0),
                        (this.far = r || 1 / 0),
                        (this.camera = null),
                        (this.layers = new Xr()),
                        (this.params = {
                          Mesh: {},
                          Line: { threshold: 1 },
                          LOD: {},
                          Points: { threshold: 1 },
                          Sprite: {},
                        }),
                        Object.defineProperties(this.params, {
                          PointCloud: {
                            get: function () {
                              return (
                                console.warn(
                                  'THREE.Raycaster: params.PointCloud has been renamed to params.Points.',
                                ),
                                this.Points
                              )
                            },
                          },
                        })
                    }
                    function up(e, t) {
                      return e.distance - t.distance
                    }
                    function hp(e, t, n, r) {
                      if ((e.layers.test(t.layers) && e.raycast(t, n), !0 === r))
                        for (var i = e.children, o = 0, a = i.length; o < a; o++) hp(i[o], t, n, !0)
                    }
                    ;(sp.prototype = Object.assign(Object.create(yl.prototype), {
                      constructor: sp,
                      isInstancedInterleavedBuffer: !0,
                      copy: function (e) {
                        return (
                          yl.prototype.copy.call(this, e),
                          (this.meshPerAttribute = e.meshPerAttribute),
                          this
                        )
                      },
                      clone: function (e) {
                        var t = yl.prototype.clone.call(this, e)
                        return (t.meshPerAttribute = this.meshPerAttribute), t
                      },
                      toJSON: function (e) {
                        var t = yl.prototype.toJSON.call(this, e)
                        return (
                          (t.isInstancedInterleavedBuffer = !0),
                          (t.meshPerAttribute = this.meshPerAttribute),
                          t
                        )
                      },
                    })),
                      Object.defineProperty(lp.prototype, 'needsUpdate', {
                        set: function (e) {
                          !0 === e && this.version++
                        },
                      }),
                      Object.assign(lp.prototype, {
                        isGLBufferAttribute: !0,
                        setBuffer: function (e) {
                          return (this.buffer = e), this
                        },
                        setType: function (e, t) {
                          return (this.type = e), (this.elementSize = t), this
                        },
                        setItemSize: function (e) {
                          return (this.itemSize = e), this
                        },
                        setCount: function (e) {
                          return (this.count = e), this
                        },
                      }),
                      Object.assign(cp.prototype, {
                        set: function (e, t) {
                          this.ray.set(e, t)
                        },
                        setFromCamera: function (e, t) {
                          t && t.isPerspectiveCamera
                            ? (this.ray.origin.setFromMatrixPosition(t.matrixWorld),
                              this.ray.direction
                                .set(e.x, e.y, 0.5)
                                .unproject(t)
                                .sub(this.ray.origin)
                                .normalize(),
                              (this.camera = t))
                            : t && t.isOrthographicCamera
                            ? (this.ray.origin
                                .set(e.x, e.y, (t.near + t.far) / (t.near - t.far))
                                .unproject(t),
                              this.ray.direction.set(0, 0, -1).transformDirection(t.matrixWorld),
                              (this.camera = t))
                            : console.error('THREE.Raycaster: Unsupported camera type: ' + t.type)
                        },
                        intersectObject: function (e, t, n) {
                          var r = n || []
                          return hp(e, this, r, t), r.sort(up), r
                        },
                        intersectObjects: function (e, t, n) {
                          var r = n || []
                          if (!1 === Array.isArray(e))
                            return (
                              console.warn(
                                'THREE.Raycaster.intersectObjects: objects is not an Array.',
                              ),
                              r
                            )
                          for (var i = 0, o = e.length; i < o; i++) hp(e[i], this, r, t)
                          return r.sort(up), r
                        },
                      })
                    var dp = (function () {
                        function e(e, t, n) {
                          return (
                            void 0 === e && (e = 1),
                            void 0 === t && (t = 0),
                            void 0 === n && (n = 0),
                            (this.radius = e),
                            (this.phi = t),
                            (this.theta = n),
                            this
                          )
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n) {
                            return (this.radius = e), (this.phi = t), (this.theta = n), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return (
                              (this.radius = e.radius),
                              (this.phi = e.phi),
                              (this.theta = e.theta),
                              this
                            )
                          }),
                          (t.makeSafe = function () {
                            var e = 1e-6
                            return (this.phi = Math.max(e, Math.min(Math.PI - e, this.phi))), this
                          }),
                          (t.setFromVector3 = function (e) {
                            return this.setFromCartesianCoords(e.x, e.y, e.z)
                          }),
                          (t.setFromCartesianCoords = function (e, t, n) {
                            return (
                              (this.radius = Math.sqrt(e * e + t * t + n * n)),
                              0 === this.radius
                                ? ((this.theta = 0), (this.phi = 0))
                                : ((this.theta = Math.atan2(e, n)),
                                  (this.phi = Math.acos(Kn.clamp(t / this.radius, -1, 1)))),
                              this
                            )
                          }),
                          e
                        )
                      })(),
                      pp = (function () {
                        function e(e, t, n) {
                          return (
                            (this.radius = void 0 !== e ? e : 1),
                            (this.theta = void 0 !== t ? t : 0),
                            (this.y = void 0 !== n ? n : 0),
                            this
                          )
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t, n) {
                            return (this.radius = e), (this.theta = t), (this.y = n), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return (
                              (this.radius = e.radius), (this.theta = e.theta), (this.y = e.y), this
                            )
                          }),
                          (t.setFromVector3 = function (e) {
                            return this.setFromCartesianCoords(e.x, e.y, e.z)
                          }),
                          (t.setFromCartesianCoords = function (e, t, n) {
                            return (
                              (this.radius = Math.sqrt(e * e + n * n)),
                              (this.theta = Math.atan2(e, n)),
                              (this.y = t),
                              this
                            )
                          }),
                          e
                        )
                      })(),
                      fp = new Jn(),
                      mp = (function () {
                        function e(e, t) {
                          Object.defineProperty(this, 'isBox2', { value: !0 }),
                            (this.min = void 0 !== e ? e : new Jn(1 / 0, 1 / 0)),
                            (this.max = void 0 !== t ? t : new Jn(-1 / 0, -1 / 0))
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.min.copy(e), this.max.copy(t), this
                          }),
                          (t.setFromPoints = function (e) {
                            this.makeEmpty()
                            for (var t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t])
                            return this
                          }),
                          (t.setFromCenterAndSize = function (e, t) {
                            var n = fp.copy(t).multiplyScalar(0.5)
                            return this.min.copy(e).sub(n), this.max.copy(e).add(n), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.min.copy(e.min), this.max.copy(e.max), this
                          }),
                          (t.makeEmpty = function () {
                            return (
                              (this.min.x = this.min.y = 1 / 0),
                              (this.max.x = this.max.y = -1 / 0),
                              this
                            )
                          }),
                          (t.isEmpty = function () {
                            return this.max.x < this.min.x || this.max.y < this.min.y
                          }),
                          (t.getCenter = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Box2: .getCenter() target is now required'),
                                (e = new Jn())),
                              this.isEmpty()
                                ? e.set(0, 0)
                                : e.addVectors(this.min, this.max).multiplyScalar(0.5)
                            )
                          }),
                          (t.getSize = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Box2: .getSize() target is now required'),
                                (e = new Jn())),
                              this.isEmpty() ? e.set(0, 0) : e.subVectors(this.max, this.min)
                            )
                          }),
                          (t.expandByPoint = function (e) {
                            return this.min.min(e), this.max.max(e), this
                          }),
                          (t.expandByVector = function (e) {
                            return this.min.sub(e), this.max.add(e), this
                          }),
                          (t.expandByScalar = function (e) {
                            return this.min.addScalar(-e), this.max.addScalar(e), this
                          }),
                          (t.containsPoint = function (e) {
                            return !(
                              e.x < this.min.x ||
                              e.x > this.max.x ||
                              e.y < this.min.y ||
                              e.y > this.max.y
                            )
                          }),
                          (t.containsBox = function (e) {
                            return (
                              this.min.x <= e.min.x &&
                              e.max.x <= this.max.x &&
                              this.min.y <= e.min.y &&
                              e.max.y <= this.max.y
                            )
                          }),
                          (t.getParameter = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Box2: .getParameter() target is now required'),
                                (t = new Jn())),
                              t.set(
                                (e.x - this.min.x) / (this.max.x - this.min.x),
                                (e.y - this.min.y) / (this.max.y - this.min.y),
                              )
                            )
                          }),
                          (t.intersectsBox = function (e) {
                            return !(
                              e.max.x < this.min.x ||
                              e.min.x > this.max.x ||
                              e.max.y < this.min.y ||
                              e.min.y > this.max.y
                            )
                          }),
                          (t.clampPoint = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Box2: .clampPoint() target is now required'),
                                (t = new Jn())),
                              t.copy(e).clamp(this.min, this.max)
                            )
                          }),
                          (t.distanceToPoint = function (e) {
                            return fp.copy(e).clamp(this.min, this.max).sub(e).length()
                          }),
                          (t.intersect = function (e) {
                            return this.min.max(e.min), this.max.min(e.max), this
                          }),
                          (t.union = function (e) {
                            return this.min.min(e.min), this.max.max(e.max), this
                          }),
                          (t.translate = function (e) {
                            return this.min.add(e), this.max.add(e), this
                          }),
                          (t.equals = function (e) {
                            return e.min.equals(this.min) && e.max.equals(this.max)
                          }),
                          e
                        )
                      })(),
                      vp = new lr(),
                      gp = new lr(),
                      yp = (function () {
                        function e(e, t) {
                          ;(this.start = void 0 !== e ? e : new lr()),
                            (this.end = void 0 !== t ? t : new lr())
                        }
                        var t = e.prototype
                        return (
                          (t.set = function (e, t) {
                            return this.start.copy(e), this.end.copy(t), this
                          }),
                          (t.clone = function () {
                            return new this.constructor().copy(this)
                          }),
                          (t.copy = function (e) {
                            return this.start.copy(e.start), this.end.copy(e.end), this
                          }),
                          (t.getCenter = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Line3: .getCenter() target is now required'),
                                (e = new lr())),
                              e.addVectors(this.start, this.end).multiplyScalar(0.5)
                            )
                          }),
                          (t.delta = function (e) {
                            return (
                              void 0 === e &&
                                (console.warn('THREE.Line3: .delta() target is now required'),
                                (e = new lr())),
                              e.subVectors(this.end, this.start)
                            )
                          }),
                          (t.distanceSq = function () {
                            return this.start.distanceToSquared(this.end)
                          }),
                          (t.distance = function () {
                            return this.start.distanceTo(this.end)
                          }),
                          (t.at = function (e, t) {
                            return (
                              void 0 === t &&
                                (console.warn('THREE.Line3: .at() target is now required'),
                                (t = new lr())),
                              this.delta(t).multiplyScalar(e).add(this.start)
                            )
                          }),
                          (t.closestPointToPointParameter = function (e, t) {
                            vp.subVectors(e, this.start), gp.subVectors(this.end, this.start)
                            var n = gp.dot(gp),
                              r = gp.dot(vp) / n
                            return t && (r = Kn.clamp(r, 0, 1)), r
                          }),
                          (t.closestPointToPoint = function (e, t, n) {
                            var r = this.closestPointToPointParameter(e, t)
                            return (
                              void 0 === n &&
                                (console.warn(
                                  'THREE.Line3: .closestPointToPoint() target is now required',
                                ),
                                (n = new lr())),
                              this.delta(n).multiplyScalar(r).add(this.start)
                            )
                          }),
                          (t.applyMatrix4 = function (e) {
                            return this.start.applyMatrix4(e), this.end.applyMatrix4(e), this
                          }),
                          (t.equals = function (e) {
                            return e.start.equals(this.start) && e.end.equals(this.end)
                          }),
                          e
                        )
                      })()
                    function bp(e) {
                      si.call(this),
                        (this.material = e),
                        (this.render = function () {}),
                        (this.hasPositions = !1),
                        (this.hasNormals = !1),
                        (this.hasColors = !1),
                        (this.hasUvs = !1),
                        (this.positionArray = null),
                        (this.normalArray = null),
                        (this.colorArray = null),
                        (this.uvArray = null),
                        (this.count = 0)
                    }
                    ;(bp.prototype = Object.create(si.prototype)),
                      (bp.prototype.constructor = bp),
                      (bp.prototype.isImmediateRenderObject = !0)
                    var Ap = new lr(),
                      wp = (function (e) {
                        function t(t, n) {
                          var r
                          ;((r = e.call(this) || this).light = t),
                            r.light.updateMatrixWorld(),
                            (r.matrix = t.matrixWorld),
                            (r.matrixAutoUpdate = !1),
                            (r.color = n)
                          for (
                            var i = new ro(),
                              o = [
                                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,
                              ],
                              a = 0,
                              s = 1,
                              l = 32;
                            a < l;
                            a++, s++
                          ) {
                            var c = (a / l) * Math.PI * 2,
                              u = (s / l) * Math.PI * 2
                            o.push(Math.cos(c), Math.sin(c), 1, Math.cos(u), Math.sin(u), 1)
                          }
                          i.setAttribute('position', new Wi(o, 3))
                          var h = new tc({ fog: !1, toneMapped: !1 })
                          return (r.cone = new uc(i, h)), r.add(r.cone), r.update(), r
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.dispose = function () {
                            this.cone.geometry.dispose(), this.cone.material.dispose()
                          }),
                          (n.update = function () {
                            this.light.updateMatrixWorld()
                            var e = this.light.distance ? this.light.distance : 1e3,
                              t = e * Math.tan(this.light.angle)
                            this.cone.scale.set(t, t, e),
                              Ap.setFromMatrixPosition(this.light.target.matrixWorld),
                              this.cone.lookAt(Ap),
                              void 0 !== this.color
                                ? this.cone.material.color.set(this.color)
                                : this.cone.material.color.copy(this.light.color)
                          }),
                          t
                        )
                      })(si),
                      xp = new lr(),
                      Ep = new Fr(),
                      Mp = new Fr(),
                      _p = (function (e) {
                        function t(t) {
                          for (
                            var n,
                              r = Tp(t),
                              i = new ro(),
                              o = [],
                              a = [],
                              s = new Li(0, 0, 1),
                              l = new Li(0, 1, 0),
                              c = 0;
                            c < r.length;
                            c++
                          ) {
                            var u = r[c]
                            u.parent &&
                              u.parent.isBone &&
                              (o.push(0, 0, 0),
                              o.push(0, 0, 0),
                              a.push(s.r, s.g, s.b),
                              a.push(l.r, l.g, l.b))
                          }
                          i.setAttribute('position', new Wi(o, 3)),
                            i.setAttribute('color', new Wi(a, 3))
                          var h = new tc({
                            vertexColors: !0,
                            depthTest: !1,
                            depthWrite: !1,
                            toneMapped: !1,
                            transparent: !0,
                          })
                          return (
                            ((n = e.call(this, i, h) || this).type = 'SkeletonHelper'),
                            (n.isSkeletonHelper = !0),
                            (n.root = t),
                            (n.bones = r),
                            (n.matrix = t.matrixWorld),
                            (n.matrixAutoUpdate = !1),
                            n
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.updateMatrixWorld = function (t) {
                            var n = this.bones,
                              r = this.geometry,
                              i = r.getAttribute('position')
                            Mp.copy(this.root.matrixWorld).invert()
                            for (var o = 0, a = 0; o < n.length; o++) {
                              var s = n[o]
                              s.parent &&
                                s.parent.isBone &&
                                (Ep.multiplyMatrices(Mp, s.matrixWorld),
                                xp.setFromMatrixPosition(Ep),
                                i.setXYZ(a, xp.x, xp.y, xp.z),
                                Ep.multiplyMatrices(Mp, s.parent.matrixWorld),
                                xp.setFromMatrixPosition(Ep),
                                i.setXYZ(a + 1, xp.x, xp.y, xp.z),
                                (a += 2))
                            }
                            ;(r.getAttribute('position').needsUpdate = !0),
                              e.prototype.updateMatrixWorld.call(this, t)
                          }),
                          t
                        )
                      })(uc)
                    function Tp(e) {
                      var t = []
                      e && e.isBone && t.push(e)
                      for (var n = 0; n < e.children.length; n++) t.push.apply(t, Tp(e.children[n]))
                      return t
                    }
                    var Sp = (function (e) {
                        function t(t, n, r) {
                          var i,
                            o = new Mu(n, 4, 2),
                            a = new Oi({ wireframe: !0, fog: !1, toneMapped: !1 })
                          return (
                            ((i = e.call(this, o, a) || this).light = t),
                            i.light.updateMatrixWorld(),
                            (i.color = r),
                            (i.type = 'PointLightHelper'),
                            (i.matrix = i.light.matrixWorld),
                            (i.matrixAutoUpdate = !1),
                            i.update(),
                            i
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.dispose = function () {
                            this.geometry.dispose(), this.material.dispose()
                          }),
                          (n.update = function () {
                            void 0 !== this.color
                              ? this.material.color.set(this.color)
                              : this.material.color.copy(this.light.color)
                          }),
                          t
                        )
                      })(xo),
                      Cp = new lr(),
                      Lp = new Li(),
                      Rp = new Li(),
                      Pp = (function (e) {
                        function t(t, n, r) {
                          var i
                          ;((i = e.call(this) || this).light = t),
                            i.light.updateMatrixWorld(),
                            (i.matrix = t.matrixWorld),
                            (i.matrixAutoUpdate = !1),
                            (i.color = r)
                          var o = new bu(n)
                          o.rotateY(0.5 * Math.PI),
                            (i.material = new Oi({ wireframe: !0, fog: !1, toneMapped: !1 })),
                            void 0 === i.color && (i.material.vertexColors = !0)
                          var a = o.getAttribute('position'),
                            s = new Float32Array(3 * a.count)
                          return (
                            o.setAttribute('color', new Fi(s, 3)),
                            i.add(new xo(o, i.material)),
                            i.update(),
                            i
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.dispose = function () {
                            this.children[0].geometry.dispose(), this.children[0].material.dispose()
                          }),
                          (n.update = function () {
                            var e = this.children[0]
                            if (void 0 !== this.color) this.material.color.set(this.color)
                            else {
                              var t = e.geometry.getAttribute('color')
                              Lp.copy(this.light.color), Rp.copy(this.light.groundColor)
                              for (var n = 0, r = t.count; n < r; n++) {
                                var i = n < r / 2 ? Lp : Rp
                                t.setXYZ(n, i.r, i.g, i.b)
                              }
                              t.needsUpdate = !0
                            }
                            e.lookAt(Cp.setFromMatrixPosition(this.light.matrixWorld).negate())
                          }),
                          t
                        )
                      })(si),
                      Dp = (function (e) {
                        function t(t, n, r, i) {
                          var o
                          void 0 === t && (t = 10),
                            void 0 === n && (n = 10),
                            void 0 === r && (r = 4473924),
                            void 0 === i && (i = 8947848),
                            (r = new Li(r)),
                            (i = new Li(i))
                          for (
                            var a = n / 2,
                              s = t / n,
                              l = t / 2,
                              c = [],
                              u = [],
                              h = 0,
                              d = 0,
                              p = -l;
                            h <= n;
                            h++, p += s
                          ) {
                            c.push(-l, 0, p, l, 0, p), c.push(p, 0, -l, p, 0, l)
                            var f = h === a ? r : i
                            f.toArray(u, d),
                              (d += 3),
                              f.toArray(u, d),
                              (d += 3),
                              f.toArray(u, d),
                              (d += 3),
                              f.toArray(u, d),
                              (d += 3)
                          }
                          var m = new ro()
                          m.setAttribute('position', new Wi(c, 3)),
                            m.setAttribute('color', new Wi(u, 3))
                          var v = new tc({ vertexColors: !0, toneMapped: !1 })
                          return ((o = e.call(this, m, v) || this).type = 'GridHelper'), o
                        }
                        return Gn(t, e), t
                      })(uc),
                      Op = (function (e) {
                        function t(t, n, r, i, o, a) {
                          var s
                          void 0 === t && (t = 10),
                            void 0 === n && (n = 16),
                            void 0 === r && (r = 8),
                            void 0 === i && (i = 64),
                            void 0 === o && (o = 4473924),
                            void 0 === a && (a = 8947848),
                            (o = new Li(o)),
                            (a = new Li(a))
                          for (var l = [], c = [], u = 0; u <= n; u++) {
                            var h = (u / n) * (2 * Math.PI),
                              d = Math.sin(h) * t,
                              p = Math.cos(h) * t
                            l.push(0, 0, 0), l.push(d, 0, p)
                            var f = 1 & u ? o : a
                            c.push(f.r, f.g, f.b), c.push(f.r, f.g, f.b)
                          }
                          for (var m = 0; m <= r; m++)
                            for (var v = 1 & m ? o : a, g = t - (t / r) * m, y = 0; y < i; y++) {
                              var b = (y / i) * (2 * Math.PI),
                                A = Math.sin(b) * g,
                                w = Math.cos(b) * g
                              l.push(A, 0, w),
                                c.push(v.r, v.g, v.b),
                                (b = ((y + 1) / i) * (2 * Math.PI)),
                                (A = Math.sin(b) * g),
                                (w = Math.cos(b) * g),
                                l.push(A, 0, w),
                                c.push(v.r, v.g, v.b)
                            }
                          var x = new ro()
                          x.setAttribute('position', new Wi(l, 3)),
                            x.setAttribute('color', new Wi(c, 3))
                          var E = new tc({ vertexColors: !0, toneMapped: !1 })
                          return ((s = e.call(this, x, E) || this).type = 'PolarGridHelper'), s
                        }
                        return Gn(t, e), t
                      })(uc),
                      Ip = new lr(),
                      Bp = new lr(),
                      Fp = new lr(),
                      kp = (function (e) {
                        function t(t, n, r) {
                          var i
                          ;((i = e.call(this) || this).light = t),
                            i.light.updateMatrixWorld(),
                            (i.matrix = t.matrixWorld),
                            (i.matrixAutoUpdate = !1),
                            (i.color = r),
                            void 0 === n && (n = 1)
                          var o = new ro()
                          o.setAttribute(
                            'position',
                            new Wi([-n, n, 0, n, n, 0, n, -n, 0, -n, -n, 0, -n, n, 0], 3),
                          )
                          var a = new tc({ fog: !1, toneMapped: !1 })
                          return (
                            (i.lightPlane = new sc(o, a)),
                            i.add(i.lightPlane),
                            (o = new ro()).setAttribute('position', new Wi([0, 0, 0, 0, 0, 1], 3)),
                            (i.targetLine = new sc(o, a)),
                            i.add(i.targetLine),
                            i.update(),
                            i
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.dispose = function () {
                            this.lightPlane.geometry.dispose(),
                              this.lightPlane.material.dispose(),
                              this.targetLine.geometry.dispose(),
                              this.targetLine.material.dispose()
                          }),
                          (n.update = function () {
                            Ip.setFromMatrixPosition(this.light.matrixWorld),
                              Bp.setFromMatrixPosition(this.light.target.matrixWorld),
                              Fp.subVectors(Bp, Ip),
                              this.lightPlane.lookAt(Bp),
                              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(Bp),
                              (this.targetLine.scale.z = Fp.length())
                          }),
                          t
                        )
                      })(si),
                      Np = new lr(),
                      Up = new Do(),
                      Hp = (function (e) {
                        function t(t) {
                          var n,
                            r = new ro(),
                            i = new tc({ color: 16777215, vertexColors: !0, toneMapped: !1 }),
                            o = [],
                            a = [],
                            s = {},
                            l = new Li(16755200),
                            c = new Li(16711680),
                            u = new Li(43775),
                            h = new Li(16777215),
                            d = new Li(3355443)
                          function p(e, t, n) {
                            f(e, n), f(t, n)
                          }
                          function f(e, t) {
                            o.push(0, 0, 0),
                              a.push(t.r, t.g, t.b),
                              void 0 === s[e] && (s[e] = []),
                              s[e].push(o.length / 3 - 1)
                          }
                          return (
                            p('n1', 'n2', l),
                            p('n2', 'n4', l),
                            p('n4', 'n3', l),
                            p('n3', 'n1', l),
                            p('f1', 'f2', l),
                            p('f2', 'f4', l),
                            p('f4', 'f3', l),
                            p('f3', 'f1', l),
                            p('n1', 'f1', l),
                            p('n2', 'f2', l),
                            p('n3', 'f3', l),
                            p('n4', 'f4', l),
                            p('p', 'n1', c),
                            p('p', 'n2', c),
                            p('p', 'n3', c),
                            p('p', 'n4', c),
                            p('u1', 'u2', u),
                            p('u2', 'u3', u),
                            p('u3', 'u1', u),
                            p('c', 't', h),
                            p('p', 'c', d),
                            p('cn1', 'cn2', d),
                            p('cn3', 'cn4', d),
                            p('cf1', 'cf2', d),
                            p('cf3', 'cf4', d),
                            r.setAttribute('position', new Wi(o, 3)),
                            r.setAttribute('color', new Wi(a, 3)),
                            ((n = e.call(this, r, i) || this).type = 'CameraHelper'),
                            (n.camera = t),
                            n.camera.updateProjectionMatrix && n.camera.updateProjectionMatrix(),
                            (n.matrix = t.matrixWorld),
                            (n.matrixAutoUpdate = !1),
                            (n.pointMap = s),
                            n.update(),
                            n
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.update = function () {
                            var e = this.geometry,
                              t = this.pointMap,
                              n = 1,
                              r = 1
                            Up.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),
                              Gp('c', t, e, Up, 0, 0, -1),
                              Gp('t', t, e, Up, 0, 0, 1),
                              Gp('n1', t, e, Up, -n, -r, -1),
                              Gp('n2', t, e, Up, n, -r, -1),
                              Gp('n3', t, e, Up, -n, r, -1),
                              Gp('n4', t, e, Up, n, r, -1),
                              Gp('f1', t, e, Up, -n, -r, 1),
                              Gp('f2', t, e, Up, n, -r, 1),
                              Gp('f3', t, e, Up, -n, r, 1),
                              Gp('f4', t, e, Up, n, r, 1),
                              Gp('u1', t, e, Up, 0.7 * n, 1.1 * r, -1),
                              Gp('u2', t, e, Up, 0.7 * -n, 1.1 * r, -1),
                              Gp('u3', t, e, Up, 0, 2 * r, -1),
                              Gp('cf1', t, e, Up, -n, 0, 1),
                              Gp('cf2', t, e, Up, n, 0, 1),
                              Gp('cf3', t, e, Up, 0, -r, 1),
                              Gp('cf4', t, e, Up, 0, r, 1),
                              Gp('cn1', t, e, Up, -n, 0, -1),
                              Gp('cn2', t, e, Up, n, 0, -1),
                              Gp('cn3', t, e, Up, 0, -r, -1),
                              Gp('cn4', t, e, Up, 0, r, -1),
                              (e.getAttribute('position').needsUpdate = !0)
                          }),
                          t
                        )
                      })(uc)
                    function Gp(e, t, n, r, i, o, a) {
                      Np.set(i, o, a).unproject(r)
                      var s = t[e]
                      if (void 0 !== s)
                        for (var l = n.getAttribute('position'), c = 0, u = s.length; c < u; c++)
                          l.setXYZ(s[c], Np.x, Np.y, Np.z)
                    }
                    var zp,
                      jp,
                      Vp,
                      Wp = new hr(),
                      qp = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === n && (n = 16776960)
                          var i = 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,
                            ]),
                            o = new Float32Array(24),
                            a = new ro()
                          return (
                            a.setIndex(new Fi(i, 1)),
                            a.setAttribute('position', new Fi(o, 3)),
                            ((r =
                              e.call(this, a, new tc({ color: n, toneMapped: !1 })) ||
                              this).object = t),
                            (r.type = 'BoxHelper'),
                            (r.matrixAutoUpdate = !1),
                            r.update(),
                            r
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.update = function (e) {
                            if (
                              (void 0 !== e &&
                                console.warn('THREE.BoxHelper: .update() has no longer arguments.'),
                              void 0 !== this.object && Wp.setFromObject(this.object),
                              !Wp.isEmpty())
                            ) {
                              var t = Wp.min,
                                n = Wp.max,
                                r = this.geometry.attributes.position,
                                i = r.array
                              ;(i[0] = n.x),
                                (i[1] = n.y),
                                (i[2] = n.z),
                                (i[3] = t.x),
                                (i[4] = n.y),
                                (i[5] = n.z),
                                (i[6] = t.x),
                                (i[7] = t.y),
                                (i[8] = n.z),
                                (i[9] = n.x),
                                (i[10] = t.y),
                                (i[11] = n.z),
                                (i[12] = n.x),
                                (i[13] = n.y),
                                (i[14] = t.z),
                                (i[15] = t.x),
                                (i[16] = n.y),
                                (i[17] = t.z),
                                (i[18] = t.x),
                                (i[19] = t.y),
                                (i[20] = t.z),
                                (i[21] = n.x),
                                (i[22] = t.y),
                                (i[23] = t.z),
                                (r.needsUpdate = !0),
                                this.geometry.computeBoundingSphere()
                            }
                          }),
                          (n.setFromObject = function (e) {
                            return (this.object = e), this.update(), this
                          }),
                          (n.copy = function (e) {
                            return uc.prototype.copy.call(this, e), (this.object = e.object), this
                          }),
                          t
                        )
                      })(uc),
                      Xp = (function (e) {
                        function t(t, n) {
                          var r
                          void 0 === n && (n = 16776960)
                          var i = 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,
                            ]),
                            o = [
                              1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1,
                              -1, 1, -1, -1,
                            ],
                            a = new ro()
                          return (
                            a.setIndex(new Fi(i, 1)),
                            a.setAttribute('position', new Wi(o, 3)),
                            ((r =
                              e.call(this, a, new tc({ color: n, toneMapped: !1 })) || this).box =
                              t),
                            (r.type = 'Box3Helper'),
                            r.geometry.computeBoundingSphere(),
                            r
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.updateMatrixWorld = function (t) {
                            var n = this.box
                            n.isEmpty() ||
                              (n.getCenter(this.position),
                              n.getSize(this.scale),
                              this.scale.multiplyScalar(0.5),
                              e.prototype.updateMatrixWorld.call(this, t))
                          }),
                          t
                        )
                      })(uc),
                      Yp = (function (e) {
                        function t(t, n, r) {
                          var i
                          void 0 === n && (n = 1), void 0 === r && (r = 16776960)
                          var o = r,
                            a = [
                              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,
                            ],
                            s = new ro()
                          s.setAttribute('position', new Wi(a, 3)),
                            s.computeBoundingSphere(),
                            ((i =
                              e.call(this, s, new tc({ color: o, toneMapped: !1 })) || this).type =
                              'PlaneHelper'),
                            (i.plane = t),
                            (i.size = n)
                          var l = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1],
                            c = new ro()
                          return (
                            c.setAttribute('position', new Wi(l, 3)),
                            c.computeBoundingSphere(),
                            i.add(
                              new xo(
                                c,
                                new Oi({
                                  color: o,
                                  opacity: 0.2,
                                  transparent: !0,
                                  depthWrite: !1,
                                  toneMapped: !1,
                                }),
                              ),
                            ),
                            i
                          )
                        }
                        return (
                          Gn(t, e),
                          (t.prototype.updateMatrixWorld = function (t) {
                            var n = -this.plane.constant
                            Math.abs(n) < 1e-8 && (n = 1e-8),
                              this.scale.set(0.5 * this.size, 0.5 * this.size, n),
                              (this.children[0].material.side = n < 0 ? v : m),
                              this.lookAt(this.plane.normal),
                              e.prototype.updateMatrixWorld.call(this, t)
                          }),
                          t
                        )
                      })(sc),
                      Qp = new lr(),
                      Zp = (function (e) {
                        function t(t, n, r, i, o, a) {
                          var s
                          return (
                            ((s = e.call(this) || this).type = 'ArrowHelper'),
                            void 0 === t && (t = new lr(0, 0, 1)),
                            void 0 === n && (n = new lr(0, 0, 0)),
                            void 0 === r && (r = 1),
                            void 0 === i && (i = 16776960),
                            void 0 === o && (o = 0.2 * r),
                            void 0 === a && (a = 0.2 * o),
                            void 0 === zp &&
                              ((zp = new ro()).setAttribute(
                                'position',
                                new Wi([0, 0, 0, 0, 1, 0], 3),
                              ),
                              (jp = new Mc(0, 0.5, 1, 5, 1)).translate(0, -0.5, 0)),
                            s.position.copy(n),
                            (s.line = new sc(zp, new tc({ color: i, toneMapped: !1 }))),
                            (s.line.matrixAutoUpdate = !1),
                            s.add(s.line),
                            (s.cone = new xo(jp, new Oi({ color: i, toneMapped: !1 }))),
                            (s.cone.matrixAutoUpdate = !1),
                            s.add(s.cone),
                            s.setDirection(t),
                            s.setLength(r, o, a),
                            s
                          )
                        }
                        Gn(t, e)
                        var n = t.prototype
                        return (
                          (n.setDirection = function (e) {
                            if (e.y > 0.99999) this.quaternion.set(0, 0, 0, 1)
                            else if (e.y < -0.99999) this.quaternion.set(1, 0, 0, 0)
                            else {
                              Qp.set(e.z, 0, -e.x).normalize()
                              var t = Math.acos(e.y)
                              this.quaternion.setFromAxisAngle(Qp, t)
                            }
                          }),
                          (n.setLength = function (e, t, n) {
                            void 0 === t && (t = 0.2 * e),
                              void 0 === n && (n = 0.2 * t),
                              this.line.scale.set(1, Math.max(1e-4, e - t), 1),
                              this.line.updateMatrix(),
                              this.cone.scale.set(n, t, n),
                              (this.cone.position.y = e),
                              this.cone.updateMatrix()
                          }),
                          (n.setColor = function (e) {
                            this.line.material.color.set(e), this.cone.material.color.set(e)
                          }),
                          (n.copy = function (t) {
                            return (
                              e.prototype.copy.call(this, t, !1),
                              this.line.copy(t.line),
                              this.cone.copy(t.cone),
                              this
                            )
                          }),
                          t
                        )
                      })(si),
                      Kp = (function (e) {
                        function t(t) {
                          var n
                          void 0 === t && (t = 1)
                          var r = [0, 0, 0, t, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, t],
                            i = [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1],
                            o = new ro()
                          o.setAttribute('position', new Wi(r, 3)),
                            o.setAttribute('color', new Wi(i, 3))
                          var a = new tc({ vertexColors: !0, toneMapped: !1 })
                          return ((n = e.call(this, o, a) || this).type = 'AxesHelper'), n
                        }
                        return Gn(t, e), t
                      })(uc),
                      Jp = new Float32Array(1),
                      $p = new Int32Array(Jp.buffer),
                      ef = {
                        toHalfFloat: function (e) {
                          Jp[0] = e
                          var t = $p[0],
                            n = (t >> 16) & 32768,
                            r = (t >> 12) & 2047,
                            i = (t >> 23) & 255
                          return i < 103
                            ? n
                            : i > 142
                            ? ((n |= 31744), (n |= (255 == i ? 0 : 1) && 8388607 & t))
                            : i < 113
                            ? (n |= ((r |= 2048) >> (114 - i)) + ((r >> (113 - i)) & 1))
                            : ((n |= ((i - 112) << 10) | (r >> 1)), (n += 1 & r))
                        },
                      },
                      tf = 4,
                      nf = 8,
                      rf = Math.pow(2, nf),
                      of = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582],
                      af = nf - tf + 1 + of.length,
                      sf = 20,
                      lf =
                        (((Vp = {})[Kt] = 0),
                        (Vp[Jt] = 1),
                        (Vp[en] = 2),
                        (Vp[nn] = 3),
                        (Vp[rn] = 4),
                        (Vp[on] = 5),
                        (Vp[$t] = 6),
                        Vp),
                      cf = new Oi({ side: v, depthWrite: !1, depthTest: !1 }),
                      uf = new xo(new _o(), cf),
                      hf = new ed(),
                      df = Mf(),
                      pf = df._lodPlanes,
                      ff = df._sizeLods,
                      mf = df._sigmas,
                      vf = new Li(),
                      gf = null,
                      yf = (1 + Math.sqrt(5)) / 2,
                      bf = 1 / yf,
                      Af = [
                        new lr(1, 1, 1),
                        new lr(-1, 1, 1),
                        new lr(1, 1, -1),
                        new lr(-1, 1, -1),
                        new lr(0, yf, bf),
                        new lr(0, yf, -bf),
                        new lr(bf, 0, yf),
                        new lr(-bf, 0, yf),
                        new lr(yf, bf, 0),
                        new lr(-yf, bf, 0),
                      ]
                    function wf(e) {
                      var t = Math.max(e.r, e.g, e.b),
                        n = Math.min(Math.max(Math.ceil(Math.log2(t)), -128), 127)
                      return e.multiplyScalar(Math.pow(2, -n)), (n + 128) / 255
                    }
                    var xf = (function () {
                      function e(e) {
                        ;(this._renderer = e),
                          (this._pingPongRenderTarget = null),
                          (this._blurMaterial = Sf(sf)),
                          (this._equirectShader = null),
                          (this._cubemapShader = null),
                          this._compileMaterial(this._blurMaterial)
                      }
                      var t = e.prototype
                      return (
                        (t.fromScene = function (e, t, n, r) {
                          void 0 === t && (t = 0),
                            void 0 === n && (n = 0.1),
                            void 0 === r && (r = 100),
                            (gf = this._renderer.getRenderTarget())
                          var i = this._allocateTargets()
                          return (
                            this._sceneToCubeUV(e, n, r, i),
                            t > 0 && this._blur(i, 0, 0, t),
                            this._applyPMREM(i),
                            this._cleanup(i),
                            i
                          )
                        }),
                        (t.fromEquirectangular = function (e) {
                          return this._fromTexture(e)
                        }),
                        (t.fromCubemap = function (e) {
                          return this._fromTexture(e)
                        }),
                        (t.compileCubemapShader = function () {
                          null === this._cubemapShader &&
                            ((this._cubemapShader = Lf()),
                            this._compileMaterial(this._cubemapShader))
                        }),
                        (t.compileEquirectangularShader = function () {
                          null === this._equirectShader &&
                            ((this._equirectShader = Cf()),
                            this._compileMaterial(this._equirectShader))
                        }),
                        (t.dispose = function () {
                          this._blurMaterial.dispose(),
                            null !== this._cubemapShader && this._cubemapShader.dispose(),
                            null !== this._equirectShader && this._equirectShader.dispose()
                          for (var e = 0; e < pf.length; e++) pf[e].dispose()
                        }),
                        (t._cleanup = function (e) {
                          this._pingPongRenderTarget.dispose(),
                            this._renderer.setRenderTarget(gf),
                            (e.scissorTest = !1),
                            Tf(e, 0, 0, e.width, e.height)
                        }),
                        (t._fromTexture = function (e) {
                          gf = this._renderer.getRenderTarget()
                          var t = this._allocateTargets(e)
                          return (
                            this._textureToCubeUV(e, t), this._applyPMREM(t), this._cleanup(t), t
                          )
                        }),
                        (t._allocateTargets = function (e) {
                          var t = {
                              magFilter: me,
                              minFilter: me,
                              generateMipmaps: !1,
                              type: _e,
                              format: ze,
                              encoding: Ef(e) ? e.encoding : en,
                              depthBuffer: !1,
                            },
                            n = _f(t)
                          return (n.depthBuffer = !e), (this._pingPongRenderTarget = _f(t)), n
                        }),
                        (t._compileMaterial = function (e) {
                          var t = new xo(pf[0], e)
                          this._renderer.compile(t, hf)
                        }),
                        (t._sceneToCubeUV = function (e, t, n, r) {
                          var i = new Oo(90, 1, t, n),
                            o = [1, -1, 1, 1, 1, 1],
                            a = [1, 1, 1, -1, -1, -1],
                            s = this._renderer,
                            l = s.autoClear,
                            c = s.outputEncoding,
                            u = s.toneMapping
                          s.getClearColor(vf),
                            (s.toneMapping = $),
                            (s.outputEncoding = Kt),
                            (s.autoClear = !1)
                          var h = !1,
                            d = e.background
                          if (d) {
                            if (d.isColor) {
                              cf.color.copy(d).convertSRGBToLinear(), (e.background = null)
                              var p = wf(cf.color)
                              ;(cf.opacity = p), (h = !0)
                            }
                          } else {
                            cf.color.copy(vf).convertSRGBToLinear()
                            var f = wf(cf.color)
                            ;(cf.opacity = f), (h = !0)
                          }
                          for (var m = 0; m < 6; m++) {
                            var v = m % 3
                            0 == v
                              ? (i.up.set(0, o[m], 0), i.lookAt(a[m], 0, 0))
                              : 1 == v
                              ? (i.up.set(0, 0, o[m]), i.lookAt(0, a[m], 0))
                              : (i.up.set(0, o[m], 0), i.lookAt(0, 0, a[m])),
                              Tf(r, v * rf, m > 2 ? rf : 0, rf, rf),
                              s.setRenderTarget(r),
                              h && s.render(uf, i),
                              s.render(e, i)
                          }
                          ;(s.toneMapping = u), (s.outputEncoding = c), (s.autoClear = l)
                        }),
                        (t._textureToCubeUV = function (e, t) {
                          var n = this._renderer
                          e.isCubeTexture
                            ? null == this._cubemapShader && (this._cubemapShader = Lf())
                            : null == this._equirectShader && (this._equirectShader = Cf())
                          var r = e.isCubeTexture ? this._cubemapShader : this._equirectShader,
                            i = new xo(pf[0], r),
                            o = r.uniforms
                          ;(o.envMap.value = e),
                            e.isCubeTexture ||
                              o.texelSize.value.set(1 / e.image.width, 1 / e.image.height),
                            (o.inputEncoding.value = lf[e.encoding]),
                            (o.outputEncoding.value = lf[t.texture.encoding]),
                            Tf(t, 0, 0, 3 * rf, 2 * rf),
                            n.setRenderTarget(t),
                            n.render(i, hf)
                        }),
                        (t._applyPMREM = function (e) {
                          var t = this._renderer,
                            n = t.autoClear
                          t.autoClear = !1
                          for (var r = 1; r < af; r++) {
                            var i = Math.sqrt(mf[r] * mf[r] - mf[r - 1] * mf[r - 1]),
                              o = Af[(r - 1) % Af.length]
                            this._blur(e, r - 1, r, i, o)
                          }
                          t.autoClear = n
                        }),
                        (t._blur = function (e, t, n, r, i) {
                          var o = this._pingPongRenderTarget
                          this._halfBlur(e, o, t, n, r, 'latitudinal', i),
                            this._halfBlur(o, e, n, n, r, 'longitudinal', i)
                        }),
                        (t._halfBlur = function (e, t, n, r, i, o, a) {
                          var s = this._renderer,
                            l = this._blurMaterial
                          'latitudinal' !== o &&
                            'longitudinal' !== o &&
                            console.error(
                              'blur direction must be either latitudinal or longitudinal!',
                            )
                          var c = 3,
                            u = new xo(pf[r], l),
                            h = l.uniforms,
                            d = ff[n] - 1,
                            p = isFinite(i) ? Math.PI / (2 * d) : (2 * Math.PI) / (2 * sf - 1),
                            f = i / p,
                            m = isFinite(i) ? 1 + Math.floor(c * f) : sf
                          m > sf &&
                            console.warn(
                              'sigmaRadians, ' +
                                i +
                                ', is too large and will clip, as it requested ' +
                                m +
                                ' samples when the maximum is set to ' +
                                sf,
                            )
                          for (var v = [], g = 0, y = 0; y < sf; ++y) {
                            var b = y / f,
                              A = Math.exp((-b * b) / 2)
                            v.push(A), 0 == y ? (g += A) : y < m && (g += 2 * A)
                          }
                          for (var w = 0; w < v.length; w++) v[w] = v[w] / g
                          ;(h.envMap.value = e.texture),
                            (h.samples.value = m),
                            (h.weights.value = v),
                            (h.latitudinal.value = 'latitudinal' === o),
                            a && (h.poleAxis.value = a),
                            (h.dTheta.value = p),
                            (h.mipInt.value = nf - n),
                            (h.inputEncoding.value = lf[e.texture.encoding]),
                            (h.outputEncoding.value = lf[e.texture.encoding])
                          var x = ff[r]
                          Tf(
                            t,
                            3 * Math.max(0, rf - 2 * x),
                            (0 === r ? 0 : 2 * rf) + 2 * x * (r > nf - tf ? r - nf + tf : 0),
                            3 * x,
                            2 * x,
                          ),
                            s.setRenderTarget(t),
                            s.render(u, hf)
                        }),
                        e
                      )
                    })()
                    function Ef(e) {
                      return (
                        void 0 !== e &&
                        e.type === _e &&
                        (e.encoding === Kt || e.encoding === Jt || e.encoding === $t)
                      )
                    }
                    function Mf() {
                      for (var e = [], t = [], n = [], r = nf, i = 0; i < af; i++) {
                        var o = Math.pow(2, r)
                        t.push(o)
                        var a = 1 / o
                        i > nf - tf ? (a = of[i - nf + tf - 1]) : 0 == i && (a = 0), n.push(a)
                        for (
                          var s = 1 / (o - 1),
                            l = -s / 2,
                            c = 1 + s / 2,
                            u = [l, l, c, l, c, c, l, l, c, c, l, c],
                            h = 6,
                            d = 6,
                            p = 3,
                            f = 2,
                            m = 1,
                            v = new Float32Array(p * d * h),
                            g = new Float32Array(f * d * h),
                            y = new Float32Array(m * d * h),
                            b = 0;
                          b < h;
                          b++
                        ) {
                          var A = ((b % 3) * 2) / 3 - 1,
                            w = b > 2 ? 0 : -1,
                            x = [
                              A,
                              w,
                              0,
                              A + 2 / 3,
                              w,
                              0,
                              A + 2 / 3,
                              w + 1,
                              0,
                              A,
                              w,
                              0,
                              A + 2 / 3,
                              w + 1,
                              0,
                              A,
                              w + 1,
                              0,
                            ]
                          v.set(x, p * d * b), g.set(u, f * d * b)
                          var E = [b, b, b, b, b, b]
                          y.set(E, m * d * b)
                        }
                        var M = new ro()
                        M.setAttribute('position', new Fi(v, p)),
                          M.setAttribute('uv', new Fi(g, f)),
                          M.setAttribute('faceIndex', new Fi(y, m)),
                          e.push(M),
                          r > tf && r--
                      }
                      return { _lodPlanes: e, _sizeLods: t, _sigmas: n }
                    }
                    function _f(e) {
                      var t = new or(3 * rf, 3 * rf, e)
                      return (
                        (t.texture.mapping = ue),
                        (t.texture.name = 'PMREM.cubeUv'),
                        (t.scissorTest = !0),
                        t
                      )
                    }
                    function Tf(e, t, n, r, i) {
                      e.viewport.set(t, n, r, i), e.scissor.set(t, n, r, i)
                    }
                    function Sf(e) {
                      return new Ou({
                        name: 'SphericalGaussianBlur',
                        defines: { n: e },
                        uniforms: {
                          envMap: { value: null },
                          samples: { value: 1 },
                          weights: { value: new Float32Array(e) },
                          latitudinal: { value: !1 },
                          dTheta: { value: 0 },
                          mipInt: { value: 0 },
                          poleAxis: { value: new lr(0, 1, 0) },
                          inputEncoding: { value: lf[Kt] },
                          outputEncoding: { value: lf[Kt] },
                        },
                        vertexShader: Rf(),
                        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' +
                          Pf() +
                          "\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: A,
                        depthTest: !1,
                        depthWrite: !1,
                      })
                    }
                    function Cf() {
                      return new Ou({
                        name: 'EquirectangularToCubeUV',
                        uniforms: {
                          envMap: { value: null },
                          texelSize: { value: new Jn(1, 1) },
                          inputEncoding: { value: lf[Kt] },
                          outputEncoding: { value: lf[Kt] },
                        },
                        vertexShader: Rf(),
                        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' +
                          Pf() +
                          '\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: A,
                        depthTest: !1,
                        depthWrite: !1,
                      })
                    }
                    function Lf() {
                      return new Ou({
                        name: 'CubemapToCubeUV',
                        uniforms: {
                          envMap: { value: null },
                          inputEncoding: { value: lf[Kt] },
                          outputEncoding: { value: lf[Kt] },
                        },
                        vertexShader: Rf(),
                        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' +
                          Pf() +
                          '\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: A,
                        depthTest: !1,
                        depthWrite: !1,
                      })
                    }
                    function Rf() {
                      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 Pf() {
                      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 Df(e, t, n, r, i, o, a) {
                      return (
                        console.warn(
                          'THREE.Face4 has been removed. A THREE.Face3 will be created instead.',
                        ),
                        new Ri(e, t, n, i, o, a)
                      )
                    }
                    var Of = 0,
                      If = 1,
                      Bf = 0,
                      Ff = 1,
                      kf = 2
                    function Nf(e) {
                      return (
                        console.warn(
                          'THREE.MeshFaceMaterial has been removed. Use an Array instead.',
                        ),
                        e
                      )
                    }
                    function Uf(e) {
                      return (
                        void 0 === e && (e = []),
                        console.warn('THREE.MultiMaterial has been removed. Use an Array instead.'),
                        (e.isMultiMaterial = !0),
                        (e.materials = e),
                        (e.clone = function () {
                          return e.slice()
                        }),
                        e
                      )
                    }
                    function Hf(e, t) {
                      return (
                        console.warn('THREE.PointCloud has been renamed to THREE.Points.'),
                        new gc(e, t)
                      )
                    }
                    function Gf(e) {
                      return (
                        console.warn('THREE.Particle has been renamed to THREE.Sprite.'), new Bl(e)
                      )
                    }
                    function zf(e, t) {
                      return (
                        console.warn('THREE.ParticleSystem has been renamed to THREE.Points.'),
                        new gc(e, t)
                      )
                    }
                    function jf(e) {
                      return (
                        console.warn(
                          'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.',
                        ),
                        new dc(e)
                      )
                    }
                    function Vf(e) {
                      return (
                        console.warn(
                          'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.',
                        ),
                        new dc(e)
                      )
                    }
                    function Wf(e) {
                      return (
                        console.warn(
                          'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.',
                        ),
                        new dc(e)
                      )
                    }
                    function qf(e, t, n) {
                      return (
                        console.warn('THREE.Vertex has been removed. Use THREE.Vector3 instead.'),
                        new lr(e, t, n)
                      )
                    }
                    function Xf(e, t) {
                      return (
                        console.warn(
                          'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.',
                        ),
                        new Fi(e, t).setUsage(Sn)
                      )
                    }
                    function Yf(e, t) {
                      return (
                        console.warn(
                          'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.',
                        ),
                        new ki(e, t)
                      )
                    }
                    function Qf(e, t) {
                      return (
                        console.warn(
                          'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.',
                        ),
                        new Ni(e, t)
                      )
                    }
                    function Zf(e, t) {
                      return (
                        console.warn(
                          'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.',
                        ),
                        new Ui(e, t)
                      )
                    }
                    function Kf(e, t) {
                      return (
                        console.warn(
                          'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.',
                        ),
                        new Hi(e, t)
                      )
                    }
                    function Jf(e, t) {
                      return (
                        console.warn(
                          'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.',
                        ),
                        new Gi(e, t)
                      )
                    }
                    function $f(e, t) {
                      return (
                        console.warn(
                          'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.',
                        ),
                        new zi(e, t)
                      )
                    }
                    function em(e, t) {
                      return (
                        console.warn(
                          'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.',
                        ),
                        new ji(e, t)
                      )
                    }
                    function tm(e, t) {
                      return (
                        console.warn(
                          'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.',
                        ),
                        new Wi(e, t)
                      )
                    }
                    function nm(e, t) {
                      return (
                        console.warn(
                          'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.',
                        ),
                        new qi(e, t)
                      )
                    }
                    function rm(e) {
                      console.warn(
                        'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.',
                      ),
                        _h.call(this, e),
                        (this.type = 'catmullrom'),
                        (this.closed = !0)
                    }
                    function im(e) {
                      console.warn(
                        'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.',
                      ),
                        _h.call(this, e),
                        (this.type = 'catmullrom')
                    }
                    function om(e) {
                      console.warn(
                        'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.',
                      ),
                        _h.call(this, e),
                        (this.type = 'catmullrom')
                    }
                    function am(e) {
                      return (
                        console.warn('THREE.AxisHelper has been renamed to THREE.AxesHelper.'),
                        new Kp(e)
                      )
                    }
                    function sm(e, t) {
                      return (
                        console.warn(
                          'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.',
                        ),
                        new qp(e, t)
                      )
                    }
                    function lm(e, t) {
                      return (
                        console.warn(
                          'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.',
                        ),
                        new uc(new Dc(e.geometry), new tc({ color: void 0 !== t ? t : 16777215 }))
                      )
                    }
                    function cm(e, t) {
                      return (
                        console.warn(
                          'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.',
                        ),
                        new uc(new Ru(e.geometry), new tc({ color: void 0 !== t ? t : 16777215 }))
                      )
                    }
                    function um(e) {
                      return (
                        console.warn('THREE.XHRLoader has been renamed to THREE.FileLoader.'),
                        new uh(e)
                      )
                    }
                    function hm(e) {
                      return (
                        console.warn(
                          'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.',
                        ),
                        new mh(e)
                      )
                    }
                    function dm(e, t, n) {
                      return (
                        console.warn(
                          'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).',
                        ),
                        new No(e, n)
                      )
                    }
                    ;(gh.create = function (e, t) {
                      return (
                        console.log('THREE.Curve.create() has been deprecated'),
                        (e.prototype = Object.create(gh.prototype)),
                        (e.prototype.constructor = e),
                        (e.prototype.getPoint = t),
                        e
                      )
                    }),
                      Object.assign(Wh.prototype, {
                        fromPoints: function (e) {
                          return (
                            console.warn(
                              'THREE.Path: .fromPoints() has been renamed to .setFromPoints().',
                            ),
                            this.setFromPoints(e)
                          )
                        },
                      }),
                      (rm.prototype = Object.create(_h.prototype)),
                      (im.prototype = Object.create(_h.prototype)),
                      (om.prototype = Object.create(_h.prototype)),
                      Object.assign(om.prototype, {
                        initFromArray: function () {
                          console.error('THREE.Spline: .initFromArray() has been removed.')
                        },
                        getControlPointsArray: function () {
                          console.error('THREE.Spline: .getControlPointsArray() has been removed.')
                        },
                        reparametrizeByArcLength: function () {
                          console.error(
                            'THREE.Spline: .reparametrizeByArcLength() has been removed.',
                          )
                        },
                      }),
                      (Dp.prototype.setColors = function () {
                        console.error(
                          'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.',
                        )
                      }),
                      (_p.prototype.update = function () {
                        console.error(
                          'THREE.SkeletonHelper: update() no longer needs to be called.',
                        )
                      }),
                      Object.assign(lh.prototype, {
                        extractUrlBase: function (e) {
                          return (
                            console.warn(
                              'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.',
                            ),
                            ld.extractUrlBase(e)
                          )
                        },
                      }),
                      (lh.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.',
                          )
                        },
                      }),
                      Object.assign(mp.prototype, {
                        center: function (e) {
                          return (
                            console.warn('THREE.Box2: .center() has been renamed to .getCenter().'),
                            this.getCenter(e)
                          )
                        },
                        empty: function () {
                          return (
                            console.warn('THREE.Box2: .empty() has been renamed to .isEmpty().'),
                            this.isEmpty()
                          )
                        },
                        isIntersectionBox: function (e) {
                          return (
                            console.warn(
                              'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().',
                            ),
                            this.intersectsBox(e)
                          )
                        },
                        size: function (e) {
                          return (
                            console.warn('THREE.Box2: .size() has been renamed to .getSize().'),
                            this.getSize(e)
                          )
                        },
                      }),
                      Object.assign(hr.prototype, {
                        center: function (e) {
                          return (
                            console.warn('THREE.Box3: .center() has been renamed to .getCenter().'),
                            this.getCenter(e)
                          )
                        },
                        empty: function () {
                          return (
                            console.warn('THREE.Box3: .empty() has been renamed to .isEmpty().'),
                            this.isEmpty()
                          )
                        },
                        isIntersectionBox: function (e) {
                          return (
                            console.warn(
                              'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().',
                            ),
                            this.intersectsBox(e)
                          )
                        },
                        isIntersectionSphere: function (e) {
                          return (
                            console.warn(
                              'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().',
                            ),
                            this.intersectsSphere(e)
                          )
                        },
                        size: function (e) {
                          return (
                            console.warn('THREE.Box3: .size() has been renamed to .getSize().'),
                            this.getSize(e)
                          )
                        },
                      }),
                      Object.assign(Sr.prototype, {
                        empty: function () {
                          return (
                            console.warn('THREE.Sphere: .empty() has been renamed to .isEmpty().'),
                            this.isEmpty()
                          )
                        },
                      }),
                      (zo.prototype.setFromMatrix = function (e) {
                        return (
                          console.warn(
                            'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().',
                          ),
                          this.setFromProjectionMatrix(e)
                        )
                      }),
                      (yp.prototype.center = function (e) {
                        return (
                          console.warn('THREE.Line3: .center() has been renamed to .getCenter().'),
                          this.getCenter(e)
                        )
                      }),
                      Object.assign(Kn, {
                        random16: function () {
                          return (
                            console.warn(
                              'THREE.Math: .random16() has been deprecated. Use Math.random() instead.',
                            ),
                            Math.random()
                          )
                        },
                        nearestPowerOfTwo: function (e) {
                          return (
                            console.warn(
                              'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().',
                            ),
                            Kn.floorPowerOfTwo(e)
                          )
                        },
                        nextPowerOfTwo: function (e) {
                          return (
                            console.warn(
                              'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().',
                            ),
                            Kn.ceilPowerOfTwo(e)
                          )
                        },
                      }),
                      Object.assign($n.prototype, {
                        flattenToArrayOffset: function (e, t) {
                          return (
                            console.warn(
                              'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.',
                            ),
                            this.toArray(e, t)
                          )
                        },
                        multiplyVector3: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.',
                            ),
                            e.applyMatrix3(this)
                          )
                        },
                        multiplyVector3Array: function () {
                          console.error('THREE.Matrix3: .multiplyVector3Array() has been removed.')
                        },
                        applyToBufferAttribute: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.',
                            ),
                            e.applyMatrix3(this)
                          )
                        },
                        applyToVector3Array: function () {
                          console.error('THREE.Matrix3: .applyToVector3Array() has been removed.')
                        },
                        getInverse: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.',
                            ),
                            this.copy(e).invert()
                          )
                        },
                      }),
                      Object.assign(Fr.prototype, {
                        extractPosition: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().',
                            ),
                            this.copyPosition(e)
                          )
                        },
                        flattenToArrayOffset: function (e, t) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.',
                            ),
                            this.toArray(e, t)
                          )
                        },
                        getPosition: function () {
                          return (
                            console.warn(
                              'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.',
                            ),
                            new lr().setFromMatrixColumn(this, 3)
                          )
                        },
                        setRotationFromQuaternion: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().',
                            ),
                            this.makeRotationFromQuaternion(e)
                          )
                        },
                        multiplyToArray: function () {
                          console.warn('THREE.Matrix4: .multiplyToArray() has been removed.')
                        },
                        multiplyVector3: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.',
                            ),
                            e.applyMatrix4(this)
                          )
                        },
                        multiplyVector4: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.',
                            ),
                            e.applyMatrix4(this)
                          )
                        },
                        multiplyVector3Array: function () {
                          console.error('THREE.Matrix4: .multiplyVector3Array() has been removed.')
                        },
                        rotateAxis: function (e) {
                          console.warn(
                            'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.',
                          ),
                            e.transformDirection(this)
                        },
                        crossVector: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.',
                            ),
                            e.applyMatrix4(this)
                          )
                        },
                        translate: function () {
                          console.error('THREE.Matrix4: .translate() has been removed.')
                        },
                        rotateX: function () {
                          console.error('THREE.Matrix4: .rotateX() has been removed.')
                        },
                        rotateY: function () {
                          console.error('THREE.Matrix4: .rotateY() has been removed.')
                        },
                        rotateZ: function () {
                          console.error('THREE.Matrix4: .rotateZ() has been removed.')
                        },
                        rotateByAxis: function () {
                          console.error('THREE.Matrix4: .rotateByAxis() has been removed.')
                        },
                        applyToBufferAttribute: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.',
                            ),
                            e.applyMatrix4(this)
                          )
                        },
                        applyToVector3Array: function () {
                          console.error('THREE.Matrix4: .applyToVector3Array() has been removed.')
                        },
                        makeFrustum: function (e, t, n, r, i, o) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.',
                            ),
                            this.makePerspective(e, t, r, n, i, o)
                          )
                        },
                        getInverse: function (e) {
                          return (
                            console.warn(
                              'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.',
                            ),
                            this.copy(e).invert()
                          )
                        },
                      }),
                      (hi.prototype.isIntersectionLine = function (e) {
                        return (
                          console.warn(
                            'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().',
                          ),
                          this.intersectsLine(e)
                        )
                      }),
                      Object.assign(sr.prototype, {
                        multiplyVector3: function (e) {
                          return (
                            console.warn(
                              'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.',
                            ),
                            e.applyQuaternion(this)
                          )
                        },
                        inverse: function () {
                          return (
                            console.warn(
                              'THREE.Quaternion: .inverse() has been renamed to invert().',
                            ),
                            this.invert()
                          )
                        },
                      }),
                      Object.assign(Br.prototype, {
                        isIntersectionBox: function (e) {
                          return (
                            console.warn(
                              'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().',
                            ),
                            this.intersectsBox(e)
                          )
                        },
                        isIntersectionPlane: function (e) {
                          return (
                            console.warn(
                              'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().',
                            ),
                            this.intersectsPlane(e)
                          )
                        },
                        isIntersectionSphere: function (e) {
                          return (
                            console.warn(
                              'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().',
                            ),
                            this.intersectsSphere(e)
                          )
                        },
                      }),
                      Object.assign(xi.prototype, {
                        area: function () {
                          return (
                            console.warn('THREE.Triangle: .area() has been renamed to .getArea().'),
                            this.getArea()
                          )
                        },
                        barycoordFromPoint: function (e, t) {
                          return (
                            console.warn(
                              'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().',
                            ),
                            this.getBarycoord(e, t)
                          )
                        },
                        midpoint: function (e) {
                          return (
                            console.warn(
                              'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().',
                            ),
                            this.getMidpoint(e)
                          )
                        },
                        normal: function (e) {
                          return (
                            console.warn(
                              'THREE.Triangle: .normal() has been renamed to .getNormal().',
                            ),
                            this.getNormal(e)
                          )
                        },
                        plane: function (e) {
                          return (
                            console.warn(
                              'THREE.Triangle: .plane() has been renamed to .getPlane().',
                            ),
                            this.getPlane(e)
                          )
                        },
                      }),
                      Object.assign(xi, {
                        barycoordFromPoint: function (e, t, n, r, i) {
                          return (
                            console.warn(
                              'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().',
                            ),
                            xi.getBarycoord(e, t, n, r, i)
                          )
                        },
                        normal: function (e, t, n, r) {
                          return (
                            console.warn(
                              'THREE.Triangle: .normal() has been renamed to .getNormal().',
                            ),
                            xi.getNormal(e, t, n, r)
                          )
                        },
                      }),
                      Object.assign(qh.prototype, {
                        extractAllPoints: function (e) {
                          return (
                            console.warn(
                              'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.',
                            ),
                            this.extractPoints(e)
                          )
                        },
                        extrude: function (e) {
                          return (
                            console.warn(
                              'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.',
                            ),
                            new fu(this, e)
                          )
                        },
                        makeGeometry: function (e) {
                          return (
                            console.warn(
                              'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.',
                            ),
                            new xu(this, e)
                          )
                        },
                      }),
                      Object.assign(Jn.prototype, {
                        fromAttribute: function (e, t, n) {
                          return (
                            console.warn(
                              'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().',
                            ),
                            this.fromBufferAttribute(e, t, n)
                          )
                        },
                        distanceToManhattan: function (e) {
                          return (
                            console.warn(
                              'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().',
                            ),
                            this.manhattanDistanceTo(e)
                          )
                        },
                        lengthManhattan: function () {
                          return (
                            console.warn(
                              'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().',
                            ),
                            this.manhattanLength()
                          )
                        },
                      }),
                      Object.assign(lr.prototype, {
                        setEulerFromRotationMatrix: function () {
                          console.error(
                            'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.',
                          )
                        },
                        setEulerFromQuaternion: function () {
                          console.error(
                            'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.',
                          )
                        },
                        getPositionFromMatrix: function (e) {
                          return (
                            console.warn(
                              'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().',
                            ),
                            this.setFromMatrixPosition(e)
                          )
                        },
                        getScaleFromMatrix: function (e) {
                          return (
                            console.warn(
                              'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().',
                            ),
                            this.setFromMatrixScale(e)
                          )
                        },
                        getColumnFromMatrix: function (e, t) {
                          return (
                            console.warn(
                              'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().',
                            ),
                            this.setFromMatrixColumn(t, e)
                          )
                        },
                        applyProjection: function (e) {
                          return (
                            console.warn(
                              'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.',
                            ),
                            this.applyMatrix4(e)
                          )
                        },
                        fromAttribute: function (e, t, n) {
                          return (
                            console.warn(
                              'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().',
                            ),
                            this.fromBufferAttribute(e, t, n)
                          )
                        },
                        distanceToManhattan: function (e) {
                          return (
                            console.warn(
                              'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().',
                            ),
                            this.manhattanDistanceTo(e)
                          )
                        },
                        lengthManhattan: function () {
                          return (
                            console.warn(
                              'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().',
                            ),
                            this.manhattanLength()
                          )
                        },
                      }),
                      Object.assign(ir.prototype, {
                        fromAttribute: function (e, t, n) {
                          return (
                            console.warn(
                              'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().',
                            ),
                            this.fromBufferAttribute(e, t, n)
                          )
                        },
                        lengthManhattan: function () {
                          return (
                            console.warn(
                              'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().',
                            ),
                            this.manhattanLength()
                          )
                        },
                      }),
                      Object.assign(si.prototype, {
                        getChildByName: function (e) {
                          return (
                            console.warn(
                              'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().',
                            ),
                            this.getObjectByName(e)
                          )
                        },
                        renderDepth: function () {
                          console.warn(
                            'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.',
                          )
                        },
                        translate: function (e, t) {
                          return (
                            console.warn(
                              'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.',
                            ),
                            this.translateOnAxis(t, e)
                          )
                        },
                        getWorldRotation: function () {
                          console.error(
                            'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.',
                          )
                        },
                        applyMatrix: function (e) {
                          return (
                            console.warn(
                              'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().',
                            ),
                            this.applyMatrix4(e)
                          )
                        },
                      }),
                      Object.defineProperties(si.prototype, {
                        eulerOrder: {
                          get: function () {
                            return (
                              console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'),
                              this.rotation.order
                            )
                          },
                          set: function (e) {
                            console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'),
                              (this.rotation.order = e)
                          },
                        },
                        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.',
                            )
                          },
                        },
                      }),
                      Object.assign(xo.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(xo.prototype, {
                        drawMode: {
                          get: function () {
                            return (
                              console.error(
                                'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.',
                              ),
                              Yt
                            )
                          },
                          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.',
                            )
                          },
                        },
                      }),
                      Object.defineProperties(Ul.prototype, {
                        objects: {
                          get: function () {
                            return (
                              console.warn('THREE.LOD: .objects has been renamed to .levels.'),
                              this.levels
                            )
                          },
                        },
                      }),
                      Object.defineProperty(Ql.prototype, 'useVertexTexture', {
                        get: function () {
                          console.warn('THREE.Skeleton: useVertexTexture has been removed.')
                        },
                        set: function () {
                          console.warn('THREE.Skeleton: useVertexTexture has been removed.')
                        },
                      }),
                      (Wl.prototype.initBones = function () {
                        console.error('THREE.SkinnedMesh: initBones() has been removed.')
                      }),
                      Object.defineProperty(gh.prototype, '__arcLengthDivisions', {
                        get: function () {
                          return (
                            console.warn(
                              'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.',
                            ),
                            this.arcLengthDivisions
                          )
                        },
                        set: function (e) {
                          console.warn(
                            'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.',
                          ),
                            (this.arcLengthDivisions = e)
                        },
                      }),
                      (Oo.prototype.setLens = function (e, t) {
                        console.warn(
                          'THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.',
                        ),
                          void 0 !== t && (this.filmGauge = t),
                          this.setFocalLength(e)
                      }),
                      Object.defineProperties(Xh.prototype, {
                        onlyShadow: {
                          set: function () {
                            console.warn('THREE.Light: .onlyShadow has been removed.')
                          },
                        },
                        shadowCameraFov: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.',
                            ),
                              (this.shadow.camera.fov = e)
                          },
                        },
                        shadowCameraLeft: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.',
                            ),
                              (this.shadow.camera.left = e)
                          },
                        },
                        shadowCameraRight: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraRight is now .shadow.camera.right.',
                            ),
                              (this.shadow.camera.right = e)
                          },
                        },
                        shadowCameraTop: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraTop is now .shadow.camera.top.',
                            ),
                              (this.shadow.camera.top = e)
                          },
                        },
                        shadowCameraBottom: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.',
                            ),
                              (this.shadow.camera.bottom = e)
                          },
                        },
                        shadowCameraNear: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraNear is now .shadow.camera.near.',
                            ),
                              (this.shadow.camera.near = e)
                          },
                        },
                        shadowCameraFar: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowCameraFar is now .shadow.camera.far.',
                            ),
                              (this.shadow.camera.far = e)
                          },
                        },
                        shadowCameraVisible: {
                          set: function () {
                            console.warn(
                              'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.',
                            )
                          },
                        },
                        shadowBias: {
                          set: function (e) {
                            console.warn('THREE.Light: .shadowBias is now .shadow.bias.'),
                              (this.shadow.bias = e)
                          },
                        },
                        shadowDarkness: {
                          set: function () {
                            console.warn('THREE.Light: .shadowDarkness has been removed.')
                          },
                        },
                        shadowMapWidth: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.',
                            ),
                              (this.shadow.mapSize.width = e)
                          },
                        },
                        shadowMapHeight: {
                          set: function (e) {
                            console.warn(
                              'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.',
                            ),
                              (this.shadow.mapSize.height = e)
                          },
                        },
                      }),
                      Object.defineProperties(Fi.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 === Sn
                            )
                          },
                          set: function () {
                            console.warn(
                              'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.',
                            ),
                              this.setUsage(Sn)
                          },
                        },
                      }),
                      Object.assign(Fi.prototype, {
                        setDynamic: function (e) {
                          return (
                            console.warn(
                              'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.',
                            ),
                            this.setUsage(!0 === e ? Sn : Tn),
                            this
                          )
                        },
                        copyIndicesArray: function () {
                          console.error(
                            'THREE.BufferAttribute: .copyIndicesArray() has been removed.',
                          )
                        },
                        setArray: function () {
                          console.error(
                            'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers',
                          )
                        },
                      }),
                      Object.assign(ro.prototype, {
                        addIndex: function (e) {
                          console.warn(
                            'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().',
                          ),
                            this.setIndex(e)
                        },
                        addAttribute: function (e, t) {
                          return (
                            console.warn(
                              'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().',
                            ),
                            (t && t.isBufferAttribute) || (t && t.isInterleavedBufferAttribute)
                              ? 'index' === e
                                ? (console.warn(
                                    'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.',
                                  ),
                                  this.setIndex(t),
                                  this)
                                : this.setAttribute(e, t)
                              : (console.warn(
                                  'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).',
                                ),
                                this.setAttribute(e, new Fi(arguments[1], arguments[2])))
                          )
                        },
                        addDrawCall: function (e, t, n) {
                          void 0 !== n &&
                            console.warn(
                              'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.',
                            ),
                            console.warn(
                              'THREE.BufferGeometry: .addDrawCall() is now .addGroup().',
                            ),
                            this.addGroup(e, t)
                        },
                        clearDrawCalls: function () {
                          console.warn(
                            'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().',
                          ),
                            this.clearGroups()
                        },
                        computeOffsets: function () {
                          console.warn('THREE.BufferGeometry: .computeOffsets() has been removed.')
                        },
                        removeAttribute: function (e) {
                          return (
                            console.warn(
                              'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().',
                            ),
                            this.deleteAttribute(e)
                          )
                        },
                        applyMatrix: function (e) {
                          return (
                            console.warn(
                              'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().',
                            ),
                            this.applyMatrix4(e)
                          )
                        },
                      }),
                      Object.defineProperties(ro.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
                            )
                          },
                        },
                      }),
                      Object.defineProperties(cd.prototype, {
                        maxInstancedCount: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.',
                              ),
                              this.instanceCount
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.',
                            ),
                              (this.instanceCount = e)
                          },
                        },
                      }),
                      Object.defineProperties(cp.prototype, {
                        linePrecision: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.',
                              ),
                              this.params.Line.threshold
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.',
                            ),
                              (this.params.Line.threshold = e)
                          },
                        },
                      }),
                      Object.defineProperties(yl.prototype, {
                        dynamic: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.',
                              ),
                              this.usage === Sn
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.',
                            ),
                              this.setUsage(e)
                          },
                        },
                      }),
                      Object.assign(yl.prototype, {
                        setDynamic: function (e) {
                          return (
                            console.warn(
                              'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.',
                            ),
                            this.setUsage(!0 === e ? Sn : Tn),
                            this
                          )
                        },
                        setArray: function () {
                          console.error(
                            'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers',
                          )
                        },
                      }),
                      Object.assign(fu.prototype, {
                        getArrays: function () {
                          console.error('THREE.ExtrudeGeometry: .getArrays() has been removed.')
                        },
                        addShapeList: function () {
                          console.error('THREE.ExtrudeGeometry: .addShapeList() has been removed.')
                        },
                        addShape: function () {
                          console.error('THREE.ExtrudeGeometry: .addShape() has been removed.')
                        },
                      }),
                      Object.assign(gl.prototype, {
                        dispose: function () {
                          console.error('THREE.Scene: .dispose() has been removed.')
                        },
                      }),
                      Object.defineProperties(ap.prototype, {
                        dynamic: {
                          set: function () {
                            console.warn(
                              'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.',
                            )
                          },
                        },
                        onUpdate: {
                          value: function () {
                            return (
                              console.warn(
                                'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.',
                              ),
                              this
                            )
                          },
                        },
                      }),
                      Object.defineProperties(Di.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 Li()
                            )
                          },
                        },
                        shading: {
                          get: function () {
                            console.error(
                              'THREE.' +
                                this.type +
                                ': .shading has been removed. Use the boolean .flatShading instead.',
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.' +
                                this.type +
                                ': .shading has been removed. Use the boolean .flatShading instead.',
                            ),
                              (this.flatShading = e === y)
                          },
                        },
                        stencilMask: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.' +
                                  this.type +
                                  ': .stencilMask has been removed. Use .stencilFuncMask instead.',
                              ),
                              this.stencilFuncMask
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.' +
                                this.type +
                                ': .stencilMask has been removed. Use .stencilFuncMask instead.',
                            ),
                              (this.stencilFuncMask = e)
                          },
                        },
                      }),
                      Object.defineProperties(Fu.prototype, {
                        metal: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.',
                              ),
                              !1
                            )
                          },
                          set: function () {
                            console.warn(
                              'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead',
                            )
                          },
                        },
                      }),
                      Object.defineProperties(Bu.prototype, {
                        transparency: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.',
                              ),
                              this.transmission
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.',
                            ),
                              (this.transmission = e)
                          },
                        },
                      }),
                      Object.defineProperties(Po.prototype, {
                        derivatives: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.',
                              ),
                              this.extensions.derivatives
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.',
                            ),
                              (this.extensions.derivatives = e)
                          },
                        },
                      }),
                      Object.assign(pl.prototype, {
                        clearTarget: function (e, t, n, r) {
                          console.warn(
                            'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.',
                          ),
                            this.setRenderTarget(e),
                            this.clear(t, n, r)
                        },
                        animate: function (e) {
                          console.warn(
                            'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().',
                          ),
                            this.setAnimationLoop(e)
                        },
                        getCurrentRenderTarget: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().',
                            ),
                            this.getRenderTarget()
                          )
                        },
                        getMaxAnisotropy: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().',
                            ),
                            this.capabilities.getMaxAnisotropy()
                          )
                        },
                        getPrecision: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.',
                            ),
                            this.capabilities.precision
                          )
                        },
                        resetGLState: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .resetGLState() is now .state.reset().',
                            ),
                            this.state.reset()
                          )
                        },
                        supportsFloatTextures: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).",
                            ),
                            this.extensions.get('OES_texture_float')
                          )
                        },
                        supportsHalfFloatTextures: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).",
                            ),
                            this.extensions.get('OES_texture_half_float')
                          )
                        },
                        supportsStandardDerivatives: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).",
                            ),
                            this.extensions.get('OES_standard_derivatives')
                          )
                        },
                        supportsCompressedTextureS3TC: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).",
                            ),
                            this.extensions.get('WEBGL_compressed_texture_s3tc')
                          )
                        },
                        supportsCompressedTexturePVRTC: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).",
                            ),
                            this.extensions.get('WEBGL_compressed_texture_pvrtc')
                          )
                        },
                        supportsBlendMinMax: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).",
                            ),
                            this.extensions.get('EXT_blend_minmax')
                          )
                        },
                        supportsVertexTextures: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.',
                            ),
                            this.capabilities.vertexTextures
                          )
                        },
                        supportsInstancedArrays: function () {
                          return (
                            console.warn(
                              "THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).",
                            ),
                            this.extensions.get('ANGLE_instanced_arrays')
                          )
                        },
                        enableScissorTest: function (e) {
                          console.warn(
                            'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().',
                          ),
                            this.setScissorTest(e)
                        },
                        initMaterial: function () {
                          console.warn('THREE.WebGLRenderer: .initMaterial() has been removed.')
                        },
                        addPrePlugin: function () {
                          console.warn('THREE.WebGLRenderer: .addPrePlugin() has been removed.')
                        },
                        addPostPlugin: function () {
                          console.warn('THREE.WebGLRenderer: .addPostPlugin() has been removed.')
                        },
                        updateShadowMap: function () {
                          console.warn('THREE.WebGLRenderer: .updateShadowMap() has been removed.')
                        },
                        setFaceCulling: function () {
                          console.warn('THREE.WebGLRenderer: .setFaceCulling() has been removed.')
                        },
                        allocTextureUnit: function () {
                          console.warn('THREE.WebGLRenderer: .allocTextureUnit() has been removed.')
                        },
                        setTexture: function () {
                          console.warn('THREE.WebGLRenderer: .setTexture() has been removed.')
                        },
                        setTextureCube: function () {
                          console.warn('THREE.WebGLRenderer: .setTextureCube() has been removed.')
                        },
                        getActiveMipMapLevel: function () {
                          return (
                            console.warn(
                              'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().',
                            ),
                            this.getActiveMipmapLevel()
                          )
                        },
                      }),
                      Object.defineProperties(pl.prototype, {
                        shadowMapEnabled: {
                          get: function () {
                            return this.shadowMap.enabled
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.',
                            ),
                              (this.shadowMap.enabled = e)
                          },
                        },
                        shadowMapType: {
                          get: function () {
                            return this.shadowMap.type
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.',
                            ),
                              (this.shadowMap.type = e)
                          },
                        },
                        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 (e) {
                            console.warn(
                              'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.',
                            ),
                              (this.outputEncoding = !0 === e ? Jt : Kt)
                          },
                        },
                        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($s.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(or.prototype, {
                        wrapS: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.',
                              ),
                              this.texture.wrapS
                            )
                          },
                          set: function (e) {
                            console.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.'),
                              (this.texture.wrapS = e)
                          },
                        },
                        wrapT: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.',
                              ),
                              this.texture.wrapT
                            )
                          },
                          set: function (e) {
                            console.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.'),
                              (this.texture.wrapT = e)
                          },
                        },
                        magFilter: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.',
                              ),
                              this.texture.magFilter
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.',
                            ),
                              (this.texture.magFilter = e)
                          },
                        },
                        minFilter: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.',
                              ),
                              this.texture.minFilter
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.',
                            ),
                              (this.texture.minFilter = e)
                          },
                        },
                        anisotropy: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.',
                              ),
                              this.texture.anisotropy
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.',
                            ),
                              (this.texture.anisotropy = e)
                          },
                        },
                        offset: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .offset is now .texture.offset.',
                              ),
                              this.texture.offset
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .offset is now .texture.offset.',
                            ),
                              (this.texture.offset = e)
                          },
                        },
                        repeat: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.',
                              ),
                              this.texture.repeat
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.',
                            ),
                              (this.texture.repeat = e)
                          },
                        },
                        format: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .format is now .texture.format.',
                              ),
                              this.texture.format
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .format is now .texture.format.',
                            ),
                              (this.texture.format = e)
                          },
                        },
                        type: {
                          get: function () {
                            return (
                              console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'),
                              this.texture.type
                            )
                          },
                          set: function (e) {
                            console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'),
                              (this.texture.type = e)
                          },
                        },
                        generateMipmaps: {
                          get: function () {
                            return (
                              console.warn(
                                'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.',
                              ),
                              this.texture.generateMipmaps
                            )
                          },
                          set: function (e) {
                            console.warn(
                              'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.',
                            ),
                              (this.texture.generateMipmaps = e)
                          },
                        },
                      }),
                      Object.defineProperties(kd.prototype, {
                        load: {
                          value: function (e) {
                            console.warn(
                              'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.',
                            )
                            var t = this
                            return (
                              new Md().load(e, function (e) {
                                t.setBuffer(e)
                              }),
                              this
                            )
                          },
                        },
                        startTime: {
                          set: function () {
                            console.warn('THREE.Audio: .startTime is now .play( delay ).')
                          },
                        },
                      }),
                      (jd.prototype.getData = function () {
                        return (
                          console.warn(
                            'THREE.AudioAnalyser: .getData() is now .getFrequencyData().',
                          ),
                          this.getFrequencyData()
                        )
                      }),
                      (Fo.prototype.updateCubeMap = function (e, t) {
                        return (
                          console.warn('THREE.CubeCamera: .updateCubeMap() is now .update().'),
                          this.update(e, t)
                        )
                      }),
                      (Fo.prototype.clear = function (e, t, n, r) {
                        return (
                          console.warn('THREE.CubeCamera: .clear() is now .renderTarget.clear().'),
                          this.renderTarget.clear(e, t, n, r)
                        )
                      })
                    var pm = {
                      merge: function (e, t, n) {
                        var r
                        console.warn(
                          'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.',
                        ),
                          t.isMesh &&
                            (t.matrixAutoUpdate && t.updateMatrix(),
                            (r = t.matrix),
                            (t = t.geometry)),
                          e.merge(t, r, n)
                      },
                      center: function (e) {
                        return (
                          console.warn(
                            'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.',
                          ),
                          e.center()
                        )
                      },
                    }
                    function fm() {
                      console.error('THREE.CanvasRenderer has been removed')
                    }
                    function mm() {
                      console.error('THREE.JSONLoader has been removed.')
                    }
                    ;(er.crossOrigin = void 0),
                      (er.loadTexture = function (e, t, n, r) {
                        console.warn(
                          'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.',
                        )
                        var i = new vh()
                        i.setCrossOrigin(this.crossOrigin)
                        var o = i.load(e, n, void 0, r)
                        return t && (o.mapping = t), o
                      }),
                      (er.loadTextureCube = function (e, t, n, r) {
                        console.warn(
                          'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.',
                        )
                        var i = new fh()
                        i.setCrossOrigin(this.crossOrigin)
                        var o = i.load(e, n, void 0, r)
                        return t && (o.mapping = t), o
                      }),
                      (er.loadCompressedTexture = function () {
                        console.error(
                          'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.',
                        )
                      }),
                      (er.loadCompressedTextureCube = function () {
                        console.error(
                          'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.',
                        )
                      })
                    var vm = {
                      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',
                        )
                      },
                    }
                    function gm() {
                      console.error(
                        'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js',
                      )
                    }
                    'undefined' !== typeof __THREE_DEVTOOLS__ &&
                      __THREE_DEVTOOLS__.dispatchEvent(
                        new CustomEvent('register', { detail: { revision: i } }),
                      ),
                      'undefined' !== typeof window &&
                        (window.__THREE__
                          ? console.warn('WARNING: Multiple instances of Three.js being imported.')
                          : (window.__THREE__ = i)),
                      (t.ACESFilmicToneMapping = re),
                      (t.AddEquation = T),
                      (t.AddOperation = J),
                      (t.AdditiveAnimationBlendMode = Xt),
                      (t.AdditiveBlending = x),
                      (t.AlphaFormat = ke),
                      (t.AlwaysDepth = j),
                      (t.AlwaysStencilFunc = _n),
                      (t.AmbientLight = rd),
                      (t.AmbientLightProbe = Td),
                      (t.AnimationClip = nh),
                      (t.AnimationLoader = hh),
                      (t.AnimationMixer = op),
                      (t.AnimationObjectGroup = rp),
                      (t.AnimationUtils = ju),
                      (t.ArcCurve = bh),
                      (t.ArrayCamera = il),
                      (t.ArrowHelper = Zp),
                      (t.Audio = kd),
                      (t.AudioAnalyser = jd),
                      (t.AudioContext = Ed),
                      (t.AudioListener = Fd),
                      (t.AudioLoader = Md),
                      (t.AxesHelper = Kp),
                      (t.AxisHelper = am),
                      (t.BackSide = v),
                      (t.BasicDepthPacking = an),
                      (t.BasicShadowMap = h),
                      (t.BinaryTextureLoader = hm),
                      (t.Bone = ql),
                      (t.BooleanKeyframeTrack = Qu),
                      (t.BoundingBoxHelper = sm),
                      (t.Box2 = mp),
                      (t.Box3 = hr),
                      (t.Box3Helper = Xp),
                      (t.BoxBufferGeometry = _o),
                      (t.BoxGeometry = _o),
                      (t.BoxHelper = qp),
                      (t.BufferAttribute = Fi),
                      (t.BufferGeometry = ro),
                      (t.BufferGeometryLoader = hd),
                      (t.ByteType = Te),
                      (t.Cache = oh),
                      (t.Camera = Do),
                      (t.CameraHelper = Hp),
                      (t.CanvasRenderer = fm),
                      (t.CanvasTexture = wc),
                      (t.CatmullRomCurve3 = _h),
                      (t.CineonToneMapping = ne),
                      (t.CircleBufferGeometry = Ec),
                      (t.CircleGeometry = Ec),
                      (t.ClampToEdgeWrapping = pe),
                      (t.Clock = Rd),
                      (t.ClosedSplineCurve3 = rm),
                      (t.Color = Li),
                      (t.ColorKeyframeTrack = Zu),
                      (t.CompressedTexture = Ac),
                      (t.CompressedTextureLoader = dh),
                      (t.ConeBufferGeometry = _c),
                      (t.ConeGeometry = _c),
                      (t.CubeCamera = Fo),
                      (t.CubeReflectionMapping = ae),
                      (t.CubeRefractionMapping = se),
                      (t.CubeTexture = ko),
                      (t.CubeTextureLoader = fh),
                      (t.CubeUVReflectionMapping = ue),
                      (t.CubeUVRefractionMapping = he),
                      (t.CubicBezierCurve = Fh),
                      (t.CubicBezierCurve3 = kh),
                      (t.CubicInterpolant = Wu),
                      (t.CullFaceBack = l),
                      (t.CullFaceFront = c),
                      (t.CullFaceFrontBack = u),
                      (t.CullFaceNone = s),
                      (t.Curve = gh),
                      (t.CurvePath = Vh),
                      (t.CustomBlending = _),
                      (t.CustomToneMapping = ie),
                      (t.CylinderBufferGeometry = Mc),
                      (t.CylinderGeometry = Mc),
                      (t.Cylindrical = pp),
                      (t.DataTexture = Uo),
                      (t.DataTexture2DArray = ca),
                      (t.DataTexture3D = ua),
                      (t.DataTextureLoader = mh),
                      (t.DataUtils = ef),
                      (t.DecrementStencilOp = fn),
                      (t.DecrementWrapStencilOp = vn),
                      (t.DefaultLoadingManager = sh),
                      (t.DepthFormat = je),
                      (t.DepthStencilFormat = Ve),
                      (t.DepthTexture = xc),
                      (t.DirectionalLight = nd),
                      (t.DirectionalLightHelper = kp),
                      (t.DiscreteInterpolant = Xu),
                      (t.DodecahedronBufferGeometry = Sc),
                      (t.DodecahedronGeometry = Sc),
                      (t.DoubleSide = g),
                      (t.DstAlphaFactor = k),
                      (t.DstColorFactor = U),
                      (t.DynamicBufferAttribute = Xf),
                      (t.DynamicCopyUsage = On),
                      (t.DynamicDrawUsage = Sn),
                      (t.DynamicReadUsage = Rn),
                      (t.EdgesGeometry = Dc),
                      (t.EdgesHelper = lm),
                      (t.EllipseCurve = yh),
                      (t.EqualDepth = q),
                      (t.EqualStencilFunc = An),
                      (t.EquirectangularReflectionMapping = le),
                      (t.EquirectangularRefractionMapping = ce),
                      (t.Euler = Vr),
                      (t.EventDispatcher = qn),
                      (t.ExtrudeBufferGeometry = fu),
                      (t.ExtrudeGeometry = fu),
                      (t.Face3 = Ri),
                      (t.Face4 = Df),
                      (t.FaceColors = Ff),
                      (t.FileLoader = uh),
                      (t.FlatShading = y),
                      (t.Float16BufferAttribute = Vi),
                      (t.Float32Attribute = tm),
                      (t.Float32BufferAttribute = Wi),
                      (t.Float64Attribute = nm),
                      (t.Float64BufferAttribute = qi),
                      (t.FloatType = Pe),
                      (t.Fog = vl),
                      (t.FogExp2 = ml),
                      (t.Font = bd),
                      (t.FontLoader = xd),
                      (t.FrontSide = m),
                      (t.Frustum = zo),
                      (t.GLBufferAttribute = lp),
                      (t.GLSL1 = Bn),
                      (t.GLSL3 = Fn),
                      (t.GammaEncoding = $t),
                      (t.GeometryUtils = pm),
                      (t.GreaterDepth = Y),
                      (t.GreaterEqualDepth = X),
                      (t.GreaterEqualStencilFunc = Mn),
                      (t.GreaterStencilFunc = xn),
                      (t.GridHelper = Dp),
                      (t.Group = rl),
                      (t.HalfFloatType = De),
                      (t.HemisphereLight = Yh),
                      (t.HemisphereLightHelper = Pp),
                      (t.HemisphereLightProbe = _d),
                      (t.IcosahedronBufferGeometry = gu),
                      (t.IcosahedronGeometry = gu),
                      (t.ImageBitmapLoader = vd),
                      (t.ImageLoader = ph),
                      (t.ImageUtils = er),
                      (t.ImmediateRenderObject = bp),
                      (t.IncrementStencilOp = pn),
                      (t.IncrementWrapStencilOp = mn),
                      (t.InstancedBufferAttribute = ud),
                      (t.InstancedBufferGeometry = cd),
                      (t.InstancedInterleavedBuffer = sp),
                      (t.InstancedMesh = ec),
                      (t.Int16Attribute = Kf),
                      (t.Int16BufferAttribute = Hi),
                      (t.Int32Attribute = $f),
                      (t.Int32BufferAttribute = zi),
                      (t.Int8Attribute = Yf),
                      (t.Int8BufferAttribute = ki),
                      (t.IntType = Le),
                      (t.InterleavedBuffer = yl),
                      (t.InterleavedBufferAttribute = wl),
                      (t.Interpolant = Vu),
                      (t.InterpolateDiscrete = Ht),
                      (t.InterpolateLinear = Gt),
                      (t.InterpolateSmooth = zt),
                      (t.InvertStencilOp = gn),
                      (t.JSONLoader = mm),
                      (t.KeepStencilOp = hn),
                      (t.KeyframeTrack = Yu),
                      (t.LOD = Ul),
                      (t.LatheBufferGeometry = yu),
                      (t.LatheGeometry = yu),
                      (t.Layers = Xr),
                      (t.LensFlare = gm),
                      (t.LessDepth = V),
                      (t.LessEqualDepth = W),
                      (t.LessEqualStencilFunc = wn),
                      (t.LessStencilFunc = bn),
                      (t.Light = Xh),
                      (t.LightProbe = ad),
                      (t.Line = sc),
                      (t.Line3 = yp),
                      (t.LineBasicMaterial = tc),
                      (t.LineCurve = Nh),
                      (t.LineCurve3 = Uh),
                      (t.LineDashedMaterial = Gu),
                      (t.LineLoop = hc),
                      (t.LinePieces = If),
                      (t.LineSegments = uc),
                      (t.LineStrip = Of),
                      (t.LinearEncoding = Kt),
                      (t.LinearFilter = Ae),
                      (t.LinearInterpolant = qu),
                      (t.LinearMipMapLinearFilter = Me),
                      (t.LinearMipMapNearestFilter = xe),
                      (t.LinearMipmapLinearFilter = Ee),
                      (t.LinearMipmapNearestFilter = we),
                      (t.LinearToneMapping = ee),
                      (t.Loader = lh),
                      (t.LoaderUtils = ld),
                      (t.LoadingManager = ah),
                      (t.LogLuvEncoding = tn),
                      (t.LoopOnce = kt),
                      (t.LoopPingPong = Ut),
                      (t.LoopRepeat = Nt),
                      (t.LuminanceAlphaFormat = Ge),
                      (t.LuminanceFormat = He),
                      (t.MOUSE = o),
                      (t.Material = Di),
                      (t.MaterialLoader = sd),
                      (t.Math = Kn),
                      (t.MathUtils = Kn),
                      (t.Matrix3 = $n),
                      (t.Matrix4 = Fr),
                      (t.MaxEquation = R),
                      (t.Mesh = xo),
                      (t.MeshBasicMaterial = Oi),
                      (t.MeshDepthMaterial = Qs),
                      (t.MeshDistanceMaterial = Zs),
                      (t.MeshFaceMaterial = Nf),
                      (t.MeshLambertMaterial = Uu),
                      (t.MeshMatcapMaterial = Hu),
                      (t.MeshNormalMaterial = Nu),
                      (t.MeshPhongMaterial = Fu),
                      (t.MeshPhysicalMaterial = Bu),
                      (t.MeshStandardMaterial = Iu),
                      (t.MeshToonMaterial = ku),
                      (t.MinEquation = L),
                      (t.MirroredRepeatWrapping = fe),
                      (t.MixOperation = K),
                      (t.MultiMaterial = Uf),
                      (t.MultiplyBlending = M),
                      (t.MultiplyOperation = Z),
                      (t.NearestFilter = me),
                      (t.NearestMipMapLinearFilter = be),
                      (t.NearestMipMapNearestFilter = ge),
                      (t.NearestMipmapLinearFilter = ye),
                      (t.NearestMipmapNearestFilter = ve),
                      (t.NeverDepth = z),
                      (t.NeverStencilFunc = yn),
                      (t.NoBlending = A),
                      (t.NoColors = Bf),
                      (t.NoToneMapping = $),
                      (t.NormalAnimationBlendMode = qt),
                      (t.NormalBlending = w),
                      (t.NotEqualDepth = Q),
                      (t.NotEqualStencilFunc = En),
                      (t.NumberKeyframeTrack = Ku),
                      (t.Object3D = si),
                      (t.ObjectLoader = dd),
                      (t.ObjectSpaceNormalMap = cn),
                      (t.OctahedronBufferGeometry = bu),
                      (t.OctahedronGeometry = bu),
                      (t.OneFactor = D),
                      (t.OneMinusDstAlphaFactor = N),
                      (t.OneMinusDstColorFactor = H),
                      (t.OneMinusSrcAlphaFactor = F),
                      (t.OneMinusSrcColorFactor = I),
                      (t.OrthographicCamera = ed),
                      (t.PCFShadowMap = d),
                      (t.PCFSoftShadowMap = p),
                      (t.PMREMGenerator = xf),
                      (t.ParametricBufferGeometry = Au),
                      (t.ParametricGeometry = Au),
                      (t.Particle = Gf),
                      (t.ParticleBasicMaterial = Vf),
                      (t.ParticleSystem = zf),
                      (t.ParticleSystemMaterial = Wf),
                      (t.Path = Wh),
                      (t.PerspectiveCamera = Oo),
                      (t.Plane = hi),
                      (t.PlaneBufferGeometry = Wo),
                      (t.PlaneGeometry = Wo),
                      (t.PlaneHelper = Yp),
                      (t.PointCloud = Hf),
                      (t.PointCloudMaterial = jf),
                      (t.PointLight = $h),
                      (t.PointLightHelper = Sp),
                      (t.Points = gc),
                      (t.PointsMaterial = dc),
                      (t.PolarGridHelper = Op),
                      (t.PolyhedronBufferGeometry = Tc),
                      (t.PolyhedronGeometry = Tc),
                      (t.PositionalAudio = zd),
                      (t.PropertyBinding = np),
                      (t.PropertyMixer = Vd),
                      (t.QuadraticBezierCurve = Hh),
                      (t.QuadraticBezierCurve3 = Gh),
                      (t.Quaternion = sr),
                      (t.QuaternionKeyframeTrack = $u),
                      (t.QuaternionLinearInterpolant = Ju),
                      (t.REVISION = i),
                      (t.RGBADepthPacking = sn),
                      (t.RGBAFormat = Ue),
                      (t.RGBAIntegerFormat = Ze),
                      (t.RGBA_ASTC_10x10_Format = bt),
                      (t.RGBA_ASTC_10x5_Format = vt),
                      (t.RGBA_ASTC_10x6_Format = gt),
                      (t.RGBA_ASTC_10x8_Format = yt),
                      (t.RGBA_ASTC_12x10_Format = At),
                      (t.RGBA_ASTC_12x12_Format = wt),
                      (t.RGBA_ASTC_4x4_Format = lt),
                      (t.RGBA_ASTC_5x4_Format = ct),
                      (t.RGBA_ASTC_5x5_Format = ut),
                      (t.RGBA_ASTC_6x5_Format = ht),
                      (t.RGBA_ASTC_6x6_Format = dt),
                      (t.RGBA_ASTC_8x5_Format = pt),
                      (t.RGBA_ASTC_8x6_Format = ft),
                      (t.RGBA_ASTC_8x8_Format = mt),
                      (t.RGBA_BPTC_Format = xt),
                      (t.RGBA_ETC2_EAC_Format = st),
                      (t.RGBA_PVRTC_2BPPV1_Format = it),
                      (t.RGBA_PVRTC_4BPPV1_Format = rt),
                      (t.RGBA_S3TC_DXT1_Format = Je),
                      (t.RGBA_S3TC_DXT3_Format = $e),
                      (t.RGBA_S3TC_DXT5_Format = et),
                      (t.RGBDEncoding = on),
                      (t.RGBEEncoding = en),
                      (t.RGBEFormat = ze),
                      (t.RGBFormat = Ne),
                      (t.RGBIntegerFormat = Qe),
                      (t.RGBM16Encoding = rn),
                      (t.RGBM7Encoding = nn),
                      (t.RGB_ETC1_Format = ot),
                      (t.RGB_ETC2_Format = at),
                      (t.RGB_PVRTC_2BPPV1_Format = nt),
                      (t.RGB_PVRTC_4BPPV1_Format = tt),
                      (t.RGB_S3TC_DXT1_Format = Ke),
                      (t.RGFormat = Xe),
                      (t.RGIntegerFormat = Ye),
                      (t.RawShaderMaterial = Ou),
                      (t.Ray = Br),
                      (t.Raycaster = cp),
                      (t.RectAreaLight = id),
                      (t.RedFormat = We),
                      (t.RedIntegerFormat = qe),
                      (t.ReinhardToneMapping = te),
                      (t.RepeatWrapping = de),
                      (t.ReplaceStencilOp = dn),
                      (t.ReverseSubtractEquation = C),
                      (t.RingBufferGeometry = wu),
                      (t.RingGeometry = wu),
                      (t.SRGB8_ALPHA8_ASTC_10x10_Format = It),
                      (t.SRGB8_ALPHA8_ASTC_10x5_Format = Pt),
                      (t.SRGB8_ALPHA8_ASTC_10x6_Format = Dt),
                      (t.SRGB8_ALPHA8_ASTC_10x8_Format = Ot),
                      (t.SRGB8_ALPHA8_ASTC_12x10_Format = Bt),
                      (t.SRGB8_ALPHA8_ASTC_12x12_Format = Ft),
                      (t.SRGB8_ALPHA8_ASTC_4x4_Format = Et),
                      (t.SRGB8_ALPHA8_ASTC_5x4_Format = Mt),
                      (t.SRGB8_ALPHA8_ASTC_5x5_Format = _t),
                      (t.SRGB8_ALPHA8_ASTC_6x5_Format = Tt),
                      (t.SRGB8_ALPHA8_ASTC_6x6_Format = St),
                      (t.SRGB8_ALPHA8_ASTC_8x5_Format = Ct),
                      (t.SRGB8_ALPHA8_ASTC_8x6_Format = Lt),
                      (t.SRGB8_ALPHA8_ASTC_8x8_Format = Rt),
                      (t.Scene = gl),
                      (t.SceneUtils = vm),
                      (t.ShaderChunk = qo),
                      (t.ShaderLib = Yo),
                      (t.ShaderMaterial = Po),
                      (t.ShadowMaterial = Du),
                      (t.Shape = qh),
                      (t.ShapeBufferGeometry = xu),
                      (t.ShapeGeometry = xu),
                      (t.ShapePath = gd),
                      (t.ShapeUtils = hu),
                      (t.ShortType = Se),
                      (t.Skeleton = Ql),
                      (t.SkeletonHelper = _p),
                      (t.SkinnedMesh = Wl),
                      (t.SmoothShading = b),
                      (t.Sphere = Sr),
                      (t.SphereBufferGeometry = Mu),
                      (t.SphereGeometry = Mu),
                      (t.Spherical = dp),
                      (t.SphericalHarmonics3 = od),
                      (t.Spline = om),
                      (t.SplineCurve = zh),
                      (t.SplineCurve3 = im),
                      (t.SpotLight = Kh),
                      (t.SpotLightHelper = wp),
                      (t.Sprite = Bl),
                      (t.SpriteMaterial = xl),
                      (t.SrcAlphaFactor = B),
                      (t.SrcAlphaSaturateFactor = G),
                      (t.SrcColorFactor = O),
                      (t.StaticCopyUsage = Dn),
                      (t.StaticDrawUsage = Tn),
                      (t.StaticReadUsage = Ln),
                      (t.StereoCamera = Ld),
                      (t.StreamCopyUsage = In),
                      (t.StreamDrawUsage = Cn),
                      (t.StreamReadUsage = Pn),
                      (t.StringKeyframeTrack = eh),
                      (t.SubtractEquation = S),
                      (t.SubtractiveBlending = E),
                      (t.TOUCH = a),
                      (t.TangentSpaceNormalMap = ln),
                      (t.TetrahedronBufferGeometry = _u),
                      (t.TetrahedronGeometry = _u),
                      (t.TextBufferGeometry = Tu),
                      (t.TextGeometry = Tu),
                      (t.Texture = nr),
                      (t.TextureLoader = vh),
                      (t.TorusBufferGeometry = Su),
                      (t.TorusGeometry = Su),
                      (t.TorusKnotBufferGeometry = Cu),
                      (t.TorusKnotGeometry = Cu),
                      (t.Triangle = xi),
                      (t.TriangleFanDrawMode = Zt),
                      (t.TriangleStripDrawMode = Qt),
                      (t.TrianglesDrawMode = Yt),
                      (t.TubeBufferGeometry = Lu),
                      (t.TubeGeometry = Lu),
                      (t.UVMapping = oe),
                      (t.Uint16Attribute = Jf),
                      (t.Uint16BufferAttribute = Gi),
                      (t.Uint32Attribute = em),
                      (t.Uint32BufferAttribute = ji),
                      (t.Uint8Attribute = Qf),
                      (t.Uint8BufferAttribute = Ni),
                      (t.Uint8ClampedAttribute = Zf),
                      (t.Uint8ClampedBufferAttribute = Ui),
                      (t.Uniform = ap),
                      (t.UniformsLib = Xo),
                      (t.UniformsUtils = Co),
                      (t.UnsignedByteType = _e),
                      (t.UnsignedInt248Type = Fe),
                      (t.UnsignedIntType = Re),
                      (t.UnsignedShort4444Type = Oe),
                      (t.UnsignedShort5551Type = Ie),
                      (t.UnsignedShort565Type = Be),
                      (t.UnsignedShortType = Ce),
                      (t.VSMShadowMap = f),
                      (t.Vector2 = Jn),
                      (t.Vector3 = lr),
                      (t.Vector4 = ir),
                      (t.VectorKeyframeTrack = th),
                      (t.Vertex = qf),
                      (t.VertexColors = kf),
                      (t.VideoTexture = bc),
                      (t.WebGL1Renderer = fl),
                      (t.WebGLCubeRenderTarget = No),
                      (t.WebGLMultisampleRenderTarget = ar),
                      (t.WebGLRenderTarget = or),
                      (t.WebGLRenderTargetCube = dm),
                      (t.WebGLRenderer = pl),
                      (t.WebGLUtils = nl),
                      (t.WireframeGeometry = Ru),
                      (t.WireframeHelper = cm),
                      (t.WrapAroundEnding = Wt),
                      (t.XHRLoader = um),
                      (t.ZeroCurvatureEnding = jt),
                      (t.ZeroFactor = P),
                      (t.ZeroSlopeEnding = Vt),
                      (t.ZeroStencilOp = un),
                      (t.sRGBEncoding = Jt),
                      Object.defineProperty(t, '__esModule', { value: !0 })
                  }),
                  'object' === typeof i && 'undefined' !== typeof r
                    ? a(i)
                    : 'function' === typeof t && t.amd
                    ? t(['exports'], a)
                    : a(
                        ((o = 'undefined' !== typeof globalThis ? globalThis : o || self).THREE =
                          {}),
                      )
              },
              {},
            ],
            58: [
              function (e, t, n) {
                ;(THREE.DRACOLoader = function (e) {
                  THREE.Loader.call(this, e),
                    (this.decoderPath = ''),
                    (this.decoderConfig = {}),
                    (this.decoderBinary = null),
                    (this.decoderPending = null),
                    (this.workerLimit = 4),
                    (this.workerPool = []),
                    (this.workerNextTaskID = 1),
                    (this.workerSourceURL = ''),
                    (this.defaultAttributeIDs = {
                      position: 'POSITION',
                      normal: 'NORMAL',
                      color: 'COLOR',
                      uv: 'TEX_COORD',
                    }),
                    (this.defaultAttributeTypes = {
                      position: 'Float32Array',
                      normal: 'Float32Array',
                      color: 'Float32Array',
                      uv: 'Float32Array',
                    })
                }),
                  (THREE.DRACOLoader.prototype = Object.assign(
                    Object.create(THREE.Loader.prototype),
                    {
                      constructor: THREE.DRACOLoader,
                      setDecoderPath: function (e) {
                        return (this.decoderPath = e), this
                      },
                      setDecoderConfig: function (e) {
                        return (this.decoderConfig = e), this
                      },
                      setWorkerLimit: function (e) {
                        return (this.workerLimit = e), this
                      },
                      setVerbosity: function () {
                        console.warn(
                          'THREE.DRACOLoader: The .setVerbosity() method has been removed.',
                        )
                      },
                      setDrawMode: function () {
                        console.warn(
                          'THREE.DRACOLoader: The .setDrawMode() method has been removed.',
                        )
                      },
                      setSkipDequantization: function () {
                        console.warn(
                          'THREE.DRACOLoader: The .setSkipDequantization() method has been removed.',
                        )
                      },
                      load: function (e, t, n, r) {
                        var i = new THREE.FileLoader(this.manager)
                        i.setPath(this.path),
                          i.setResponseType('arraybuffer'),
                          i.setRequestHeader(this.requestHeader),
                          i.setWithCredentials(this.withCredentials),
                          i.load(
                            e,
                            (e) => {
                              var n = {
                                attributeIDs: this.defaultAttributeIDs,
                                attributeTypes: this.defaultAttributeTypes,
                                useUniqueIDs: !1,
                              }
                              this.decodeGeometry(e, n).then(t).catch(r)
                            },
                            n,
                            r,
                          )
                      },
                      decodeDracoFile: function (e, t, n, r) {
                        var i = {
                          attributeIDs: n || this.defaultAttributeIDs,
                          attributeTypes: r || this.defaultAttributeTypes,
                          useUniqueIDs: !!n,
                        }
                        this.decodeGeometry(e, i).then(t)
                      },
                      decodeGeometry: function (e, t) {
                        for (var n in t.attributeTypes) {
                          var r = t.attributeTypes[n]
                          void 0 !== r.BYTES_PER_ELEMENT && (t.attributeTypes[n] = r.name)
                        }
                        var i,
                          o = JSON.stringify(t)
                        if (THREE.DRACOLoader.taskCache.has(e)) {
                          var a = THREE.DRACOLoader.taskCache.get(e)
                          if (a.key === o) return a.promise
                          if (0 === e.byteLength)
                            throw new Error(
                              'THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.',
                            )
                        }
                        var s = this.workerNextTaskID++,
                          l = e.byteLength,
                          c = this._getWorker(s, l)
                            .then(
                              (n) => (
                                (i = n),
                                new Promise((n, r) => {
                                  ;(i._callbacks[s] = { resolve: n, reject: r }),
                                    i.postMessage(
                                      { type: 'decode', id: s, taskConfig: t, buffer: e },
                                      [e],
                                    )
                                })
                              ),
                            )
                            .then((e) => this._createGeometry(e.geometry))
                        return (
                          c
                            .catch(() => !0)
                            .then(() => {
                              i && s && this._releaseTask(i, s)
                            }),
                          THREE.DRACOLoader.taskCache.set(e, { key: o, promise: c }),
                          c
                        )
                      },
                      _createGeometry: function (e) {
                        var t = new THREE.BufferGeometry()
                        e.index && t.setIndex(new THREE.BufferAttribute(e.index.array, 1))
                        for (var n = 0; n < e.attributes.length; n++) {
                          var r = e.attributes[n],
                            i = r.name,
                            o = r.array,
                            a = r.itemSize
                          t.setAttribute(i, new THREE.BufferAttribute(o, a))
                        }
                        return t
                      },
                      _loadLibrary: function (e, t) {
                        var n = new THREE.FileLoader(this.manager)
                        return (
                          n.setPath(this.decoderPath),
                          n.setResponseType(t),
                          n.setWithCredentials(this.withCredentials),
                          new Promise((t, r) => {
                            n.load(e, t, void 0, r)
                          })
                        )
                      },
                      preload: function () {
                        return this._initDecoder(), this
                      },
                      _initDecoder: function () {
                        if (this.decoderPending) return this.decoderPending
                        var e = 'object' !== typeof WebAssembly || 'js' === this.decoderConfig.type,
                          t = []
                        return (
                          e
                            ? t.push(this._loadLibrary('draco_decoder.js', 'text'))
                            : (t.push(this._loadLibrary('draco_wasm_wrapper.js', 'text')),
                              t.push(this._loadLibrary('draco_decoder.wasm', 'arraybuffer'))),
                          (this.decoderPending = Promise.all(t).then((t) => {
                            var n = t[0]
                            e || (this.decoderConfig.wasmBinary = t[1])
                            var r = THREE.DRACOLoader.DRACOWorker.toString(),
                              i = [
                                '/* draco decoder */',
                                n,
                                '',
                                '/* worker */',
                                r.substring(r.indexOf('{') + 1, r.lastIndexOf('}')),
                              ].join('\n')
                            this.workerSourceURL = URL.createObjectURL(new Blob([i]))
                          })),
                          this.decoderPending
                        )
                      },
                      _getWorker: function (e, t) {
                        return this._initDecoder().then(() => {
                          var n
                          return (
                            this.workerPool.length < this.workerLimit
                              ? (((n = new Worker(this.workerSourceURL))._callbacks = {}),
                                (n._taskCosts = {}),
                                (n._taskLoad = 0),
                                n.postMessage({ type: 'init', decoderConfig: this.decoderConfig }),
                                (n.onmessage = function (e) {
                                  var t = e.data
                                  switch (t.type) {
                                    case 'decode':
                                      n._callbacks[t.id].resolve(t)
                                      break
                                    case 'error':
                                      n._callbacks[t.id].reject(t)
                                      break
                                    default:
                                      console.error(
                                        'THREE.DRACOLoader: Unexpected message, "' + t.type + '"',
                                      )
                                  }
                                }),
                                this.workerPool.push(n))
                              : this.workerPool.sort(function (e, t) {
                                  return e._taskLoad > t._taskLoad ? -1 : 1
                                }),
                            ((n = this.workerPool[this.workerPool.length - 1])._taskCosts[e] = t),
                            (n._taskLoad += t),
                            n
                          )
                        })
                      },
                      _releaseTask: function (e, t) {
                        ;(e._taskLoad -= e._taskCosts[t]),
                          delete e._callbacks[t],
                          delete e._taskCosts[t]
                      },
                      debug: function () {
                        console.log(
                          'Task load: ',
                          this.workerPool.map((e) => e._taskLoad),
                        )
                      },
                      dispose: function () {
                        for (var e = 0; e < this.workerPool.length; ++e)
                          this.workerPool[e].terminate()
                        return (this.workerPool.length = 0), this
                      },
                    },
                  )),
                  (THREE.DRACOLoader.DRACOWorker = function () {
                    var e, t
                    function n(e, t, n, o) {
                      var a,
                        s,
                        l = o.attributeIDs,
                        c = o.attributeTypes,
                        u = t.GetEncodedGeometryType(n)
                      if (u === e.TRIANGULAR_MESH)
                        (a = new e.Mesh()), (s = t.DecodeBufferToMesh(n, a))
                      else {
                        if (u !== e.POINT_CLOUD)
                          throw new Error('THREE.DRACOLoader: Unexpected geometry type.')
                        ;(a = new e.PointCloud()), (s = t.DecodeBufferToPointCloud(n, a))
                      }
                      if (!s.ok() || 0 === a.ptr)
                        throw new Error('THREE.DRACOLoader: Decoding failed: ' + s.error_msg())
                      var h = { index: null, attributes: [] }
                      for (var d in l) {
                        var p,
                          f,
                          m = self[c[d]]
                        if (o.useUniqueIDs) (f = l[d]), (p = t.GetAttributeByUniqueId(a, f))
                        else {
                          if (-1 === (f = t.GetAttributeId(a, e[l[d]]))) continue
                          p = t.GetAttribute(a, f)
                        }
                        h.attributes.push(i(e, t, a, d, m, p))
                      }
                      return u === e.TRIANGULAR_MESH && (h.index = r(e, t, a)), e.destroy(a), h
                    }
                    function r(e, t, n) {
                      var r = 3 * n.num_faces(),
                        i = 4 * r,
                        o = e._malloc(i)
                      t.GetTrianglesUInt32Array(n, i, o)
                      var a = new Uint32Array(e.HEAPF32.buffer, o, r).slice()
                      return e._free(o), { array: a, itemSize: 1 }
                    }
                    function i(e, t, n, r, i, a) {
                      var s = a.num_components(),
                        l = n.num_points() * s,
                        c = l * i.BYTES_PER_ELEMENT,
                        u = o(e, i),
                        h = e._malloc(c)
                      t.GetAttributeDataArrayForAllPoints(n, a, u, c, h)
                      var d = new i(e.HEAPF32.buffer, h, l).slice()
                      return e._free(h), { name: r, array: d, itemSize: s }
                    }
                    function o(e, t) {
                      switch (t) {
                        case Float32Array:
                          return e.DT_FLOAT32
                        case Int8Array:
                          return e.DT_INT8
                        case Int16Array:
                          return e.DT_INT16
                        case Int32Array:
                          return e.DT_INT32
                        case Uint8Array:
                          return e.DT_UINT8
                        case Uint16Array:
                          return e.DT_UINT16
                        case Uint32Array:
                          return e.DT_UINT32
                      }
                    }
                    onmessage = function (r) {
                      var i = r.data
                      switch (i.type) {
                        case 'init':
                          ;(e = i.decoderConfig),
                            (t = new Promise(function (t) {
                              ;(e.onModuleLoaded = function (e) {
                                t({ draco: e })
                              }),
                                DracoDecoderModule(e)
                            }))
                          break
                        case 'decode':
                          var o = i.buffer,
                            a = i.taskConfig
                          t.then((e) => {
                            var t = e.draco,
                              r = new t.Decoder(),
                              s = new t.DecoderBuffer()
                            s.Init(new Int8Array(o), o.byteLength)
                            try {
                              var l = n(t, r, s, a),
                                c = l.attributes.map((e) => e.array.buffer)
                              l.index && c.push(l.index.array.buffer),
                                self.postMessage({ type: 'decode', id: i.id, geometry: l }, c)
                            } catch (u) {
                              console.error(u),
                                self.postMessage({ type: 'error', id: i.id, error: u.message })
                            } finally {
                              t.destroy(s), t.destroy(r)
                            }
                          })
                      }
                    }
                  }),
                  (THREE.DRACOLoader.taskCache = new WeakMap()),
                  (THREE.DRACOLoader.setDecoderPath = function () {
                    console.warn(
                      'THREE.DRACOLoader: The .setDecoderPath() method has been removed. Use instance methods.',
                    )
                  }),
                  (THREE.DRACOLoader.setDecoderConfig = function () {
                    console.warn(
                      'THREE.DRACOLoader: The .setDecoderConfig() method has been removed. Use instance methods.',
                    )
                  }),
                  (THREE.DRACOLoader.releaseDecoderModule = function () {
                    console.warn(
                      'THREE.DRACOLoader: The .releaseDecoderModule() method has been removed. Use instance methods.',
                    )
                  }),
                  (THREE.DRACOLoader.getDecoderModule = function () {
                    console.warn(
                      'THREE.DRACOLoader: The .getDecoderModule() method has been removed. Use instance methods.',
                    )
                  })
              },
              {},
            ],
            59: [
              function (t, n, r) {
                THREE.GLTFLoader = (function () {
                  function t(e) {
                    THREE.Loader.call(this, e),
                      (this.dracoLoader = null),
                      (this.ddsLoader = null),
                      (this.ktx2Loader = null),
                      (this.meshoptDecoder = null),
                      (this.pluginCallbacks = []),
                      this.register(function (e) {
                        return new s(e)
                      }),
                      this.register(function (e) {
                        return new c(e)
                      }),
                      this.register(function (e) {
                        return new u(e)
                      }),
                      this.register(function (e) {
                        return new l(e)
                      }),
                      this.register(function (e) {
                        return new o(e)
                      }),
                      this.register(function (e) {
                        return new h(e)
                      })
                  }
                  function n() {
                    var e = {}
                    return {
                      get: function (t) {
                        return e[t]
                      },
                      add: function (t, n) {
                        e[t] = n
                      },
                      remove: function (t) {
                        delete e[t]
                      },
                      removeAll: function () {
                        e = {}
                      },
                    }
                  }
                  t.prototype = Object.assign(Object.create(THREE.Loader.prototype), {
                    constructor: t,
                    load: function (t, n, r, i) {
                      var o,
                        a = this
                      ;(o =
                        '' !== this.resourcePath
                          ? this.resourcePath
                          : '' !== this.path
                          ? this.path
                          : THREE.LoaderUtils.extractUrlBase(t)),
                        this.manager.itemStart(t)
                      var s = function (e) {
                          i ? i(e) : console.error(e), a.manager.itemError(t), a.manager.itemEnd(t)
                        },
                        l = new THREE.FileLoader(this.manager)
                      l.setPath(this.path),
                        l.setResponseType('arraybuffer'),
                        l.setRequestHeader(this.requestHeader),
                        l.setWithCredentials(this.withCredentials),
                        l.load(
                          t,
                          function (r) {
                            try {
                              a.parse(
                                r,
                                o,
                                function (e) {
                                  n(e), a.manager.itemEnd(t)
                                },
                                s,
                              )
                            } catch (e) {
                              s(e)
                            }
                          },
                          r,
                          s,
                        )
                    },
                    setDRACOLoader: function (e) {
                      return (this.dracoLoader = e), this
                    },
                    setDDSLoader: function (e) {
                      return (this.ddsLoader = e), this
                    },
                    setKTX2Loader: function (e) {
                      return (this.ktx2Loader = e), this
                    },
                    setMeshoptDecoder: function (e) {
                      return (this.meshoptDecoder = e), this
                    },
                    register: function (e) {
                      return (
                        -1 === this.pluginCallbacks.indexOf(e) && this.pluginCallbacks.push(e), this
                      )
                    },
                    unregister: function (e) {
                      return (
                        -1 !== this.pluginCallbacks.indexOf(e) &&
                          this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1),
                        this
                      )
                    },
                    parse: function (e, t, n, o) {
                      var s,
                        l = {},
                        c = {}
                      if ('string' === typeof e) s = e
                      else if (THREE.LoaderUtils.decodeText(new Uint8Array(e, 0, 4)) === d) {
                        try {
                          l[r.KHR_BINARY_GLTF] = new m(e)
                        } catch (x) {
                          return void (o && o(x))
                        }
                        s = l[r.KHR_BINARY_GLTF].content
                      } else s = THREE.LoaderUtils.decodeText(new Uint8Array(e))
                      var u = JSON.parse(s)
                      if (void 0 === u.asset || u.asset.version[0] < 2)
                        o &&
                          o(
                            new Error(
                              'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.',
                            ),
                          )
                      else {
                        var h = new U(u, {
                          path: t || this.resourcePath || '',
                          crossOrigin: this.crossOrigin,
                          manager: this.manager,
                          ktx2Loader: this.ktx2Loader,
                          meshoptDecoder: this.meshoptDecoder,
                        })
                        h.fileLoader.setRequestHeader(this.requestHeader)
                        for (var p = 0; p < this.pluginCallbacks.length; p++) {
                          var f = this.pluginCallbacks[p](h)
                          ;(c[f.name] = f), (l[f.name] = !0)
                        }
                        if (u.extensionsUsed)
                          for (p = 0; p < u.extensionsUsed.length; ++p) {
                            var y = u.extensionsUsed[p],
                              w = u.extensionsRequired || []
                            switch (y) {
                              case r.KHR_MATERIALS_UNLIT:
                                l[y] = new a()
                                break
                              case r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:
                                l[y] = new b()
                                break
                              case r.KHR_DRACO_MESH_COMPRESSION:
                                l[y] = new v(u, this.dracoLoader)
                                break
                              case r.MSFT_TEXTURE_DDS:
                                l[y] = new i(this.ddsLoader)
                                break
                              case r.KHR_TEXTURE_TRANSFORM:
                                l[y] = new g()
                                break
                              case r.KHR_MESH_QUANTIZATION:
                                l[y] = new A()
                                break
                              default:
                                w.indexOf(y) >= 0 &&
                                  void 0 === c[y] &&
                                  console.warn('THREE.GLTFLoader: Unknown extension "' + y + '".')
                            }
                          }
                        h.setExtensions(l), h.setPlugins(c), h.parse(n, o)
                      }
                    },
                  })
                  var r = {
                    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_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
                    KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
                    KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
                    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',
                    MSFT_TEXTURE_DDS: 'MSFT_texture_dds',
                  }
                  function i(e) {
                    if (!e)
                      throw new Error(
                        'THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader',
                      )
                    ;(this.name = r.MSFT_TEXTURE_DDS), (this.ddsLoader = e)
                  }
                  function o(e) {
                    ;(this.parser = e),
                      (this.name = r.KHR_LIGHTS_PUNCTUAL),
                      (this.cache = { refs: {}, uses: {} })
                  }
                  function a() {
                    this.name = r.KHR_MATERIALS_UNLIT
                  }
                  function s(e) {
                    ;(this.parser = e), (this.name = r.KHR_MATERIALS_CLEARCOAT)
                  }
                  function l(e) {
                    ;(this.parser = e), (this.name = r.KHR_MATERIALS_TRANSMISSION)
                  }
                  function c(e) {
                    ;(this.parser = e), (this.name = r.KHR_TEXTURE_BASISU)
                  }
                  function u(e) {
                    ;(this.parser = e), (this.name = r.EXT_TEXTURE_WEBP), (this.isSupported = null)
                  }
                  function h(e) {
                    ;(this.name = r.EXT_MESHOPT_COMPRESSION), (this.parser = e)
                  }
                  ;(o.prototype._markDefs = function () {
                    for (
                      var e = this.parser, t = this.parser.json.nodes || [], n = 0, r = t.length;
                      n < r;
                      n++
                    ) {
                      var i = t[n]
                      i.extensions &&
                        i.extensions[this.name] &&
                        void 0 !== i.extensions[this.name].light &&
                        e._addNodeRef(this.cache, i.extensions[this.name].light)
                    }
                  }),
                    (o.prototype._loadLight = function (e) {
                      var t = this.parser,
                        n = 'light:' + e,
                        r = t.cache.get(n)
                      if (r) return r
                      var i,
                        o = t.json,
                        a = (((o.extensions && o.extensions[this.name]) || {}).lights || [])[e],
                        s = new THREE.Color(16777215)
                      void 0 !== a.color && s.fromArray(a.color)
                      var l = void 0 !== a.range ? a.range : 0
                      switch (a.type) {
                        case 'directional':
                          ;(i = new THREE.DirectionalLight(s)).target.position.set(0, 0, -1),
                            i.add(i.target)
                          break
                        case 'point':
                          ;(i = new THREE.PointLight(s)).distance = l
                          break
                        case 'spot':
                          ;((i = new THREE.SpotLight(s)).distance = l),
                            (a.spot = a.spot || {}),
                            (a.spot.innerConeAngle =
                              void 0 !== a.spot.innerConeAngle ? a.spot.innerConeAngle : 0),
                            (a.spot.outerConeAngle =
                              void 0 !== a.spot.outerConeAngle
                                ? a.spot.outerConeAngle
                                : Math.PI / 4),
                            (i.angle = a.spot.outerConeAngle),
                            (i.penumbra = 1 - a.spot.innerConeAngle / a.spot.outerConeAngle),
                            i.target.position.set(0, 0, -1),
                            i.add(i.target)
                          break
                        default:
                          throw new Error('THREE.GLTFLoader: Unexpected light type: ' + a.type)
                      }
                      return (
                        i.position.set(0, 0, 0),
                        (i.decay = 2),
                        void 0 !== a.intensity && (i.intensity = a.intensity),
                        (i.name = t.createUniqueName(a.name || 'light_' + e)),
                        (r = Promise.resolve(i)),
                        t.cache.add(n, r),
                        r
                      )
                    }),
                    (o.prototype.createNodeAttachment = function (e) {
                      var t = this,
                        n = this.parser,
                        r = n.json.nodes[e],
                        i = ((r.extensions && r.extensions[this.name]) || {}).light
                      return void 0 === i
                        ? null
                        : this._loadLight(i).then(function (e) {
                            return n._getNodeRef(t.cache, i, e)
                          })
                    }),
                    (a.prototype.getMaterialType = function () {
                      return THREE.MeshBasicMaterial
                    }),
                    (a.prototype.extendParams = function (e, t, n) {
                      var r = []
                      ;(e.color = new THREE.Color(1, 1, 1)), (e.opacity = 1)
                      var i = t.pbrMetallicRoughness
                      if (i) {
                        if (Array.isArray(i.baseColorFactor)) {
                          var o = i.baseColorFactor
                          e.color.fromArray(o), (e.opacity = o[3])
                        }
                        void 0 !== i.baseColorTexture &&
                          r.push(n.assignTexture(e, 'map', i.baseColorTexture))
                      }
                      return Promise.all(r)
                    }),
                    (s.prototype.getMaterialType = function (e) {
                      var t = this.parser.json.materials[e]
                      return t.extensions && t.extensions[this.name]
                        ? THREE.MeshPhysicalMaterial
                        : null
                    }),
                    (s.prototype.extendMaterialParams = function (e, t) {
                      var n = this.parser,
                        r = n.json.materials[e]
                      if (!r.extensions || !r.extensions[this.name]) return Promise.resolve()
                      var i = [],
                        o = r.extensions[this.name]
                      if (
                        (void 0 !== o.clearcoatFactor && (t.clearcoat = o.clearcoatFactor),
                        void 0 !== o.clearcoatTexture &&
                          i.push(n.assignTexture(t, 'clearcoatMap', o.clearcoatTexture)),
                        void 0 !== o.clearcoatRoughnessFactor &&
                          (t.clearcoatRoughness = o.clearcoatRoughnessFactor),
                        void 0 !== o.clearcoatRoughnessTexture &&
                          i.push(
                            n.assignTexture(
                              t,
                              'clearcoatRoughnessMap',
                              o.clearcoatRoughnessTexture,
                            ),
                          ),
                        void 0 !== o.clearcoatNormalTexture &&
                          (i.push(
                            n.assignTexture(t, 'clearcoatNormalMap', o.clearcoatNormalTexture),
                          ),
                          void 0 !== o.clearcoatNormalTexture.scale))
                      ) {
                        var a = o.clearcoatNormalTexture.scale
                        t.clearcoatNormalScale = new THREE.Vector2(a, -a)
                      }
                      return Promise.all(i)
                    }),
                    (l.prototype.getMaterialType = function (e) {
                      var t = this.parser.json.materials[e]
                      return t.extensions && t.extensions[this.name]
                        ? THREE.MeshPhysicalMaterial
                        : null
                    }),
                    (l.prototype.extendMaterialParams = function (e, t) {
                      var n = this.parser,
                        r = n.json.materials[e]
                      if (!r.extensions || !r.extensions[this.name]) return Promise.resolve()
                      var i = [],
                        o = r.extensions[this.name]
                      return (
                        void 0 !== o.transmissionFactor && (t.transmission = o.transmissionFactor),
                        void 0 !== o.transmissionTexture &&
                          i.push(n.assignTexture(t, 'transmissionMap', o.transmissionTexture)),
                        Promise.all(i)
                      )
                    }),
                    (c.prototype.loadTexture = function (e) {
                      var t = this.parser,
                        n = t.json,
                        r = n.textures[e]
                      if (!r.extensions || !r.extensions[this.name]) return null
                      var i = r.extensions[this.name],
                        o = n.images[i.source],
                        a = t.options.ktx2Loader
                      if (!a) {
                        if (n.extensionsRequired && n.extensionsRequired.indexOf(this.name) >= 0)
                          throw new Error(
                            'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures',
                          )
                        return null
                      }
                      return t.loadTextureImage(e, o, a)
                    }),
                    (u.prototype.loadTexture = function (e) {
                      var t = this.name,
                        n = this.parser,
                        r = n.json,
                        i = r.textures[e]
                      if (!i.extensions || !i.extensions[t]) return null
                      var o = i.extensions[t],
                        a = r.images[o.source],
                        s = a.uri ? n.options.manager.getHandler(a.uri) : n.textureLoader
                      return this.detectSupport().then(function (i) {
                        if (i) return n.loadTextureImage(e, a, s)
                        if (r.extensionsRequired && r.extensionsRequired.indexOf(t) >= 0)
                          throw new Error(
                            'THREE.GLTFLoader: WebP required by asset but unsupported.',
                          )
                        return n.loadTexture(e)
                      })
                    }),
                    (u.prototype.detectSupport = function () {
                      return (
                        this.isSupported ||
                          (this.isSupported = new Promise(function (e) {
                            var t = new Image()
                            ;(t.src =
                              'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'),
                              (t.onload = t.onerror =
                                function () {
                                  e(1 === t.height)
                                })
                          })),
                        this.isSupported
                      )
                    }),
                    (h.prototype.loadBufferView = function (e) {
                      var t = this.parser.json,
                        n = t.bufferViews[e]
                      if (n.extensions && n.extensions[this.name]) {
                        var r = n.extensions[this.name],
                          i = this.parser.getDependency('buffer', r.buffer),
                          o = this.parser.options.meshoptDecoder
                        if (!o || !o.supported) {
                          if (t.extensionsRequired && t.extensionsRequired.indexOf(this.name) >= 0)
                            throw new Error(
                              'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files',
                            )
                          return null
                        }
                        return Promise.all([i, o.ready]).then(function (e) {
                          var t = r.byteOffset || 0,
                            n = r.byteLength || 0,
                            i = r.count,
                            a = r.byteStride,
                            s = new ArrayBuffer(i * a),
                            l = new Uint8Array(e[0], t, n)
                          return o.decodeGltfBuffer(new Uint8Array(s), i, a, l, r.mode, r.filter), s
                        })
                      }
                      return null
                    })
                  var d = 'glTF',
                    p = 12,
                    f = { JSON: 1313821514, BIN: 5130562 }
                  function m(e) {
                    ;(this.name = r.KHR_BINARY_GLTF), (this.content = null), (this.body = null)
                    var t = new DataView(e, 0, p)
                    if (
                      ((this.header = {
                        magic: THREE.LoaderUtils.decodeText(new Uint8Array(e.slice(0, 4))),
                        version: t.getUint32(4, !0),
                        length: t.getUint32(8, !0),
                      }),
                      this.header.magic !== d)
                    )
                      throw new Error('THREE.GLTFLoader: Unsupported glTF-Binary header.')
                    if (this.header.version < 2)
                      throw new Error('THREE.GLTFLoader: Legacy binary file detected.')
                    for (var n = this.header.length - p, i = new DataView(e, p), o = 0; o < n; ) {
                      var a = i.getUint32(o, !0)
                      o += 4
                      var s = i.getUint32(o, !0)
                      if (((o += 4), s === f.JSON)) {
                        var l = new Uint8Array(e, p + o, a)
                        this.content = THREE.LoaderUtils.decodeText(l)
                      } else if (s === f.BIN) {
                        var c = p + o
                        this.body = e.slice(c, c + a)
                      }
                      o += a
                    }
                    if (null === this.content)
                      throw new Error('THREE.GLTFLoader: JSON content not found.')
                  }
                  function v(e, t) {
                    if (!t) throw new Error('THREE.GLTFLoader: No DRACOLoader instance provided.')
                    ;(this.name = r.KHR_DRACO_MESH_COMPRESSION),
                      (this.json = e),
                      (this.dracoLoader = t),
                      this.dracoLoader.preload()
                  }
                  function g() {
                    this.name = r.KHR_TEXTURE_TRANSFORM
                  }
                  function y(e) {
                    THREE.MeshStandardMaterial.call(this),
                      (this.isGLTFSpecularGlossinessMaterial = !0)
                    var t = [
                        '#ifdef USE_SPECULARMAP',
                        '\tuniform sampler2D specularMap;',
                        '#endif',
                      ].join('\n'),
                      n = [
                        '#ifdef USE_GLOSSINESSMAP',
                        '\tuniform sampler2D glossinessMap;',
                        '#endif',
                      ].join('\n'),
                      r = [
                        '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'),
                      i = [
                        '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'),
                      o = [
                        '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.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',
                        'material.specularRoughness += geometryRoughness;',
                        'material.specularRoughness = min( material.specularRoughness, 1.0 );',
                        'material.specularColor = specularFactor;',
                      ].join('\n'),
                      a = {
                        specular: { value: new THREE.Color().setHex(16777215) },
                        glossiness: { value: 1 },
                        specularMap: { value: null },
                        glossinessMap: { value: null },
                      }
                    ;(this._extraUniforms = a),
                      (this.onBeforeCompile = function (e) {
                        for (var s in a) e.uniforms[s] = a[s]
                        e.fragmentShader = e.fragmentShader
                          .replace('uniform float roughness;', 'uniform vec3 specular;')
                          .replace('uniform float metalness;', 'uniform float glossiness;')
                          .replace('#include <roughnessmap_pars_fragment>', t)
                          .replace('#include <metalnessmap_pars_fragment>', n)
                          .replace('#include <roughnessmap_fragment>', r)
                          .replace('#include <metalnessmap_fragment>', i)
                          .replace('#include <lights_physical_fragment>', o)
                      }),
                      Object.defineProperties(this, {
                        specular: {
                          get: function () {
                            return a.specular.value
                          },
                          set: function (e) {
                            a.specular.value = e
                          },
                        },
                        specularMap: {
                          get: function () {
                            return a.specularMap.value
                          },
                          set: function (e) {
                            ;(a.specularMap.value = e),
                              e
                                ? (this.defines.USE_SPECULARMAP = '')
                                : delete this.defines.USE_SPECULARMAP
                          },
                        },
                        glossiness: {
                          get: function () {
                            return a.glossiness.value
                          },
                          set: function (e) {
                            a.glossiness.value = e
                          },
                        },
                        glossinessMap: {
                          get: function () {
                            return a.glossinessMap.value
                          },
                          set: function (e) {
                            ;(a.glossinessMap.value = e),
                              e
                                ? ((this.defines.USE_GLOSSINESSMAP = ''),
                                  (this.defines.USE_UV = ''))
                                : (delete this.defines.USE_GLOSSINESSMAP,
                                  delete this.defines.USE_UV)
                          },
                        },
                      }),
                      delete this.metalness,
                      delete this.roughness,
                      delete this.metalnessMap,
                      delete this.roughnessMap,
                      this.setValues(e)
                  }
                  function b() {
                    return {
                      name: r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,
                      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: function () {
                        return y
                      },
                      extendParams: function (e, t, n) {
                        var r = t.extensions[this.name]
                        ;(e.color = new THREE.Color(1, 1, 1)), (e.opacity = 1)
                        var i = []
                        if (Array.isArray(r.diffuseFactor)) {
                          var o = r.diffuseFactor
                          e.color.fromArray(o), (e.opacity = o[3])
                        }
                        if (
                          (void 0 !== r.diffuseTexture &&
                            i.push(n.assignTexture(e, 'map', r.diffuseTexture)),
                          (e.emissive = new THREE.Color(0, 0, 0)),
                          (e.glossiness = void 0 !== r.glossinessFactor ? r.glossinessFactor : 1),
                          (e.specular = new THREE.Color(1, 1, 1)),
                          Array.isArray(r.specularFactor) && e.specular.fromArray(r.specularFactor),
                          void 0 !== r.specularGlossinessTexture)
                        ) {
                          var a = r.specularGlossinessTexture
                          i.push(n.assignTexture(e, 'glossinessMap', a)),
                            i.push(n.assignTexture(e, 'specularMap', a))
                        }
                        return Promise.all(i)
                      },
                      createMaterial: function (e) {
                        var t = new y(e)
                        return (
                          (t.fog = !0),
                          (t.color = e.color),
                          (t.map = void 0 === e.map ? null : e.map),
                          (t.lightMap = null),
                          (t.lightMapIntensity = 1),
                          (t.aoMap = void 0 === e.aoMap ? null : e.aoMap),
                          (t.aoMapIntensity = 1),
                          (t.emissive = e.emissive),
                          (t.emissiveIntensity = 1),
                          (t.emissiveMap = void 0 === e.emissiveMap ? null : e.emissiveMap),
                          (t.bumpMap = void 0 === e.bumpMap ? null : e.bumpMap),
                          (t.bumpScale = 1),
                          (t.normalMap = void 0 === e.normalMap ? null : e.normalMap),
                          (t.normalMapType = THREE.TangentSpaceNormalMap),
                          e.normalScale && (t.normalScale = e.normalScale),
                          (t.displacementMap = null),
                          (t.displacementScale = 1),
                          (t.displacementBias = 0),
                          (t.specularMap = void 0 === e.specularMap ? null : e.specularMap),
                          (t.specular = e.specular),
                          (t.glossinessMap = void 0 === e.glossinessMap ? null : e.glossinessMap),
                          (t.glossiness = e.glossiness),
                          (t.alphaMap = null),
                          (t.envMap = void 0 === e.envMap ? null : e.envMap),
                          (t.envMapIntensity = 1),
                          (t.refractionRatio = 0.98),
                          t
                        )
                      },
                    }
                  }
                  function A() {
                    this.name = r.KHR_MESH_QUANTIZATION
                  }
                  function w(e, t, n, r) {
                    THREE.Interpolant.call(this, e, t, n, r)
                  }
                  ;(v.prototype.decodePrimitive = function (e, t) {
                    var n = this.json,
                      r = this.dracoLoader,
                      i = e.extensions[this.name].bufferView,
                      o = e.extensions[this.name].attributes,
                      a = {},
                      s = {},
                      l = {}
                    for (var c in o) {
                      var u = S[c] || c.toLowerCase()
                      a[u] = o[c]
                    }
                    for (c in e.attributes)
                      if (((u = S[c] || c.toLowerCase()), void 0 !== o[c])) {
                        var h = n.accessors[e.attributes[c]],
                          d = E[h.componentType]
                        ;(l[u] = d), (s[u] = !0 === h.normalized)
                      }
                    return t.getDependency('bufferView', i).then(function (e) {
                      return new Promise(function (t) {
                        r.decodeDracoFile(
                          e,
                          function (e) {
                            for (var n in e.attributes) {
                              var r = e.attributes[n],
                                i = s[n]
                              void 0 !== i && (r.normalized = i)
                            }
                            t(e)
                          },
                          a,
                          l,
                        )
                      })
                    })
                  }),
                    (g.prototype.extendTexture = function (e, t) {
                      return (
                        (e = e.clone()),
                        void 0 !== t.offset && e.offset.fromArray(t.offset),
                        void 0 !== t.rotation && (e.rotation = t.rotation),
                        void 0 !== t.scale && e.repeat.fromArray(t.scale),
                        void 0 !== t.texCoord &&
                          console.warn(
                            'THREE.GLTFLoader: Custom UV sets in "' +
                              this.name +
                              '" extension not yet supported.',
                          ),
                        (e.needsUpdate = !0),
                        e
                      )
                    }),
                    (y.prototype = Object.create(THREE.MeshStandardMaterial.prototype)),
                    (y.prototype.constructor = y),
                    (y.prototype.copy = function (e) {
                      return (
                        THREE.MeshStandardMaterial.prototype.copy.call(this, e),
                        (this.specularMap = e.specularMap),
                        this.specular.copy(e.specular),
                        (this.glossinessMap = e.glossinessMap),
                        (this.glossiness = e.glossiness),
                        delete this.metalness,
                        delete this.roughness,
                        delete this.metalnessMap,
                        delete this.roughnessMap,
                        this
                      )
                    }),
                    (w.prototype = Object.create(THREE.Interpolant.prototype)),
                    (w.prototype.constructor = w),
                    (w.prototype.copySampleValue_ = function (e) {
                      for (
                        var t = this.resultBuffer,
                          n = this.sampleValues,
                          r = this.valueSize,
                          i = e * r * 3 + r,
                          o = 0;
                        o !== r;
                        o++
                      )
                        t[o] = n[i + o]
                      return t
                    }),
                    (w.prototype.beforeStart_ = w.prototype.copySampleValue_),
                    (w.prototype.afterEnd_ = w.prototype.copySampleValue_),
                    (w.prototype.interpolate_ = function (e, t, n, r) {
                      for (
                        var i = this.resultBuffer,
                          o = this.sampleValues,
                          a = this.valueSize,
                          s = 2 * a,
                          l = 3 * a,
                          c = r - t,
                          u = (n - t) / c,
                          h = u * u,
                          d = h * u,
                          p = e * l,
                          f = p - l,
                          m = -2 * d + 3 * h,
                          v = d - h,
                          g = 1 - m,
                          y = v - h + u,
                          b = 0;
                        b !== a;
                        b++
                      ) {
                        var A = o[f + b + a],
                          w = o[f + b + s] * c,
                          x = o[p + b + a],
                          E = o[p + b] * c
                        i[b] = g * A + y * w + m * x + v * E
                      }
                      return i
                    })
                  var x = {
                      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,
                    },
                    E = {
                      5120: Int8Array,
                      5121: Uint8Array,
                      5122: Int16Array,
                      5123: Uint16Array,
                      5125: Uint32Array,
                      5126: Float32Array,
                    },
                    M = {
                      9728: THREE.NearestFilter,
                      9729: THREE.LinearFilter,
                      9984: THREE.NearestMipmapNearestFilter,
                      9985: THREE.LinearMipmapNearestFilter,
                      9986: THREE.NearestMipmapLinearFilter,
                      9987: THREE.LinearMipmapLinearFilter,
                    },
                    _ = {
                      33071: THREE.ClampToEdgeWrapping,
                      33648: THREE.MirroredRepeatWrapping,
                      10497: THREE.RepeatWrapping,
                    },
                    T = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 },
                    S = {
                      POSITION: 'position',
                      NORMAL: 'normal',
                      TANGENT: 'tangent',
                      TEXCOORD_0: 'uv',
                      TEXCOORD_1: 'uv2',
                      COLOR_0: 'color',
                      WEIGHTS_0: 'skinWeight',
                      JOINTS_0: 'skinIndex',
                    },
                    C = {
                      scale: 'scale',
                      translation: 'position',
                      rotation: 'quaternion',
                      weights: 'morphTargetInfluences',
                    },
                    L = {
                      CUBICSPLINE: void 0,
                      LINEAR: THREE.InterpolateLinear,
                      STEP: THREE.InterpolateDiscrete,
                    },
                    R = { OPAQUE: 'OPAQUE', MASK: 'MASK', BLEND: 'BLEND' }
                  function P(e, t) {
                    return 'string' !== typeof e || '' === e
                      ? ''
                      : (/^https?:\/\//i.test(t) &&
                          /^\//.test(e) &&
                          (t = t.replace(/(^https?:\/\/[^\/]+).*/i, '$1')),
                        /^(https?:)?\/\//i.test(e) ||
                        /^data:.*,.*$/i.test(e) ||
                        /^blob:.*$/i.test(e)
                          ? e
                          : t + e)
                  }
                  function D(e) {
                    return (
                      void 0 === e.DefaultMaterial &&
                        (e.DefaultMaterial = new THREE.MeshStandardMaterial({
                          color: 16777215,
                          emissive: 0,
                          metalness: 1,
                          roughness: 1,
                          transparent: !1,
                          depthTest: !0,
                          side: THREE.FrontSide,
                        })),
                      e.DefaultMaterial
                    )
                  }
                  function O(e, t, n) {
                    for (var r in n.extensions)
                      void 0 === e[r] &&
                        ((t.userData.gltfExtensions = t.userData.gltfExtensions || {}),
                        (t.userData.gltfExtensions[r] = n.extensions[r]))
                  }
                  function I(e, t) {
                    void 0 !== t.extras &&
                      ('object' === typeof t.extras
                        ? Object.assign(e.userData, t.extras)
                        : console.warn(
                            'THREE.GLTFLoader: Ignoring primitive type .extras, ' + t.extras,
                          ))
                  }
                  function B(e, t, n) {
                    for (
                      var r = !1, i = !1, o = 0, a = t.length;
                      o < a &&
                      (void 0 !== (c = t[o]).POSITION && (r = !0),
                      void 0 !== c.NORMAL && (i = !0),
                      !r || !i);
                      o++
                    );
                    if (!r && !i) return Promise.resolve(e)
                    var s = [],
                      l = []
                    for (o = 0, a = t.length; o < a; o++) {
                      var c = t[o]
                      if (r) {
                        var u =
                          void 0 !== c.POSITION
                            ? n.getDependency('accessor', c.POSITION)
                            : e.attributes.position
                        s.push(u)
                      }
                      i &&
                        ((u =
                          void 0 !== c.NORMAL
                            ? n.getDependency('accessor', c.NORMAL)
                            : e.attributes.normal),
                        l.push(u))
                    }
                    return Promise.all([Promise.all(s), Promise.all(l)]).then(function (t) {
                      var n = t[0],
                        o = t[1]
                      return (
                        r && (e.morphAttributes.position = n),
                        i && (e.morphAttributes.normal = o),
                        (e.morphTargetsRelative = !0),
                        e
                      )
                    })
                  }
                  function F(e, t) {
                    if ((e.updateMorphTargets(), void 0 !== t.weights))
                      for (var n = 0, r = t.weights.length; n < r; n++)
                        e.morphTargetInfluences[n] = t.weights[n]
                    if (t.extras && Array.isArray(t.extras.targetNames)) {
                      var i = t.extras.targetNames
                      if (e.morphTargetInfluences.length === i.length)
                        for (e.morphTargetDictionary = {}, n = 0, r = i.length; n < r; n++)
                          e.morphTargetDictionary[i[n]] = n
                      else
                        console.warn(
                          'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.',
                        )
                    }
                  }
                  function k(e) {
                    var t = e.extensions && e.extensions[r.KHR_DRACO_MESH_COMPRESSION]
                    return t
                      ? 'draco:' + t.bufferView + ':' + t.indices + ':' + N(t.attributes)
                      : e.indices + ':' + N(e.attributes) + ':' + e.mode
                  }
                  function N(e) {
                    for (var t = '', n = Object.keys(e).sort(), r = 0, i = n.length; r < i; r++)
                      t += n[r] + ':' + e[n[r]] + ';'
                    return t
                  }
                  function U(e, t) {
                    ;(this.json = e || {}),
                      (this.extensions = {}),
                      (this.plugins = {}),
                      (this.options = t || {}),
                      (this.cache = new n()),
                      (this.associations = new Map()),
                      (this.primitiveCache = {}),
                      (this.meshCache = { refs: {}, uses: {} }),
                      (this.cameraCache = { refs: {}, uses: {} }),
                      (this.lightCache = { refs: {}, uses: {} }),
                      (this.nodeNamesUsed = {}),
                      'undefined' !== typeof createImageBitmap &&
                      !1 === /Firefox/.test(navigator.userAgent)
                        ? (this.textureLoader = new THREE.ImageBitmapLoader(this.options.manager))
                        : (this.textureLoader = new THREE.TextureLoader(this.options.manager)),
                      this.textureLoader.setCrossOrigin(this.options.crossOrigin),
                      (this.fileLoader = new THREE.FileLoader(this.options.manager)),
                      this.fileLoader.setResponseType('arraybuffer'),
                      'use-credentials' === this.options.crossOrigin &&
                        this.fileLoader.setWithCredentials(!0)
                  }
                  function H(e, t, n) {
                    var r = t.attributes,
                      i = new THREE.Box3()
                    if (void 0 !== r.POSITION) {
                      var o = (d = n.json.accessors[r.POSITION]).min,
                        a = d.max
                      if (void 0 !== o && void 0 !== a) {
                        i.set(
                          new THREE.Vector3(o[0], o[1], o[2]),
                          new THREE.Vector3(a[0], a[1], a[2]),
                        )
                        var s = t.targets
                        if (void 0 !== s) {
                          for (
                            var l = new THREE.Vector3(),
                              c = new THREE.Vector3(),
                              u = 0,
                              h = s.length;
                            u < h;
                            u++
                          ) {
                            var d,
                              p = s[u]
                            if (void 0 !== p.POSITION)
                              (o = (d = n.json.accessors[p.POSITION]).min),
                                (a = d.max),
                                void 0 !== o && void 0 !== a
                                  ? (c.setX(Math.max(Math.abs(o[0]), Math.abs(a[0]))),
                                    c.setY(Math.max(Math.abs(o[1]), Math.abs(a[1]))),
                                    c.setZ(Math.max(Math.abs(o[2]), Math.abs(a[2]))),
                                    l.max(c))
                                  : console.warn(
                                      'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.',
                                    )
                          }
                          i.expandByVector(l)
                        }
                        e.boundingBox = i
                        var f = new THREE.Sphere()
                        i.getCenter(f.center),
                          (f.radius = i.min.distanceTo(i.max) / 2),
                          (e.boundingSphere = f)
                      } else
                        console.warn(
                          'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.',
                        )
                    }
                  }
                  function G(e, t, n) {
                    var r = t.attributes,
                      i = []
                    function o(t, r) {
                      return n.getDependency('accessor', t).then(function (t) {
                        e.setAttribute(r, t)
                      })
                    }
                    for (var a in r) {
                      var s = S[a] || a.toLowerCase()
                      s in e.attributes || i.push(o(r[a], s))
                    }
                    if (void 0 !== t.indices && !e.index) {
                      var l = n.getDependency('accessor', t.indices).then(function (t) {
                        e.setIndex(t)
                      })
                      i.push(l)
                    }
                    return (
                      I(e, t),
                      H(e, t, n),
                      Promise.all(i).then(function () {
                        return void 0 !== t.targets ? B(e, t.targets, n) : e
                      })
                    )
                  }
                  function z(e, t) {
                    var n = e.getIndex()
                    if (null === n) {
                      var r = [],
                        i = e.getAttribute('position')
                      if (void 0 === i)
                        return (
                          console.error(
                            'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.',
                          ),
                          e
                        )
                      for (var o = 0; o < i.count; o++) r.push(o)
                      e.setIndex(r), (n = e.getIndex())
                    }
                    var a = n.count - 2,
                      s = []
                    if (t === THREE.TriangleFanDrawMode)
                      for (o = 1; o <= a; o++)
                        s.push(n.getX(0)), s.push(n.getX(o)), s.push(n.getX(o + 1))
                    else
                      for (o = 0; o < a; o++)
                        o % 2 === 0
                          ? (s.push(n.getX(o)), s.push(n.getX(o + 1)), s.push(n.getX(o + 2)))
                          : (s.push(n.getX(o + 2)), s.push(n.getX(o + 1)), s.push(n.getX(o)))
                    s.length / 3 !== a &&
                      console.error(
                        'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.',
                      )
                    var l = e.clone()
                    return l.setIndex(s), l
                  }
                  return (
                    (U.prototype.setExtensions = function (e) {
                      this.extensions = e
                    }),
                    (U.prototype.setPlugins = function (e) {
                      this.plugins = e
                    }),
                    (U.prototype.parse = function (e, t) {
                      var n = this,
                        r = this.json,
                        i = this.extensions
                      this.cache.removeAll(),
                        this._invokeAll(function (e) {
                          return e._markDefs && e._markDefs()
                        }),
                        Promise.all([
                          this.getDependencies('scene'),
                          this.getDependencies('animation'),
                          this.getDependencies('camera'),
                        ])
                          .then(function (t) {
                            var o = {
                              scene: t[0][r.scene || 0],
                              scenes: t[0],
                              animations: t[1],
                              cameras: t[2],
                              asset: r.asset,
                              parser: n,
                              userData: {},
                            }
                            O(i, o, r), I(o, r), e(o)
                          })
                          .catch(t)
                    }),
                    (U.prototype._markDefs = function () {
                      for (
                        var e = this.json.nodes || [],
                          t = this.json.skins || [],
                          n = this.json.meshes || [],
                          r = 0,
                          i = t.length;
                        r < i;
                        r++
                      )
                        for (var o = t[r].joints, a = 0, s = o.length; a < s; a++)
                          e[o[a]].isBone = !0
                      for (var l = 0, c = e.length; l < c; l++) {
                        var u = e[l]
                        void 0 !== u.mesh &&
                          (this._addNodeRef(this.meshCache, u.mesh),
                          void 0 !== u.skin && (n[u.mesh].isSkinnedMesh = !0)),
                          void 0 !== u.camera && this._addNodeRef(this.cameraCache, u.camera)
                      }
                    }),
                    (U.prototype._addNodeRef = function (e, t) {
                      void 0 !== t &&
                        (void 0 === e.refs[t] && (e.refs[t] = e.uses[t] = 0), e.refs[t]++)
                    }),
                    (U.prototype._getNodeRef = function (e, t, n) {
                      if (e.refs[t] <= 1) return n
                      var r = n.clone()
                      return (r.name += '_instance_' + e.uses[t]++), r
                    }),
                    (U.prototype._invokeOne = function (e) {
                      var t = Object.values(this.plugins)
                      t.push(this)
                      for (var n = 0; n < t.length; n++) {
                        var r = e(t[n])
                        if (r) return r
                      }
                    }),
                    (U.prototype._invokeAll = function (e) {
                      var t = Object.values(this.plugins)
                      t.unshift(this)
                      for (var n = [], r = 0; r < t.length; r++) {
                        var i = e(t[r])
                        i && n.push(i)
                      }
                      return n
                    }),
                    (U.prototype.getDependency = function (e, t) {
                      var n = e + ':' + t,
                        r = this.cache.get(n)
                      if (!r) {
                        switch (e) {
                          case 'scene':
                            r = this.loadScene(t)
                            break
                          case 'node':
                            r = this.loadNode(t)
                            break
                          case 'mesh':
                            r = this._invokeOne(function (e) {
                              return e.loadMesh && e.loadMesh(t)
                            })
                            break
                          case 'accessor':
                            r = this.loadAccessor(t)
                            break
                          case 'bufferView':
                            r = this._invokeOne(function (e) {
                              return e.loadBufferView && e.loadBufferView(t)
                            })
                            break
                          case 'buffer':
                            r = this.loadBuffer(t)
                            break
                          case 'material':
                            r = this._invokeOne(function (e) {
                              return e.loadMaterial && e.loadMaterial(t)
                            })
                            break
                          case 'texture':
                            r = this._invokeOne(function (e) {
                              return e.loadTexture && e.loadTexture(t)
                            })
                            break
                          case 'skin':
                            r = this.loadSkin(t)
                            break
                          case 'animation':
                            r = this.loadAnimation(t)
                            break
                          case 'camera':
                            r = this.loadCamera(t)
                            break
                          default:
                            throw new Error('Unknown type: ' + e)
                        }
                        this.cache.add(n, r)
                      }
                      return r
                    }),
                    (U.prototype.getDependencies = function (e) {
                      var t = this.cache.get(e)
                      if (!t) {
                        var n = this,
                          r = this.json[e + ('mesh' === e ? 'es' : 's')] || []
                        ;(t = Promise.all(
                          r.map(function (t, r) {
                            return n.getDependency(e, r)
                          }),
                        )),
                          this.cache.add(e, t)
                      }
                      return t
                    }),
                    (U.prototype.loadBuffer = function (e) {
                      var t = this.json.buffers[e],
                        n = this.fileLoader
                      if (t.type && 'arraybuffer' !== t.type)
                        throw new Error(
                          'THREE.GLTFLoader: ' + t.type + ' buffer type is not supported.',
                        )
                      if (void 0 === t.uri && 0 === e)
                        return Promise.resolve(this.extensions[r.KHR_BINARY_GLTF].body)
                      var i = this.options
                      return new Promise(function (e, r) {
                        n.load(P(t.uri, i.path), e, void 0, function () {
                          r(new Error('THREE.GLTFLoader: Failed to load buffer "' + t.uri + '".'))
                        })
                      })
                    }),
                    (U.prototype.loadBufferView = function (e) {
                      var t = this.json.bufferViews[e]
                      return this.getDependency('buffer', t.buffer).then(function (e) {
                        var n = t.byteLength || 0,
                          r = t.byteOffset || 0
                        return e.slice(r, r + n)
                      })
                    }),
                    (U.prototype.loadAccessor = function (e) {
                      var t = this,
                        n = this.json,
                        r = this.json.accessors[e]
                      if (void 0 === r.bufferView && void 0 === r.sparse)
                        return Promise.resolve(null)
                      var i = []
                      return (
                        void 0 !== r.bufferView
                          ? i.push(this.getDependency('bufferView', r.bufferView))
                          : i.push(null),
                        void 0 !== r.sparse &&
                          (i.push(this.getDependency('bufferView', r.sparse.indices.bufferView)),
                          i.push(this.getDependency('bufferView', r.sparse.values.bufferView))),
                        Promise.all(i).then(function (e) {
                          var i,
                            o,
                            a = e[0],
                            s = T[r.type],
                            l = E[r.componentType],
                            c = l.BYTES_PER_ELEMENT,
                            u = c * s,
                            h = r.byteOffset || 0,
                            d =
                              void 0 !== r.bufferView
                                ? n.bufferViews[r.bufferView].byteStride
                                : void 0,
                            p = !0 === r.normalized
                          if (d && d !== u) {
                            var f = Math.floor(h / d),
                              m =
                                'InterleavedBuffer:' +
                                r.bufferView +
                                ':' +
                                r.componentType +
                                ':' +
                                f +
                                ':' +
                                r.count,
                              v = t.cache.get(m)
                            v ||
                              ((i = new l(a, f * d, (r.count * d) / c)),
                              (v = new THREE.InterleavedBuffer(i, d / c)),
                              t.cache.add(m, v)),
                              (o = new THREE.InterleavedBufferAttribute(v, s, (h % d) / c, p))
                          } else (i = null === a ? new l(r.count * s) : new l(a, h, r.count * s)), (o = new THREE.BufferAttribute(i, s, p))
                          if (void 0 !== r.sparse) {
                            var g = T.SCALAR,
                              y = E[r.sparse.indices.componentType],
                              b = r.sparse.indices.byteOffset || 0,
                              A = r.sparse.values.byteOffset || 0,
                              w = new y(e[1], b, r.sparse.count * g),
                              x = new l(e[2], A, r.sparse.count * s)
                            null !== a &&
                              (o = new THREE.BufferAttribute(
                                o.array.slice(),
                                o.itemSize,
                                o.normalized,
                              ))
                            for (var M = 0, _ = w.length; M < _; M++) {
                              var S = w[M]
                              if (
                                (o.setX(S, x[M * s]),
                                s >= 2 && o.setY(S, x[M * s + 1]),
                                s >= 3 && o.setZ(S, x[M * s + 2]),
                                s >= 4 && o.setW(S, x[M * s + 3]),
                                s >= 5)
                              )
                                throw new Error(
                                  'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.',
                                )
                            }
                          }
                          return o
                        })
                      )
                    }),
                    (U.prototype.loadTexture = function (e) {
                      var t,
                        n,
                        i = this,
                        o = this.json,
                        a = this.options,
                        s = o.textures[e],
                        l = s.extensions || {}
                      return (
                        (t = l[r.MSFT_TEXTURE_DDS]
                          ? o.images[l[r.MSFT_TEXTURE_DDS].source]
                          : o.images[s.source]).uri && (n = a.manager.getHandler(t.uri)),
                        n ||
                          (n = l[r.MSFT_TEXTURE_DDS]
                            ? i.extensions[r.MSFT_TEXTURE_DDS].ddsLoader
                            : this.textureLoader),
                        this.loadTextureImage(e, t, n)
                      )
                    }),
                    (U.prototype.loadTextureImage = function (e, t, n) {
                      var r = this,
                        i = this.json,
                        o = this.options,
                        a = i.textures[e],
                        s = self.URL || self.webkitURL,
                        l = t.uri,
                        c = !1,
                        u = !0
                      return (
                        'image/jpeg' === t.mimeType && (u = !1),
                        void 0 !== t.bufferView &&
                          (l = r.getDependency('bufferView', t.bufferView).then(function (e) {
                            if ('image/png' === t.mimeType) {
                              var n = new DataView(e, 25, 1).getUint8(0, !1)
                              u = 6 === n || 4 === n || 3 === n
                            }
                            c = !0
                            var r = new Blob([e], { type: t.mimeType })
                            return (l = s.createObjectURL(r))
                          })),
                        Promise.resolve(l)
                          .then(function (e) {
                            return new Promise(function (t, r) {
                              var i = t
                              !0 === n.isImageBitmapLoader &&
                                (i = function (e) {
                                  t(new THREE.CanvasTexture(e))
                                }),
                                n.load(P(e, o.path), i, void 0, r)
                            })
                          })
                          .then(function (t) {
                            !0 === c && s.revokeObjectURL(l),
                              (t.flipY = !1),
                              a.name && (t.name = a.name),
                              u || (t.format = THREE.RGBFormat)
                            var n = (i.samplers || {})[a.sampler] || {}
                            return (
                              (t.magFilter = M[n.magFilter] || THREE.LinearFilter),
                              (t.minFilter = M[n.minFilter] || THREE.LinearMipmapLinearFilter),
                              (t.wrapS = _[n.wrapS] || THREE.RepeatWrapping),
                              (t.wrapT = _[n.wrapT] || THREE.RepeatWrapping),
                              r.associations.set(t, { type: 'textures', index: e }),
                              t
                            )
                          })
                      )
                    }),
                    (U.prototype.assignTexture = function (e, t, n) {
                      var i = this
                      return this.getDependency('texture', n.index).then(function (o) {
                        if (
                          (void 0 === n.texCoord ||
                            0 == n.texCoord ||
                            ('aoMap' === t && 1 == n.texCoord) ||
                            console.warn(
                              'THREE.GLTFLoader: Custom UV set ' +
                                n.texCoord +
                                ' for texture ' +
                                t +
                                ' not yet supported.',
                            ),
                          i.extensions[r.KHR_TEXTURE_TRANSFORM])
                        ) {
                          var a =
                            void 0 !== n.extensions ? n.extensions[r.KHR_TEXTURE_TRANSFORM] : void 0
                          if (a) {
                            var s = i.associations.get(o)
                            ;(o = i.extensions[r.KHR_TEXTURE_TRANSFORM].extendTexture(o, a)),
                              i.associations.set(o, s)
                          }
                        }
                        e[t] = o
                      })
                    }),
                    (U.prototype.assignFinalMaterial = function (e) {
                      var t = e.geometry,
                        n = e.material,
                        r = void 0 !== t.attributes.tangent,
                        i = void 0 !== t.attributes.color,
                        o = void 0 === t.attributes.normal,
                        a = !0 === e.isSkinnedMesh,
                        s = Object.keys(t.morphAttributes).length > 0,
                        l = s && void 0 !== t.morphAttributes.normal
                      if (e.isPoints) {
                        var c = 'PointsMaterial:' + n.uuid,
                          u = this.cache.get(c)
                        u ||
                          ((u = new THREE.PointsMaterial()),
                          THREE.Material.prototype.copy.call(u, n),
                          u.color.copy(n.color),
                          (u.map = n.map),
                          (u.sizeAttenuation = !1),
                          this.cache.add(c, u)),
                          (n = u)
                      } else if (e.isLine) {
                        c = 'LineBasicMaterial:' + n.uuid
                        var h = this.cache.get(c)
                        h ||
                          ((h = new THREE.LineBasicMaterial()),
                          THREE.Material.prototype.copy.call(h, n),
                          h.color.copy(n.color),
                          this.cache.add(c, h)),
                          (n = h)
                      }
                      if (r || i || o || a || s) {
                        ;(c = 'ClonedMaterial:' + n.uuid + ':'),
                          n.isGLTFSpecularGlossinessMaterial && (c += 'specular-glossiness:'),
                          a && (c += 'skinning:'),
                          r && (c += 'vertex-tangents:'),
                          i && (c += 'vertex-colors:'),
                          o && (c += 'flat-shading:'),
                          s && (c += 'morph-targets:'),
                          l && (c += 'morph-normals:')
                        var d = this.cache.get(c)
                        d ||
                          ((d = n.clone()),
                          a && (d.skinning = !0),
                          i && (d.vertexColors = !0),
                          o && (d.flatShading = !0),
                          s && (d.morphTargets = !0),
                          l && (d.morphNormals = !0),
                          r &&
                            ((d.vertexTangents = !0),
                            n.normalScale && (n.normalScale.y *= -1),
                            n.clearcoatNormalScale && (n.clearcoatNormalScale.y *= -1)),
                          this.cache.add(c, d),
                          this.associations.set(d, this.associations.get(n))),
                          (n = d)
                      }
                      n.aoMap &&
                        void 0 === t.attributes.uv2 &&
                        void 0 !== t.attributes.uv &&
                        t.setAttribute('uv2', t.attributes.uv),
                        (e.material = n)
                    }),
                    (U.prototype.getMaterialType = function () {
                      return THREE.MeshStandardMaterial
                    }),
                    (U.prototype.loadMaterial = function (e) {
                      var t,
                        n = this,
                        i = this.json,
                        o = this.extensions,
                        a = i.materials[e],
                        s = {},
                        l = a.extensions || {},
                        c = []
                      if (l[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) {
                        var u = o[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]
                        ;(t = u.getMaterialType()), c.push(u.extendParams(s, a, n))
                      } else if (l[r.KHR_MATERIALS_UNLIT]) {
                        var h = o[r.KHR_MATERIALS_UNLIT]
                        ;(t = h.getMaterialType()), c.push(h.extendParams(s, a, n))
                      } else {
                        var d = a.pbrMetallicRoughness || {}
                        if (
                          ((s.color = new THREE.Color(1, 1, 1)),
                          (s.opacity = 1),
                          Array.isArray(d.baseColorFactor))
                        ) {
                          var p = d.baseColorFactor
                          s.color.fromArray(p), (s.opacity = p[3])
                        }
                        void 0 !== d.baseColorTexture &&
                          c.push(n.assignTexture(s, 'map', d.baseColorTexture)),
                          (s.metalness = void 0 !== d.metallicFactor ? d.metallicFactor : 1),
                          (s.roughness = void 0 !== d.roughnessFactor ? d.roughnessFactor : 1),
                          void 0 !== d.metallicRoughnessTexture &&
                            (c.push(n.assignTexture(s, 'metalnessMap', d.metallicRoughnessTexture)),
                            c.push(n.assignTexture(s, 'roughnessMap', d.metallicRoughnessTexture))),
                          (t = this._invokeOne(function (t) {
                            return t.getMaterialType && t.getMaterialType(e)
                          })),
                          c.push(
                            Promise.all(
                              this._invokeAll(function (t) {
                                return t.extendMaterialParams && t.extendMaterialParams(e, s)
                              }),
                            ),
                          )
                      }
                      !0 === a.doubleSided && (s.side = THREE.DoubleSide)
                      var f = a.alphaMode || R.OPAQUE
                      return (
                        f === R.BLEND
                          ? ((s.transparent = !0), (s.depthWrite = !1))
                          : ((s.transparent = !1),
                            f === R.MASK &&
                              (s.alphaTest = void 0 !== a.alphaCutoff ? a.alphaCutoff : 0.5)),
                        void 0 !== a.normalTexture &&
                          t !== THREE.MeshBasicMaterial &&
                          (c.push(n.assignTexture(s, 'normalMap', a.normalTexture)),
                          (s.normalScale = new THREE.Vector2(1, -1)),
                          void 0 !== a.normalTexture.scale &&
                            s.normalScale.set(a.normalTexture.scale, -a.normalTexture.scale)),
                        void 0 !== a.occlusionTexture &&
                          t !== THREE.MeshBasicMaterial &&
                          (c.push(n.assignTexture(s, 'aoMap', a.occlusionTexture)),
                          void 0 !== a.occlusionTexture.strength &&
                            (s.aoMapIntensity = a.occlusionTexture.strength)),
                        void 0 !== a.emissiveFactor &&
                          t !== THREE.MeshBasicMaterial &&
                          (s.emissive = new THREE.Color().fromArray(a.emissiveFactor)),
                        void 0 !== a.emissiveTexture &&
                          t !== THREE.MeshBasicMaterial &&
                          c.push(n.assignTexture(s, 'emissiveMap', a.emissiveTexture)),
                        Promise.all(c).then(function () {
                          var i
                          return (
                            (i =
                              t === y
                                ? o[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(s)
                                : new t(s)),
                            a.name && (i.name = a.name),
                            i.map && (i.map.encoding = THREE.sRGBEncoding),
                            i.emissiveMap && (i.emissiveMap.encoding = THREE.sRGBEncoding),
                            I(i, a),
                            n.associations.set(i, { type: 'materials', index: e }),
                            a.extensions && O(o, i, a),
                            i
                          )
                        })
                      )
                    }),
                    (U.prototype.createUniqueName = function (e) {
                      for (
                        var t = THREE.PropertyBinding.sanitizeNodeName(e || ''), n = t, r = 1;
                        this.nodeNamesUsed[n];
                        ++r
                      )
                        n = t + '_' + r
                      return (this.nodeNamesUsed[n] = !0), n
                    }),
                    (U.prototype.loadGeometries = function (e) {
                      var t = this,
                        n = this.extensions,
                        i = this.primitiveCache
                      function o(e) {
                        return n[r.KHR_DRACO_MESH_COMPRESSION]
                          .decodePrimitive(e, t)
                          .then(function (n) {
                            return G(n, e, t)
                          })
                      }
                      for (var a = [], s = 0, l = e.length; s < l; s++) {
                        var c,
                          u = e[s],
                          h = k(u),
                          d = i[h]
                        d
                          ? a.push(d.promise)
                          : ((c =
                              u.extensions && u.extensions[r.KHR_DRACO_MESH_COMPRESSION]
                                ? o(u)
                                : G(new THREE.BufferGeometry(), u, t)),
                            (i[h] = { primitive: u, promise: c }),
                            a.push(c))
                      }
                      return Promise.all(a)
                    }),
                    (U.prototype.loadMesh = function (e) {
                      for (
                        var t = this,
                          n = this.json,
                          r = this.extensions,
                          i = n.meshes[e],
                          o = i.primitives,
                          a = [],
                          s = 0,
                          l = o.length;
                        s < l;
                        s++
                      ) {
                        var c =
                          void 0 === o[s].material
                            ? D(this.cache)
                            : this.getDependency('material', o[s].material)
                        a.push(c)
                      }
                      return (
                        a.push(t.loadGeometries(o)),
                        Promise.all(a).then(function (n) {
                          for (
                            var a = n.slice(0, n.length - 1),
                              s = n[n.length - 1],
                              l = [],
                              c = 0,
                              u = s.length;
                            c < u;
                            c++
                          ) {
                            var h,
                              d = s[c],
                              p = o[c],
                              f = a[c]
                            if (
                              p.mode === x.TRIANGLES ||
                              p.mode === x.TRIANGLE_STRIP ||
                              p.mode === x.TRIANGLE_FAN ||
                              void 0 === p.mode
                            )
                              (h =
                                !0 === i.isSkinnedMesh
                                  ? new THREE.SkinnedMesh(d, f)
                                  : new THREE.Mesh(d, f)),
                                !0 === f.isMeshStandardMaterial &&
                                  f.side === THREE.DoubleSide &&
                                  null !== d.getIndex() &&
                                  !0 === d.hasAttribute('position') &&
                                  !0 === d.hasAttribute('normal') &&
                                  !0 === d.hasAttribute('uv') &&
                                  !1 === d.hasAttribute('tangent') &&
                                  (d.computeTangents(), (f.vertexTangents = !0)),
                                !0 !== h.isSkinnedMesh ||
                                  h.geometry.attributes.skinWeight.normalized ||
                                  h.normalizeSkinWeights(),
                                p.mode === x.TRIANGLE_STRIP
                                  ? (h.geometry = z(h.geometry, THREE.TriangleStripDrawMode))
                                  : p.mode === x.TRIANGLE_FAN &&
                                    (h.geometry = z(h.geometry, THREE.TriangleFanDrawMode))
                            else if (p.mode === x.LINES) h = new THREE.LineSegments(d, f)
                            else if (p.mode === x.LINE_STRIP) h = new THREE.Line(d, f)
                            else if (p.mode === x.LINE_LOOP) h = new THREE.LineLoop(d, f)
                            else {
                              if (p.mode !== x.POINTS)
                                throw new Error(
                                  'THREE.GLTFLoader: Primitive mode unsupported: ' + p.mode,
                                )
                              h = new THREE.Points(d, f)
                            }
                            Object.keys(h.geometry.morphAttributes).length > 0 && F(h, i),
                              (h.name = t.createUniqueName(i.name || 'mesh_' + e)),
                              I(h, i),
                              p.extensions && O(r, h, p),
                              t.assignFinalMaterial(h),
                              l.push(h)
                          }
                          if (1 === l.length) return l[0]
                          var m = new THREE.Group()
                          for (c = 0, u = l.length; c < u; c++) m.add(l[c])
                          return m
                        })
                      )
                    }),
                    (U.prototype.loadCamera = function (e) {
                      var t,
                        n = this.json.cameras[e],
                        r = n[n.type]
                      if (r)
                        return (
                          'perspective' === n.type
                            ? (t = new THREE.PerspectiveCamera(
                                THREE.MathUtils.radToDeg(r.yfov),
                                r.aspectRatio || 1,
                                r.znear || 1,
                                r.zfar || 2e6,
                              ))
                            : 'orthographic' === n.type &&
                              (t = new THREE.OrthographicCamera(
                                -r.xmag,
                                r.xmag,
                                r.ymag,
                                -r.ymag,
                                r.znear,
                                r.zfar,
                              )),
                          n.name && (t.name = this.createUniqueName(n.name)),
                          I(t, n),
                          Promise.resolve(t)
                        )
                      console.warn('THREE.GLTFLoader: Missing camera parameters.')
                    }),
                    (U.prototype.loadSkin = function (e) {
                      var t = this.json.skins[e],
                        n = { joints: t.joints }
                      return void 0 === t.inverseBindMatrices
                        ? Promise.resolve(n)
                        : this.getDependency('accessor', t.inverseBindMatrices).then(function (e) {
                            return (n.inverseBindMatrices = e), n
                          })
                    }),
                    (U.prototype.loadAnimation = function (e) {
                      for (
                        var t = this.json.animations[e],
                          n = [],
                          r = [],
                          i = [],
                          o = [],
                          a = [],
                          s = 0,
                          l = t.channels.length;
                        s < l;
                        s++
                      ) {
                        var c = t.channels[s],
                          u = t.samplers[c.sampler],
                          h = c.target,
                          d = void 0 !== h.node ? h.node : h.id,
                          p = void 0 !== t.parameters ? t.parameters[u.input] : u.input,
                          f = void 0 !== t.parameters ? t.parameters[u.output] : u.output
                        n.push(this.getDependency('node', d)),
                          r.push(this.getDependency('accessor', p)),
                          i.push(this.getDependency('accessor', f)),
                          o.push(u),
                          a.push(h)
                      }
                      return Promise.all([
                        Promise.all(n),
                        Promise.all(r),
                        Promise.all(i),
                        Promise.all(o),
                        Promise.all(a),
                      ]).then(function (n) {
                        for (
                          var r = n[0],
                            i = n[1],
                            o = n[2],
                            a = n[3],
                            s = n[4],
                            l = [],
                            c = 0,
                            u = r.length;
                          c < u;
                          c++
                        ) {
                          var h = r[c],
                            d = i[c],
                            p = o[c],
                            f = a[c],
                            m = s[c]
                          if (void 0 !== h) {
                            var v
                            switch ((h.updateMatrix(), (h.matrixAutoUpdate = !0), C[m.path])) {
                              case C.weights:
                                v = THREE.NumberKeyframeTrack
                                break
                              case C.rotation:
                                v = THREE.QuaternionKeyframeTrack
                                break
                              case C.position:
                              case C.scale:
                              default:
                                v = THREE.VectorKeyframeTrack
                            }
                            var g = h.name ? h.name : h.uuid,
                              y =
                                void 0 !== f.interpolation
                                  ? L[f.interpolation]
                                  : THREE.InterpolateLinear,
                              b = []
                            C[m.path] === C.weights
                              ? h.traverse(function (e) {
                                  !0 === e.isMesh &&
                                    e.morphTargetInfluences &&
                                    b.push(e.name ? e.name : e.uuid)
                                })
                              : b.push(g)
                            var A = p.array
                            if (p.normalized) {
                              var x
                              if (A.constructor === Int8Array) x = 1 / 127
                              else if (A.constructor === Uint8Array) x = 1 / 255
                              else if (A.constructor == Int16Array) x = 1 / 32767
                              else {
                                if (A.constructor !== Uint16Array)
                                  throw new Error(
                                    'THREE.GLTFLoader: Unsupported output accessor component type.',
                                  )
                                x = 1 / 65535
                              }
                              for (
                                var E = new Float32Array(A.length), M = 0, _ = A.length;
                                M < _;
                                M++
                              )
                                E[M] = A[M] * x
                              A = E
                            }
                            for (M = 0, _ = b.length; M < _; M++) {
                              var T = new v(b[M] + '.' + C[m.path], d.array, A, y)
                              'CUBICSPLINE' === f.interpolation &&
                                ((T.createInterpolant = function (e) {
                                  return new w(this.times, this.values, this.getValueSize() / 3, e)
                                }),
                                (T.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline =
                                  !0)),
                                l.push(T)
                            }
                          }
                        }
                        var S = t.name ? t.name : 'animation_' + e
                        return new THREE.AnimationClip(S, void 0, l)
                      })
                    }),
                    (U.prototype.loadNode = function (e) {
                      var t = this.json,
                        n = this.extensions,
                        r = this,
                        i = t.nodes[e],
                        o = i.name ? r.createUniqueName(i.name) : ''
                      return (function () {
                        var t = []
                        return (
                          void 0 !== i.mesh &&
                            t.push(
                              r.getDependency('mesh', i.mesh).then(function (e) {
                                var t = r._getNodeRef(r.meshCache, i.mesh, e)
                                return (
                                  void 0 !== i.weights &&
                                    t.traverse(function (e) {
                                      if (e.isMesh)
                                        for (var t = 0, n = i.weights.length; t < n; t++)
                                          e.morphTargetInfluences[t] = i.weights[t]
                                    }),
                                  t
                                )
                              }),
                            ),
                          void 0 !== i.camera &&
                            t.push(
                              r.getDependency('camera', i.camera).then(function (e) {
                                return r._getNodeRef(r.cameraCache, i.camera, e)
                              }),
                            ),
                          r
                            ._invokeAll(function (t) {
                              return t.createNodeAttachment && t.createNodeAttachment(e)
                            })
                            .forEach(function (e) {
                              t.push(e)
                            }),
                          Promise.all(t)
                        )
                      })().then(function (t) {
                        var a
                        if (
                          (a =
                            !0 === i.isBone
                              ? new THREE.Bone()
                              : t.length > 1
                              ? new THREE.Group()
                              : 1 === t.length
                              ? t[0]
                              : new THREE.Object3D()) !== t[0]
                        )
                          for (var s = 0, l = t.length; s < l; s++) a.add(t[s])
                        if (
                          (i.name && ((a.userData.name = i.name), (a.name = o)),
                          I(a, i),
                          i.extensions && O(n, a, i),
                          void 0 !== i.matrix)
                        ) {
                          var c = new THREE.Matrix4()
                          c.fromArray(i.matrix), a.applyMatrix4(c)
                        } else void 0 !== i.translation && a.position.fromArray(i.translation), void 0 !== i.rotation && a.quaternion.fromArray(i.rotation), void 0 !== i.scale && a.scale.fromArray(i.scale)
                        return r.associations.set(a, { type: 'nodes', index: e }), a
                      })
                    }),
                    (U.prototype.loadScene = (function () {
                      function e(t, n, r, i) {
                        var o = r.nodes[t]
                        return i
                          .getDependency('node', t)
                          .then(function (e) {
                            return void 0 === o.skin
                              ? e
                              : i
                                  .getDependency('skin', o.skin)
                                  .then(function (e) {
                                    for (var n = [], r = 0, o = (t = e).joints.length; r < o; r++)
                                      n.push(i.getDependency('node', t.joints[r]))
                                    return Promise.all(n)
                                  })
                                  .then(function (n) {
                                    return (
                                      e.traverse(function (e) {
                                        if (e.isMesh) {
                                          for (
                                            var r = [], i = [], o = 0, a = n.length;
                                            o < a;
                                            o++
                                          ) {
                                            var s = n[o]
                                            if (s) {
                                              r.push(s)
                                              var l = new THREE.Matrix4()
                                              void 0 !== t.inverseBindMatrices &&
                                                l.fromArray(t.inverseBindMatrices.array, 16 * o),
                                                i.push(l)
                                            } else
                                              console.warn(
                                                'THREE.GLTFLoader: Joint "%s" could not be found.',
                                                t.joints[o],
                                              )
                                          }
                                          e.bind(new THREE.Skeleton(r, i), e.matrixWorld)
                                        }
                                      }),
                                      e
                                    )
                                  })
                            var t
                          })
                          .then(function (t) {
                            n.add(t)
                            var a = []
                            if (o.children)
                              for (var s = o.children, l = 0, c = s.length; l < c; l++) {
                                var u = s[l]
                                a.push(e(u, t, r, i))
                              }
                            return Promise.all(a)
                          })
                      }
                      return function (t) {
                        var n = this.json,
                          r = this.extensions,
                          i = this.json.scenes[t],
                          o = this,
                          a = new THREE.Group()
                        i.name && (a.name = o.createUniqueName(i.name)),
                          I(a, i),
                          i.extensions && O(r, a, i)
                        for (var s = i.nodes || [], l = [], c = 0, u = s.length; c < u; c++)
                          l.push(e(s[c], a, n, o))
                        return Promise.all(l).then(function () {
                          return a
                        })
                      }
                    })()),
                    t
                  )
                })()
              },
              {},
            ],
            60: [
              function (t, n, r) {
                ;(THREE.MTLLoader = function (e) {
                  THREE.Loader.call(this, e)
                }),
                  (THREE.MTLLoader.prototype = Object.assign(
                    Object.create(THREE.Loader.prototype),
                    {
                      constructor: THREE.MTLLoader,
                      load: function (t, n, r, i) {
                        var o = this,
                          a = '' === this.path ? THREE.LoaderUtils.extractUrlBase(t) : this.path,
                          s = new THREE.FileLoader(this.manager)
                        s.setPath(this.path),
                          s.setRequestHeader(this.requestHeader),
                          s.setWithCredentials(this.withCredentials),
                          s.load(
                            t,
                            function (r) {
                              try {
                                n(o.parse(r, a))
                              } catch (e) {
                                i ? i(e) : console.error(e), o.manager.itemError(t)
                              }
                            },
                            r,
                            i,
                          )
                      },
                      setMaterialOptions: function (e) {
                        return (this.materialOptions = e), this
                      },
                      parse: function (e, t) {
                        for (
                          var n = e.split('\n'), r = {}, i = /\s+/, o = {}, a = 0;
                          a < n.length;
                          a++
                        ) {
                          var s = n[a]
                          if (0 !== (s = s.trim()).length && '#' !== s.charAt(0)) {
                            var l = s.indexOf(' '),
                              c = l >= 0 ? s.substring(0, l) : s
                            c = c.toLowerCase()
                            var u = l >= 0 ? s.substring(l + 1) : ''
                            if (((u = u.trim()), 'newmtl' === c)) (r = { name: u }), (o[u] = r)
                            else if ('ka' === c || 'kd' === c || 'ks' === c || 'ke' === c) {
                              var h = u.split(i, 3)
                              r[c] = [parseFloat(h[0]), parseFloat(h[1]), parseFloat(h[2])]
                            } else r[c] = u
                          }
                        }
                        var d = new THREE.MTLLoader.MaterialCreator(
                          this.resourcePath || t,
                          this.materialOptions,
                        )
                        return (
                          d.setCrossOrigin(this.crossOrigin),
                          d.setManager(this.manager),
                          d.setMaterials(o),
                          d
                        )
                      },
                    },
                  )),
                  (THREE.MTLLoader.MaterialCreator = function (e, t) {
                    ;(this.baseUrl = e || ''),
                      (this.options = t),
                      (this.materialsInfo = {}),
                      (this.materials = {}),
                      (this.materialsArray = []),
                      (this.nameLookup = {}),
                      (this.side =
                        this.options && this.options.side ? this.options.side : THREE.FrontSide),
                      (this.wrap =
                        this.options && this.options.wrap
                          ? this.options.wrap
                          : THREE.RepeatWrapping)
                  }),
                  (THREE.MTLLoader.MaterialCreator.prototype = {
                    constructor: THREE.MTLLoader.MaterialCreator,
                    crossOrigin: 'anonymous',
                    setCrossOrigin: function (e) {
                      return (this.crossOrigin = e), this
                    },
                    setManager: function (e) {
                      this.manager = e
                    },
                    setMaterials: function (e) {
                      ;(this.materialsInfo = this.convert(e)),
                        (this.materials = {}),
                        (this.materialsArray = []),
                        (this.nameLookup = {})
                    },
                    convert: function (e) {
                      if (!this.options) return e
                      var t = {}
                      for (var n in e) {
                        var r = e[n],
                          i = {}
                        for (var o in ((t[n] = i), r)) {
                          var a = !0,
                            s = r[o],
                            l = o.toLowerCase()
                          switch (l) {
                            case 'kd':
                            case 'ka':
                            case 'ks':
                              this.options &&
                                this.options.normalizeRGB &&
                                (s = [s[0] / 255, s[1] / 255, s[2] / 255]),
                                this.options &&
                                  this.options.ignoreZeroRGBs &&
                                  0 === s[0] &&
                                  0 === s[1] &&
                                  0 === s[2] &&
                                  (a = !1)
                          }
                          a && (i[l] = s)
                        }
                      }
                      return t
                    },
                    preload: function () {
                      for (var e in this.materialsInfo) this.create(e)
                    },
                    getIndex: function (e) {
                      return this.nameLookup[e]
                    },
                    getAsArray: function () {
                      var e = 0
                      for (var t in this.materialsInfo)
                        (this.materialsArray[e] = this.create(t)), (this.nameLookup[t] = e), e++
                      return this.materialsArray
                    },
                    create: function (e) {
                      return (
                        void 0 === this.materials[e] && this.createMaterial_(e), this.materials[e]
                      )
                    },
                    createMaterial_: function (e) {
                      var t = this,
                        n = this.materialsInfo[e],
                        r = { name: e, side: this.side }
                      function i(e, t) {
                        return 'string' !== typeof t || '' === t
                          ? ''
                          : /^https?:\/\//i.test(t)
                          ? t
                          : e + t
                      }
                      function o(e, n) {
                        if (!r[e]) {
                          var o = t.getTextureParams(n, r),
                            a = t.loadTexture(i(t.baseUrl, o.url))
                          a.repeat.copy(o.scale),
                            a.offset.copy(o.offset),
                            (a.wrapS = t.wrap),
                            (a.wrapT = t.wrap),
                            (r[e] = a)
                        }
                      }
                      for (var a in n) {
                        var s,
                          l = n[a]
                        if ('' !== l)
                          switch (a.toLowerCase()) {
                            case 'kd':
                              r.color = new THREE.Color().fromArray(l)
                              break
                            case 'ks':
                              r.specular = new THREE.Color().fromArray(l)
                              break
                            case 'ke':
                              r.emissive = new THREE.Color().fromArray(l)
                              break
                            case 'map_kd':
                              o('map', l)
                              break
                            case 'map_ks':
                              o('specularMap', l)
                              break
                            case 'map_ke':
                              o('emissiveMap', l)
                              break
                            case 'norm':
                              o('normalMap', l)
                              break
                            case 'map_bump':
                            case 'bump':
                              o('bumpMap', l)
                              break
                            case 'map_d':
                              o('alphaMap', l), (r.transparent = !0)
                              break
                            case 'ns':
                              r.shininess = parseFloat(l)
                              break
                            case 'd':
                              ;(s = parseFloat(l)) < 1 && ((r.opacity = s), (r.transparent = !0))
                              break
                            case 'tr':
                              ;(s = parseFloat(l)),
                                this.options && this.options.invertTrProperty && (s = 1 - s),
                                s > 0 && ((r.opacity = 1 - s), (r.transparent = !0))
                          }
                      }
                      return (this.materials[e] = new THREE.MeshPhongMaterial(r)), this.materials[e]
                    },
                    getTextureParams: function (e, t) {
                      var n,
                        r = { scale: new THREE.Vector2(1, 1), offset: new THREE.Vector2(0, 0) },
                        i = e.split(/\s+/)
                      return (
                        (n = i.indexOf('-bm')) >= 0 &&
                          ((t.bumpScale = parseFloat(i[n + 1])), i.splice(n, 2)),
                        (n = i.indexOf('-s')) >= 0 &&
                          (r.scale.set(parseFloat(i[n + 1]), parseFloat(i[n + 2])), i.splice(n, 4)),
                        (n = i.indexOf('-o')) >= 0 &&
                          (r.offset.set(parseFloat(i[n + 1]), parseFloat(i[n + 2])),
                          i.splice(n, 4)),
                        (r.url = i.join(' ').trim()),
                        r
                      )
                    },
                    loadTexture: function (e, t, n, r, i) {
                      var o,
                        a = void 0 !== this.manager ? this.manager : THREE.DefaultLoadingManager,
                        s = a.getHandler(e)
                      return (
                        null === s && (s = new THREE.TextureLoader(a)),
                        s.setCrossOrigin && s.setCrossOrigin(this.crossOrigin),
                        (o = s.load(e, n, r, i)),
                        void 0 !== t && (o.mapping = t),
                        o
                      )
                    },
                  })
              },
              {},
            ],
            61: [
              function (t, n, r) {
                THREE.OBJLoader = (function () {
                  var t = /^[og]\s*(.+)?/,
                    n = /^mtllib /,
                    r = /^usemtl /,
                    i = /^usemap /,
                    o = new THREE.Vector3(),
                    a = new THREE.Vector3(),
                    s = new THREE.Vector3(),
                    l = new THREE.Vector3(),
                    c = new THREE.Vector3()
                  function u() {
                    var e = {
                      objects: [],
                      object: {},
                      vertices: [],
                      normals: [],
                      colors: [],
                      uvs: [],
                      materials: {},
                      materialLibraries: [],
                      startObject: function (e, t) {
                        if (this.object && !1 === this.object.fromDeclaration)
                          return (
                            (this.object.name = e), void (this.object.fromDeclaration = !1 !== t)
                          )
                        var n =
                          this.object && 'function' === typeof this.object.currentMaterial
                            ? this.object.currentMaterial()
                            : void 0
                        if (
                          (this.object &&
                            'function' === typeof this.object._finalize &&
                            this.object._finalize(!0),
                          (this.object = {
                            name: e || '',
                            fromDeclaration: !1 !== t,
                            geometry: {
                              vertices: [],
                              normals: [],
                              colors: [],
                              uvs: [],
                              hasUVIndices: !1,
                            },
                            materials: [],
                            smooth: !0,
                            startMaterial: function (e, t) {
                              var n = this._finalize(!1)
                              n &&
                                (n.inherited || n.groupCount <= 0) &&
                                this.materials.splice(n.index, 1)
                              var r = {
                                index: this.materials.length,
                                name: e || '',
                                mtllib: Array.isArray(t) && t.length > 0 ? t[t.length - 1] : '',
                                smooth: void 0 !== n ? n.smooth : this.smooth,
                                groupStart: void 0 !== n ? n.groupEnd : 0,
                                groupEnd: -1,
                                groupCount: -1,
                                inherited: !1,
                                clone: function (e) {
                                  var t = {
                                    index: 'number' === typeof e ? e : this.index,
                                    name: this.name,
                                    mtllib: this.mtllib,
                                    smooth: this.smooth,
                                    groupStart: 0,
                                    groupEnd: -1,
                                    groupCount: -1,
                                    inherited: !1,
                                  }
                                  return (t.clone = this.clone.bind(t)), t
                                },
                              }
                              return this.materials.push(r), r
                            },
                            currentMaterial: function () {
                              if (this.materials.length > 0)
                                return this.materials[this.materials.length - 1]
                            },
                            _finalize: function (e) {
                              var t = this.currentMaterial()
                              if (
                                (t &&
                                  -1 === t.groupEnd &&
                                  ((t.groupEnd = this.geometry.vertices.length / 3),
                                  (t.groupCount = t.groupEnd - t.groupStart),
                                  (t.inherited = !1)),
                                e && this.materials.length > 1)
                              )
                                for (var n = this.materials.length - 1; n >= 0; n--)
                                  this.materials[n].groupCount <= 0 && this.materials.splice(n, 1)
                              return (
                                e &&
                                  0 === this.materials.length &&
                                  this.materials.push({ name: '', smooth: this.smooth }),
                                t
                              )
                            },
                          }),
                          n && n.name && 'function' === typeof n.clone)
                        ) {
                          var r = n.clone(0)
                          ;(r.inherited = !0), this.object.materials.push(r)
                        }
                        this.objects.push(this.object)
                      },
                      finalize: function () {
                        this.object &&
                          'function' === typeof this.object._finalize &&
                          this.object._finalize(!0)
                      },
                      parseVertexIndex: function (e, t) {
                        var n = parseInt(e, 10)
                        return 3 * (n >= 0 ? n - 1 : n + t / 3)
                      },
                      parseNormalIndex: function (e, t) {
                        var n = parseInt(e, 10)
                        return 3 * (n >= 0 ? n - 1 : n + t / 3)
                      },
                      parseUVIndex: function (e, t) {
                        var n = parseInt(e, 10)
                        return 2 * (n >= 0 ? n - 1 : n + t / 2)
                      },
                      addVertex: function (e, t, n) {
                        var r = this.vertices,
                          i = this.object.geometry.vertices
                        i.push(r[e + 0], r[e + 1], r[e + 2]),
                          i.push(r[t + 0], r[t + 1], r[t + 2]),
                          i.push(r[n + 0], r[n + 1], r[n + 2])
                      },
                      addVertexPoint: function (e) {
                        var t = this.vertices
                        this.object.geometry.vertices.push(t[e + 0], t[e + 1], t[e + 2])
                      },
                      addVertexLine: function (e) {
                        var t = this.vertices
                        this.object.geometry.vertices.push(t[e + 0], t[e + 1], t[e + 2])
                      },
                      addNormal: function (e, t, n) {
                        var r = this.normals,
                          i = this.object.geometry.normals
                        i.push(r[e + 0], r[e + 1], r[e + 2]),
                          i.push(r[t + 0], r[t + 1], r[t + 2]),
                          i.push(r[n + 0], r[n + 1], r[n + 2])
                      },
                      addFaceNormal: function (e, t, n) {
                        var r = this.vertices,
                          i = this.object.geometry.normals
                        o.fromArray(r, e),
                          a.fromArray(r, t),
                          s.fromArray(r, n),
                          c.subVectors(s, a),
                          l.subVectors(o, a),
                          c.cross(l),
                          c.normalize(),
                          i.push(c.x, c.y, c.z),
                          i.push(c.x, c.y, c.z),
                          i.push(c.x, c.y, c.z)
                      },
                      addColor: function (e, t, n) {
                        var r = this.colors,
                          i = this.object.geometry.colors
                        void 0 !== r[e] && i.push(r[e + 0], r[e + 1], r[e + 2]),
                          void 0 !== r[t] && i.push(r[t + 0], r[t + 1], r[t + 2]),
                          void 0 !== r[n] && i.push(r[n + 0], r[n + 1], r[n + 2])
                      },
                      addUV: function (e, t, n) {
                        var r = this.uvs,
                          i = this.object.geometry.uvs
                        i.push(r[e + 0], r[e + 1]),
                          i.push(r[t + 0], r[t + 1]),
                          i.push(r[n + 0], r[n + 1])
                      },
                      addDefaultUV: function () {
                        var e = this.object.geometry.uvs
                        e.push(0, 0), e.push(0, 0), e.push(0, 0)
                      },
                      addUVLine: function (e) {
                        var t = this.uvs
                        this.object.geometry.uvs.push(t[e + 0], t[e + 1])
                      },
                      addFace: function (e, t, n, r, i, o, a, s, l) {
                        var c = this.vertices.length,
                          u = this.parseVertexIndex(e, c),
                          h = this.parseVertexIndex(t, c),
                          d = this.parseVertexIndex(n, c)
                        if (
                          (this.addVertex(u, h, d),
                          this.addColor(u, h, d),
                          void 0 !== a && '' !== a)
                        ) {
                          var p = this.normals.length
                          ;(u = this.parseNormalIndex(a, p)),
                            (h = this.parseNormalIndex(s, p)),
                            (d = this.parseNormalIndex(l, p)),
                            this.addNormal(u, h, d)
                        } else this.addFaceNormal(u, h, d)
                        if (void 0 !== r && '' !== r) {
                          var f = this.uvs.length
                          ;(u = this.parseUVIndex(r, f)),
                            (h = this.parseUVIndex(i, f)),
                            (d = this.parseUVIndex(o, f)),
                            this.addUV(u, h, d),
                            (this.object.geometry.hasUVIndices = !0)
                        } else this.addDefaultUV()
                      },
                      addPointGeometry: function (e) {
                        this.object.geometry.type = 'Points'
                        for (var t = this.vertices.length, n = 0, r = e.length; n < r; n++) {
                          var i = this.parseVertexIndex(e[n], t)
                          this.addVertexPoint(i), this.addColor(i)
                        }
                      },
                      addLineGeometry: function (e, t) {
                        this.object.geometry.type = 'Line'
                        for (
                          var n = this.vertices.length, r = this.uvs.length, i = 0, o = e.length;
                          i < o;
                          i++
                        )
                          this.addVertexLine(this.parseVertexIndex(e[i], n))
                        var a = 0
                        for (o = t.length; a < o; a++) this.addUVLine(this.parseUVIndex(t[a], r))
                      },
                    }
                    return e.startObject('', !1), e
                  }
                  function h(e) {
                    THREE.Loader.call(this, e), (this.materials = null)
                  }
                  return (
                    (h.prototype = Object.assign(Object.create(THREE.Loader.prototype), {
                      constructor: h,
                      load: function (t, n, r, i) {
                        var o = this,
                          a = new THREE.FileLoader(this.manager)
                        a.setPath(this.path),
                          a.setRequestHeader(this.requestHeader),
                          a.setWithCredentials(this.withCredentials),
                          a.load(
                            t,
                            function (r) {
                              try {
                                n(o.parse(r))
                              } catch (e) {
                                i ? i(e) : console.error(e), o.manager.itemError(t)
                              }
                            },
                            r,
                            i,
                          )
                      },
                      setMaterials: function (e) {
                        return (this.materials = e), this
                      },
                      parse: function (e) {
                        var o = new u()
                        ;-1 !== e.indexOf('\r\n') && (e = e.replace(/\r\n/g, '\n')),
                          -1 !== e.indexOf('\\\n') && (e = e.replace(/\\\n/g, ''))
                        for (
                          var a = e.split('\n'),
                            s = '',
                            l = '',
                            c = [],
                            h = 'function' === typeof ''.trimLeft,
                            d = 0,
                            p = a.length;
                          d < p;
                          d++
                        )
                          if (
                            ((s = a[d]),
                            0 !== (s = h ? s.trimLeft() : s.trim()).length &&
                              '#' !== (l = s.charAt(0)))
                          )
                            if ('v' === l) {
                              var f = s.split(/\s+/)
                              switch (f[0]) {
                                case 'v':
                                  o.vertices.push(
                                    parseFloat(f[1]),
                                    parseFloat(f[2]),
                                    parseFloat(f[3]),
                                  ),
                                    f.length >= 7
                                      ? o.colors.push(
                                          parseFloat(f[4]),
                                          parseFloat(f[5]),
                                          parseFloat(f[6]),
                                        )
                                      : o.colors.push(void 0, void 0, void 0)
                                  break
                                case 'vn':
                                  o.normals.push(
                                    parseFloat(f[1]),
                                    parseFloat(f[2]),
                                    parseFloat(f[3]),
                                  )
                                  break
                                case 'vt':
                                  o.uvs.push(parseFloat(f[1]), parseFloat(f[2]))
                              }
                            } else if ('f' === l) {
                              for (
                                var m = s.substr(1).trim().split(/\s+/),
                                  v = [],
                                  g = 0,
                                  y = m.length;
                                g < y;
                                g++
                              ) {
                                var b = m[g]
                                if (b.length > 0) {
                                  var A = b.split('/')
                                  v.push(A)
                                }
                              }
                              var w = v[0]
                              for (g = 1, y = v.length - 1; g < y; g++) {
                                var x = v[g],
                                  E = v[g + 1]
                                o.addFace(w[0], x[0], E[0], w[1], x[1], E[1], w[2], x[2], E[2])
                              }
                            } else if ('l' === l) {
                              var M = s.substring(1).trim().split(' '),
                                _ = [],
                                T = []
                              if (-1 === s.indexOf('/')) _ = M
                              else
                                for (var S = 0, C = M.length; S < C; S++) {
                                  var L = M[S].split('/')
                                  '' !== L[0] && _.push(L[0]), '' !== L[1] && T.push(L[1])
                                }
                              o.addLineGeometry(_, T)
                            } else if ('p' === l) {
                              var R = s.substr(1).trim().split(' ')
                              o.addPointGeometry(R)
                            } else if (null !== (c = t.exec(s))) {
                              var P = (' ' + c[0].substr(1).trim()).substr(1)
                              o.startObject(P)
                            } else if (r.test(s))
                              o.object.startMaterial(s.substring(7).trim(), o.materialLibraries)
                            else if (n.test(s)) o.materialLibraries.push(s.substring(7).trim())
                            else if (i.test(s))
                              console.warn(
                                'THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.',
                              )
                            else if ('s' === l) {
                              if ((c = s.split(' ')).length > 1) {
                                var D = c[1].trim().toLowerCase()
                                o.object.smooth = '0' !== D && 'off' !== D
                              } else o.object.smooth = !0
                              ;(W = o.object.currentMaterial()) && (W.smooth = o.object.smooth)
                            } else {
                              if ('\0' === s) continue
                              console.warn('THREE.OBJLoader: Unexpected line: "' + s + '"')
                            }
                        o.finalize()
                        var O = new THREE.Group()
                        if (
                          ((O.materialLibraries = [].concat(o.materialLibraries)),
                          !0 ===
                            !(
                              1 === o.objects.length && 0 === o.objects[0].geometry.vertices.length
                            ))
                        )
                          for (d = 0, p = o.objects.length; d < p; d++) {
                            var I = o.objects[d],
                              B = I.geometry,
                              F = I.materials,
                              k = 'Line' === B.type,
                              N = 'Points' === B.type,
                              U = !1
                            if (0 !== B.vertices.length) {
                              ;(Q = new THREE.BufferGeometry()).setAttribute(
                                'position',
                                new THREE.Float32BufferAttribute(B.vertices, 3),
                              ),
                                B.normals.length > 0 &&
                                  Q.setAttribute(
                                    'normal',
                                    new THREE.Float32BufferAttribute(B.normals, 3),
                                  ),
                                B.colors.length > 0 &&
                                  ((U = !0),
                                  Q.setAttribute(
                                    'color',
                                    new THREE.Float32BufferAttribute(B.colors, 3),
                                  )),
                                !0 === B.hasUVIndices &&
                                  Q.setAttribute('uv', new THREE.Float32BufferAttribute(B.uvs, 2))
                              for (var H, G = [], z = 0, j = F.length; z < j; z++) {
                                var V = (Y = F[z]).name + '_' + Y.smooth + '_' + U,
                                  W = o.materials[V]
                                if (null !== this.materials)
                                  if (
                                    ((W = this.materials.create(Y.name)),
                                    !k || !W || W instanceof THREE.LineBasicMaterial)
                                  ) {
                                    if (N && W && !(W instanceof THREE.PointsMaterial)) {
                                      var q = new THREE.PointsMaterial({
                                        size: 10,
                                        sizeAttenuation: !1,
                                      })
                                      THREE.Material.prototype.copy.call(q, W),
                                        q.color.copy(W.color),
                                        (q.map = W.map),
                                        (W = q)
                                    }
                                  } else {
                                    var X = new THREE.LineBasicMaterial()
                                    THREE.Material.prototype.copy.call(X, W),
                                      X.color.copy(W.color),
                                      (W = X)
                                  }
                                void 0 === W &&
                                  (((W = k
                                    ? new THREE.LineBasicMaterial()
                                    : N
                                    ? new THREE.PointsMaterial({ size: 1, sizeAttenuation: !1 })
                                    : new THREE.MeshPhongMaterial()).name = Y.name),
                                  (W.flatShading = !Y.smooth),
                                  (W.vertexColors = U),
                                  (o.materials[V] = W)),
                                  G.push(W)
                              }
                              if (G.length > 1) {
                                for (z = 0, j = F.length; z < j; z++) {
                                  var Y = F[z]
                                  Q.addGroup(Y.groupStart, Y.groupCount, z)
                                }
                                H = k
                                  ? new THREE.LineSegments(Q, G)
                                  : N
                                  ? new THREE.Points(Q, G)
                                  : new THREE.Mesh(Q, G)
                              } else
                                H = k
                                  ? new THREE.LineSegments(Q, G[0])
                                  : N
                                  ? new THREE.Points(Q, G[0])
                                  : new THREE.Mesh(Q, G[0])
                              ;(H.name = I.name), O.add(H)
                            }
                          }
                        else if (o.vertices.length > 0) {
                          var Q
                          ;(W = new THREE.PointsMaterial({ size: 1, sizeAttenuation: !1 })),
                            (Q = new THREE.BufferGeometry()).setAttribute(
                              'position',
                              new THREE.Float32BufferAttribute(o.vertices, 3),
                            ),
                            o.colors.length > 0 &&
                              void 0 !== o.colors[0] &&
                              (Q.setAttribute(
                                'color',
                                new THREE.Float32BufferAttribute(o.colors, 3),
                              ),
                              (W.vertexColors = !0))
                          var Z = new THREE.Points(Q, W)
                          O.add(Z)
                        }
                        return O
                      },
                    })),
                    h
                  )
                })()
              },
              {},
            ],
            62: [
              function (e, t, n) {
                THREE.BufferGeometryUtils = {
                  computeTangents: function (e) {
                    e.computeTangents(),
                      console.warn(
                        'THREE.BufferGeometryUtils: .computeTangents() has been removed. Use BufferGeometry.computeTangents() instead.',
                      )
                  },
                  mergeBufferGeometries: function (e, t) {
                    for (
                      var n = null !== e[0].index,
                        r = new Set(Object.keys(e[0].attributes)),
                        i = new Set(Object.keys(e[0].morphAttributes)),
                        o = {},
                        a = {},
                        s = e[0].morphTargetsRelative,
                        l = new THREE.BufferGeometry(),
                        c = 0,
                        u = 0;
                      u < e.length;
                      ++u
                    ) {
                      var h = e[u],
                        d = 0
                      if (n !== (null !== h.index))
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                              u +
                              '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.',
                          ),
                          null
                        )
                      for (var p in h.attributes) {
                        if (!r.has(p))
                          return (
                            console.error(
                              'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                                u +
                                '. All geometries must have compatible attributes; make sure "' +
                                p +
                                '" attribute exists among all geometries, or in none of them.',
                            ),
                            null
                          )
                        void 0 === o[p] && (o[p] = []), o[p].push(h.attributes[p]), d++
                      }
                      if (d !== r.size)
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                              u +
                              '. Make sure all geometries have the same number of attributes.',
                          ),
                          null
                        )
                      if (s !== h.morphTargetsRelative)
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                              u +
                              '. .morphTargetsRelative must be consistent throughout all geometries.',
                          ),
                          null
                        )
                      for (var p in h.morphAttributes) {
                        if (!i.has(p))
                          return (
                            console.error(
                              'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                                u +
                                '.  .morphAttributes must be consistent throughout all geometries.',
                            ),
                            null
                          )
                        void 0 === a[p] && (a[p] = []), a[p].push(h.morphAttributes[p])
                      }
                      if (
                        ((l.userData.mergedUserData = l.userData.mergedUserData || []),
                        l.userData.mergedUserData.push(h.userData),
                        t)
                      ) {
                        var f
                        if (n) f = h.index.count
                        else {
                          if (void 0 === h.attributes.position)
                            return (
                              console.error(
                                'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' +
                                  u +
                                  '. The geometry must have either an index or a position attribute',
                              ),
                              null
                            )
                          f = h.attributes.position.count
                        }
                        l.addGroup(c, f, u), (c += f)
                      }
                    }
                    if (n) {
                      var m = 0,
                        v = []
                      for (u = 0; u < e.length; ++u) {
                        for (var g = e[u].index, y = 0; y < g.count; ++y) v.push(g.getX(y) + m)
                        m += e[u].attributes.position.count
                      }
                      l.setIndex(v)
                    }
                    for (var p in o) {
                      var b = this.mergeBufferAttributes(o[p])
                      if (!b)
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' +
                              p +
                              ' attribute.',
                          ),
                          null
                        )
                      l.setAttribute(p, b)
                    }
                    for (var p in a) {
                      var A = a[p][0].length
                      if (0 === A) break
                      for (
                        l.morphAttributes = l.morphAttributes || {},
                          l.morphAttributes[p] = [],
                          u = 0;
                        u < A;
                        ++u
                      ) {
                        var w = []
                        for (y = 0; y < a[p].length; ++y) w.push(a[p][y][u])
                        var x = this.mergeBufferAttributes(w)
                        if (!x)
                          return (
                            console.error(
                              'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' +
                                p +
                                ' morphAttribute.',
                            ),
                            null
                          )
                        l.morphAttributes[p].push(x)
                      }
                    }
                    return l
                  },
                  mergeBufferAttributes: function (e) {
                    for (var t, n, r, i = 0, o = 0; o < e.length; ++o) {
                      var a = e[o]
                      if (a.isInterleavedBufferAttribute)
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.',
                          ),
                          null
                        )
                      if ((void 0 === t && (t = a.array.constructor), t !== a.array.constructor))
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.',
                          ),
                          null
                        )
                      if ((void 0 === n && (n = a.itemSize), n !== a.itemSize))
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.',
                          ),
                          null
                        )
                      if ((void 0 === r && (r = a.normalized), r !== a.normalized))
                        return (
                          console.error(
                            'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.',
                          ),
                          null
                        )
                      i += a.array.length
                    }
                    var s = new t(i),
                      l = 0
                    for (o = 0; o < e.length; ++o) s.set(e[o].array, l), (l += e[o].array.length)
                    return new THREE.BufferAttribute(s, n, r)
                  },
                  interleaveAttributes: function (e) {
                    for (var t, n = 0, r = 0, i = 0, o = e.length; i < o; ++i) {
                      var a = e[i]
                      if ((void 0 === t && (t = a.array.constructor), t !== a.array.constructor))
                        return (
                          console.error(
                            'AttributeBuffers of different types cannot be interleaved',
                          ),
                          null
                        )
                      ;(n += a.array.length), (r += a.itemSize)
                    }
                    var s = new THREE.InterleavedBuffer(new t(n), r),
                      l = 0,
                      c = [],
                      u = ['getX', 'getY', 'getZ', 'getW'],
                      h = ['setX', 'setY', 'setZ', 'setW'],
                      d = 0
                    for (o = e.length; d < o; d++) {
                      var p = (a = e[d]).itemSize,
                        f = a.count,
                        m = new THREE.InterleavedBufferAttribute(s, p, l, a.normalized)
                      c.push(m), (l += p)
                      for (var v = 0; v < f; v++) for (var g = 0; g < p; g++) m[h[g]](v, a[u[g]](v))
                    }
                    return c
                  },
                  estimateBytesUsed: function (e) {
                    var t = 0
                    for (var n in e.attributes) {
                      var r = e.getAttribute(n)
                      t += r.count * r.itemSize * r.array.BYTES_PER_ELEMENT
                    }
                    var i = e.getIndex()
                    return (t += i ? i.count * i.itemSize * i.array.BYTES_PER_ELEMENT : 0)
                  },
                  mergeVertices: function (e, t = 1e-4) {
                    t = Math.max(t, Number.EPSILON)
                    for (
                      var n = {},
                        r = e.getIndex(),
                        i = e.getAttribute('position'),
                        o = r ? r.count : i.count,
                        a = 0,
                        s = Object.keys(e.attributes),
                        l = {},
                        c = {},
                        u = [],
                        h = ['getX', 'getY', 'getZ', 'getW'],
                        d = 0,
                        p = s.length;
                      d < p;
                      d++
                    )
                      (l[(b = s[d])] = []),
                        (E = e.morphAttributes[b]) &&
                          (c[b] = new Array(E.length).fill().map(() => []))
                    var f = Math.log10(1 / t),
                      m = Math.pow(10, f)
                    for (d = 0; d < o; d++) {
                      var v = r ? r.getX(d) : d,
                        g = '',
                        y = 0
                      for (p = s.length; y < p; y++)
                        for (var b = s[y], A = (x = e.getAttribute(b)).itemSize, w = 0; w < A; w++)
                          g += ~~(x[h[w]](v) * m) + ','
                      if (g in n) u.push(n[g])
                      else {
                        for (y = 0, p = s.length; y < p; y++) {
                          b = s[y]
                          var x = e.getAttribute(b),
                            E = e.morphAttributes[b],
                            M = ((A = x.itemSize), l[b]),
                            _ = c[b]
                          for (w = 0; w < A; w++) {
                            var T = h[w]
                            if ((M.push(x[T](v)), E))
                              for (var S = 0, C = E.length; S < C; S++) _[S].push(E[S][T](v))
                          }
                        }
                        ;(n[g] = a), u.push(a), a++
                      }
                    }
                    const L = e.clone()
                    for (d = 0, p = s.length; d < p; d++) {
                      b = s[d]
                      var R = e.getAttribute(b),
                        P = new R.array.constructor(l[b])
                      if (
                        ((x = new THREE.BufferAttribute(P, R.itemSize, R.normalized)),
                        L.setAttribute(b, x),
                        b in c)
                      )
                        for (y = 0; y < c[b].length; y++) {
                          var D = e.morphAttributes[b][y],
                            O =
                              ((P = new D.array.constructor(c[b][y])),
                              new THREE.BufferAttribute(P, D.itemSize, D.normalized))
                          L.morphAttributes[b][y] = O
                        }
                    }
                    return L.setIndex(u), L
                  },
                  toTrianglesDrawMode: function (e, t) {
                    if (t === THREE.TrianglesDrawMode)
                      return (
                        console.warn(
                          'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.',
                        ),
                        e
                      )
                    if (t === THREE.TriangleFanDrawMode || t === THREE.TriangleStripDrawMode) {
                      var n = e.getIndex()
                      if (null === n) {
                        var r = [],
                          i = e.getAttribute('position')
                        if (void 0 === i)
                          return (
                            console.error(
                              'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.',
                            ),
                            e
                          )
                        for (var o = 0; o < i.count; o++) r.push(o)
                        e.setIndex(r), (n = e.getIndex())
                      }
                      var a = n.count - 2,
                        s = []
                      if (t === THREE.TriangleFanDrawMode)
                        for (o = 1; o <= a; o++)
                          s.push(n.getX(0)), s.push(n.getX(o)), s.push(n.getX(o + 1))
                      else
                        for (o = 0; o < a; o++)
                          o % 2 === 0
                            ? (s.push(n.getX(o)), s.push(n.getX(o + 1)), s.push(n.getX(o + 2)))
                            : (s.push(n.getX(o + 2)), s.push(n.getX(o + 1)), s.push(n.getX(o)))
                      s.length / 3 !== a &&
                        console.error(
                          'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.',
                        )
                      var l = e.clone()
                      return l.setIndex(s), l.clearGroups(), l
                    }
                    return (
                      console.error(
                        'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:',
                        t,
                      ),
                      e
                    )
                  },
                  computeMorphedAttributes: function (e) {
                    if (!0 !== e.geometry.isBufferGeometry)
                      return (
                        console.error(
                          'THREE.BufferGeometryUtils: Geometry is not of type THREE.BufferGeometry.',
                        ),
                        null
                      )
                    var t = new THREE.Vector3(),
                      n = new THREE.Vector3(),
                      r = new THREE.Vector3(),
                      i = new THREE.Vector3(),
                      o = new THREE.Vector3(),
                      a = new THREE.Vector3(),
                      s = new THREE.Vector3(),
                      l = new THREE.Vector3(),
                      c = new THREE.Vector3()
                    function u(e, u, h, d, p, f, m, v, g) {
                      t.fromBufferAttribute(h, f),
                        n.fromBufferAttribute(h, m),
                        r.fromBufferAttribute(h, v)
                      var y = e.morphTargetInfluences
                      if (u.morphTargets && d && y) {
                        s.set(0, 0, 0), l.set(0, 0, 0), c.set(0, 0, 0)
                        for (var b = 0, A = d.length; b < A; b++) {
                          var w = y[b]
                          ;(d = d[b]),
                            0 !== w &&
                              (i.fromBufferAttribute(d, f),
                              o.fromBufferAttribute(d, m),
                              a.fromBufferAttribute(d, v),
                              p
                                ? (s.addScaledVector(i, w),
                                  l.addScaledVector(o, w),
                                  c.addScaledVector(a, w))
                                : (s.addScaledVector(i.sub(t), w),
                                  l.addScaledVector(o.sub(n), w),
                                  c.addScaledVector(a.sub(r), w)))
                        }
                        t.add(s), n.add(l), r.add(c)
                      }
                      e.isSkinnedMesh &&
                        (e.boneTransform(f, t), e.boneTransform(m, n), e.boneTransform(v, r)),
                        (g[3 * f + 0] = t.x),
                        (g[3 * f + 1] = t.y),
                        (g[3 * f + 2] = t.z),
                        (g[3 * m + 0] = n.x),
                        (g[3 * m + 1] = n.y),
                        (g[3 * m + 2] = n.z),
                        (g[3 * v + 0] = r.x),
                        (g[3 * v + 1] = r.y),
                        (g[3 * v + 2] = r.z)
                    }
                    var h,
                      d,
                      p,
                      f,
                      m,
                      v,
                      g,
                      y,
                      b,
                      A = e.geometry,
                      w = e.material,
                      x = A.index,
                      E = A.attributes.position,
                      M = A.morphAttributes.position,
                      _ = A.morphTargetsRelative,
                      T = A.attributes.normal,
                      S = A.morphAttributes.position,
                      C = A.groups,
                      L = A.drawRange,
                      R = new Float32Array(E.count * E.itemSize),
                      P = new Float32Array(T.count * T.itemSize)
                    if (null !== x)
                      if (Array.isArray(w))
                        for (f = 0, v = C.length; f < v; f++)
                          for (
                            b = w[(y = C[f]).materialIndex],
                              m = Math.max(y.start, L.start),
                              g = Math.min(y.start + y.count, L.start + L.count);
                            m < g;
                            m += 3
                          )
                            u(
                              e,
                              b,
                              E,
                              M,
                              _,
                              (h = x.getX(m)),
                              (d = x.getX(m + 1)),
                              (p = x.getX(m + 2)),
                              R,
                            ),
                              u(e, b, T, S, _, h, d, p, P)
                      else
                        for (
                          f = Math.max(0, L.start), v = Math.min(x.count, L.start + L.count);
                          f < v;
                          f += 3
                        )
                          u(
                            e,
                            w,
                            E,
                            M,
                            _,
                            (h = x.getX(f)),
                            (d = x.getX(f + 1)),
                            (p = x.getX(f + 2)),
                            R,
                          ),
                            u(e, w, T, S, _, h, d, p, P)
                    else if (void 0 !== E)
                      if (Array.isArray(w))
                        for (f = 0, v = C.length; f < v; f++)
                          for (
                            b = w[(y = C[f]).materialIndex],
                              m = Math.max(y.start, L.start),
                              g = Math.min(y.start + y.count, L.start + L.count);
                            m < g;
                            m += 3
                          )
                            u(e, b, E, M, _, (h = m), (d = m + 1), (p = m + 2), R),
                              u(e, b, T, S, _, h, d, p, P)
                      else
                        for (
                          f = Math.max(0, L.start), v = Math.min(E.count, L.start + L.count);
                          f < v;
                          f += 3
                        )
                          u(e, w, E, M, _, (h = f), (d = f + 1), (p = f + 2), R),
                            u(e, w, T, S, _, h, d, p, P)
                    return {
                      positionAttribute: E,
                      normalAttribute: T,
                      morphedPositionAttribute: new THREE.Float32BufferAttribute(R, 3),
                      morphedNormalAttribute: new THREE.Float32BufferAttribute(P, 3),
                    }
                  },
                }
              },
              {},
            ],
            63: [
              function (e, t, n) {
                var r = e('layout-bmfont-text'),
                  i = e('inherits'),
                  o = e('quad-indices'),
                  a = e('three-buffer-vertex-data'),
                  s = e('object-assign'),
                  l = e('./lib/vertices'),
                  c = e('./lib/utils'),
                  u = THREE.BufferGeometry
                function h(e) {
                  u.call(this),
                    'string' === typeof e && (e = { text: e }),
                    (this._opt = s({}, e)),
                    e && this.update(e)
                }
                ;(t.exports = function (e) {
                  return new h(e)
                }),
                  i(h, u),
                  (h.prototype.update = function (e) {
                    if (
                      ('string' === typeof e && (e = { text: e }), !(e = s({}, this._opt, e)).font)
                    )
                      throw new TypeError('must specify a { font } in options')
                    this.layout = r(e)
                    var t = !1 !== e.flipY,
                      n = e.font,
                      i = n.common.scaleW,
                      c = n.common.scaleH,
                      u = this.layout.glyphs.filter(function (e) {
                        var t = e.data
                        return t.width * t.height > 0
                      })
                    this.visibleGlyphs = u
                    var h = l.positions(u),
                      d = l.uvs(u, i, c, t),
                      p = o({ clockwise: !0, type: 'uint16', count: u.length })
                    if (
                      (a.index(this, p, 1, 'uint16'),
                      a.attr(this, 'position', h, 2),
                      a.attr(this, 'uv', d, 2),
                      !e.multipage && 'page' in this.attributes)
                    )
                      this.removeAttribute('page')
                    else if (e.multipage) {
                      var f = l.pages(u)
                      a.attr(this, 'page', f, 1)
                    }
                  }),
                  (h.prototype.computeBoundingSphere = function () {
                    null === this.boundingSphere && (this.boundingSphere = new THREE.Sphere())
                    var e = this.attributes.position.array,
                      t = this.attributes.position.itemSize
                    if (!e || !t || e.length < 2)
                      return (
                        (this.boundingSphere.radius = 0),
                        void this.boundingSphere.center.set(0, 0, 0)
                      )
                    c.computeSphere(e, this.boundingSphere),
                      isNaN(this.boundingSphere.radius) &&
                        console.error(
                          'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',
                        )
                  }),
                  (h.prototype.computeBoundingBox = function () {
                    null === this.boundingBox && (this.boundingBox = new THREE.Box3())
                    var e = this.boundingBox,
                      t = this.attributes.position.array,
                      n = this.attributes.position.itemSize
                    !t || !n || t.length < 2 ? e.makeEmpty() : c.computeBox(t, e)
                  })
              },
              {
                './lib/utils': 64,
                './lib/vertices': 65,
                inherits: 30,
                'layout-bmfont-text': 36,
                'object-assign': 39,
                'quad-indices': 51,
                'three-buffer-vertex-data': 66,
              },
            ],
            64: [
              function (e, t, n) {
                var r = 2,
                  i = { min: [0, 0], max: [0, 0] }
                function o(e) {
                  var t = e.length / r
                  ;(i.min[0] = e[0]), (i.min[1] = e[1]), (i.max[0] = e[0]), (i.max[1] = e[1])
                  for (var n = 0; n < t; n++) {
                    var o = e[n * r + 0],
                      a = e[n * r + 1]
                    ;(i.min[0] = Math.min(o, i.min[0])),
                      (i.min[1] = Math.min(a, i.min[1])),
                      (i.max[0] = Math.max(o, i.max[0])),
                      (i.max[1] = Math.max(a, i.max[1]))
                  }
                }
                ;(t.exports.computeBox = function (e, t) {
                  o(e), t.min.set(i.min[0], i.min[1], 0), t.max.set(i.max[0], i.max[1], 0)
                }),
                  (t.exports.computeSphere = function (e, t) {
                    o(e)
                    var n = i.min[0],
                      r = i.min[1],
                      a = i.max[0] - n,
                      s = i.max[1] - r,
                      l = Math.sqrt(a * a + s * s)
                    t.center.set(n + a / 2, r + s / 2, 0), (t.radius = l / 2)
                  })
              },
              {},
            ],
            65: [
              function (e, t, n) {
                ;(t.exports.pages = function (e) {
                  var t = new Float32Array(4 * e.length * 1),
                    n = 0
                  return (
                    e.forEach(function (e) {
                      var r = e.data.page || 0
                      ;(t[n++] = r), (t[n++] = r), (t[n++] = r), (t[n++] = r)
                    }),
                    t
                  )
                }),
                  (t.exports.uvs = function (e, t, n, r) {
                    var i = new Float32Array(4 * e.length * 2),
                      o = 0
                    return (
                      e.forEach(function (e) {
                        var a = e.data,
                          s = a.x + a.width,
                          l = a.y + a.height,
                          c = a.x / t,
                          u = a.y / n,
                          h = s / t,
                          d = l / n
                        r && ((u = (n - a.y) / n), (d = (n - l) / n)),
                          (i[o++] = c),
                          (i[o++] = u),
                          (i[o++] = c),
                          (i[o++] = d),
                          (i[o++] = h),
                          (i[o++] = d),
                          (i[o++] = h),
                          (i[o++] = u)
                      }),
                      i
                    )
                  }),
                  (t.exports.positions = function (e) {
                    var t = new Float32Array(4 * e.length * 2),
                      n = 0
                    return (
                      e.forEach(function (e) {
                        var r = e.data,
                          i = e.position[0] + r.xoffset,
                          o = e.position[1] + r.yoffset,
                          a = r.width,
                          s = r.height
                        ;(t[n++] = i),
                          (t[n++] = o),
                          (t[n++] = i),
                          (t[n++] = o + s),
                          (t[n++] = i + a),
                          (t[n++] = o + s),
                          (t[n++] = i + a),
                          (t[n++] = o)
                      }),
                      t
                    )
                  })
              },
              {},
            ],
            66: [
              function (e, t, n) {
                var r = e('flatten-vertex-data')
                function i(e, t, n, r) {
                  'number' !== typeof n && (n = 1), 'string' !== typeof r && (r = 'uint16')
                  var i = !e.index && 'function' !== typeof e.setIndex,
                    o = a(i ? e.getAttribute('index') : e.index, t, n, r)
                  o && (i ? e.addAttribute('index', o) : (e.index = o))
                }
                function o(e, t, n, r, i) {
                  if (
                    ('number' !== typeof r && (r = 3),
                    'string' !== typeof i && (i = 'float32'),
                    Array.isArray(n) && Array.isArray(n[0]) && n[0].length !== r)
                  )
                    throw new Error(
                      'Nested vertex array has unexpected size; expected ' +
                        r +
                        ' but found ' +
                        n[0].length,
                    )
                  var o = a(e.getAttribute(t), n, r, i)
                  e.setAttribute(t, o)
                }
                function a(e, t, n, i) {
                  return (
                    (t = r((t = t || []), i)),
                    ((e = new THREE.BufferAttribute(t, n)).itemSize = n),
                    (e.needsUpdate = !0),
                    e
                  )
                }
                ;(t.exports.attr = o), (t.exports.index = i)
              },
              { 'flatten-vertex-data': 23 },
            ],
            67: [
              function (e, t, n) {
                ;(function (t, r) {
                  var i = e('process/browser.js').nextTick,
                    o = Function.prototype.apply,
                    a = Array.prototype.slice,
                    s = {},
                    l = 0
                  function c(e, t) {
                    ;(this._id = e), (this._clearFn = t)
                  }
                  ;(n.setTimeout = function () {
                    return new c(o.call(setTimeout, window, arguments), clearTimeout)
                  }),
                    (n.setInterval = function () {
                      return new c(o.call(setInterval, window, arguments), clearInterval)
                    }),
                    (n.clearTimeout = n.clearInterval =
                      function (e) {
                        e.close()
                      }),
                    (c.prototype.unref = c.prototype.ref = function () {}),
                    (c.prototype.close = function () {
                      this._clearFn.call(window, this._id)
                    }),
                    (n.enroll = function (e, t) {
                      clearTimeout(e._idleTimeoutId), (e._idleTimeout = t)
                    }),
                    (n.unenroll = function (e) {
                      clearTimeout(e._idleTimeoutId), (e._idleTimeout = -1)
                    }),
                    (n._unrefActive = n.active =
                      function (e) {
                        clearTimeout(e._idleTimeoutId)
                        var t = e._idleTimeout
                        t >= 0 &&
                          (e._idleTimeoutId = setTimeout(function () {
                            e._onTimeout && e._onTimeout()
                          }, t))
                      }),
                    (n.setImmediate =
                      'function' === typeof t
                        ? t
                        : function (e) {
                            var t = l++,
                              r = !(arguments.length < 2) && a.call(arguments, 1)
                            return (
                              (s[t] = !0),
                              i(function () {
                                s[t] && (r ? e.apply(null, r) : e.call(null), n.clearImmediate(t))
                              }),
                              t
                            )
                          }),
                    (n.clearImmediate =
                      'function' === typeof r
                        ? r
                        : function (e) {
                            delete s[e]
                          })
                }.call(this, e('timers').setImmediate, e('timers').clearImmediate))
              },
              { 'process/browser.js': 49, timers: 67 },
            ],
            68: [
              function (e, n, i) {
                ;(function (e) {
                  !(function (e, r) {
                    'object' === typeof i && 'undefined' !== typeof n
                      ? (n.exports = r())
                      : 'function' === typeof t && t.amd
                      ? t(r)
                      : (e.WebVRPolyfill = r())
                  })(this, function () {
                    'use strict'
                    var t =
                      'undefined' !== typeof window
                        ? window
                        : 'undefined' !== typeof e
                        ? e
                        : 'undefined' !== typeof self
                        ? self
                        : {}
                    function n(e) {
                      return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, 'default')
                        ? e.default
                        : e
                    }
                    function r(e, t) {
                      return e((t = { exports: {} }), t.exports), t.exports
                    }
                    var i = function () {
                        return (
                          /Android/i.test(navigator.userAgent) ||
                          /iPhone|iPad|iPod/i.test(navigator.userAgent)
                        )
                      },
                      o = function (e, t) {
                        for (var n = 0, r = e.length; n < r; n++) t[n] = e[n]
                      },
                      a = function (e, t) {
                        for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n])
                        return e
                      },
                      s = n(
                        r(function (e, n) {
                          var r
                          ;(r = function () {
                            var e = function (e, t) {
                                if (!(e instanceof t))
                                  throw new TypeError('Cannot call a class as a function')
                              },
                              n = (function () {
                                function e(e, t) {
                                  for (var n = 0; n < t.length; n++) {
                                    var r = t[n]
                                    ;(r.enumerable = r.enumerable || !1),
                                      (r.configurable = !0),
                                      'value' in r && (r.writable = !0),
                                      Object.defineProperty(e, r.key, r)
                                  }
                                }
                                return function (t, n, r) {
                                  return n && e(t.prototype, n), r && e(t, r), t
                                }
                              })(),
                              r = (function () {
                                function e(e, t) {
                                  var n = [],
                                    r = !0,
                                    i = !1,
                                    o = void 0
                                  try {
                                    for (
                                      var a, s = e[Symbol.iterator]();
                                      !(r = (a = s.next()).done) &&
                                      (n.push(a.value), !t || n.length !== t);
                                      r = !0
                                    );
                                  } catch (l) {
                                    ;(i = !0), (o = l)
                                  } finally {
                                    try {
                                      !r && s.return && s.return()
                                    } finally {
                                      if (i) throw o
                                    }
                                  }
                                  return n
                                }
                                return function (t, n) {
                                  if (Array.isArray(t)) return t
                                  if (Symbol.iterator in Object(t)) return e(t, n)
                                  throw new TypeError(
                                    'Invalid attempt to destructure non-iterable instance',
                                  )
                                }
                              })(),
                              i = 0.001,
                              o = 1,
                              a = function (e, t) {
                                return 'data:' + e + ',' + encodeURIComponent(t)
                              },
                              s = function (e, t, n) {
                                return e + (t - e) * n
                              },
                              l = (function () {
                                var e = /iPad|iPhone|iPod/.test(navigator.platform)
                                return function () {
                                  return e
                                }
                              })(),
                              c = (function () {
                                var e =
                                  -1 !== navigator.userAgent.indexOf('Version') &&
                                  -1 !== navigator.userAgent.indexOf('Android') &&
                                  -1 !== navigator.userAgent.indexOf('Chrome')
                                return function () {
                                  return e
                                }
                              })(),
                              u = (function () {
                                var e = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
                                return function () {
                                  return e
                                }
                              })(),
                              h = (function () {
                                var e =
                                  -1 !== navigator.userAgent.indexOf('Firefox') &&
                                  -1 !== navigator.userAgent.indexOf('Android')
                                return function () {
                                  return e
                                }
                              })(),
                              d = (function () {
                                var e = navigator.userAgent.match(/.*Chrome\/([0-9]+)/),
                                  t = e ? parseInt(e[1], 10) : null
                                return function () {
                                  return t
                                }
                              })(),
                              p = (function () {
                                var e = !1
                                return (
                                  (e = l() && u() && -1 !== navigator.userAgent.indexOf('13_4')),
                                  function () {
                                    return e
                                  }
                                )
                              })(),
                              f = (function () {
                                var e = !1
                                if (65 === d()) {
                                  var t = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/)
                                  if (t) {
                                    var n = t[1].split('.'),
                                      i = r(n, 4),
                                      o = (i[0], i[1], i[2]),
                                      a = i[3]
                                    e = 3325 === parseInt(o, 10) && parseInt(a, 10) < 148
                                  }
                                }
                                return function () {
                                  return e
                                }
                              })(),
                              m = (function () {
                                var e = -1 !== navigator.userAgent.indexOf('R7 Build')
                                return function () {
                                  return e
                                }
                              })(),
                              v = function () {
                                var e = 90 == window.orientation || -90 == window.orientation
                                return m() ? !e : e
                              },
                              g = function (e) {
                                return !isNaN(e) && !(e <= i) && !(e > o)
                              },
                              y = function () {
                                return (
                                  Math.max(window.screen.width, window.screen.height) *
                                  window.devicePixelRatio
                                )
                              },
                              b = function () {
                                return (
                                  Math.min(window.screen.width, window.screen.height) *
                                  window.devicePixelRatio
                                )
                              },
                              A = function (e) {
                                if (c()) return !1
                                if (e.requestFullscreen) e.requestFullscreen()
                                else if (e.webkitRequestFullscreen) e.webkitRequestFullscreen()
                                else if (e.mozRequestFullScreen) e.mozRequestFullScreen()
                                else {
                                  if (!e.msRequestFullscreen) return !1
                                  e.msRequestFullscreen()
                                }
                                return !0
                              },
                              w = function () {
                                if (document.exitFullscreen) document.exitFullscreen()
                                else if (document.webkitExitFullscreen)
                                  document.webkitExitFullscreen()
                                else if (document.mozCancelFullScreen)
                                  document.mozCancelFullScreen()
                                else {
                                  if (!document.msExitFullscreen) return !1
                                  document.msExitFullscreen()
                                }
                                return !0
                              },
                              x = function () {
                                return (
                                  document.fullscreenElement ||
                                  document.webkitFullscreenElement ||
                                  document.mozFullScreenElement ||
                                  document.msFullscreenElement
                                )
                              },
                              E = function (e, t, n, r) {
                                var i = e.createShader(e.VERTEX_SHADER)
                                e.shaderSource(i, t), e.compileShader(i)
                                var o = e.createShader(e.FRAGMENT_SHADER)
                                e.shaderSource(o, n), e.compileShader(o)
                                var a = e.createProgram()
                                for (var s in (e.attachShader(a, i), e.attachShader(a, o), r))
                                  e.bindAttribLocation(a, r[s], s)
                                return e.linkProgram(a), e.deleteShader(i), e.deleteShader(o), a
                              },
                              M = function (e, t) {
                                for (
                                  var n = {},
                                    r = e.getProgramParameter(t, e.ACTIVE_UNIFORMS),
                                    i = '',
                                    o = 0;
                                  o < r;
                                  o++
                                )
                                  n[(i = e.getActiveUniform(t, o).name.replace('[0]', ''))] =
                                    e.getUniformLocation(t, i)
                                return n
                              },
                              _ = function (e, t, n, r, i, o, a) {
                                var s = 1 / (t - n),
                                  l = 1 / (r - i),
                                  c = 1 / (o - a)
                                return (
                                  (e[0] = -2 * s),
                                  (e[1] = 0),
                                  (e[2] = 0),
                                  (e[3] = 0),
                                  (e[4] = 0),
                                  (e[5] = -2 * l),
                                  (e[6] = 0),
                                  (e[7] = 0),
                                  (e[8] = 0),
                                  (e[9] = 0),
                                  (e[10] = 2 * c),
                                  (e[11] = 0),
                                  (e[12] = (t + n) * s),
                                  (e[13] = (i + r) * l),
                                  (e[14] = (a + o) * c),
                                  (e[15] = 1),
                                  e
                                )
                              },
                              T = function () {
                                var e,
                                  t = !1
                                return (
                                  (e = navigator.userAgent || navigator.vendor || window.opera),
                                  (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
                                    e,
                                  ) ||
                                    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
                                      e.substr(0, 4),
                                    )) &&
                                    (t = !0),
                                  t
                                )
                              },
                              S = function (e, t) {
                                for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n])
                                return e
                              },
                              C = function (e) {
                                if (l()) {
                                  var t = e.style.width,
                                    n = e.style.height
                                  ;(e.style.width = parseInt(t) + 1 + 'px'),
                                    (e.style.height = parseInt(n) + 'px'),
                                    setTimeout(function () {
                                      ;(e.style.width = t), (e.style.height = n)
                                    }, 100)
                                }
                                window.canvas = e
                              },
                              L = (function () {
                                var e = Math.PI / 180,
                                  t = 0.25 * Math.PI
                                function n(n, r, i, o) {
                                  var a = Math.tan(r ? r.upDegrees * e : t),
                                    s = Math.tan(r ? r.downDegrees * e : t),
                                    l = Math.tan(r ? r.leftDegrees * e : t),
                                    c = Math.tan(r ? r.rightDegrees * e : t),
                                    u = 2 / (l + c),
                                    h = 2 / (a + s)
                                  return (
                                    (n[0] = u),
                                    (n[1] = 0),
                                    (n[2] = 0),
                                    (n[3] = 0),
                                    (n[4] = 0),
                                    (n[5] = h),
                                    (n[6] = 0),
                                    (n[7] = 0),
                                    (n[8] = -(l - c) * u * 0.5),
                                    (n[9] = (a - s) * h * 0.5),
                                    (n[10] = o / (i - o)),
                                    (n[11] = -1),
                                    (n[12] = 0),
                                    (n[13] = 0),
                                    (n[14] = (o * i) / (i - o)),
                                    (n[15] = 0),
                                    n
                                  )
                                }
                                function r(e, t, n) {
                                  var r = t[0],
                                    i = t[1],
                                    o = t[2],
                                    a = t[3],
                                    s = r + r,
                                    l = i + i,
                                    c = o + o,
                                    u = r * s,
                                    h = r * l,
                                    d = r * c,
                                    p = i * l,
                                    f = i * c,
                                    m = o * c,
                                    v = a * s,
                                    g = a * l,
                                    y = a * c
                                  return (
                                    (e[0] = 1 - (p + m)),
                                    (e[1] = h + y),
                                    (e[2] = d - g),
                                    (e[3] = 0),
                                    (e[4] = h - y),
                                    (e[5] = 1 - (u + m)),
                                    (e[6] = f + v),
                                    (e[7] = 0),
                                    (e[8] = d + g),
                                    (e[9] = f - v),
                                    (e[10] = 1 - (u + p)),
                                    (e[11] = 0),
                                    (e[12] = n[0]),
                                    (e[13] = n[1]),
                                    (e[14] = n[2]),
                                    (e[15] = 1),
                                    e
                                  )
                                }
                                function i(e, t, n) {
                                  var r,
                                    i,
                                    o,
                                    a,
                                    s,
                                    l,
                                    c,
                                    u,
                                    h,
                                    d,
                                    p,
                                    f,
                                    m = n[0],
                                    v = n[1],
                                    g = n[2]
                                  return (
                                    t === e
                                      ? ((e[12] = t[0] * m + t[4] * v + t[8] * g + t[12]),
                                        (e[13] = t[1] * m + t[5] * v + t[9] * g + t[13]),
                                        (e[14] = t[2] * m + t[6] * v + t[10] * g + t[14]),
                                        (e[15] = t[3] * m + t[7] * v + t[11] * g + t[15]))
                                      : ((r = t[0]),
                                        (i = t[1]),
                                        (o = t[2]),
                                        (a = t[3]),
                                        (s = t[4]),
                                        (l = t[5]),
                                        (c = t[6]),
                                        (u = t[7]),
                                        (h = t[8]),
                                        (d = t[9]),
                                        (p = t[10]),
                                        (f = t[11]),
                                        (e[0] = r),
                                        (e[1] = i),
                                        (e[2] = o),
                                        (e[3] = a),
                                        (e[4] = s),
                                        (e[5] = l),
                                        (e[6] = c),
                                        (e[7] = u),
                                        (e[8] = h),
                                        (e[9] = d),
                                        (e[10] = p),
                                        (e[11] = f),
                                        (e[12] = r * m + s * v + h * g + t[12]),
                                        (e[13] = i * m + l * v + d * g + t[13]),
                                        (e[14] = o * m + c * v + p * g + t[14]),
                                        (e[15] = a * m + u * v + f * g + t[15])),
                                    e
                                  )
                                }
                                function o(e, t) {
                                  var n = t[0],
                                    r = t[1],
                                    i = t[2],
                                    o = t[3],
                                    a = t[4],
                                    s = t[5],
                                    l = t[6],
                                    c = t[7],
                                    u = t[8],
                                    h = t[9],
                                    d = t[10],
                                    p = t[11],
                                    f = t[12],
                                    m = t[13],
                                    v = t[14],
                                    g = t[15],
                                    y = n * s - r * a,
                                    b = n * l - i * a,
                                    A = n * c - o * a,
                                    w = r * l - i * s,
                                    x = r * c - o * s,
                                    E = i * c - o * l,
                                    M = u * m - h * f,
                                    _ = u * v - d * f,
                                    T = u * g - p * f,
                                    S = h * v - d * m,
                                    C = h * g - p * m,
                                    L = d * g - p * v,
                                    R = y * L - b * C + A * S + w * T - x * _ + E * M
                                  return R
                                    ? ((R = 1 / R),
                                      (e[0] = (s * L - l * C + c * S) * R),
                                      (e[1] = (i * C - r * L - o * S) * R),
                                      (e[2] = (m * E - v * x + g * w) * R),
                                      (e[3] = (d * x - h * E - p * w) * R),
                                      (e[4] = (l * T - a * L - c * _) * R),
                                      (e[5] = (n * L - i * T + o * _) * R),
                                      (e[6] = (v * A - f * E - g * b) * R),
                                      (e[7] = (u * E - d * A + p * b) * R),
                                      (e[8] = (a * C - s * T + c * M) * R),
                                      (e[9] = (r * T - n * C - o * M) * R),
                                      (e[10] = (f * x - m * A + g * y) * R),
                                      (e[11] = (h * A - u * x - p * y) * R),
                                      (e[12] = (s * _ - a * S - l * M) * R),
                                      (e[13] = (n * S - r * _ + i * M) * R),
                                      (e[14] = (m * b - f * w - v * y) * R),
                                      (e[15] = (u * w - h * b + d * y) * R),
                                      e)
                                    : null
                                }
                                var a = new Float32Array([0, 0, 0, 1]),
                                  s = new Float32Array([0, 0, 0])
                                function l(e, t, l, c, u, h) {
                                  n(e, c || null, h.depthNear, h.depthFar),
                                    r(t, l.orientation || a, l.position || s),
                                    u && i(t, t, u),
                                    o(t, t)
                                }
                                return function (e, t, n) {
                                  return (
                                    !(!e || !t) &&
                                    ((e.pose = t),
                                    (e.timestamp = t.timestamp),
                                    l(
                                      e.leftProjectionMatrix,
                                      e.leftViewMatrix,
                                      t,
                                      n._getFieldOfView('left'),
                                      n._getEyeOffset('left'),
                                      n,
                                    ),
                                    l(
                                      e.rightProjectionMatrix,
                                      e.rightViewMatrix,
                                      t,
                                      n._getFieldOfView('right'),
                                      n._getEyeOffset('right'),
                                      n,
                                    ),
                                    !0)
                                  )
                                }
                              })(),
                              R = function () {
                                var e = window.self !== window.top,
                                  t = P(document.referrer),
                                  n = P(window.location.href)
                                return e && t !== n
                              },
                              P = function (e) {
                                var t,
                                  n = e.indexOf('://')
                                t = -1 !== n ? n + 3 : 0
                                var r = e.indexOf('/', t)
                                return -1 === r && (r = e.length), e.substring(0, r)
                              },
                              D = function (e) {
                                return e.w > 1
                                  ? (console.warn('getQuaternionAngle: w > 1'), 0)
                                  : 2 * Math.acos(e.w)
                              },
                              O = (function () {
                                var e = {}
                                return function (t, n) {
                                  void 0 === e[t] &&
                                    (console.warn('webvr-polyfill: ' + n), (e[t] = !0))
                                }
                              })(),
                              I = function (e, t) {
                                O(
                                  e,
                                  e +
                                    ' has been deprecated. This may not work on native WebVR displays. ' +
                                    (t ? 'Please use ' + t + ' instead.' : ''),
                                )
                              }
                            function B(e, t, n) {
                              if (t) {
                                for (var r = [], i = null, o = 0; o < t.length; ++o)
                                  switch ((a = t[o])) {
                                    case e.TEXTURE_BINDING_2D:
                                    case e.TEXTURE_BINDING_CUBE_MAP:
                                      if ((l = t[++o]) < e.TEXTURE0 || l > e.TEXTURE31) {
                                        console.error(
                                          'TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit',
                                        ),
                                          r.push(null, null)
                                        break
                                      }
                                      i || (i = e.getParameter(e.ACTIVE_TEXTURE)),
                                        e.activeTexture(l),
                                        r.push(e.getParameter(a), null)
                                      break
                                    case e.ACTIVE_TEXTURE:
                                      ;(i = e.getParameter(e.ACTIVE_TEXTURE)), r.push(null)
                                      break
                                    default:
                                      r.push(e.getParameter(a))
                                  }
                                for (n(e), o = 0; o < t.length; ++o) {
                                  var a = t[o],
                                    s = r[o]
                                  switch (a) {
                                    case e.ACTIVE_TEXTURE:
                                      break
                                    case e.ARRAY_BUFFER_BINDING:
                                      e.bindBuffer(e.ARRAY_BUFFER, s)
                                      break
                                    case e.COLOR_CLEAR_VALUE:
                                      e.clearColor(s[0], s[1], s[2], s[3])
                                      break
                                    case e.COLOR_WRITEMASK:
                                      e.colorMask(s[0], s[1], s[2], s[3])
                                      break
                                    case e.CURRENT_PROGRAM:
                                      e.useProgram(s)
                                      break
                                    case e.ELEMENT_ARRAY_BUFFER_BINDING:
                                      e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, s)
                                      break
                                    case e.FRAMEBUFFER_BINDING:
                                      e.bindFramebuffer(e.FRAMEBUFFER, s)
                                      break
                                    case e.RENDERBUFFER_BINDING:
                                      e.bindRenderbuffer(e.RENDERBUFFER, s)
                                      break
                                    case e.TEXTURE_BINDING_2D:
                                      if ((l = t[++o]) < e.TEXTURE0 || l > e.TEXTURE31) break
                                      e.activeTexture(l), e.bindTexture(e.TEXTURE_2D, s)
                                      break
                                    case e.TEXTURE_BINDING_CUBE_MAP:
                                      var l
                                      if ((l = t[++o]) < e.TEXTURE0 || l > e.TEXTURE31) break
                                      e.activeTexture(l), e.bindTexture(e.TEXTURE_CUBE_MAP, s)
                                      break
                                    case e.VIEWPORT:
                                      e.viewport(s[0], s[1], s[2], s[3])
                                      break
                                    case e.BLEND:
                                    case e.CULL_FACE:
                                    case e.DEPTH_TEST:
                                    case e.SCISSOR_TEST:
                                    case e.STENCIL_TEST:
                                      s ? e.enable(a) : e.disable(a)
                                      break
                                    default:
                                      console.log('No GL restore behavior for 0x' + a.toString(16))
                                  }
                                  i && e.activeTexture(i)
                                }
                              } else n(e)
                            }
                            var F = B,
                              k = [
                                'attribute vec2 position;',
                                'attribute vec3 texCoord;',
                                'varying vec2 vTexCoord;',
                                'uniform vec4 viewportOffsetScale[2];',
                                'void main() {',
                                '  vec4 viewport = viewportOffsetScale[int(texCoord.z)];',
                                '  vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;',
                                '  gl_Position = vec4( position, 1.0, 1.0 );',
                                '}',
                              ].join('\n'),
                              N = [
                                'precision mediump float;',
                                'uniform sampler2D diffuse;',
                                'varying vec2 vTexCoord;',
                                'void main() {',
                                '  gl_FragColor = texture2D(diffuse, vTexCoord);',
                                '}',
                              ].join('\n')
                            function U(e, t, n, r) {
                              ;(this.gl = e),
                                (this.cardboardUI = t),
                                (this.bufferScale = n),
                                (this.dirtySubmitFrameBindings = r),
                                (this.ctxAttribs = e.getContextAttributes()),
                                (this.instanceExt = e.getExtension('ANGLE_instanced_arrays')),
                                (this.meshWidth = 20),
                                (this.meshHeight = 20),
                                (this.bufferWidth = e.drawingBufferWidth),
                                (this.bufferHeight = e.drawingBufferHeight),
                                (this.realBindFramebuffer = e.bindFramebuffer),
                                (this.realEnable = e.enable),
                                (this.realDisable = e.disable),
                                (this.realColorMask = e.colorMask),
                                (this.realClearColor = e.clearColor),
                                (this.realViewport = e.viewport),
                                l() ||
                                  ((this.realCanvasWidth = Object.getOwnPropertyDescriptor(
                                    e.canvas.__proto__,
                                    'width',
                                  )),
                                  (this.realCanvasHeight = Object.getOwnPropertyDescriptor(
                                    e.canvas.__proto__,
                                    'height',
                                  ))),
                                (this.isPatched = !1),
                                (this.lastBoundFramebuffer = null),
                                (this.cullFace = !1),
                                (this.depthTest = !1),
                                (this.blend = !1),
                                (this.scissorTest = !1),
                                (this.stencilTest = !1),
                                (this.viewport = [0, 0, 0, 0]),
                                (this.colorMask = [!0, !0, !0, !0]),
                                (this.clearColor = [0, 0, 0, 0]),
                                (this.attribs = { position: 0, texCoord: 1 }),
                                (this.program = E(e, k, N, this.attribs)),
                                (this.uniforms = M(e, this.program)),
                                (this.viewportOffsetScale = new Float32Array(8)),
                                this.setTextureBounds(),
                                (this.vertexBuffer = e.createBuffer()),
                                (this.indexBuffer = e.createBuffer()),
                                (this.indexCount = 0),
                                (this.renderTarget = e.createTexture()),
                                (this.framebuffer = e.createFramebuffer()),
                                (this.depthStencilBuffer = null),
                                (this.depthBuffer = null),
                                (this.stencilBuffer = null),
                                this.ctxAttribs.depth && this.ctxAttribs.stencil
                                  ? (this.depthStencilBuffer = e.createRenderbuffer())
                                  : this.ctxAttribs.depth
                                  ? (this.depthBuffer = e.createRenderbuffer())
                                  : this.ctxAttribs.stencil &&
                                    (this.stencilBuffer = e.createRenderbuffer()),
                                this.patch(),
                                this.onResize()
                            }
                            ;(U.prototype.destroy = function () {
                              var e = this.gl
                              this.unpatch(),
                                e.deleteProgram(this.program),
                                e.deleteBuffer(this.vertexBuffer),
                                e.deleteBuffer(this.indexBuffer),
                                e.deleteTexture(this.renderTarget),
                                e.deleteFramebuffer(this.framebuffer),
                                this.depthStencilBuffer &&
                                  e.deleteRenderbuffer(this.depthStencilBuffer),
                                this.depthBuffer && e.deleteRenderbuffer(this.depthBuffer),
                                this.stencilBuffer && e.deleteRenderbuffer(this.stencilBuffer),
                                this.cardboardUI && this.cardboardUI.destroy()
                            }),
                              (U.prototype.onResize = function () {
                                var e = this.gl,
                                  t = this,
                                  n = [e.RENDERBUFFER_BINDING, e.TEXTURE_BINDING_2D, e.TEXTURE0]
                                F(e, n, function (e) {
                                  t.realBindFramebuffer.call(e, e.FRAMEBUFFER, null),
                                    t.scissorTest && t.realDisable.call(e, e.SCISSOR_TEST),
                                    t.realColorMask.call(e, !0, !0, !0, !0),
                                    t.realViewport.call(
                                      e,
                                      0,
                                      0,
                                      e.drawingBufferWidth,
                                      e.drawingBufferHeight,
                                    ),
                                    t.realClearColor.call(e, 0, 0, 0, 1),
                                    e.clear(e.COLOR_BUFFER_BIT),
                                    t.realBindFramebuffer.call(e, e.FRAMEBUFFER, t.framebuffer),
                                    e.bindTexture(e.TEXTURE_2D, t.renderTarget),
                                    e.texImage2D(
                                      e.TEXTURE_2D,
                                      0,
                                      t.ctxAttribs.alpha ? e.RGBA : e.RGB,
                                      t.bufferWidth,
                                      t.bufferHeight,
                                      0,
                                      t.ctxAttribs.alpha ? e.RGBA : e.RGB,
                                      e.UNSIGNED_BYTE,
                                      null,
                                    ),
                                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MAG_FILTER, e.LINEAR),
                                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, e.LINEAR),
                                    e.texParameteri(
                                      e.TEXTURE_2D,
                                      e.TEXTURE_WRAP_S,
                                      e.CLAMP_TO_EDGE,
                                    ),
                                    e.texParameteri(
                                      e.TEXTURE_2D,
                                      e.TEXTURE_WRAP_T,
                                      e.CLAMP_TO_EDGE,
                                    ),
                                    e.framebufferTexture2D(
                                      e.FRAMEBUFFER,
                                      e.COLOR_ATTACHMENT0,
                                      e.TEXTURE_2D,
                                      t.renderTarget,
                                      0,
                                    ),
                                    t.ctxAttribs.depth && t.ctxAttribs.stencil
                                      ? (e.bindRenderbuffer(e.RENDERBUFFER, t.depthStencilBuffer),
                                        e.renderbufferStorage(
                                          e.RENDERBUFFER,
                                          e.DEPTH_STENCIL,
                                          t.bufferWidth,
                                          t.bufferHeight,
                                        ),
                                        e.framebufferRenderbuffer(
                                          e.FRAMEBUFFER,
                                          e.DEPTH_STENCIL_ATTACHMENT,
                                          e.RENDERBUFFER,
                                          t.depthStencilBuffer,
                                        ))
                                      : t.ctxAttribs.depth
                                      ? (e.bindRenderbuffer(e.RENDERBUFFER, t.depthBuffer),
                                        e.renderbufferStorage(
                                          e.RENDERBUFFER,
                                          e.DEPTH_COMPONENT16,
                                          t.bufferWidth,
                                          t.bufferHeight,
                                        ),
                                        e.framebufferRenderbuffer(
                                          e.FRAMEBUFFER,
                                          e.DEPTH_ATTACHMENT,
                                          e.RENDERBUFFER,
                                          t.depthBuffer,
                                        ))
                                      : t.ctxAttribs.stencil &&
                                        (e.bindRenderbuffer(e.RENDERBUFFER, t.stencilBuffer),
                                        e.renderbufferStorage(
                                          e.RENDERBUFFER,
                                          e.STENCIL_INDEX8,
                                          t.bufferWidth,
                                          t.bufferHeight,
                                        ),
                                        e.framebufferRenderbuffer(
                                          e.FRAMEBUFFER,
                                          e.STENCIL_ATTACHMENT,
                                          e.RENDERBUFFER,
                                          t.stencilBuffer,
                                        )),
                                    !e.checkFramebufferStatus(e.FRAMEBUFFER) ===
                                      e.FRAMEBUFFER_COMPLETE &&
                                      console.error('Framebuffer incomplete!'),
                                    t.realBindFramebuffer.call(
                                      e,
                                      e.FRAMEBUFFER,
                                      t.lastBoundFramebuffer,
                                    ),
                                    t.scissorTest && t.realEnable.call(e, e.SCISSOR_TEST),
                                    t.realColorMask.apply(e, t.colorMask),
                                    t.realViewport.apply(e, t.viewport),
                                    t.realClearColor.apply(e, t.clearColor)
                                }),
                                  this.cardboardUI && this.cardboardUI.onResize()
                              }),
                              (U.prototype.patch = function () {
                                if (!this.isPatched) {
                                  var e = this,
                                    t = this.gl.canvas,
                                    n = this.gl
                                  l() ||
                                    ((t.width = y() * this.bufferScale),
                                    (t.height = b() * this.bufferScale),
                                    Object.defineProperty(t, 'width', {
                                      configurable: !0,
                                      enumerable: !0,
                                      get: function () {
                                        return e.bufferWidth
                                      },
                                      set: function (n) {
                                        ;(e.bufferWidth = n),
                                          e.realCanvasWidth.set.call(t, n),
                                          e.onResize()
                                      },
                                    }),
                                    Object.defineProperty(t, 'height', {
                                      configurable: !0,
                                      enumerable: !0,
                                      get: function () {
                                        return e.bufferHeight
                                      },
                                      set: function (n) {
                                        ;(e.bufferHeight = n),
                                          e.realCanvasHeight.set.call(t, n),
                                          e.onResize()
                                      },
                                    })),
                                    (this.lastBoundFramebuffer = n.getParameter(
                                      n.FRAMEBUFFER_BINDING,
                                    )),
                                    null == this.lastBoundFramebuffer &&
                                      ((this.lastBoundFramebuffer = this.framebuffer),
                                      this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)),
                                    (this.gl.bindFramebuffer = function (t, r) {
                                      ;(e.lastBoundFramebuffer = r || e.framebuffer),
                                        e.realBindFramebuffer.call(n, t, e.lastBoundFramebuffer)
                                    }),
                                    (this.cullFace = n.getParameter(n.CULL_FACE)),
                                    (this.depthTest = n.getParameter(n.DEPTH_TEST)),
                                    (this.blend = n.getParameter(n.BLEND)),
                                    (this.scissorTest = n.getParameter(n.SCISSOR_TEST)),
                                    (this.stencilTest = n.getParameter(n.STENCIL_TEST)),
                                    (n.enable = function (t) {
                                      switch (t) {
                                        case n.CULL_FACE:
                                          e.cullFace = !0
                                          break
                                        case n.DEPTH_TEST:
                                          e.depthTest = !0
                                          break
                                        case n.BLEND:
                                          e.blend = !0
                                          break
                                        case n.SCISSOR_TEST:
                                          e.scissorTest = !0
                                          break
                                        case n.STENCIL_TEST:
                                          e.stencilTest = !0
                                      }
                                      e.realEnable.call(n, t)
                                    }),
                                    (n.disable = function (t) {
                                      switch (t) {
                                        case n.CULL_FACE:
                                          e.cullFace = !1
                                          break
                                        case n.DEPTH_TEST:
                                          e.depthTest = !1
                                          break
                                        case n.BLEND:
                                          e.blend = !1
                                          break
                                        case n.SCISSOR_TEST:
                                          e.scissorTest = !1
                                          break
                                        case n.STENCIL_TEST:
                                          e.stencilTest = !1
                                      }
                                      e.realDisable.call(n, t)
                                    }),
                                    (this.colorMask = n.getParameter(n.COLOR_WRITEMASK)),
                                    (n.colorMask = function (t, r, i, o) {
                                      ;(e.colorMask[0] = t),
                                        (e.colorMask[1] = r),
                                        (e.colorMask[2] = i),
                                        (e.colorMask[3] = o),
                                        e.realColorMask.call(n, t, r, i, o)
                                    }),
                                    (this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE)),
                                    (n.clearColor = function (t, r, i, o) {
                                      ;(e.clearColor[0] = t),
                                        (e.clearColor[1] = r),
                                        (e.clearColor[2] = i),
                                        (e.clearColor[3] = o),
                                        e.realClearColor.call(n, t, r, i, o)
                                    }),
                                    (this.viewport = n.getParameter(n.VIEWPORT)),
                                    (n.viewport = function (t, r, i, o) {
                                      ;(e.viewport[0] = t),
                                        (e.viewport[1] = r),
                                        (e.viewport[2] = i),
                                        (e.viewport[3] = o),
                                        e.realViewport.call(n, t, r, i, o)
                                    }),
                                    (this.isPatched = !0),
                                    C(t)
                                }
                              }),
                              (U.prototype.unpatch = function () {
                                if (this.isPatched) {
                                  var e = this.gl,
                                    t = this.gl.canvas
                                  l() ||
                                    (Object.defineProperty(t, 'width', this.realCanvasWidth),
                                    Object.defineProperty(t, 'height', this.realCanvasHeight)),
                                    (t.width = this.bufferWidth),
                                    (t.height = this.bufferHeight),
                                    (e.bindFramebuffer = this.realBindFramebuffer),
                                    (e.enable = this.realEnable),
                                    (e.disable = this.realDisable),
                                    (e.colorMask = this.realColorMask),
                                    (e.clearColor = this.realClearColor),
                                    (e.viewport = this.realViewport),
                                    this.lastBoundFramebuffer == this.framebuffer &&
                                      e.bindFramebuffer(e.FRAMEBUFFER, null),
                                    (this.isPatched = !1),
                                    setTimeout(function () {
                                      C(t)
                                    }, 1)
                                }
                              }),
                              (U.prototype.setTextureBounds = function (e, t) {
                                e || (e = [0, 0, 0.5, 1]),
                                  t || (t = [0.5, 0, 0.5, 1]),
                                  (this.viewportOffsetScale[0] = e[0]),
                                  (this.viewportOffsetScale[1] = e[1]),
                                  (this.viewportOffsetScale[2] = e[2]),
                                  (this.viewportOffsetScale[3] = e[3]),
                                  (this.viewportOffsetScale[4] = t[0]),
                                  (this.viewportOffsetScale[5] = t[1]),
                                  (this.viewportOffsetScale[6] = t[2]),
                                  (this.viewportOffsetScale[7] = t[3])
                              }),
                              (U.prototype.submitFrame = function () {
                                var e = this.gl,
                                  t = this,
                                  n = []
                                if (
                                  (this.dirtySubmitFrameBindings ||
                                    n.push(
                                      e.CURRENT_PROGRAM,
                                      e.ARRAY_BUFFER_BINDING,
                                      e.ELEMENT_ARRAY_BUFFER_BINDING,
                                      e.TEXTURE_BINDING_2D,
                                      e.TEXTURE0,
                                    ),
                                  F(e, n, function (e) {
                                    t.realBindFramebuffer.call(e, e.FRAMEBUFFER, null)
                                    var n = 0,
                                      r = 0
                                    t.instanceExt &&
                                      ((n = e.getVertexAttrib(
                                        t.attribs.position,
                                        t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE,
                                      )),
                                      (r = e.getVertexAttrib(
                                        t.attribs.texCoord,
                                        t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE,
                                      ))),
                                      t.cullFace && t.realDisable.call(e, e.CULL_FACE),
                                      t.depthTest && t.realDisable.call(e, e.DEPTH_TEST),
                                      t.blend && t.realDisable.call(e, e.BLEND),
                                      t.scissorTest && t.realDisable.call(e, e.SCISSOR_TEST),
                                      t.stencilTest && t.realDisable.call(e, e.STENCIL_TEST),
                                      t.realColorMask.call(e, !0, !0, !0, !0),
                                      t.realViewport.call(
                                        e,
                                        0,
                                        0,
                                        e.drawingBufferWidth,
                                        e.drawingBufferHeight,
                                      ),
                                      (t.ctxAttribs.alpha || l()) &&
                                        (t.realClearColor.call(e, 0, 0, 0, 1),
                                        e.clear(e.COLOR_BUFFER_BIT)),
                                      e.useProgram(t.program),
                                      e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, t.indexBuffer),
                                      e.bindBuffer(e.ARRAY_BUFFER, t.vertexBuffer),
                                      e.enableVertexAttribArray(t.attribs.position),
                                      e.enableVertexAttribArray(t.attribs.texCoord),
                                      e.vertexAttribPointer(
                                        t.attribs.position,
                                        2,
                                        e.FLOAT,
                                        !1,
                                        20,
                                        0,
                                      ),
                                      e.vertexAttribPointer(
                                        t.attribs.texCoord,
                                        3,
                                        e.FLOAT,
                                        !1,
                                        20,
                                        8,
                                      ),
                                      t.instanceExt &&
                                        (0 != n &&
                                          t.instanceExt.vertexAttribDivisorANGLE(
                                            t.attribs.position,
                                            0,
                                          ),
                                        0 != r &&
                                          t.instanceExt.vertexAttribDivisorANGLE(
                                            t.attribs.texCoord,
                                            0,
                                          )),
                                      e.activeTexture(e.TEXTURE0),
                                      e.uniform1i(t.uniforms.diffuse, 0),
                                      e.bindTexture(e.TEXTURE_2D, t.renderTarget),
                                      e.uniform4fv(
                                        t.uniforms.viewportOffsetScale,
                                        t.viewportOffsetScale,
                                      ),
                                      e.drawElements(
                                        e.TRIANGLES,
                                        t.indexCount,
                                        e.UNSIGNED_SHORT,
                                        0,
                                      ),
                                      t.cardboardUI && t.cardboardUI.renderNoState(),
                                      t.realBindFramebuffer.call(
                                        t.gl,
                                        e.FRAMEBUFFER,
                                        t.framebuffer,
                                      ),
                                      t.ctxAttribs.preserveDrawingBuffer ||
                                        (t.realClearColor.call(e, 0, 0, 0, 0),
                                        e.clear(e.COLOR_BUFFER_BIT)),
                                      t.dirtySubmitFrameBindings ||
                                        t.realBindFramebuffer.call(
                                          e,
                                          e.FRAMEBUFFER,
                                          t.lastBoundFramebuffer,
                                        ),
                                      t.cullFace && t.realEnable.call(e, e.CULL_FACE),
                                      t.depthTest && t.realEnable.call(e, e.DEPTH_TEST),
                                      t.blend && t.realEnable.call(e, e.BLEND),
                                      t.scissorTest && t.realEnable.call(e, e.SCISSOR_TEST),
                                      t.stencilTest && t.realEnable.call(e, e.STENCIL_TEST),
                                      t.realColorMask.apply(e, t.colorMask),
                                      t.realViewport.apply(e, t.viewport),
                                      (!t.ctxAttribs.alpha && t.ctxAttribs.preserveDrawingBuffer) ||
                                        t.realClearColor.apply(e, t.clearColor),
                                      t.instanceExt &&
                                        (0 != n &&
                                          t.instanceExt.vertexAttribDivisorANGLE(
                                            t.attribs.position,
                                            n,
                                          ),
                                        0 != r &&
                                          t.instanceExt.vertexAttribDivisorANGLE(
                                            t.attribs.texCoord,
                                            r,
                                          ))
                                  }),
                                  l())
                                ) {
                                  var r = e.canvas
                                  ;(r.width == t.bufferWidth && r.height == t.bufferHeight) ||
                                    ((t.bufferWidth = r.width),
                                    (t.bufferHeight = r.height),
                                    t.onResize())
                                }
                              }),
                              (U.prototype.updateDeviceInfo = function (e) {
                                var t = this.gl,
                                  n = this,
                                  r = [t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING]
                                F(t, r, function (t) {
                                  var r = n.computeMeshVertices_(n.meshWidth, n.meshHeight, e)
                                  if (
                                    (t.bindBuffer(t.ARRAY_BUFFER, n.vertexBuffer),
                                    t.bufferData(t.ARRAY_BUFFER, r, t.STATIC_DRAW),
                                    !n.indexCount)
                                  ) {
                                    var i = n.computeMeshIndices_(n.meshWidth, n.meshHeight)
                                    t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, n.indexBuffer),
                                      t.bufferData(t.ELEMENT_ARRAY_BUFFER, i, t.STATIC_DRAW),
                                      (n.indexCount = i.length)
                                  }
                                })
                              }),
                              (U.prototype.computeMeshVertices_ = function (e, t, n) {
                                for (
                                  var r = new Float32Array(2 * e * t * 5),
                                    i = n.getLeftEyeVisibleTanAngles(),
                                    o = n.getLeftEyeNoLensTanAngles(),
                                    a = n.getLeftEyeVisibleScreenRect(o),
                                    l = 0,
                                    c = 0;
                                  c < 2;
                                  c++
                                ) {
                                  for (var u = 0; u < t; u++)
                                    for (var h = 0; h < e; h++, l++) {
                                      var d = h / (e - 1),
                                        p = u / (t - 1),
                                        f = d,
                                        m = p,
                                        v = s(i[0], i[2], d),
                                        g = s(i[3], i[1], p),
                                        y = Math.sqrt(v * v + g * g),
                                        b = n.distortion.distortInverse(y),
                                        A = (g * b) / y
                                      ;(d = ((v * b) / y - o[0]) / (o[2] - o[0])),
                                        (p = (A - o[3]) / (o[1] - o[3])),
                                        (d = 2 * (a.x + d * a.width - 0.5)),
                                        (p = 2 * (a.y + p * a.height - 0.5)),
                                        (r[5 * l + 0] = d),
                                        (r[5 * l + 1] = p),
                                        (r[5 * l + 2] = f),
                                        (r[5 * l + 3] = m),
                                        (r[5 * l + 4] = c)
                                    }
                                  var w = i[2] - i[0]
                                  ;(i[0] = -(w + i[0])),
                                    (i[2] = w - i[2]),
                                    (w = o[2] - o[0]),
                                    (o[0] = -(w + o[0])),
                                    (o[2] = w - o[2]),
                                    (a.x = 1 - (a.x + a.width))
                                }
                                return r
                              }),
                              (U.prototype.computeMeshIndices_ = function (e, t) {
                                for (
                                  var n = new Uint16Array(2 * (e - 1) * (t - 1) * 6),
                                    r = e / 2,
                                    i = t / 2,
                                    o = 0,
                                    a = 0,
                                    s = 0;
                                  s < 2;
                                  s++
                                )
                                  for (var l = 0; l < t; l++)
                                    for (var c = 0; c < e; c++, o++)
                                      0 != c &&
                                        0 != l &&
                                        (c <= r == l <= i
                                          ? ((n[a++] = o),
                                            (n[a++] = o - e - 1),
                                            (n[a++] = o - e),
                                            (n[a++] = o - e - 1),
                                            (n[a++] = o),
                                            (n[a++] = o - 1))
                                          : ((n[a++] = o - 1),
                                            (n[a++] = o - e),
                                            (n[a++] = o),
                                            (n[a++] = o - e),
                                            (n[a++] = o - 1),
                                            (n[a++] = o - e - 1)))
                                return n
                              }),
                              (U.prototype.getOwnPropertyDescriptor_ = function (e, t) {
                                var n = Object.getOwnPropertyDescriptor(e, t)
                                return (
                                  (void 0 !== n.get && void 0 !== n.set) ||
                                    ((n.configurable = !0),
                                    (n.enumerable = !0),
                                    (n.get = function () {
                                      return this.getAttribute(t)
                                    }),
                                    (n.set = function (e) {
                                      this.setAttribute(t, e)
                                    })),
                                  n
                                )
                              })
                            var H = [
                                'attribute vec2 position;',
                                'uniform mat4 projectionMat;',
                                'void main() {',
                                '  gl_Position = projectionMat * vec4( position, -1.0, 1.0 );',
                                '}',
                              ].join('\n'),
                              G = [
                                'precision mediump float;',
                                'uniform vec4 color;',
                                'void main() {',
                                '  gl_FragColor = color;',
                                '}',
                              ].join('\n'),
                              z = Math.PI / 180,
                              j = 60,
                              V = 12,
                              W = 20,
                              q = 1,
                              X = 0.75,
                              Y = 0.3125,
                              Q = 4,
                              Z = 28,
                              K = 1.5
                            function J(e) {
                              ;(this.gl = e),
                                (this.attribs = { position: 0 }),
                                (this.program = E(e, H, G, this.attribs)),
                                (this.uniforms = M(e, this.program)),
                                (this.vertexBuffer = e.createBuffer()),
                                (this.gearOffset = 0),
                                (this.gearVertexCount = 0),
                                (this.arrowOffset = 0),
                                (this.arrowVertexCount = 0),
                                (this.projMat = new Float32Array(16)),
                                (this.listener = null),
                                this.onResize()
                            }
                            function $(e) {
                              this.coefficients = e
                            }
                            ;(J.prototype.destroy = function () {
                              var e = this.gl
                              this.listener &&
                                e.canvas.removeEventListener('click', this.listener, !1),
                                e.deleteProgram(this.program),
                                e.deleteBuffer(this.vertexBuffer)
                            }),
                              (J.prototype.listen = function (e, t) {
                                var n = this.gl.canvas
                                ;(this.listener = function (r) {
                                  var i = n.clientWidth / 2,
                                    o = Z * K
                                  r.clientX > i - o &&
                                  r.clientX < i + o &&
                                  r.clientY > n.clientHeight - o
                                    ? e(r)
                                    : r.clientX < o && r.clientY < o && t(r)
                                }),
                                  n.addEventListener('click', this.listener, !1)
                              }),
                              (J.prototype.onResize = function () {
                                var e = this.gl,
                                  t = this,
                                  n = [e.ARRAY_BUFFER_BINDING]
                                F(e, n, function (e) {
                                  var n = [],
                                    r = e.drawingBufferWidth / 2,
                                    i =
                                      Math.max(screen.width, screen.height) *
                                      window.devicePixelRatio,
                                    o = (e.drawingBufferWidth / i) * window.devicePixelRatio,
                                    a = (Q * o) / 2,
                                    s = Z * K * o,
                                    l = (Z * o) / 2,
                                    c = (Z * K - Z) * o
                                  function u(e, t) {
                                    var i = (90 - e) * z,
                                      o = Math.cos(i),
                                      a = Math.sin(i)
                                    n.push(Y * o * l + r, Y * a * l + l),
                                      n.push(t * o * l + r, t * a * l + l)
                                  }
                                  n.push(r - a, s),
                                    n.push(r - a, e.drawingBufferHeight),
                                    n.push(r + a, s),
                                    n.push(r + a, e.drawingBufferHeight),
                                    (t.gearOffset = n.length / 2)
                                  for (var h = 0; h <= 6; h++) {
                                    var d = h * j
                                    u(d, q),
                                      u(d + V, q),
                                      u(d + W, X),
                                      u(d + (j - W), X),
                                      u(d + (j - V), q)
                                  }
                                  function p(t, r) {
                                    n.push(c + t, e.drawingBufferHeight - c - r)
                                  }
                                  ;(t.gearVertexCount = n.length / 2 - t.gearOffset),
                                    (t.arrowOffset = n.length / 2)
                                  var f = a / Math.sin(45 * z)
                                  p(0, l),
                                    p(l, 0),
                                    p(l + f, f),
                                    p(f, l + f),
                                    p(f, l - f),
                                    p(0, l),
                                    p(l, 2 * l),
                                    p(l + f, 2 * l - f),
                                    p(f, l - f),
                                    p(0, l),
                                    p(f, l - a),
                                    p(Z * o, l - a),
                                    p(f, l + a),
                                    p(Z * o, l + a),
                                    (t.arrowVertexCount = n.length / 2 - t.arrowOffset),
                                    e.bindBuffer(e.ARRAY_BUFFER, t.vertexBuffer),
                                    e.bufferData(e.ARRAY_BUFFER, new Float32Array(n), e.STATIC_DRAW)
                                })
                              }),
                              (J.prototype.render = function () {
                                var e = this.gl,
                                  t = this,
                                  n = [
                                    e.CULL_FACE,
                                    e.DEPTH_TEST,
                                    e.BLEND,
                                    e.SCISSOR_TEST,
                                    e.STENCIL_TEST,
                                    e.COLOR_WRITEMASK,
                                    e.VIEWPORT,
                                    e.CURRENT_PROGRAM,
                                    e.ARRAY_BUFFER_BINDING,
                                  ]
                                F(e, n, function (e) {
                                  e.disable(e.CULL_FACE),
                                    e.disable(e.DEPTH_TEST),
                                    e.disable(e.BLEND),
                                    e.disable(e.SCISSOR_TEST),
                                    e.disable(e.STENCIL_TEST),
                                    e.colorMask(!0, !0, !0, !0),
                                    e.viewport(0, 0, e.drawingBufferWidth, e.drawingBufferHeight),
                                    t.renderNoState()
                                })
                              }),
                              (J.prototype.renderNoState = function () {
                                var e = this.gl
                                e.useProgram(this.program),
                                  e.bindBuffer(e.ARRAY_BUFFER, this.vertexBuffer),
                                  e.enableVertexAttribArray(this.attribs.position),
                                  e.vertexAttribPointer(
                                    this.attribs.position,
                                    2,
                                    e.FLOAT,
                                    !1,
                                    8,
                                    0,
                                  ),
                                  e.uniform4f(this.uniforms.color, 1, 1, 1, 1),
                                  _(
                                    this.projMat,
                                    0,
                                    e.drawingBufferWidth,
                                    0,
                                    e.drawingBufferHeight,
                                    0.1,
                                    1024,
                                  ),
                                  e.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat),
                                  e.drawArrays(e.TRIANGLE_STRIP, 0, 4),
                                  e.drawArrays(
                                    e.TRIANGLE_STRIP,
                                    this.gearOffset,
                                    this.gearVertexCount,
                                  ),
                                  e.drawArrays(
                                    e.TRIANGLE_STRIP,
                                    this.arrowOffset,
                                    this.arrowVertexCount,
                                  )
                              }),
                              ($.prototype.distortInverse = function (e) {
                                for (
                                  var t = 0, n = 1, r = e - this.distort(t);
                                  Math.abs(n - t) > 1e-4;

                                ) {
                                  var i = e - this.distort(n),
                                    o = n - i * ((n - t) / (i - r))
                                  ;(t = n), (n = o), (r = i)
                                }
                                return n
                              }),
                              ($.prototype.distort = function (e) {
                                for (var t = e * e, n = 0, r = 0; r < this.coefficients.length; r++)
                                  n = t * (n + this.coefficients[r])
                                return (n + 1) * e
                              })
                            var ee = Math.PI / 180,
                              te = 180 / Math.PI,
                              ne = function (e, t, n) {
                                ;(this.x = e || 0), (this.y = t || 0), (this.z = n || 0)
                              }
                            ne.prototype = {
                              constructor: ne,
                              set: function (e, t, n) {
                                return (this.x = e), (this.y = t), (this.z = n), this
                              },
                              copy: function (e) {
                                return (this.x = e.x), (this.y = e.y), (this.z = e.z), this
                              },
                              length: function () {
                                return Math.sqrt(
                                  this.x * this.x + this.y * this.y + this.z * this.z,
                                )
                              },
                              normalize: function () {
                                var e = this.length()
                                if (0 !== e) {
                                  var t = 1 / e
                                  this.multiplyScalar(t)
                                } else (this.x = 0), (this.y = 0), (this.z = 0)
                                return this
                              },
                              multiplyScalar: function (e) {
                                ;(this.x *= e), (this.y *= e), (this.z *= e)
                              },
                              applyQuaternion: function (e) {
                                var t = this.x,
                                  n = this.y,
                                  r = this.z,
                                  i = e.x,
                                  o = e.y,
                                  a = e.z,
                                  s = e.w,
                                  l = s * t + o * r - a * n,
                                  c = s * n + a * t - i * r,
                                  u = s * r + i * n - o * t,
                                  h = -i * t - o * n - a * r
                                return (
                                  (this.x = l * s + h * -i + c * -a - u * -o),
                                  (this.y = c * s + h * -o + u * -i - l * -a),
                                  (this.z = u * s + h * -a + l * -o - c * -i),
                                  this
                                )
                              },
                              dot: function (e) {
                                return this.x * e.x + this.y * e.y + this.z * e.z
                              },
                              crossVectors: function (e, t) {
                                var n = e.x,
                                  r = e.y,
                                  i = e.z,
                                  o = t.x,
                                  a = t.y,
                                  s = t.z
                                return (
                                  (this.x = r * s - i * a),
                                  (this.y = i * o - n * s),
                                  (this.z = n * a - r * o),
                                  this
                                )
                              },
                            }
                            var re = function (e, t, n, r) {
                              ;(this.x = e || 0),
                                (this.y = t || 0),
                                (this.z = n || 0),
                                (this.w = void 0 !== r ? r : 1)
                            }
                            function ie(e) {
                              ;(this.width = e.width || y()),
                                (this.height = e.height || b()),
                                (this.widthMeters = e.widthMeters),
                                (this.heightMeters = e.heightMeters),
                                (this.bevelMeters = e.bevelMeters)
                            }
                            re.prototype = {
                              constructor: re,
                              set: function (e, t, n, r) {
                                return (this.x = e), (this.y = t), (this.z = n), (this.w = r), this
                              },
                              copy: function (e) {
                                return (
                                  (this.x = e.x),
                                  (this.y = e.y),
                                  (this.z = e.z),
                                  (this.w = e.w),
                                  this
                                )
                              },
                              setFromEulerXYZ: function (e, t, n) {
                                var r = Math.cos(e / 2),
                                  i = Math.cos(t / 2),
                                  o = Math.cos(n / 2),
                                  a = Math.sin(e / 2),
                                  s = Math.sin(t / 2),
                                  l = Math.sin(n / 2)
                                return (
                                  (this.x = a * i * o + r * s * l),
                                  (this.y = r * s * o - a * i * l),
                                  (this.z = r * i * l + a * s * o),
                                  (this.w = r * i * o - a * s * l),
                                  this
                                )
                              },
                              setFromEulerYXZ: function (e, t, n) {
                                var r = Math.cos(e / 2),
                                  i = Math.cos(t / 2),
                                  o = Math.cos(n / 2),
                                  a = Math.sin(e / 2),
                                  s = Math.sin(t / 2),
                                  l = Math.sin(n / 2)
                                return (
                                  (this.x = a * i * o + r * s * l),
                                  (this.y = r * s * o - a * i * l),
                                  (this.z = r * i * l - a * s * o),
                                  (this.w = r * i * o + a * s * l),
                                  this
                                )
                              },
                              setFromAxisAngle: function (e, t) {
                                var n = t / 2,
                                  r = Math.sin(n)
                                return (
                                  (this.x = e.x * r),
                                  (this.y = e.y * r),
                                  (this.z = e.z * r),
                                  (this.w = Math.cos(n)),
                                  this
                                )
                              },
                              multiply: function (e) {
                                return this.multiplyQuaternions(this, e)
                              },
                              multiplyQuaternions: function (e, t) {
                                var n = e.x,
                                  r = e.y,
                                  i = e.z,
                                  o = e.w,
                                  a = t.x,
                                  s = t.y,
                                  l = t.z,
                                  c = t.w
                                return (
                                  (this.x = n * c + o * a + r * l - i * s),
                                  (this.y = r * c + o * s + i * a - n * l),
                                  (this.z = i * c + o * l + n * s - r * a),
                                  (this.w = o * c - n * a - r * s - i * l),
                                  this
                                )
                              },
                              inverse: function () {
                                return (
                                  (this.x *= -1),
                                  (this.y *= -1),
                                  (this.z *= -1),
                                  this.normalize(),
                                  this
                                )
                              },
                              normalize: function () {
                                var e = Math.sqrt(
                                  this.x * this.x +
                                    this.y * this.y +
                                    this.z * this.z +
                                    this.w * this.w,
                                )
                                return (
                                  0 === e
                                    ? ((this.x = 0), (this.y = 0), (this.z = 0), (this.w = 1))
                                    : ((e = 1 / e),
                                      (this.x = this.x * e),
                                      (this.y = this.y * e),
                                      (this.z = this.z * e),
                                      (this.w = this.w * e)),
                                  this
                                )
                              },
                              slerp: function (e, t) {
                                if (0 === t) return this
                                if (1 === t) return this.copy(e)
                                var n = this.x,
                                  r = this.y,
                                  i = this.z,
                                  o = this.w,
                                  a = o * e.w + n * e.x + r * e.y + i * e.z
                                if (
                                  (a < 0
                                    ? ((this.w = -e.w),
                                      (this.x = -e.x),
                                      (this.y = -e.y),
                                      (this.z = -e.z),
                                      (a = -a))
                                    : this.copy(e),
                                  a >= 1)
                                )
                                  return (
                                    (this.w = o), (this.x = n), (this.y = r), (this.z = i), this
                                  )
                                var s = Math.acos(a),
                                  l = Math.sqrt(1 - a * a)
                                if (Math.abs(l) < 0.001)
                                  return (
                                    (this.w = 0.5 * (o + this.w)),
                                    (this.x = 0.5 * (n + this.x)),
                                    (this.y = 0.5 * (r + this.y)),
                                    (this.z = 0.5 * (i + this.z)),
                                    this
                                  )
                                var c = Math.sin((1 - t) * s) / l,
                                  u = Math.sin(t * s) / l
                                return (
                                  (this.w = o * c + this.w * u),
                                  (this.x = n * c + this.x * u),
                                  (this.y = r * c + this.y * u),
                                  (this.z = i * c + this.z * u),
                                  this
                                )
                              },
                              setFromUnitVectors: (function () {
                                var e,
                                  t,
                                  n = 1e-6
                                return function (r, i) {
                                  return (
                                    void 0 === e && (e = new ne()),
                                    (t = r.dot(i) + 1) < n
                                      ? ((t = 0),
                                        Math.abs(r.x) > Math.abs(r.z)
                                          ? e.set(-r.y, r.x, 0)
                                          : e.set(0, -r.z, r.y))
                                      : e.crossVectors(r, i),
                                    (this.x = e.x),
                                    (this.y = e.y),
                                    (this.z = e.z),
                                    (this.w = t),
                                    this.normalize(),
                                    this
                                  )
                                }
                              })(),
                            }
                            var oe = new ie({
                                widthMeters: 0.11,
                                heightMeters: 0.062,
                                bevelMeters: 0.004,
                              }),
                              ae = new ie({
                                widthMeters: 0.1038,
                                heightMeters: 0.0584,
                                bevelMeters: 0.004,
                              }),
                              se = {
                                CardboardV1: new ce({
                                  id: 'CardboardV1',
                                  label: 'Cardboard I/O 2014',
                                  fov: 40,
                                  interLensDistance: 0.06,
                                  baselineLensDistance: 0.035,
                                  screenLensDistance: 0.042,
                                  distortionCoefficients: [0.441, 0.156],
                                  inverseCoefficients: [
                                    -0.4410035, 0.42756155, -0.4804439, 0.5460139, -0.58821183,
                                    0.5733938, -0.48303202, 0.33299083, -0.17573841, 0.0651772,
                                    -0.01488963, 0.001559834,
                                  ],
                                }),
                                CardboardV2: new ce({
                                  id: 'CardboardV2',
                                  label: 'Cardboard I/O 2015',
                                  fov: 60,
                                  interLensDistance: 0.064,
                                  baselineLensDistance: 0.035,
                                  screenLensDistance: 0.039,
                                  distortionCoefficients: [0.34, 0.55],
                                  inverseCoefficients: [
                                    -0.33836704, -0.18162185, 0.862655, -1.2462051, 1.0560602,
                                    -0.58208317, 0.21609078, -0.05444823, 0.009177956,
                                    -0.0009904169, 6183535e-11, -16981803e-13,
                                  ],
                                }),
                              }
                            function le(e, t) {
                              ;(this.viewer = se.CardboardV2),
                                this.updateDeviceParams(e),
                                (this.distortion = new $(this.viewer.distortionCoefficients))
                              for (var n = 0; n < t.length; n++) {
                                var r = t[n]
                                se[r.id] = new ce(r)
                              }
                            }
                            function ce(e) {
                              ;(this.id = e.id),
                                (this.label = e.label),
                                (this.fov = e.fov),
                                (this.interLensDistance = e.interLensDistance),
                                (this.baselineLensDistance = e.baselineLensDistance),
                                (this.screenLensDistance = e.screenLensDistance),
                                (this.distortionCoefficients = e.distortionCoefficients),
                                (this.inverseCoefficients = e.inverseCoefficients)
                            }
                            ;(le.prototype.updateDeviceParams = function (e) {
                              this.device = this.determineDevice_(e) || this.device
                            }),
                              (le.prototype.getDevice = function () {
                                return this.device
                              }),
                              (le.prototype.setViewer = function (e) {
                                ;(this.viewer = e),
                                  (this.distortion = new $(this.viewer.distortionCoefficients))
                              }),
                              (le.prototype.determineDevice_ = function (e) {
                                if (!e)
                                  return l()
                                    ? (console.warn('Using fallback iOS device measurements.'), ae)
                                    : (console.warn('Using fallback Android device measurements.'),
                                      oe)
                                var t = 0.0254,
                                  n = t / e.xdpi,
                                  r = t / e.ydpi
                                return new ie({
                                  widthMeters: n * y(),
                                  heightMeters: r * b(),
                                  bevelMeters: 0.001 * e.bevelMm,
                                })
                              }),
                              (le.prototype.getDistortedFieldOfViewLeftEye = function () {
                                var e = this.viewer,
                                  t = this.device,
                                  n = this.distortion,
                                  r = e.screenLensDistance,
                                  i = (t.widthMeters - e.interLensDistance) / 2,
                                  o = e.interLensDistance / 2,
                                  a = e.baselineLensDistance - t.bevelMeters,
                                  s = t.heightMeters - a,
                                  l = te * Math.atan(n.distort(i / r)),
                                  c = te * Math.atan(n.distort(o / r)),
                                  u = te * Math.atan(n.distort(a / r)),
                                  h = te * Math.atan(n.distort(s / r))
                                return {
                                  leftDegrees: Math.min(l, e.fov),
                                  rightDegrees: Math.min(c, e.fov),
                                  downDegrees: Math.min(u, e.fov),
                                  upDegrees: Math.min(h, e.fov),
                                }
                              }),
                              (le.prototype.getLeftEyeVisibleTanAngles = function () {
                                var e = this.viewer,
                                  t = this.device,
                                  n = this.distortion,
                                  r = Math.tan(-ee * e.fov),
                                  i = Math.tan(ee * e.fov),
                                  o = Math.tan(ee * e.fov),
                                  a = Math.tan(-ee * e.fov),
                                  s = t.widthMeters / 4,
                                  l = t.heightMeters / 2,
                                  c = e.baselineLensDistance - t.bevelMeters - l,
                                  u = e.interLensDistance / 2 - s,
                                  h = -c,
                                  d = e.screenLensDistance,
                                  p = n.distort((u - s) / d),
                                  f = n.distort((h + l) / d),
                                  m = n.distort((u + s) / d),
                                  v = n.distort((h - l) / d),
                                  g = new Float32Array(4)
                                return (
                                  (g[0] = Math.max(r, p)),
                                  (g[1] = Math.min(i, f)),
                                  (g[2] = Math.min(o, m)),
                                  (g[3] = Math.max(a, v)),
                                  g
                                )
                              }),
                              (le.prototype.getLeftEyeNoLensTanAngles = function () {
                                var e = this.viewer,
                                  t = this.device,
                                  n = this.distortion,
                                  r = new Float32Array(4),
                                  i = n.distortInverse(Math.tan(-ee * e.fov)),
                                  o = n.distortInverse(Math.tan(ee * e.fov)),
                                  a = n.distortInverse(Math.tan(ee * e.fov)),
                                  s = n.distortInverse(Math.tan(-ee * e.fov)),
                                  l = t.widthMeters / 4,
                                  c = t.heightMeters / 2,
                                  u = e.baselineLensDistance - t.bevelMeters - c,
                                  h = e.interLensDistance / 2 - l,
                                  d = -u,
                                  p = e.screenLensDistance,
                                  f = (h - l) / p,
                                  m = (d + c) / p,
                                  v = (h + l) / p,
                                  g = (d - c) / p
                                return (
                                  (r[0] = Math.max(i, f)),
                                  (r[1] = Math.min(o, m)),
                                  (r[2] = Math.min(a, v)),
                                  (r[3] = Math.max(s, g)),
                                  r
                                )
                              }),
                              (le.prototype.getLeftEyeVisibleScreenRect = function (e) {
                                var t = this.viewer,
                                  n = this.device,
                                  r = t.screenLensDistance,
                                  i = (n.widthMeters - t.interLensDistance) / 2,
                                  o = t.baselineLensDistance - n.bevelMeters,
                                  a = (e[0] * r + i) / n.widthMeters,
                                  s = (e[1] * r + o) / n.heightMeters,
                                  l = (e[2] * r + i) / n.widthMeters,
                                  c = (e[3] * r + o) / n.heightMeters
                                return { x: a, y: c, width: l - a, height: s - c }
                              }),
                              (le.prototype.getFieldOfViewLeftEye = function (e) {
                                return e
                                  ? this.getUndistortedFieldOfViewLeftEye()
                                  : this.getDistortedFieldOfViewLeftEye()
                              }),
                              (le.prototype.getFieldOfViewRightEye = function (e) {
                                var t = this.getFieldOfViewLeftEye(e)
                                return {
                                  leftDegrees: t.rightDegrees,
                                  rightDegrees: t.leftDegrees,
                                  upDegrees: t.upDegrees,
                                  downDegrees: t.downDegrees,
                                }
                              }),
                              (le.prototype.getUndistortedFieldOfViewLeftEye = function () {
                                var e = this.getUndistortedParams_()
                                return {
                                  leftDegrees: te * Math.atan(e.outerDist),
                                  rightDegrees: te * Math.atan(e.innerDist),
                                  downDegrees: te * Math.atan(e.bottomDist),
                                  upDegrees: te * Math.atan(e.topDist),
                                }
                              }),
                              (le.prototype.getUndistortedViewportLeftEye = function () {
                                var e = this.getUndistortedParams_(),
                                  t = this.viewer,
                                  n = this.device,
                                  r = t.screenLensDistance,
                                  i = n.widthMeters / r,
                                  o = n.heightMeters / r,
                                  a = n.width / i,
                                  s = n.height / o,
                                  l = Math.round((e.eyePosX - e.outerDist) * a),
                                  c = Math.round((e.eyePosY - e.bottomDist) * s)
                                return {
                                  x: l,
                                  y: c,
                                  width: Math.round((e.eyePosX + e.innerDist) * a) - l,
                                  height: Math.round((e.eyePosY + e.topDist) * s) - c,
                                }
                              }),
                              (le.prototype.getUndistortedParams_ = function () {
                                var e = this.viewer,
                                  t = this.device,
                                  n = this.distortion,
                                  r = e.screenLensDistance,
                                  i = e.interLensDistance / 2 / r,
                                  o = t.widthMeters / r,
                                  a = t.heightMeters / r,
                                  s = o / 2 - i,
                                  l = (e.baselineLensDistance - t.bevelMeters) / r,
                                  c = e.fov,
                                  u = n.distortInverse(Math.tan(ee * c)),
                                  h = Math.min(s, u),
                                  d = Math.min(i, u),
                                  p = Math.min(l, u)
                                return {
                                  outerDist: h,
                                  innerDist: d,
                                  topDist: Math.min(a - l, u),
                                  bottomDist: p,
                                  eyePosX: s,
                                  eyePosY: l,
                                }
                              }),
                              (le.Viewers = se)
                            var ue = {
                              format: 1,
                              last_updated: '2019-11-09T17:36:14Z',
                              devices: [
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'asus/*/Nexus 7/*' }, { ua: 'Nexus 7' }],
                                  dpi: [320.8, 323],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'asus/*/ASUS_X00PD/*' }, { ua: 'ASUS_X00PD' }],
                                  dpi: 245,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'asus/*/ASUS_X008D/*' }, { ua: 'ASUS_X008D' }],
                                  dpi: 282,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'asus/*/ASUS_Z00AD/*' }, { ua: 'ASUS_Z00AD' }],
                                  dpi: [403, 404.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel 2 XL/*' }, { ua: 'Pixel 2 XL' }],
                                  dpi: 537.9,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel 3 XL/*' }, { ua: 'Pixel 3 XL' }],
                                  dpi: [558.5, 553.8],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel XL/*' }, { ua: 'Pixel XL' }],
                                  dpi: [537.9, 533],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel 3/*' }, { ua: 'Pixel 3' }],
                                  dpi: 442.4,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel 2/*' }, { ua: 'Pixel 2' }],
                                  dpi: 441,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Google/*/Pixel/*' }, { ua: 'Pixel' }],
                                  dpi: [432.6, 436.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'HTC/*/HTC6435LVW/*' }, { ua: 'HTC6435LVW' }],
                                  dpi: [449.7, 443.3],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'HTC/*/HTC One XL/*' }, { ua: 'HTC One XL' }],
                                  dpi: [315.3, 314.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'htc/*/Nexus 9/*' }, { ua: 'Nexus 9' }],
                                  dpi: 289,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'HTC/*/HTC One M9/*' }, { ua: 'HTC One M9' }],
                                  dpi: [442.5, 443.3],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'HTC/*/HTC One_M8/*' }, { ua: 'HTC One_M8' }],
                                  dpi: [449.7, 447.4],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'HTC/*/HTC One/*' }, { ua: 'HTC One' }],
                                  dpi: 472.8,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Huawei/*/Nexus 6P/*' }, { ua: 'Nexus 6P' }],
                                  dpi: [515.1, 518],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Huawei/*/BLN-L24/*' }, { ua: 'HONORBLN-L24' }],
                                  dpi: 480,
                                  bw: 4,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Huawei/*/BKL-L09/*' }, { ua: 'BKL-L09' }],
                                  dpi: 403,
                                  bw: 3.47,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'LENOVO/*/Lenovo PB2-690Y/*' },
                                    { ua: 'Lenovo PB2-690Y' },
                                  ],
                                  dpi: [457.2, 454.713],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/Nexus 5X/*' }, { ua: 'Nexus 5X' }],
                                  dpi: [422, 419.9],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LGMS345/*' }, { ua: 'LGMS345' }],
                                  dpi: [221.7, 219.1],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LG-D800/*' }, { ua: 'LG-D800' }],
                                  dpi: [422, 424.1],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LG-D850/*' }, { ua: 'LG-D850' }],
                                  dpi: [537.9, 541.9],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/VS985 4G/*' }, { ua: 'VS985 4G' }],
                                  dpi: [537.9, 535.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/Nexus 5/*' }, { ua: 'Nexus 5 B' }],
                                  dpi: [442.4, 444.8],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/Nexus 4/*' }, { ua: 'Nexus 4' }],
                                  dpi: [319.8, 318.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LG-P769/*' }, { ua: 'LG-P769' }],
                                  dpi: [240.6, 247.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LGMS323/*' }, { ua: 'LGMS323' }],
                                  dpi: [206.6, 204.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'LGE/*/LGLS996/*' }, { ua: 'LGLS996' }],
                                  dpi: [403.4, 401.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Micromax/*/4560MMX/*' }, { ua: '4560MMX' }],
                                  dpi: [240, 219.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Micromax/*/A250/*' }, { ua: 'Micromax A250' }],
                                  dpi: [480, 446.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'Micromax/*/Micromax AQ4501/*' },
                                    { ua: 'Micromax AQ4501' },
                                  ],
                                  dpi: 240,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/G5/*' }, { ua: 'Moto G (5) Plus' }],
                                  dpi: [403.4, 403],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'motorola/*/DROID RAZR/*' },
                                    { ua: 'DROID RAZR' },
                                  ],
                                  dpi: [368.1, 256.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT830C/*' }, { ua: 'XT830C' }],
                                  dpi: [254, 255.9],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1021/*' }, { ua: 'XT1021' }],
                                  dpi: [254, 256.7],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1023/*' }, { ua: 'XT1023' }],
                                  dpi: [254, 256.7],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1028/*' }, { ua: 'XT1028' }],
                                  dpi: [326.6, 327.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1034/*' }, { ua: 'XT1034' }],
                                  dpi: [326.6, 328.4],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1053/*' }, { ua: 'XT1053' }],
                                  dpi: [315.3, 316.1],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1562/*' }, { ua: 'XT1562' }],
                                  dpi: [403.4, 402.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/Nexus 6/*' }, { ua: 'Nexus 6 B' }],
                                  dpi: [494.3, 489.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1063/*' }, { ua: 'XT1063' }],
                                  dpi: [295, 296.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1064/*' }, { ua: 'XT1064' }],
                                  dpi: [295, 295.6],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1092/*' }, { ua: 'XT1092' }],
                                  dpi: [422, 424.1],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/XT1095/*' }, { ua: 'XT1095' }],
                                  dpi: [422, 423.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'motorola/*/G4/*' }, { ua: 'Moto G (4)' }],
                                  dpi: 401,
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/A0001/*' }, { ua: 'A0001' }],
                                  dpi: [403.4, 401],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE E1001/*' }, { ua: 'ONE E1001' }],
                                  dpi: [442.4, 441.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE E1003/*' }, { ua: 'ONE E1003' }],
                                  dpi: [442.4, 441.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE E1005/*' }, { ua: 'ONE E1005' }],
                                  dpi: [442.4, 441.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE A2001/*' }, { ua: 'ONE A2001' }],
                                  dpi: [391.9, 405.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE A2003/*' }, { ua: 'ONE A2003' }],
                                  dpi: [391.9, 405.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OnePlus/*/ONE A2005/*' }, { ua: 'ONE A2005' }],
                                  dpi: [391.9, 405.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A3000/*' },
                                    { ua: 'ONEPLUS A3000' },
                                  ],
                                  dpi: 401,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A3003/*' },
                                    { ua: 'ONEPLUS A3003' },
                                  ],
                                  dpi: 401,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A3010/*' },
                                    { ua: 'ONEPLUS A3010' },
                                  ],
                                  dpi: 401,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A5000/*' },
                                    { ua: 'ONEPLUS A5000 ' },
                                  ],
                                  dpi: [403.411, 399.737],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONE A5010/*' },
                                    { ua: 'ONEPLUS A5010' },
                                  ],
                                  dpi: [403, 400],
                                  bw: 2,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A6000/*' },
                                    { ua: 'ONEPLUS A6000' },
                                  ],
                                  dpi: 401,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A6003/*' },
                                    { ua: 'ONEPLUS A6003' },
                                  ],
                                  dpi: 401,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A6010/*' },
                                    { ua: 'ONEPLUS A6010' },
                                  ],
                                  dpi: 401,
                                  bw: 2,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'OnePlus/*/ONEPLUS A6013/*' },
                                    { ua: 'ONEPLUS A6013' },
                                  ],
                                  dpi: 401,
                                  bw: 2,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'OPPO/*/X909/*' }, { ua: 'X909' }],
                                  dpi: [442.4, 444.1],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9082/*' }, { ua: 'GT-I9082' }],
                                  dpi: [184.7, 185.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G360P/*' }, { ua: 'SM-G360P' }],
                                  dpi: [196.7, 205.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/Nexus S/*' }, { ua: 'Nexus S' }],
                                  dpi: [234.5, 229.8],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9300/*' }, { ua: 'GT-I9300' }],
                                  dpi: [304.8, 303.9],
                                  bw: 5,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-T230NU/*' }, { ua: 'SM-T230NU' }],
                                  dpi: 216,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SGH-T399/*' }, { ua: 'SGH-T399' }],
                                  dpi: [217.7, 231.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SGH-M919/*' }, { ua: 'SGH-M919' }],
                                  dpi: [440.8, 437.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N9005/*' }, { ua: 'SM-N9005' }],
                                  dpi: [386.4, 387],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'samsung/*/SAMSUNG-SM-N900A/*' },
                                    { ua: 'SAMSUNG-SM-N900A' },
                                  ],
                                  dpi: [386.4, 387.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9500/*' }, { ua: 'GT-I9500' }],
                                  dpi: [442.5, 443.3],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9505/*' }, { ua: 'GT-I9505' }],
                                  dpi: 439.4,
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G900F/*' }, { ua: 'SM-G900F' }],
                                  dpi: [415.6, 431.6],
                                  bw: 5,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G900M/*' }, { ua: 'SM-G900M' }],
                                  dpi: [415.6, 431.6],
                                  bw: 5,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G800F/*' }, { ua: 'SM-G800F' }],
                                  dpi: 326.8,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G906S/*' }, { ua: 'SM-G906S' }],
                                  dpi: [562.7, 572.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9300/*' }, { ua: 'GT-I9300' }],
                                  dpi: [306.7, 304.8],
                                  bw: 5,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-T535/*' }, { ua: 'SM-T535' }],
                                  dpi: [142.6, 136.4],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N920C/*' }, { ua: 'SM-N920C' }],
                                  dpi: [515.1, 518.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N920P/*' }, { ua: 'SM-N920P' }],
                                  dpi: [386.3655, 390.144],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N920W8/*' }, { ua: 'SM-N920W8' }],
                                  dpi: [515.1, 518.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9300I/*' }, { ua: 'GT-I9300I' }],
                                  dpi: [304.8, 305.8],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-I9195/*' }, { ua: 'GT-I9195' }],
                                  dpi: [249.4, 256.7],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SPH-L520/*' }, { ua: 'SPH-L520' }],
                                  dpi: [249.4, 255.9],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'samsung/*/SAMSUNG-SGH-I717/*' },
                                    { ua: 'SAMSUNG-SGH-I717' },
                                  ],
                                  dpi: 285.8,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SPH-D710/*' }, { ua: 'SPH-D710' }],
                                  dpi: [217.7, 204.2],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/GT-N7100/*' }, { ua: 'GT-N7100' }],
                                  dpi: 265.1,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SCH-I605/*' }, { ua: 'SCH-I605' }],
                                  dpi: 265.1,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'samsung/*/Galaxy Nexus/*' },
                                    { ua: 'Galaxy Nexus' },
                                  ],
                                  dpi: [315.3, 314.2],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N910H/*' }, { ua: 'SM-N910H' }],
                                  dpi: [515.1, 518],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-N910C/*' }, { ua: 'SM-N910C' }],
                                  dpi: [515.2, 520.2],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G130M/*' }, { ua: 'SM-G130M' }],
                                  dpi: [165.9, 164.8],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G928I/*' }, { ua: 'SM-G928I' }],
                                  dpi: [515.1, 518.4],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G920F/*' }, { ua: 'SM-G920F' }],
                                  dpi: 580.6,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G920P/*' }, { ua: 'SM-G920P' }],
                                  dpi: [522.5, 577],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G925F/*' }, { ua: 'SM-G925F' }],
                                  dpi: 580.6,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G925V/*' }, { ua: 'SM-G925V' }],
                                  dpi: [522.5, 576.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G930F/*' }, { ua: 'SM-G930F' }],
                                  dpi: 576.6,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G935F/*' }, { ua: 'SM-G935F' }],
                                  dpi: 533,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G950F/*' }, { ua: 'SM-G950F' }],
                                  dpi: [562.707, 565.293],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G955U/*' }, { ua: 'SM-G955U' }],
                                  dpi: [522.514, 525.762],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G955F/*' }, { ua: 'SM-G955F' }],
                                  dpi: [522.514, 525.762],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960F/*' }, { ua: 'SM-G960F' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G9600/*' }, { ua: 'SM-G9600' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960T/*' }, { ua: 'SM-G960T' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960N/*' }, { ua: 'SM-G960N' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960U/*' }, { ua: 'SM-G960U' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G9608/*' }, { ua: 'SM-G9608' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960FD/*' }, { ua: 'SM-G960FD' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G960W/*' }, { ua: 'SM-G960W' }],
                                  dpi: [569.575, 571.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G965F/*' }, { ua: 'SM-G965F' }],
                                  dpi: 529,
                                  bw: 2,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Sony/*/C6903/*' }, { ua: 'C6903' }],
                                  dpi: [442.5, 443.3],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Sony/*/D6653/*' }, { ua: 'D6653' }],
                                  dpi: [428.6, 427.6],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Sony/*/E6653/*' }, { ua: 'E6653' }],
                                  dpi: [428.6, 425.7],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Sony/*/E6853/*' }, { ua: 'E6853' }],
                                  dpi: [403.4, 401.9],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Sony/*/SGP321/*' }, { ua: 'SGP321' }],
                                  dpi: [224.7, 224.1],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [
                                    { mdmh: 'TCT/*/ALCATEL ONE TOUCH Fierce/*' },
                                    { ua: 'ALCATEL ONE TOUCH Fierce' },
                                  ],
                                  dpi: [240, 247.5],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'THL/*/thl 5000/*' }, { ua: 'thl 5000' }],
                                  dpi: [480, 443.3],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Fly/*/IQ4412/*' }, { ua: 'IQ4412' }],
                                  dpi: 307.9,
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'ZTE/*/ZTE Blade L2/*' }, { ua: 'ZTE Blade L2' }],
                                  dpi: 240,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'BENEVE/*/VR518/*' }, { ua: 'VR518' }],
                                  dpi: 480,
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [640, 960] }],
                                  dpi: [325.1, 328.4],
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [640, 1136] }],
                                  dpi: [317.1, 320.2],
                                  bw: 3,
                                  ac: 1e3,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [750, 1334] }],
                                  dpi: 326.4,
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [1242, 2208] }],
                                  dpi: [453.6, 458.4],
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [1125, 2001] }],
                                  dpi: [410.9, 415.4],
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [1125, 2436] }],
                                  dpi: 458,
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Huawei/*/EML-L29/*' }, { ua: 'EML-L29' }],
                                  dpi: 428,
                                  bw: 3.45,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'Nokia/*/Nokia 7.1/*' }, { ua: 'Nokia 7.1' }],
                                  dpi: [432, 431.9],
                                  bw: 3,
                                  ac: 500,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [1242, 2688] }],
                                  dpi: 458,
                                  bw: 4,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G570M/*' }, { ua: 'SM-G570M' }],
                                  dpi: 320,
                                  bw: 3.684,
                                  ac: 1e3,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G970F/*' }, { ua: 'SM-G970F' }],
                                  dpi: 438,
                                  bw: 2.281,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G973F/*' }, { ua: 'SM-G973F' }],
                                  dpi: 550,
                                  bw: 2.002,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G975F/*' }, { ua: 'SM-G975F' }],
                                  dpi: 522,
                                  bw: 2.054,
                                  ac: 500,
                                },
                                {
                                  type: 'android',
                                  rules: [{ mdmh: 'samsung/*/SM-G977F/*' }, { ua: 'SM-G977F' }],
                                  dpi: 505,
                                  bw: 2.334,
                                  ac: 500,
                                },
                                {
                                  type: 'ios',
                                  rules: [{ res: [828, 1792] }],
                                  dpi: 326,
                                  bw: 5,
                                  ac: 500,
                                },
                              ],
                            }
                            function he(e, t) {
                              if (((this.dpdb = ue), this.recalculateDeviceParams_(), e)) {
                                this.onDeviceParamsUpdated = t
                                var n = new XMLHttpRequest(),
                                  r = this
                                n.open('GET', e, !0),
                                  n.addEventListener('load', function () {
                                    ;(r.loading = !1),
                                      n.status >= 200 && n.status <= 299
                                        ? ((r.dpdb = JSON.parse(n.response)),
                                          r.recalculateDeviceParams_())
                                        : console.error('Error loading online DPDB!')
                                  }),
                                  n.send()
                              }
                            }
                            function de(e) {
                              ;(this.xdpi = e.xdpi),
                                (this.ydpi = e.ydpi),
                                (this.bevelMm = e.bevelMm)
                            }
                            function pe(e, t) {
                              this.set(e, t)
                            }
                            function fe(e, t) {
                              ;(this.kFilter = e),
                                (this.isDebug = t),
                                (this.currentAccelMeasurement = new pe()),
                                (this.currentGyroMeasurement = new pe()),
                                (this.previousGyroMeasurement = new pe()),
                                l()
                                  ? (this.filterQ = new re(-1, 0, 0, 1))
                                  : (this.filterQ = new re(1, 0, 0, 1)),
                                (this.previousFilterQ = new re()),
                                this.previousFilterQ.copy(this.filterQ),
                                (this.accelQ = new re()),
                                (this.isOrientationInitialized = !1),
                                (this.estimatedGravity = new ne()),
                                (this.measuredGravity = new ne()),
                                (this.gyroIntegralQ = new re())
                            }
                            function me(e, t) {
                              ;(this.predictionTimeS = e),
                                (this.isDebug = t),
                                (this.previousQ = new re()),
                                (this.previousTimestampS = null),
                                (this.deltaQ = new re()),
                                (this.outQ = new re())
                            }
                            function ve(e, t, n, r) {
                              ;(this.yawOnly = n),
                                (this.accelerometer = new ne()),
                                (this.gyroscope = new ne()),
                                (this.filter = new fe(e, r)),
                                (this.posePredictor = new me(t, r)),
                                (this.isFirefoxAndroid = h()),
                                (this.isIOS = l())
                              var i = d()
                              ;(this.isDeviceMotionInRadians = !this.isIOS && i && i < 66),
                                (this.isWithoutDeviceMotion = f() || p()),
                                (this.filterToWorldQ = new re()),
                                l()
                                  ? this.filterToWorldQ.setFromAxisAngle(
                                      new ne(1, 0, 0),
                                      Math.PI / 2,
                                    )
                                  : this.filterToWorldQ.setFromAxisAngle(
                                      new ne(1, 0, 0),
                                      -Math.PI / 2,
                                    ),
                                (this.inverseWorldToScreenQ = new re()),
                                (this.worldToScreenQ = new re()),
                                (this.originalPoseAdjustQ = new re()),
                                this.originalPoseAdjustQ.setFromAxisAngle(
                                  new ne(0, 0, 1),
                                  (-window.orientation * Math.PI) / 180,
                                ),
                                this.setScreenTransform_(),
                                v() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),
                                (this.resetQ = new re()),
                                (this.orientationOut_ = new Float32Array(4)),
                                this.start()
                            }
                            ;(he.prototype.getDeviceParams = function () {
                              return this.deviceParams
                            }),
                              (he.prototype.recalculateDeviceParams_ = function () {
                                var e = this.calcDeviceParams_()
                                e
                                  ? ((this.deviceParams = e),
                                    this.onDeviceParamsUpdated &&
                                      this.onDeviceParamsUpdated(this.deviceParams))
                                  : console.error('Failed to recalculate device parameters.')
                              }),
                              (he.prototype.calcDeviceParams_ = function () {
                                var e = this.dpdb
                                if (!e) return console.error('DPDB not available.'), null
                                if (1 != e.format)
                                  return console.error('DPDB has unexpected format version.'), null
                                if (!e.devices || !e.devices.length)
                                  return (
                                    console.error('DPDB does not have a devices section.'), null
                                  )
                                var t = navigator.userAgent || navigator.vendor || window.opera,
                                  n = y(),
                                  r = b()
                                if (!e.devices)
                                  return console.error('DPDB has no devices section.'), null
                                for (var i = 0; i < e.devices.length; i++) {
                                  var o = e.devices[i]
                                  if (o.rules)
                                    if ('ios' == o.type || 'android' == o.type) {
                                      if (l() == ('ios' == o.type)) {
                                        for (var a = !1, s = 0; s < o.rules.length; s++) {
                                          var c = o.rules[s]
                                          if (this.ruleMatches_(c, t, n, r)) {
                                            a = !0
                                            break
                                          }
                                        }
                                        if (a)
                                          return new de({
                                            xdpi: o.dpi[0] || o.dpi,
                                            ydpi: o.dpi[1] || o.dpi,
                                            bevelMm: o.bw,
                                          })
                                      }
                                    } else console.warn('Device[' + i + '] has invalid type.')
                                  else console.warn('Device[' + i + '] has no rules section.')
                                }
                                return console.warn('No DPDB device match.'), null
                              }),
                              (he.prototype.ruleMatches_ = function (e, t, n, r) {
                                if (!e.ua && !e.res) return !1
                                if (
                                  (e.ua &&
                                    'SM' === e.ua.substring(0, 2) &&
                                    (e.ua = e.ua.substring(0, 7)),
                                  e.ua && t.indexOf(e.ua) < 0)
                                )
                                  return !1
                                if (e.res) {
                                  if (!e.res[0] || !e.res[1]) return !1
                                  var i = e.res[0],
                                    o = e.res[1]
                                  if (
                                    Math.min(n, r) != Math.min(i, o) ||
                                    Math.max(n, r) != Math.max(i, o)
                                  )
                                    return !1
                                }
                                return !0
                              }),
                              (pe.prototype.set = function (e, t) {
                                ;(this.sample = e), (this.timestampS = t)
                              }),
                              (pe.prototype.copy = function (e) {
                                this.set(e.sample, e.timestampS)
                              }),
                              (fe.prototype.addAccelMeasurement = function (e, t) {
                                this.currentAccelMeasurement.set(e, t)
                              }),
                              (fe.prototype.addGyroMeasurement = function (e, t) {
                                this.currentGyroMeasurement.set(e, t)
                                var n = t - this.previousGyroMeasurement.timestampS
                                g(n) && this.run_(),
                                  this.previousGyroMeasurement.copy(this.currentGyroMeasurement)
                              }),
                              (fe.prototype.run_ = function () {
                                if (!this.isOrientationInitialized)
                                  return (
                                    (this.accelQ = this.accelToQuaternion_(
                                      this.currentAccelMeasurement.sample,
                                    )),
                                    this.previousFilterQ.copy(this.accelQ),
                                    void (this.isOrientationInitialized = !0)
                                  )
                                var e =
                                    this.currentGyroMeasurement.timestampS -
                                    this.previousGyroMeasurement.timestampS,
                                  t = this.gyroToQuaternionDelta_(
                                    this.currentGyroMeasurement.sample,
                                    e,
                                  )
                                this.gyroIntegralQ.multiply(t),
                                  this.filterQ.copy(this.previousFilterQ),
                                  this.filterQ.multiply(t)
                                var n = new re()
                                n.copy(this.filterQ),
                                  n.inverse(),
                                  this.estimatedGravity.set(0, 0, -1),
                                  this.estimatedGravity.applyQuaternion(n),
                                  this.estimatedGravity.normalize(),
                                  this.measuredGravity.copy(this.currentAccelMeasurement.sample),
                                  this.measuredGravity.normalize()
                                var r = new re()
                                r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity),
                                  r.inverse(),
                                  this.isDebug &&
                                    console.log(
                                      'Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)',
                                      te * D(r),
                                      this.estimatedGravity.x.toFixed(1),
                                      this.estimatedGravity.y.toFixed(1),
                                      this.estimatedGravity.z.toFixed(1),
                                      this.measuredGravity.x.toFixed(1),
                                      this.measuredGravity.y.toFixed(1),
                                      this.measuredGravity.z.toFixed(1),
                                    )
                                var i = new re()
                                i.copy(this.filterQ),
                                  i.multiply(r),
                                  this.filterQ.slerp(i, 1 - this.kFilter),
                                  this.previousFilterQ.copy(this.filterQ)
                              }),
                              (fe.prototype.getOrientation = function () {
                                return this.filterQ
                              }),
                              (fe.prototype.accelToQuaternion_ = function (e) {
                                var t = new ne()
                                t.copy(e), t.normalize()
                                var n = new re()
                                return n.setFromUnitVectors(new ne(0, 0, -1), t), n.inverse(), n
                              }),
                              (fe.prototype.gyroToQuaternionDelta_ = function (e, t) {
                                var n = new re(),
                                  r = new ne()
                                return (
                                  r.copy(e), r.normalize(), n.setFromAxisAngle(r, e.length() * t), n
                                )
                              }),
                              (me.prototype.getPrediction = function (e, t, n) {
                                if (!this.previousTimestampS)
                                  return this.previousQ.copy(e), (this.previousTimestampS = n), e
                                var r = new ne()
                                r.copy(t), r.normalize()
                                var i = t.length()
                                if (i < 20 * ee)
                                  return (
                                    this.isDebug &&
                                      console.log(
                                        'Moving slowly, at %s deg/s: no prediction',
                                        (te * i).toFixed(1),
                                      ),
                                    this.outQ.copy(e),
                                    this.previousQ.copy(e),
                                    this.outQ
                                  )
                                var o = i * this.predictionTimeS
                                return (
                                  this.deltaQ.setFromAxisAngle(r, o),
                                  this.outQ.copy(this.previousQ),
                                  this.outQ.multiply(this.deltaQ),
                                  this.previousQ.copy(e),
                                  (this.previousTimestampS = n),
                                  this.outQ
                                )
                              }),
                              (ve.prototype.getPosition = function () {
                                return null
                              }),
                              (ve.prototype.getOrientation = function () {
                                var e = void 0
                                if (this.isWithoutDeviceMotion && this._deviceOrientationQ)
                                  return (
                                    (this.deviceOrientationFixQ =
                                      this.deviceOrientationFixQ ||
                                      (function () {
                                        var e = new re().setFromAxisAngle(new ne(0, 0, -1), 0),
                                          t = new re()
                                        return (
                                          -90 === window.orientation
                                            ? t.setFromAxisAngle(new ne(0, 1, 0), Math.PI / -2)
                                            : t.setFromAxisAngle(new ne(0, 1, 0), Math.PI / 2),
                                          e.multiply(t)
                                        )
                                      })()),
                                    (this.deviceOrientationFilterToWorldQ =
                                      this.deviceOrientationFilterToWorldQ ||
                                      (function () {
                                        var e = new re()
                                        return e.setFromAxisAngle(new ne(1, 0, 0), -Math.PI / 2), e
                                      })()),
                                    (e = this._deviceOrientationQ),
                                    (t = new re()).copy(e),
                                    t.multiply(this.deviceOrientationFilterToWorldQ),
                                    t.multiply(this.resetQ),
                                    t.multiply(this.worldToScreenQ),
                                    t.multiplyQuaternions(this.deviceOrientationFixQ, t),
                                    this.yawOnly && ((t.x = 0), (t.z = 0), t.normalize()),
                                    (this.orientationOut_[0] = t.x),
                                    (this.orientationOut_[1] = t.y),
                                    (this.orientationOut_[2] = t.z),
                                    (this.orientationOut_[3] = t.w),
                                    this.orientationOut_
                                  )
                                var t,
                                  n = this.filter.getOrientation()
                                return (
                                  (e = this.posePredictor.getPrediction(
                                    n,
                                    this.gyroscope,
                                    this.previousTimestampS,
                                  )),
                                  (t = new re()).copy(this.filterToWorldQ),
                                  t.multiply(this.resetQ),
                                  t.multiply(e),
                                  t.multiply(this.worldToScreenQ),
                                  this.yawOnly && ((t.x = 0), (t.z = 0), t.normalize()),
                                  (this.orientationOut_[0] = t.x),
                                  (this.orientationOut_[1] = t.y),
                                  (this.orientationOut_[2] = t.z),
                                  (this.orientationOut_[3] = t.w),
                                  this.orientationOut_
                                )
                              }),
                              (ve.prototype.resetPose = function () {
                                this.resetQ.copy(this.filter.getOrientation()),
                                  (this.resetQ.x = 0),
                                  (this.resetQ.y = 0),
                                  (this.resetQ.z *= -1),
                                  this.resetQ.normalize(),
                                  v() && this.resetQ.multiply(this.inverseWorldToScreenQ),
                                  this.resetQ.multiply(this.originalPoseAdjustQ)
                              }),
                              (ve.prototype.onDeviceOrientation_ = function (e) {
                                this._deviceOrientationQ = this._deviceOrientationQ || new re()
                                var t = e.alpha,
                                  n = e.beta,
                                  r = e.gamma
                                ;(t = ((t || 0) * Math.PI) / 180),
                                  (n = ((n || 0) * Math.PI) / 180),
                                  (r = ((r || 0) * Math.PI) / 180),
                                  this._deviceOrientationQ.setFromEulerYXZ(n, t, -r)
                              }),
                              (ve.prototype.onDeviceMotion_ = function (e) {
                                this.updateDeviceMotion_(e)
                              }),
                              (ve.prototype.updateDeviceMotion_ = function (e) {
                                var t = e.accelerationIncludingGravity,
                                  n = e.rotationRate,
                                  r = e.timeStamp / 1e3,
                                  a = r - this.previousTimestampS
                                return a < 0
                                  ? (O(
                                      'fusion-pose-sensor:invalid:non-monotonic',
                                      'Invalid timestamps detected: non-monotonic timestamp from devicemotion',
                                    ),
                                    void (this.previousTimestampS = r))
                                  : a <= i || a > o
                                  ? (O(
                                      'fusion-pose-sensor:invalid:outside-threshold',
                                      'Invalid timestamps detected: Timestamp from devicemotion outside expected range.',
                                    ),
                                    void (this.previousTimestampS = r))
                                  : (this.accelerometer.set(-t.x, -t.y, -t.z),
                                    n &&
                                      (m()
                                        ? this.gyroscope.set(-n.beta, n.alpha, n.gamma)
                                        : this.gyroscope.set(n.alpha, n.beta, n.gamma),
                                      this.isDeviceMotionInRadians ||
                                        this.gyroscope.multiplyScalar(Math.PI / 180),
                                      this.filter.addGyroMeasurement(this.gyroscope, r)),
                                    this.filter.addAccelMeasurement(this.accelerometer, r),
                                    void (this.previousTimestampS = r))
                              }),
                              (ve.prototype.onOrientationChange_ = function (e) {
                                this.setScreenTransform_()
                              }),
                              (ve.prototype.onMessage_ = function (e) {
                                var t = e.data
                                t &&
                                  t.type &&
                                  'devicemotion' === t.type.toLowerCase() &&
                                  this.updateDeviceMotion_(t.deviceMotionEvent)
                              }),
                              (ve.prototype.setScreenTransform_ = function () {
                                switch ((this.worldToScreenQ.set(0, 0, 0, 1), window.orientation)) {
                                  case 0:
                                    break
                                  case 90:
                                    this.worldToScreenQ.setFromAxisAngle(
                                      new ne(0, 0, 1),
                                      -Math.PI / 2,
                                    )
                                    break
                                  case -90:
                                    this.worldToScreenQ.setFromAxisAngle(
                                      new ne(0, 0, 1),
                                      Math.PI / 2,
                                    )
                                }
                                this.inverseWorldToScreenQ.copy(this.worldToScreenQ),
                                  this.inverseWorldToScreenQ.inverse()
                              }),
                              (ve.prototype.start = function () {
                                ;(this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this)),
                                  (this.onOrientationChangeCallback_ =
                                    this.onOrientationChange_.bind(this)),
                                  (this.onMessageCallback_ = this.onMessage_.bind(this)),
                                  (this.onDeviceOrientationCallback_ =
                                    this.onDeviceOrientation_.bind(this)),
                                  l() &&
                                    R() &&
                                    window.addEventListener('message', this.onMessageCallback_),
                                  window.addEventListener(
                                    'orientationchange',
                                    this.onOrientationChangeCallback_,
                                  ),
                                  this.isWithoutDeviceMotion
                                    ? window.addEventListener(
                                        'deviceorientation',
                                        this.onDeviceOrientationCallback_,
                                      )
                                    : window.addEventListener(
                                        'devicemotion',
                                        this.onDeviceMotionCallback_,
                                      )
                              }),
                              (ve.prototype.stop = function () {
                                window.removeEventListener(
                                  'devicemotion',
                                  this.onDeviceMotionCallback_,
                                ),
                                  window.removeEventListener(
                                    'deviceorientation',
                                    this.onDeviceOrientationCallback_,
                                  ),
                                  window.removeEventListener(
                                    'orientationchange',
                                    this.onOrientationChangeCallback_,
                                  ),
                                  window.removeEventListener('message', this.onMessageCallback_)
                              })
                            var ge = 60,
                              ye = new ne(1, 0, 0),
                              be = new ne(0, 0, 1),
                              Ae = new re()
                            Ae.setFromAxisAngle(ye, -Math.PI / 2),
                              Ae.multiply(new re().setFromAxisAngle(be, Math.PI / 2))
                            var we = (function () {
                                function t(n) {
                                  e(this, t),
                                    (this.config = n),
                                    (this.sensor = null),
                                    (this.fusionSensor = null),
                                    (this._out = new Float32Array(4)),
                                    (this.api = null),
                                    (this.errors = []),
                                    (this._sensorQ = new re()),
                                    (this._outQ = new re()),
                                    (this._onSensorRead = this._onSensorRead.bind(this)),
                                    (this._onSensorError = this._onSensorError.bind(this)),
                                    this.init()
                                }
                                return (
                                  n(t, [
                                    {
                                      key: 'init',
                                      value: function () {
                                        var e = null
                                        try {
                                          ;(e = new RelativeOrientationSensor({
                                            frequency: ge,
                                            referenceFrame: 'screen',
                                          })).addEventListener('error', this._onSensorError)
                                        } catch (t) {
                                          this.errors.push(t),
                                            'SecurityError' === t.name
                                              ? (console.error(
                                                  'Cannot construct sensors due to the Feature Policy',
                                                ),
                                                console.warn(
                                                  'Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.',
                                                ),
                                                this.useDeviceMotion())
                                              : 'ReferenceError' === t.name
                                              ? this.useDeviceMotion()
                                              : console.error(t)
                                        }
                                        e &&
                                          ((this.api = 'sensor'),
                                          (this.sensor = e),
                                          this.sensor.addEventListener(
                                            'reading',
                                            this._onSensorRead,
                                          ),
                                          this.sensor.start())
                                      },
                                    },
                                    {
                                      key: 'useDeviceMotion',
                                      value: function () {
                                        ;(this.api = 'devicemotion'),
                                          (this.fusionSensor = new ve(
                                            this.config.K_FILTER,
                                            this.config.PREDICTION_TIME_S,
                                            this.config.YAW_ONLY,
                                            this.config.DEBUG,
                                          )),
                                          this.sensor &&
                                            (this.sensor.removeEventListener(
                                              'reading',
                                              this._onSensorRead,
                                            ),
                                            this.sensor.removeEventListener(
                                              'error',
                                              this._onSensorError,
                                            ),
                                            (this.sensor = null))
                                      },
                                    },
                                    {
                                      key: 'getOrientation',
                                      value: function () {
                                        if (this.fusionSensor)
                                          return this.fusionSensor.getOrientation()
                                        if (!this.sensor || !this.sensor.quaternion)
                                          return (
                                            (this._out[0] = this._out[1] = this._out[2] = 0),
                                            (this._out[3] = 1),
                                            this._out
                                          )
                                        var e = this.sensor.quaternion
                                        this._sensorQ.set(e[0], e[1], e[2], e[3])
                                        var t = this._outQ
                                        return (
                                          t.copy(Ae),
                                          t.multiply(this._sensorQ),
                                          this.config.YAW_ONLY && ((t.x = t.z = 0), t.normalize()),
                                          (this._out[0] = t.x),
                                          (this._out[1] = t.y),
                                          (this._out[2] = t.z),
                                          (this._out[3] = t.w),
                                          this._out
                                        )
                                      },
                                    },
                                    {
                                      key: '_onSensorError',
                                      value: function (e) {
                                        this.errors.push(e.error),
                                          'NotAllowedError' === e.error.name
                                            ? console.error(
                                                'Permission to access sensor was denied',
                                              )
                                            : 'NotReadableError' === e.error.name
                                            ? console.error('Sensor could not be read')
                                            : console.error(e.error),
                                          this.useDeviceMotion()
                                      },
                                    },
                                    { key: '_onSensorRead', value: function () {} },
                                  ]),
                                  t
                                )
                              })(),
                              xe =
                                "<svg width='198' height='240' viewBox='0 0 198 240' xmlns='http://www.w3.org/2000/svg'><g fill='none' fill-rule='evenodd'><path d='M149.625 109.527l6.737 3.891v.886c0 .177.013.36.038.549.01.081.02.162.027.242.14 1.415.974 2.998 2.105 3.999l5.72 5.062.081-.09s4.382-2.53 5.235-3.024l25.97 14.993v54.001c0 .771-.386 1.217-.948 1.217-.233 0-.495-.076-.772-.236l-23.967-13.838-.014.024-27.322 15.775-.85-1.323c-4.731-1.529-9.748-2.74-14.951-3.61a.27.27 0 0 0-.007.024l-5.067 16.961-7.891 4.556-.037-.063v27.59c0 .772-.386 1.217-.948 1.217-.232 0-.495-.076-.772-.236l-42.473-24.522c-.95-.549-1.72-1.877-1.72-2.967v-1.035l-.021.047a5.111 5.111 0 0 0-1.816-.399 5.682 5.682 0 0 0-.546.001 13.724 13.724 0 0 1-1.918-.041c-1.655-.153-3.2-.6-4.404-1.296l-46.576-26.89.005.012-10.278-18.75c-1.001-1.827-.241-4.216 1.698-5.336l56.011-32.345a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.659 3.227 1.853l.005-.003.227.413-.006.004a9.63 9.63 0 0 0 1.477 2.018l.277.27c1.914 1.85 4.468 2.801 7.113 2.801 1.949 0 3.948-.517 5.775-1.572.013 0 7.319-4.219 7.319-4.219a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.658 3.226 1.853l3.25 5.928.022-.018 6.785 3.917-.105-.182 46.881-26.965m0-1.635c-.282 0-.563.073-.815.218l-46.169 26.556-5.41-3.124-3.005-5.481c-.913-1.667-2.699-2.702-4.66-2.703-1.011 0-2.02.274-2.917.792a3825 3825 0 0 1-7.275 4.195l-.044.024a9.937 9.937 0 0 1-4.957 1.353c-2.292 0-4.414-.832-5.976-2.342l-.252-.245a7.992 7.992 0 0 1-1.139-1.534 1.379 1.379 0 0 0-.06-.122l-.227-.414a1.718 1.718 0 0 0-.095-.154c-.938-1.574-2.673-2.545-4.571-2.545-1.011 0-2.02.274-2.917.792L3.125 155.502c-2.699 1.559-3.738 4.94-2.314 7.538l10.278 18.75c.177.323.448.563.761.704l46.426 26.804c1.403.81 3.157 1.332 5.072 1.508a15.661 15.661 0 0 0 2.146.046 4.766 4.766 0 0 1 .396 0c.096.004.19.011.283.022.109 1.593 1.159 3.323 2.529 4.114l42.472 24.522c.524.302 1.058.455 1.59.455 1.497 0 2.583-1.2 2.583-2.852v-26.562l7.111-4.105a1.64 1.64 0 0 0 .749-.948l4.658-15.593c4.414.797 8.692 1.848 12.742 3.128l.533.829a1.634 1.634 0 0 0 2.193.531l26.532-15.317L193 192.433c.523.302 1.058.455 1.59.455 1.497 0 2.583-1.199 2.583-2.852v-54.001c0-.584-.312-1.124-.818-1.416l-25.97-14.993a1.633 1.633 0 0 0-1.636.001c-.606.351-2.993 1.73-4.325 2.498l-4.809-4.255c-.819-.725-1.461-1.933-1.561-2.936a7.776 7.776 0 0 0-.033-.294 2.487 2.487 0 0 1-.023-.336v-.886c0-.584-.312-1.123-.817-1.416l-6.739-3.891a1.633 1.633 0 0 0-.817-.219' fill='#455A64'/><path d='M96.027 132.636l46.576 26.891c1.204.695 1.979 1.587 2.242 2.541l-.01.007-81.374 46.982h-.001c-1.654-.152-3.199-.6-4.403-1.295l-46.576-26.891 83.546-48.235' fill='#FAFAFA'/><path d='M63.461 209.174c-.008 0-.015 0-.022-.002-1.693-.156-3.228-.609-4.441-1.309l-46.576-26.89a.118.118 0 0 1 0-.203l83.546-48.235a.117.117 0 0 1 .117 0l46.576 26.891c1.227.708 2.021 1.612 2.296 2.611a.116.116 0 0 1-.042.124l-.021.016-81.375 46.981a.11.11 0 0 1-.058.016zm-50.747-28.303l46.401 26.79c1.178.68 2.671 1.121 4.32 1.276l81.272-46.922c-.279-.907-1.025-1.73-2.163-2.387l-46.517-26.857-83.313 48.1z' fill='#607D8B'/><path d='M148.327 165.471a5.85 5.85 0 0 1-.546.001c-1.894-.083-3.302-1.038-3.145-2.132a2.693 2.693 0 0 0-.072-1.105l-81.103 46.822c.628.058 1.272.073 1.918.042.182-.009.364-.009.546-.001 1.894.083 3.302 1.038 3.145 2.132l79.257-45.759' fill='#FFF'/><path d='M69.07 211.347a.118.118 0 0 1-.115-.134c.045-.317-.057-.637-.297-.925-.505-.61-1.555-1.022-2.738-1.074a5.966 5.966 0 0 0-.535.001 14.03 14.03 0 0 1-1.935-.041.117.117 0 0 1-.103-.092.116.116 0 0 1 .055-.126l81.104-46.822a.117.117 0 0 1 .171.07c.104.381.129.768.074 1.153-.045.316.057.637.296.925.506.61 1.555 1.021 2.739 1.073.178.008.357.008.535-.001a.117.117 0 0 1 .064.218l-79.256 45.759a.114.114 0 0 1-.059.016zm-3.405-2.372c.089 0 .177.002.265.006 1.266.056 2.353.488 2.908 1.158.227.274.35.575.36.882l78.685-45.429c-.036 0-.072-.001-.107-.003-1.267-.056-2.354-.489-2.909-1.158-.282-.34-.402-.724-.347-1.107a2.604 2.604 0 0 0-.032-.91L63.846 208.97a13.91 13.91 0 0 0 1.528.012c.097-.005.194-.007.291-.007z' fill='#607D8B'/><path d='M2.208 162.134c-1.001-1.827-.241-4.217 1.698-5.337l56.011-32.344c1.939-1.12 4.324-.546 5.326 1.281l.232.41a9.344 9.344 0 0 0 1.47 2.021l.278.27c3.325 3.214 8.583 3.716 12.888 1.23l7.319-4.22c1.94-1.119 4.324-.546 5.325 1.282l3.25 5.928-83.519 48.229-10.278-18.75z' fill='#FAFAFA'/><path d='M12.486 181.001a.112.112 0 0 1-.031-.005.114.114 0 0 1-.071-.056L2.106 162.19c-1.031-1.88-.249-4.345 1.742-5.494l56.01-32.344a4.328 4.328 0 0 1 2.158-.588c1.415 0 2.65.702 3.311 1.882.01.008.018.017.024.028l.227.414a.122.122 0 0 1 .013.038 9.508 9.508 0 0 0 1.439 1.959l.275.266c1.846 1.786 4.344 2.769 7.031 2.769 1.977 0 3.954-.538 5.717-1.557a.148.148 0 0 1 .035-.013l7.284-4.206a4.321 4.321 0 0 1 2.157-.588c1.427 0 2.672.716 3.329 1.914l3.249 5.929a.116.116 0 0 1-.044.157l-83.518 48.229a.116.116 0 0 1-.059.016zm49.53-57.004c-.704 0-1.41.193-2.041.557l-56.01 32.345c-1.882 1.086-2.624 3.409-1.655 5.179l10.221 18.645 83.317-48.112-3.195-5.829c-.615-1.122-1.783-1.792-3.124-1.792a4.08 4.08 0 0 0-2.04.557l-7.317 4.225a.148.148 0 0 1-.035.013 11.7 11.7 0 0 1-5.801 1.569c-2.748 0-5.303-1.007-7.194-2.835l-.278-.27a9.716 9.716 0 0 1-1.497-2.046.096.096 0 0 1-.013-.037l-.191-.347a.11.11 0 0 1-.023-.029c-.615-1.123-1.783-1.793-3.124-1.793z' fill='#607D8B'/><path d='M42.434 155.808c-2.51-.001-4.697-1.258-5.852-3.365-1.811-3.304-.438-7.634 3.059-9.654l12.291-7.098a7.599 7.599 0 0 1 3.789-1.033c2.51 0 4.697 1.258 5.852 3.365 1.811 3.304.439 7.634-3.059 9.654l-12.291 7.098a7.606 7.606 0 0 1-3.789 1.033zm13.287-20.683a7.128 7.128 0 0 0-3.555.971l-12.291 7.098c-3.279 1.893-4.573 5.942-2.883 9.024 1.071 1.955 3.106 3.122 5.442 3.122a7.13 7.13 0 0 0 3.556-.97l12.291-7.098c3.279-1.893 4.572-5.942 2.883-9.024-1.072-1.955-3.106-3.123-5.443-3.123z' fill='#607D8B'/><path d='M149.588 109.407l6.737 3.89v.887c0 .176.013.36.037.549.011.081.02.161.028.242.14 1.415.973 2.998 2.105 3.999l7.396 6.545c.177.156.358.295.541.415 1.579 1.04 2.95.466 3.062-1.282.049-.784.057-1.595.023-2.429l-.003-.16v-1.151l25.987 15.003v54c0 1.09-.77 1.53-1.72.982l-42.473-24.523c-.95-.548-1.72-1.877-1.72-2.966v-34.033' fill='#FAFAFA'/><path d='M194.553 191.25c-.257 0-.54-.085-.831-.253l-42.472-24.521c-.981-.567-1.779-1.943-1.779-3.068v-34.033h.234v34.033c0 1.051.745 2.336 1.661 2.866l42.473 24.521c.424.245.816.288 1.103.122.285-.164.442-.52.442-1.002v-53.933l-25.753-14.868.003 1.106c.034.832.026 1.654-.024 2.439-.054.844-.396 1.464-.963 1.746-.619.309-1.45.173-2.28-.373a5.023 5.023 0 0 1-.553-.426l-7.397-6.544c-1.158-1.026-1.999-2.625-2.143-4.076a9.624 9.624 0 0 0-.027-.238 4.241 4.241 0 0 1-.038-.564v-.82l-6.68-3.856.117-.202 6.738 3.89.058.034v.954c0 .171.012.351.036.533.011.083.021.165.029.246.138 1.395.948 2.935 2.065 3.923l7.397 6.545c.173.153.35.289.527.406.758.499 1.504.63 2.047.359.49-.243.786-.795.834-1.551.05-.778.057-1.591.024-2.417l-.004-.163v-1.355l.175.1 25.987 15.004.059.033v54.068c0 .569-.198.996-.559 1.204a1.002 1.002 0 0 1-.506.131' fill='#607D8B'/><path d='M145.685 163.161l24.115 13.922-25.978 14.998-1.462-.307c-6.534-2.17-13.628-3.728-21.019-4.616-4.365-.524-8.663 1.096-9.598 3.62a2.746 2.746 0 0 0-.011 1.928c1.538 4.267 4.236 8.363 7.995 12.135l.532.845-25.977 14.997-24.115-13.922 75.518-43.6' fill='#FFF'/><path d='M94.282 220.818l-.059-.033-24.29-14.024.175-.101 75.577-43.634.058.033 24.29 14.024-26.191 15.122-.045-.01-1.461-.307c-6.549-2.174-13.613-3.725-21.009-4.614a13.744 13.744 0 0 0-1.638-.097c-3.758 0-7.054 1.531-7.837 3.642a2.62 2.62 0 0 0-.01 1.848c1.535 4.258 4.216 8.326 7.968 12.091l.016.021.526.835.006.01.064.102-.105.061-25.977 14.998-.058.033zm-23.881-14.057l23.881 13.788 24.802-14.32c.546-.315.846-.489 1.017-.575l-.466-.74c-3.771-3.787-6.467-7.881-8.013-12.168a2.851 2.851 0 0 1 .011-2.008c.815-2.199 4.203-3.795 8.056-3.795.557 0 1.117.033 1.666.099 7.412.891 14.491 2.445 21.041 4.621.836.175 1.215.254 1.39.304l25.78-14.884-23.881-13.788-75.284 43.466z' fill='#607D8B'/><path d='M167.23 125.979v50.871l-27.321 15.773-6.461-14.167c-.91-1.996-3.428-1.738-5.624.574a10.238 10.238 0 0 0-2.33 4.018l-6.46 21.628-27.322 15.774v-50.871l75.518-43.6' fill='#FFF'/><path d='M91.712 220.567a.127.127 0 0 1-.059-.016.118.118 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.519-43.6a.117.117 0 0 1 .175.101v50.871c0 .041-.023.08-.059.1l-27.321 15.775a.118.118 0 0 1-.094.01.12.12 0 0 1-.071-.063l-6.46-14.168c-.375-.822-1.062-1.275-1.934-1.275-1.089 0-2.364.686-3.5 1.881a10.206 10.206 0 0 0-2.302 3.972l-6.46 21.627a.118.118 0 0 1-.054.068L91.77 220.551a.12.12 0 0 1-.058.016zm.117-50.92v50.601l27.106-15.65 6.447-21.583a10.286 10.286 0 0 1 2.357-4.065c1.18-1.242 2.517-1.954 3.669-1.954.969 0 1.731.501 2.146 1.411l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M168.543 126.213v50.87l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.624.574a10.248 10.248 0 0 0-2.33 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6' fill='#FFF'/><path d='M93.025 220.8a.123.123 0 0 1-.059-.015.12.12 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.518-43.6a.112.112 0 0 1 .117 0c.036.02.059.059.059.1v50.871a.116.116 0 0 1-.059.101l-27.321 15.774a.111.111 0 0 1-.094.01.115.115 0 0 1-.071-.062l-6.46-14.168c-.375-.823-1.062-1.275-1.935-1.275-1.088 0-2.363.685-3.499 1.881a10.19 10.19 0 0 0-2.302 3.971l-6.461 21.628a.108.108 0 0 1-.053.067l-27.322 15.775a.12.12 0 0 1-.058.015zm.117-50.919v50.6l27.106-15.649 6.447-21.584a10.293 10.293 0 0 1 2.357-4.065c1.179-1.241 2.516-1.954 3.668-1.954.969 0 1.732.502 2.147 1.412l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M169.8 177.083l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.625.574a10.246 10.246 0 0 0-2.329 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6v50.87z' fill='#FAFAFA'/><path d='M94.282 220.917a.234.234 0 0 1-.234-.233v-50.871c0-.083.045-.161.117-.202l75.518-43.601a.234.234 0 1 1 .35.202v50.871a.233.233 0 0 1-.116.202l-27.322 15.775a.232.232 0 0 1-.329-.106l-6.461-14.168c-.36-.789-.992-1.206-1.828-1.206-1.056 0-2.301.672-3.415 1.844a10.099 10.099 0 0 0-2.275 3.924l-6.46 21.628a.235.235 0 0 1-.107.136l-27.322 15.774a.23.23 0 0 1-.116.031zm.233-50.969v50.331l26.891-15.525 6.434-21.539a10.41 10.41 0 0 1 2.384-4.112c1.201-1.265 2.569-1.991 3.753-1.991 1.018 0 1.818.526 2.253 1.48l6.354 13.934 26.982-15.578v-50.331l-75.051 43.331z' fill='#607D8B'/><path d='M109.894 199.943c-1.774 0-3.241-.725-4.244-2.12a.224.224 0 0 1 .023-.294.233.233 0 0 1 .301-.023c.78.547 1.705.827 2.75.827 1.323 0 2.754-.439 4.256-1.306 5.311-3.067 9.631-10.518 9.631-16.611 0-1.927-.442-3.56-1.278-4.724a.232.232 0 0 1 .323-.327c1.671 1.172 2.591 3.381 2.591 6.219 0 6.242-4.426 13.863-9.865 17.003-1.574.908-3.084 1.356-4.488 1.356zm-2.969-1.542c.813.651 1.82.877 2.968.877h.001c1.321 0 2.753-.327 4.254-1.194 5.311-3.067 9.632-10.463 9.632-16.556 0-1.979-.463-3.599-1.326-4.761.411 1.035.625 2.275.625 3.635 0 6.243-4.426 13.883-9.865 17.023-1.574.909-3.084 1.317-4.49 1.317-.641 0-1.243-.149-1.799-.341z' fill='#607D8B'/><path d='M113.097 197.23c5.384-3.108 9.748-10.636 9.748-16.814 0-2.051-.483-3.692-1.323-4.86-1.784-1.252-4.374-1.194-7.257.47-5.384 3.108-9.748 10.636-9.748 16.814 0 2.051.483 3.692 1.323 4.86 1.784 1.252 4.374 1.194 7.257-.47' fill='#FAFAFA'/><path d='M108.724 198.614c-1.142 0-2.158-.213-3.019-.817-.021-.014-.04.014-.055-.007-.894-1.244-1.367-2.948-1.367-4.973 0-6.242 4.426-13.864 9.865-17.005 1.574-.908 3.084-1.363 4.49-1.363 1.142 0 2.158.309 3.018.913a.23.23 0 0 1 .056.056c.894 1.244 1.367 2.972 1.367 4.997 0 6.243-4.426 13.783-9.865 16.923-1.574.909-3.084 1.276-4.49 1.276zm-2.718-1.109c.774.532 1.688.776 2.718.776 1.323 0 2.754-.413 4.256-1.28 5.311-3.066 9.631-10.505 9.631-16.598 0-1.909-.434-3.523-1.255-4.685-.774-.533-1.688-.799-2.718-.799-1.323 0-2.755.441-4.256 1.308-5.311 3.066-9.631 10.506-9.631 16.599 0 1.909.434 3.517 1.255 4.679z' fill='#607D8B'/><path d='M149.318 114.262l-9.984 8.878 15.893 11.031 5.589-6.112-11.498-13.797' fill='#FAFAFA'/><path d='M169.676 120.84l-9.748 5.627c-3.642 2.103-9.528 2.113-13.147.024-3.62-2.089-3.601-5.488.041-7.591l9.495-5.608-6.729-3.885-81.836 47.071 45.923 26.514 3.081-1.779c.631-.365.869-.898.618-1.39-2.357-4.632-2.593-9.546-.683-14.262 5.638-13.92 24.509-24.815 48.618-28.07 8.169-1.103 16.68-.967 24.704.394.852.145 1.776.008 2.407-.357l3.081-1.778-25.825-14.91' fill='#FAFAFA'/><path d='M113.675 183.459a.47.47 0 0 1-.233-.062l-45.924-26.515a.468.468 0 0 1 .001-.809l81.836-47.071a.467.467 0 0 1 .466 0l6.729 3.885a.467.467 0 0 1-.467.809l-6.496-3.75-80.9 46.533 44.988 25.973 2.848-1.644c.192-.111.62-.409.435-.773-2.416-4.748-2.658-9.814-.7-14.65 2.806-6.927 8.885-13.242 17.582-18.263 8.657-4.998 19.518-8.489 31.407-10.094 8.198-1.107 16.79-.97 24.844.397.739.125 1.561.007 2.095-.301l2.381-1.374-25.125-14.506a.467.467 0 0 1 .467-.809l25.825 14.91a.467.467 0 0 1 0 .809l-3.081 1.779c-.721.417-1.763.575-2.718.413-7.963-1.351-16.457-1.486-24.563-.392-11.77 1.589-22.512 5.039-31.065 9.977-8.514 4.916-14.456 11.073-17.183 17.805-1.854 4.578-1.623 9.376.666 13.875.37.725.055 1.513-.8 2.006l-3.081 1.78a.476.476 0 0 1-.234.062' fill='#455A64'/><path d='M153.316 128.279c-2.413 0-4.821-.528-6.652-1.586-1.818-1.049-2.82-2.461-2.82-3.975 0-1.527 1.016-2.955 2.861-4.02l9.493-5.607a.233.233 0 1 1 .238.402l-9.496 5.609c-1.696.979-2.628 2.263-2.628 3.616 0 1.34.918 2.608 2.585 3.571 3.549 2.049 9.343 2.038 12.914-.024l9.748-5.628a.234.234 0 0 1 .234.405l-9.748 5.628c-1.858 1.072-4.296 1.609-6.729 1.609' fill='#607D8B'/><path d='M113.675 182.992l-45.913-26.508M113.675 183.342a.346.346 0 0 1-.175-.047l-45.913-26.508a.35.35 0 1 1 .35-.607l45.913 26.508a.35.35 0 0 1-.175.654' fill='#455A64'/><path d='M67.762 156.484v54.001c0 1.09.77 2.418 1.72 2.967l42.473 24.521c.95.549 1.72.11 1.72-.98v-54.001' fill='#FAFAFA'/><path d='M112.727 238.561c-.297 0-.62-.095-.947-.285l-42.473-24.521c-1.063-.613-1.895-2.05-1.895-3.27v-54.001a.35.35 0 1 1 .701 0v54.001c0 .96.707 2.18 1.544 2.663l42.473 24.522c.344.198.661.243.87.122.206-.119.325-.411.325-.799v-54.001a.35.35 0 1 1 .7 0v54.001c0 .655-.239 1.154-.675 1.406a1.235 1.235 0 0 1-.623.162' fill='#455A64'/><path d='M112.86 147.512h-.001c-2.318 0-4.499-.522-6.142-1.471-1.705-.984-2.643-2.315-2.643-3.749 0-1.445.952-2.791 2.68-3.788l12.041-6.953c1.668-.962 3.874-1.493 6.212-1.493 2.318 0 4.499.523 6.143 1.472 1.704.984 2.643 2.315 2.643 3.748 0 1.446-.952 2.791-2.68 3.789l-12.042 6.952c-1.668.963-3.874 1.493-6.211 1.493zm12.147-16.753c-2.217 0-4.298.497-5.861 1.399l-12.042 6.952c-1.502.868-2.33 1.998-2.33 3.182 0 1.173.815 2.289 2.293 3.142 1.538.889 3.596 1.378 5.792 1.378h.001c2.216 0 4.298-.497 5.861-1.399l12.041-6.953c1.502-.867 2.33-1.997 2.33-3.182 0-1.172-.814-2.288-2.292-3.142-1.539-.888-3.596-1.377-5.793-1.377z' fill='#607D8B'/><path d='M165.63 123.219l-5.734 3.311c-3.167 1.828-8.286 1.837-11.433.02-3.147-1.817-3.131-4.772.036-6.601l5.734-3.31 11.397 6.58' fill='#FAFAFA'/><path d='M154.233 117.448l9.995 5.771-4.682 2.704c-1.434.827-3.352 1.283-5.399 1.283-2.029 0-3.923-.449-5.333-1.263-1.29-.744-2-1.694-2-2.674 0-.991.723-1.955 2.036-2.713l5.383-3.108m0-.809l-5.734 3.31c-3.167 1.829-3.183 4.784-.036 6.601 1.568.905 3.623 1.357 5.684 1.357 2.077 0 4.159-.46 5.749-1.377l5.734-3.311-11.397-6.58M145.445 179.667c-1.773 0-3.241-.85-4.243-2.245-.067-.092-.057-.275.023-.356.08-.081.207-.12.3-.055.781.548 1.706.812 2.751.811 1.322 0 2.754-.446 4.256-1.313 5.31-3.066 9.631-10.522 9.631-16.615 0-1.927-.442-3.562-1.279-4.726a.235.235 0 0 1 .024-.301.232.232 0 0 1 .3-.027c1.67 1.172 2.59 3.38 2.59 6.219 0 6.242-4.425 13.987-9.865 17.127-1.573.908-3.083 1.481-4.488 1.481zM142.476 178c.814.651 1.82 1.002 2.969 1.002 1.322 0 2.753-.452 4.255-1.32 5.31-3.065 9.631-10.523 9.631-16.617 0-1.98-.463-3.63-1.325-4.793.411 1.035.624 2.26.624 3.62 0 6.242-4.425 13.875-9.865 17.015-1.573.909-3.084 1.376-4.489 1.376a5.49 5.49 0 0 1-1.8-.283z' fill='#607D8B'/><path d='M148.648 176.704c5.384-3.108 9.748-10.636 9.748-16.813 0-2.052-.483-3.693-1.322-4.861-1.785-1.252-4.375-1.194-7.258.471-5.383 3.108-9.748 10.636-9.748 16.813 0 2.051.484 3.692 1.323 4.86 1.785 1.253 4.374 1.195 7.257-.47' fill='#FAFAFA'/><path d='M144.276 178.276c-1.143 0-2.158-.307-3.019-.911a.217.217 0 0 1-.055-.054c-.895-1.244-1.367-2.972-1.367-4.997 0-6.241 4.425-13.875 9.865-17.016 1.573-.908 3.084-1.369 4.489-1.369 1.143 0 2.158.307 3.019.91a.24.24 0 0 1 .055.055c.894 1.244 1.367 2.971 1.367 4.997 0 6.241-4.425 13.875-9.865 17.016-1.573.908-3.084 1.369-4.489 1.369zm-2.718-1.172c.773.533 1.687.901 2.718.901 1.322 0 2.754-.538 4.256-1.405 5.31-3.066 9.631-10.567 9.631-16.661 0-1.908-.434-3.554-1.256-4.716-.774-.532-1.688-.814-2.718-.814-1.322 0-2.754.433-4.256 1.3-5.31 3.066-9.631 10.564-9.631 16.657 0 1.91.434 3.576 1.256 4.738z' fill='#607D8B'/><path d='M150.72 172.361l-.363-.295a24.105 24.105 0 0 0 2.148-3.128 24.05 24.05 0 0 0 1.977-4.375l.443.149a24.54 24.54 0 0 1-2.015 4.46 24.61 24.61 0 0 1-2.19 3.189M115.917 191.514l-.363-.294a24.174 24.174 0 0 0 2.148-3.128 24.038 24.038 0 0 0 1.976-4.375l.443.148a24.48 24.48 0 0 1-2.015 4.461 24.662 24.662 0 0 1-2.189 3.188M114 237.476V182.584 237.476' fill='#607D8B'/><g><path d='M81.822 37.474c.017-.135-.075-.28-.267-.392-.327-.188-.826-.21-1.109-.045l-6.012 3.471c-.131.076-.194.178-.191.285.002.132.002.461.002.578v.043l-.007.128-6.591 3.779c-.001 0-2.077 1.046-2.787 5.192 0 0-.912 6.961-.898 19.745.015 12.57.606 17.07 1.167 21.351.22 1.684 3.001 2.125 3.001 2.125.331.04.698-.027 1.08-.248l75.273-43.551c1.808-1.069 2.667-3.719 3.056-6.284 1.213-7.99 1.675-32.978-.275-39.878-.196-.693-.51-1.083-.868-1.282l-2.086-.79c-.727.028-1.416.467-1.534.535L82.032 37.072l-.21.402' fill='#FFF'/><path d='M144.311 1.701l2.085.79c.358.199.672.589.868 1.282 1.949 6.9 1.487 31.887.275 39.878-.39 2.565-1.249 5.215-3.056 6.284L69.21 93.486a1.78 1.78 0 0 1-.896.258l-.183-.011c0 .001-2.782-.44-3.003-2.124-.56-4.282-1.151-8.781-1.165-21.351-.015-12.784.897-19.745.897-19.745.71-4.146 2.787-5.192 2.787-5.192l6.591-3.779.007-.128v-.043c0-.117 0-.446-.002-.578-.003-.107.059-.21.191-.285l6.012-3.472a.98.98 0 0 1 .481-.11c.218 0 .449.053.627.156.193.112.285.258.268.392l.211-.402 60.744-34.836c.117-.068.806-.507 1.534-.535m0-.997l-.039.001c-.618.023-1.283.244-1.974.656l-.021.012-60.519 34.706a2.358 2.358 0 0 0-.831-.15c-.365 0-.704.084-.98.244l-6.012 3.471c-.442.255-.699.69-.689 1.166l.001.15-6.08 3.487c-.373.199-2.542 1.531-3.29 5.898l-.006.039c-.009.07-.92 7.173-.906 19.875.014 12.62.603 17.116 1.172 21.465l.002.015c.308 2.355 3.475 2.923 3.836 2.98l.034.004c.101.013.204.019.305.019a2.77 2.77 0 0 0 1.396-.392l75.273-43.552c1.811-1.071 2.999-3.423 3.542-6.997 1.186-7.814 1.734-33.096-.301-40.299-.253-.893-.704-1.527-1.343-1.882l-.132-.062-2.085-.789a.973.973 0 0 0-.353-.065' fill='#455A64'/><path d='M128.267 11.565l1.495.434-56.339 32.326' fill='#FFF'/><path d='M74.202 90.545a.5.5 0 0 1-.25-.931l18.437-10.645a.499.499 0 1 1 .499.864L74.451 90.478l-.249.067M75.764 42.654l-.108-.062.046-.171 5.135-2.964.17.045-.045.171-5.135 2.964-.063.017M70.52 90.375V46.421l.063-.036L137.84 7.554v43.954l-.062.036L70.52 90.375zm.25-43.811v43.38l66.821-38.579V7.985L70.77 46.564z' fill='#607D8B'/><path d='M86.986 83.182c-.23.149-.612.384-.849.523l-11.505 6.701c-.237.139-.206.252.068.252h.565c.275 0 .693-.113.93-.252L87.7 83.705c.237-.139.428-.253.425-.256a11.29 11.29 0 0 1-.006-.503c0-.274-.188-.377-.418-.227l-.715.463' fill='#607D8B'/><path d='M75.266 90.782H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.236-.138.615-.371.844-.519l.715-.464a.488.488 0 0 1 .266-.089c.172 0 .345.13.345.421 0 .214.001.363.003.437l.006.004-.004.069c-.003.075-.003.075-.486.356l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.108.866-.234l11.505-6.702c.168-.098.294-.173.361-.214-.004-.084-.004-.218-.004-.437l-.095-.171-.131.049-.714.463c-.232.15-.616.386-.854.525l-11.505 6.702-.029.018z' fill='#607D8B'/><path d='M75.266 89.871H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.258-.151.694-.268.993-.268h.565c.2 0 .316.056.346.166.03.11-.043.217-.215.317l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.107.866-.234l11.505-6.702.03-.018-.035-.001h-.565c-.252 0-.649.108-.867.234l-11.505 6.702-.029.018zM74.37 90.801v-1.247 1.247' fill='#607D8B'/><path d='M68.13 93.901c-.751-.093-1.314-.737-1.439-1.376-.831-4.238-1.151-8.782-1.165-21.352-.015-12.784.897-19.745.897-19.745.711-4.146 2.787-5.192 2.787-5.192l74.859-43.219c.223-.129 2.487-1.584 3.195.923 1.95 6.9 1.488 31.887.275 39.878-.389 2.565-1.248 5.215-3.056 6.283L69.21 93.653c-.382.221-.749.288-1.08.248 0 0-2.781-.441-3.001-2.125-.561-4.281-1.152-8.781-1.167-21.351-.014-12.784.898-19.745.898-19.745.71-4.146 2.787-5.191 2.787-5.191l6.598-3.81.871-.119 6.599-3.83.046-.461L68.13 93.901' fill='#FAFAFA'/><path d='M68.317 94.161l-.215-.013h-.001l-.244-.047c-.719-.156-2.772-.736-2.976-2.292-.568-4.34-1.154-8.813-1.168-21.384-.014-12.654.891-19.707.9-19.777.725-4.231 2.832-5.338 2.922-5.382l6.628-3.827.87-.119 6.446-3.742.034-.334a.248.248 0 0 1 .273-.223.248.248 0 0 1 .223.272l-.059.589-6.752 3.919-.87.118-6.556 3.785c-.031.016-1.99 1.068-2.666 5.018-.007.06-.908 7.086-.894 19.702.014 12.539.597 16.996 1.161 21.305.091.691.689 1.154 1.309 1.452a1.95 1.95 0 0 1-.236-.609c-.781-3.984-1.155-8.202-1.17-21.399-.014-12.653.891-19.707.9-19.777.725-4.231 2.832-5.337 2.922-5.382-.004.001 74.444-42.98 74.846-43.212l.028-.017c.904-.538 1.72-.688 2.36-.433.555.221.949.733 1.172 1.52 2.014 7.128 1.46 32.219.281 39.983-.507 3.341-1.575 5.515-3.175 6.462L69.335 93.869a2.023 2.023 0 0 1-1.018.292zm-.147-.507c.293.036.604-.037.915-.217l75.273-43.551c1.823-1.078 2.602-3.915 2.934-6.106 1.174-7.731 1.731-32.695-.268-39.772-.178-.631-.473-1.032-.876-1.192-.484-.193-1.166-.052-1.921.397l-.034.021-74.858 43.218c-.031.017-1.989 1.069-2.666 5.019-.007.059-.908 7.085-.894 19.702.015 13.155.386 17.351 1.161 21.303.09.461.476.983 1.037 1.139.114.025.185.037.196.039h.001z' fill='#455A64'/><path d='M69.317 68.982c.489-.281.885-.056.885.505 0 .56-.396 1.243-.885 1.525-.488.282-.884.057-.884-.504 0-.56.396-1.243.884-1.526' fill='#FFF'/><path d='M68.92 71.133c-.289 0-.487-.228-.487-.625 0-.56.396-1.243.884-1.526a.812.812 0 0 1 .397-.121c.289 0 .488.229.488.626 0 .56-.396 1.243-.885 1.525a.812.812 0 0 1-.397.121m.794-2.459a.976.976 0 0 0-.49.147c-.548.317-.978 1.058-.978 1.687 0 .486.271.812.674.812a.985.985 0 0 0 .491-.146c.548-.317.978-1.057.978-1.687 0-.486-.272-.813-.675-.813' fill='#8097A2'/><path d='M68.92 70.947c-.271 0-.299-.307-.299-.439 0-.491.361-1.116.79-1.363a.632.632 0 0 1 .303-.096c.272 0 .301.306.301.438 0 .491-.363 1.116-.791 1.364a.629.629 0 0 1-.304.096m.794-2.086a.812.812 0 0 0-.397.121c-.488.283-.884.966-.884 1.526 0 .397.198.625.487.625a.812.812 0 0 0 .397-.121c.489-.282.885-.965.885-1.525 0-.397-.199-.626-.488-.626' fill='#8097A2'/><path d='M69.444 85.35c.264-.152.477-.031.477.272 0 .303-.213.67-.477.822-.263.153-.477.031-.477-.271 0-.302.214-.671.477-.823' fill='#FFF'/><path d='M69.23 86.51c-.156 0-.263-.123-.263-.337 0-.302.214-.671.477-.823a.431.431 0 0 1 .214-.066c.156 0 .263.124.263.338 0 .303-.213.67-.477.822a.431.431 0 0 1-.214.066m.428-1.412c-.1 0-.203.029-.307.09-.32.185-.57.618-.57.985 0 .309.185.524.449.524a.63.63 0 0 0 .308-.09c.32-.185.57-.618.57-.985 0-.309-.185-.524-.45-.524' fill='#8097A2'/><path d='M69.23 86.322l-.076-.149c0-.235.179-.544.384-.661l.12-.041.076.151c0 .234-.179.542-.383.66l-.121.04m.428-1.038a.431.431 0 0 0-.214.066c-.263.152-.477.521-.477.823 0 .214.107.337.263.337a.431.431 0 0 0 .214-.066c.264-.152.477-.519.477-.822 0-.214-.107-.338-.263-.338' fill='#8097A2'/><path d='M139.278 7.769v43.667L72.208 90.16V46.493l67.07-38.724' fill='#455A64'/><path d='M72.083 90.375V46.421l.063-.036 67.257-38.831v43.954l-.062.036-67.258 38.831zm.25-43.811v43.38l66.821-38.579V7.985L72.333 46.564z' fill='#607D8B'/></g><path d='M125.737 88.647l-7.639 3.334V84l-11.459 4.713v8.269L99 100.315l13.369 3.646 13.368-15.314' fill='#455A64'/></g></svg>"
                            function Ee() {
                              this.loadIcon_()
                              var e = document.createElement('div')
                              ;((o = e.style).position = 'fixed'),
                                (o.top = 0),
                                (o.right = 0),
                                (o.bottom = 0),
                                (o.left = 0),
                                (o.backgroundColor = 'gray'),
                                (o.fontFamily = 'sans-serif'),
                                (o.zIndex = 1e6)
                              var t = document.createElement('img')
                              ;(t.src = this.icon),
                                ((o = t.style).marginLeft = '25%'),
                                (o.marginTop = '25%'),
                                (o.width = '50%'),
                                e.appendChild(t)
                              var n = document.createElement('div')
                              ;((o = n.style).textAlign = 'center'),
                                (o.fontSize = '16px'),
                                (o.lineHeight = '24px'),
                                (o.margin = '24px 25%'),
                                (o.width = '50%'),
                                (n.innerHTML = 'Place your phone into your Cardboard viewer.'),
                                e.appendChild(n)
                              var r = document.createElement('div')
                              ;((o = r.style).backgroundColor = '#CFD8DC'),
                                (o.position = 'fixed'),
                                (o.bottom = 0),
                                (o.width = '100%'),
                                (o.height = '48px'),
                                (o.padding = '14px 24px'),
                                (o.boxSizing = 'border-box'),
                                (o.color = '#656A6B'),
                                e.appendChild(r)
                              var i = document.createElement('div')
                              ;(i.style.float = 'left'), (i.innerHTML = 'No Cardboard viewer?')
                              var o,
                                a = document.createElement('a')
                              ;(a.href = 'https://www.google.com/get/cardboard/get-cardboard/'),
                                (a.innerHTML = 'get one'),
                                (a.target = '_blank'),
                                ((o = a.style).float = 'right'),
                                (o.fontWeight = 600),
                                (o.textTransform = 'uppercase'),
                                (o.borderLeft = '1px solid gray'),
                                (o.paddingLeft = '24px'),
                                (o.textDecoration = 'none'),
                                (o.color = '#656A6B'),
                                r.appendChild(i),
                                r.appendChild(a),
                                (this.overlay = e),
                                (this.text = n),
                                this.hide()
                            }
                            ;(Ee.prototype.show = function (e) {
                              e || this.overlay.parentElement
                                ? e &&
                                  (this.overlay.parentElement &&
                                    this.overlay.parentElement != e &&
                                    this.overlay.parentElement.removeChild(this.overlay),
                                  e.appendChild(this.overlay))
                                : document.body.appendChild(this.overlay),
                                (this.overlay.style.display = 'block')
                              var t = this.overlay.querySelector('img').style
                              v()
                                ? ((t.width = '20%'), (t.marginLeft = '40%'), (t.marginTop = '3%'))
                                : ((t.width = '50%'), (t.marginLeft = '25%'), (t.marginTop = '25%'))
                            }),
                              (Ee.prototype.hide = function () {
                                this.overlay.style.display = 'none'
                              }),
                              (Ee.prototype.showTemporarily = function (e, t) {
                                this.show(t), (this.timer = setTimeout(this.hide.bind(this), e))
                              }),
                              (Ee.prototype.disableShowTemporarily = function () {
                                clearTimeout(this.timer)
                              }),
                              (Ee.prototype.update = function () {
                                this.disableShowTemporarily(),
                                  !v() && T() ? this.show() : this.hide()
                              }),
                              (Ee.prototype.loadIcon_ = function () {
                                this.icon = a('image/svg+xml', xe)
                              })
                            var Me = 'CardboardV1',
                              _e = 'WEBVR_CARDBOARD_VIEWER',
                              Te = 'webvr-polyfill-viewer-selector'
                            function Se(e) {
                              try {
                                this.selectedKey = localStorage.getItem(_e)
                              } catch (t) {
                                console.error('Failed to load viewer profile: %s', t)
                              }
                              this.selectedKey || (this.selectedKey = e || Me),
                                (this.dialog = this.createDialog_(le.Viewers)),
                                (this.root = null),
                                (this.onChangeCallbacks_ = [])
                            }
                            function Ce(e) {
                              return e &&
                                e.__esModule &&
                                Object.prototype.hasOwnProperty.call(e, 'default')
                                ? e.default
                                : e
                            }
                            function Le(e, t) {
                              return e((t = { exports: {} }), t.exports), t.exports
                            }
                            ;(Se.prototype.show = function (e) {
                              ;(this.root = e),
                                e.appendChild(this.dialog),
                                (this.dialog.querySelector('#' + this.selectedKey).checked = !0),
                                (this.dialog.style.display = 'block')
                            }),
                              (Se.prototype.hide = function () {
                                this.root &&
                                  this.root.contains(this.dialog) &&
                                  this.root.removeChild(this.dialog),
                                  (this.dialog.style.display = 'none')
                              }),
                              (Se.prototype.getCurrentViewer = function () {
                                return le.Viewers[this.selectedKey]
                              }),
                              (Se.prototype.getSelectedKey_ = function () {
                                var e = this.dialog.querySelector('input[name=field]:checked')
                                return e ? e.id : null
                              }),
                              (Se.prototype.onChange = function (e) {
                                this.onChangeCallbacks_.push(e)
                              }),
                              (Se.prototype.fireOnChange_ = function (e) {
                                for (var t = 0; t < this.onChangeCallbacks_.length; t++)
                                  this.onChangeCallbacks_[t](e)
                              }),
                              (Se.prototype.onSave_ = function () {
                                if (
                                  ((this.selectedKey = this.getSelectedKey_()),
                                  this.selectedKey && le.Viewers[this.selectedKey])
                                ) {
                                  this.fireOnChange_(le.Viewers[this.selectedKey])
                                  try {
                                    localStorage.setItem(_e, this.selectedKey)
                                  } catch (e) {
                                    console.error('Failed to save viewer profile: %s', e)
                                  }
                                  this.hide()
                                } else
                                  console.error('ViewerSelector.onSave_: this should never happen!')
                              }),
                              (Se.prototype.createDialog_ = function (e) {
                                var t = document.createElement('div')
                                t.classList.add(Te), (t.style.display = 'none')
                                var n = document.createElement('div')
                                ;((o = n.style).position = 'fixed'),
                                  (o.left = 0),
                                  (o.top = 0),
                                  (o.width = '100%'),
                                  (o.height = '100%'),
                                  (o.background = 'rgba(0, 0, 0, 0.3)'),
                                  n.addEventListener('click', this.hide.bind(this))
                                var r = 280,
                                  i = document.createElement('div'),
                                  o = i.style
                                for (var a in ((o.boxSizing = 'border-box'),
                                (o.position = 'fixed'),
                                (o.top = '24px'),
                                (o.left = '50%'),
                                (o.marginLeft = -r / 2 + 'px'),
                                (o.width = r + 'px'),
                                (o.padding = '24px'),
                                (o.overflow = 'hidden'),
                                (o.background = '#fafafa'),
                                (o.fontFamily = "'Roboto', sans-serif"),
                                (o.boxShadow = '0px 5px 20px #666'),
                                i.appendChild(this.createH1_('Select your viewer')),
                                e))
                                  i.appendChild(this.createChoice_(a, e[a].label))
                                return (
                                  i.appendChild(
                                    this.createButton_('Save', this.onSave_.bind(this)),
                                  ),
                                  t.appendChild(n),
                                  t.appendChild(i),
                                  t
                                )
                              }),
                              (Se.prototype.createH1_ = function (e) {
                                var t = document.createElement('h1'),
                                  n = t.style
                                return (
                                  (n.color = 'black'),
                                  (n.fontSize = '20px'),
                                  (n.fontWeight = 'bold'),
                                  (n.marginTop = 0),
                                  (n.marginBottom = '24px'),
                                  (t.innerHTML = e),
                                  t
                                )
                              }),
                              (Se.prototype.createChoice_ = function (e, t) {
                                var n = document.createElement('div')
                                ;(n.style.marginTop = '8px'), (n.style.color = 'black')
                                var r = document.createElement('input')
                                ;(r.style.fontSize = '30px'),
                                  r.setAttribute('id', e),
                                  r.setAttribute('type', 'radio'),
                                  r.setAttribute('value', e),
                                  r.setAttribute('name', 'field')
                                var i = document.createElement('label')
                                return (
                                  (i.style.marginLeft = '4px'),
                                  i.setAttribute('for', e),
                                  (i.innerHTML = t),
                                  n.appendChild(r),
                                  n.appendChild(i),
                                  n
                                )
                              }),
                              (Se.prototype.createButton_ = function (e, t) {
                                var n = document.createElement('button')
                                n.innerHTML = e
                                var r = n.style
                                return (
                                  (r.float = 'right'),
                                  (r.textTransform = 'uppercase'),
                                  (r.color = '#1094f7'),
                                  (r.fontSize = '14px'),
                                  (r.letterSpacing = 0),
                                  (r.border = 0),
                                  (r.background = 'none'),
                                  (r.marginTop = '16px'),
                                  n.addEventListener('click', t),
                                  n
                                )
                              }),
                              'undefined' !== typeof window
                                ? window
                                : 'undefined' !== typeof t || ('undefined' !== typeof self && self)
                            var Re = Ce(
                                Le(function (e, t) {
                                  var n
                                  ;(n = function () {
                                    return (function (e) {
                                      var t = {}
                                      function n(r) {
                                        if (t[r]) return t[r].exports
                                        var i = (t[r] = { i: r, l: !1, exports: {} })
                                        return (
                                          e[r].call(i.exports, i, i.exports, n),
                                          (i.l = !0),
                                          i.exports
                                        )
                                      }
                                      return (
                                        (n.m = e),
                                        (n.c = t),
                                        (n.d = function (e, t, r) {
                                          n.o(e, t) ||
                                            Object.defineProperty(e, t, {
                                              configurable: !1,
                                              enumerable: !0,
                                              get: r,
                                            })
                                        }),
                                        (n.n = function (e) {
                                          var t =
                                            e && e.__esModule
                                              ? function () {
                                                  return e.default
                                                }
                                              : function () {
                                                  return e
                                                }
                                          return n.d(t, 'a', t), t
                                        }),
                                        (n.o = function (e, t) {
                                          return Object.prototype.hasOwnProperty.call(e, t)
                                        }),
                                        (n.p = ''),
                                        n((n.s = 0))
                                      )
                                    })([
                                      function (e, t, n) {
                                        var r = (function () {
                                          function e(e, t) {
                                            for (var n = 0; n < t.length; n++) {
                                              var r = t[n]
                                              ;(r.enumerable = r.enumerable || !1),
                                                (r.configurable = !0),
                                                'value' in r && (r.writable = !0),
                                                Object.defineProperty(e, r.key, r)
                                            }
                                          }
                                          return function (t, n, r) {
                                            return n && e(t.prototype, n), r && e(t, r), t
                                          }
                                        })()
                                        function i(e, t) {
                                          if (!(e instanceof t))
                                            throw new TypeError('Cannot call a class as a function')
                                        }
                                        var o = n(1),
                                          a =
                                            'undefined' !== typeof navigator &&
                                            parseFloat(
                                              (
                                                '' +
                                                (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(
                                                  navigator.userAgent,
                                                ) || [0, ''])[1]
                                              )
                                                .replace('undefined', '3_2')
                                                .replace('_', '.')
                                                .replace('_', ''),
                                            ) < 10 &&
                                            !window.MSStream,
                                          s = (function () {
                                            function e() {
                                              i(this, e),
                                                a
                                                  ? (this.noSleepTimer = null)
                                                  : ((this.noSleepVideo =
                                                      document.createElement('video')),
                                                    this.noSleepVideo.setAttribute(
                                                      'playsinline',
                                                      '',
                                                    ),
                                                    this.noSleepVideo.setAttribute('src', o),
                                                    this.noSleepVideo.addEventListener(
                                                      'timeupdate',
                                                      function (e) {
                                                        this.noSleepVideo.currentTime > 0.5 &&
                                                          (this.noSleepVideo.currentTime =
                                                            Math.random())
                                                      }.bind(this),
                                                    ))
                                            }
                                            return (
                                              r(e, [
                                                {
                                                  key: 'enable',
                                                  value: function () {
                                                    a
                                                      ? (this.disable(),
                                                        (this.noSleepTimer = window.setInterval(
                                                          function () {
                                                            ;(window.location.href = '/'),
                                                              window.setTimeout(window.stop, 0)
                                                          },
                                                          15e3,
                                                        )))
                                                      : this.noSleepVideo.play()
                                                  },
                                                },
                                                {
                                                  key: 'disable',
                                                  value: function () {
                                                    a
                                                      ? this.noSleepTimer &&
                                                        (window.clearInterval(this.noSleepTimer),
                                                        (this.noSleepTimer = null))
                                                      : this.noSleepVideo.pause()
                                                  },
                                                },
                                              ]),
                                              e
                                            )
                                          })()
                                        e.exports = s
                                      },
                                      function (e, t, n) {
                                        e.exports =
                                          'data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA='
                                      },
                                    ])
                                  }),
                                    (e.exports = n())
                                }),
                              ),
                              Pe = 1e3,
                              De = [0, 0, 0.5, 1],
                              Oe = [0.5, 0, 0.5, 1],
                              Ie = window.requestAnimationFrame,
                              Be = window.cancelAnimationFrame
                            function Fe() {
                              ;(this.leftProjectionMatrix = new Float32Array(16)),
                                (this.leftViewMatrix = new Float32Array(16)),
                                (this.rightProjectionMatrix = new Float32Array(16)),
                                (this.rightViewMatrix = new Float32Array(16)),
                                (this.pose = null)
                            }
                            function ke(e) {
                              Object.defineProperties(this, {
                                hasPosition: { writable: !1, enumerable: !0, value: e.hasPosition },
                                hasExternalDisplay: {
                                  writable: !1,
                                  enumerable: !0,
                                  value: e.hasExternalDisplay,
                                },
                                canPresent: { writable: !1, enumerable: !0, value: e.canPresent },
                                maxLayers: { writable: !1, enumerable: !0, value: e.maxLayers },
                                hasOrientation: {
                                  enumerable: !0,
                                  get: function () {
                                    return (
                                      I(
                                        'VRDisplayCapabilities.prototype.hasOrientation',
                                        'VRDisplay.prototype.getFrameData',
                                      ),
                                      e.hasOrientation
                                    )
                                  },
                                },
                              })
                            }
                            function Ne(e) {
                              var t = !('wakelock' in (e = e || {})) || e.wakelock
                              ;(this.isPolyfilled = !0),
                                (this.displayId = Pe++),
                                (this.displayName = ''),
                                (this.depthNear = 0.01),
                                (this.depthFar = 1e4),
                                (this.isPresenting = !1),
                                Object.defineProperty(this, 'isConnected', {
                                  get: function () {
                                    return (
                                      I(
                                        'VRDisplay.prototype.isConnected',
                                        'VRDisplayCapabilities.prototype.hasExternalDisplay',
                                      ),
                                      !1
                                    )
                                  },
                                }),
                                (this.capabilities = new ke({
                                  hasPosition: !1,
                                  hasOrientation: !1,
                                  hasExternalDisplay: !1,
                                  canPresent: !1,
                                  maxLayers: 1,
                                })),
                                (this.stageParameters = null),
                                (this.waitingForPresent_ = !1),
                                (this.layer_ = null),
                                (this.originalParent_ = null),
                                (this.fullscreenElement_ = null),
                                (this.fullscreenWrapper_ = null),
                                (this.fullscreenElementCachedStyle_ = null),
                                (this.fullscreenEventTarget_ = null),
                                (this.fullscreenChangeHandler_ = null),
                                (this.fullscreenErrorHandler_ = null),
                                t && T() && (this.wakelock_ = new Re())
                            }
                            ;(Ne.prototype.getFrameData = function (e) {
                              return L(e, this._getPose(), this)
                            }),
                              (Ne.prototype.getPose = function () {
                                return (
                                  I(
                                    'VRDisplay.prototype.getPose',
                                    'VRDisplay.prototype.getFrameData',
                                  ),
                                  this._getPose()
                                )
                              }),
                              (Ne.prototype.resetPose = function () {
                                return I('VRDisplay.prototype.resetPose'), this._resetPose()
                              }),
                              (Ne.prototype.getImmediatePose = function () {
                                return (
                                  I(
                                    'VRDisplay.prototype.getImmediatePose',
                                    'VRDisplay.prototype.getFrameData',
                                  ),
                                  this._getPose()
                                )
                              }),
                              (Ne.prototype.requestAnimationFrame = function (e) {
                                return Ie(e)
                              }),
                              (Ne.prototype.cancelAnimationFrame = function (e) {
                                return Be(e)
                              }),
                              (Ne.prototype.wrapForFullscreen = function (e) {
                                if (l()) return e
                                if (!this.fullscreenWrapper_) {
                                  this.fullscreenWrapper_ = document.createElement('div')
                                  var t = [
                                    'height: ' +
                                      Math.min(screen.height, screen.width) +
                                      'px !important',
                                    'top: 0 !important',
                                    'left: 0 !important',
                                    'right: 0 !important',
                                    'border: 0',
                                    'margin: 0',
                                    'padding: 0',
                                    'z-index: 999999 !important',
                                    'position: fixed',
                                  ]
                                  this.fullscreenWrapper_.setAttribute('style', t.join('; ') + ';'),
                                    this.fullscreenWrapper_.classList.add(
                                      'webvr-polyfill-fullscreen-wrapper',
                                    )
                                }
                                if (this.fullscreenElement_ == e) return this.fullscreenWrapper_
                                if (
                                  (this.fullscreenElement_ &&
                                    (this.originalParent_
                                      ? this.originalParent_.appendChild(this.fullscreenElement_)
                                      : this.fullscreenElement_.parentElement.removeChild(
                                          this.fullscreenElement_,
                                        )),
                                  (this.fullscreenElement_ = e),
                                  (this.originalParent_ = e.parentElement),
                                  this.originalParent_ || document.body.appendChild(e),
                                  !this.fullscreenWrapper_.parentElement)
                                ) {
                                  var n = this.fullscreenElement_.parentElement
                                  n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_),
                                    n.removeChild(this.fullscreenElement_)
                                }
                                this.fullscreenWrapper_.insertBefore(
                                  this.fullscreenElement_,
                                  this.fullscreenWrapper_.firstChild,
                                ),
                                  (this.fullscreenElementCachedStyle_ =
                                    this.fullscreenElement_.getAttribute('style'))
                                var r = this
                                function i() {
                                  if (r.fullscreenElement_) {
                                    var e = [
                                      'position: absolute',
                                      'top: 0',
                                      'left: 0',
                                      'width: ' + Math.max(screen.width, screen.height) + 'px',
                                      'height: ' + Math.min(screen.height, screen.width) + 'px',
                                      'border: 0',
                                      'margin: 0',
                                      'padding: 0',
                                    ]
                                    r.fullscreenElement_.setAttribute('style', e.join('; ') + ';')
                                  }
                                }
                                return i(), this.fullscreenWrapper_
                              }),
                              (Ne.prototype.removeFullscreenWrapper = function () {
                                if (this.fullscreenElement_) {
                                  var e = this.fullscreenElement_
                                  this.fullscreenElementCachedStyle_
                                    ? e.setAttribute('style', this.fullscreenElementCachedStyle_)
                                    : e.removeAttribute('style'),
                                    (this.fullscreenElement_ = null),
                                    (this.fullscreenElementCachedStyle_ = null)
                                  var t = this.fullscreenWrapper_.parentElement
                                  return (
                                    this.fullscreenWrapper_.removeChild(e),
                                    this.originalParent_ === t
                                      ? t.insertBefore(e, this.fullscreenWrapper_)
                                      : this.originalParent_ && this.originalParent_.appendChild(e),
                                    t.removeChild(this.fullscreenWrapper_),
                                    e
                                  )
                                }
                              }),
                              (Ne.prototype.requestPresent = function (e) {
                                var t = this.isPresenting,
                                  n = this
                                return (
                                  e instanceof Array ||
                                    (I(
                                      'VRDisplay.prototype.requestPresent with non-array argument',
                                      'an array of VRLayers as the first argument',
                                    ),
                                    (e = [e])),
                                  new Promise(function (r, i) {
                                    if (n.capabilities.canPresent)
                                      if (0 == e.length || e.length > n.capabilities.maxLayers)
                                        i(new Error('Invalid number of layers.'))
                                      else {
                                        var o = e[0]
                                        if (o.source) {
                                          var a = o.leftBounds || De,
                                            s = o.rightBounds || Oe
                                          if (t) {
                                            var u = n.layer_
                                            u.source !== o.source && (u.source = o.source)
                                            for (var h = 0; h < 4; h++)
                                              (u.leftBounds[h] = a[h]), (u.rightBounds[h] = s[h])
                                            return (
                                              n.wrapForFullscreen(n.layer_.source),
                                              n.updatePresent_(),
                                              void r()
                                            )
                                          }
                                          if (
                                            ((n.layer_ = {
                                              predistorted: o.predistorted,
                                              source: o.source,
                                              leftBounds: a.slice(0),
                                              rightBounds: s.slice(0),
                                            }),
                                            (n.waitingForPresent_ = !1),
                                            n.layer_ && n.layer_.source)
                                          ) {
                                            var d = n.wrapForFullscreen(n.layer_.source),
                                              p = function () {
                                                var e = x()
                                                ;(n.isPresenting = d === e),
                                                  n.isPresenting
                                                    ? (screen.orientation &&
                                                        screen.orientation.lock &&
                                                        screen.orientation
                                                          .lock('landscape-primary')
                                                          .catch(function (e) {
                                                            console.error(
                                                              'screen.orientation.lock() failed due to',
                                                              e.message,
                                                            )
                                                          }),
                                                      (n.waitingForPresent_ = !1),
                                                      n.beginPresent_(),
                                                      r())
                                                    : (screen.orientation &&
                                                        screen.orientation.unlock &&
                                                        screen.orientation.unlock(),
                                                      n.removeFullscreenWrapper(),
                                                      n.disableWakeLock(),
                                                      n.endPresent_(),
                                                      n.removeFullscreenListeners_()),
                                                  n.fireVRDisplayPresentChange_()
                                              },
                                              f = function () {
                                                n.waitingForPresent_ &&
                                                  (n.removeFullscreenWrapper(),
                                                  n.removeFullscreenListeners_(),
                                                  n.disableWakeLock(),
                                                  (n.waitingForPresent_ = !1),
                                                  (n.isPresenting = !1),
                                                  i(new Error('Unable to present.')))
                                              }
                                            n.addFullscreenListeners_(d, p, f),
                                              A(d)
                                                ? (n.enableWakeLock(), (n.waitingForPresent_ = !0))
                                                : (l() || c()) &&
                                                  (n.enableWakeLock(),
                                                  (n.isPresenting = !0),
                                                  n.beginPresent_(),
                                                  n.fireVRDisplayPresentChange_(),
                                                  r())
                                          }
                                          n.waitingForPresent_ ||
                                            l() ||
                                            (w(), i(new Error('Unable to present.')))
                                        } else r()
                                      }
                                    else i(new Error('VRDisplay is not capable of presenting.'))
                                  })
                                )
                              }),
                              (Ne.prototype.exitPresent = function () {
                                var e = this.isPresenting,
                                  t = this
                                return (
                                  (this.isPresenting = !1),
                                  (this.layer_ = null),
                                  this.disableWakeLock(),
                                  new Promise(function (n, r) {
                                    e
                                      ? (!w() &&
                                          l() &&
                                          (t.endPresent_(), t.fireVRDisplayPresentChange_()),
                                        c() &&
                                          (t.removeFullscreenWrapper(),
                                          t.removeFullscreenListeners_(),
                                          t.endPresent_(),
                                          t.fireVRDisplayPresentChange_()),
                                        n())
                                      : r(new Error('Was not presenting to VRDisplay.'))
                                  })
                                )
                              }),
                              (Ne.prototype.getLayers = function () {
                                return this.layer_ ? [this.layer_] : []
                              }),
                              (Ne.prototype.fireVRDisplayPresentChange_ = function () {
                                var e = new CustomEvent('vrdisplaypresentchange', {
                                  detail: { display: this },
                                })
                                window.dispatchEvent(e)
                              }),
                              (Ne.prototype.fireVRDisplayConnect_ = function () {
                                var e = new CustomEvent('vrdisplayconnect', {
                                  detail: { display: this },
                                })
                                window.dispatchEvent(e)
                              }),
                              (Ne.prototype.addFullscreenListeners_ = function (e, t, n) {
                                this.removeFullscreenListeners_(),
                                  (this.fullscreenEventTarget_ = e),
                                  (this.fullscreenChangeHandler_ = t),
                                  (this.fullscreenErrorHandler_ = n),
                                  t &&
                                    (document.fullscreenEnabled
                                      ? e.addEventListener('fullscreenchange', t, !1)
                                      : document.webkitFullscreenEnabled
                                      ? e.addEventListener('webkitfullscreenchange', t, !1)
                                      : document.mozFullScreenEnabled
                                      ? document.addEventListener('mozfullscreenchange', t, !1)
                                      : document.msFullscreenEnabled &&
                                        e.addEventListener('msfullscreenchange', t, !1)),
                                  n &&
                                    (document.fullscreenEnabled
                                      ? e.addEventListener('fullscreenerror', n, !1)
                                      : document.webkitFullscreenEnabled
                                      ? e.addEventListener('webkitfullscreenerror', n, !1)
                                      : document.mozFullScreenEnabled
                                      ? document.addEventListener('mozfullscreenerror', n, !1)
                                      : document.msFullscreenEnabled &&
                                        e.addEventListener('msfullscreenerror', n, !1))
                              }),
                              (Ne.prototype.removeFullscreenListeners_ = function () {
                                if (this.fullscreenEventTarget_) {
                                  var e = this.fullscreenEventTarget_
                                  if (this.fullscreenChangeHandler_) {
                                    var t = this.fullscreenChangeHandler_
                                    e.removeEventListener('fullscreenchange', t, !1),
                                      e.removeEventListener('webkitfullscreenchange', t, !1),
                                      document.removeEventListener('mozfullscreenchange', t, !1),
                                      e.removeEventListener('msfullscreenchange', t, !1)
                                  }
                                  if (this.fullscreenErrorHandler_) {
                                    var n = this.fullscreenErrorHandler_
                                    e.removeEventListener('fullscreenerror', n, !1),
                                      e.removeEventListener('webkitfullscreenerror', n, !1),
                                      document.removeEventListener('mozfullscreenerror', n, !1),
                                      e.removeEventListener('msfullscreenerror', n, !1)
                                  }
                                  ;(this.fullscreenEventTarget_ = null),
                                    (this.fullscreenChangeHandler_ = null),
                                    (this.fullscreenErrorHandler_ = null)
                                }
                              }),
                              (Ne.prototype.enableWakeLock = function () {
                                this.wakelock_ && this.wakelock_.enable()
                              }),
                              (Ne.prototype.disableWakeLock = function () {
                                this.wakelock_ && this.wakelock_.disable()
                              }),
                              (Ne.prototype.beginPresent_ = function () {}),
                              (Ne.prototype.endPresent_ = function () {}),
                              (Ne.prototype.submitFrame = function (e) {}),
                              (Ne.prototype.getEyeParameters = function (e) {
                                return null
                              })
                            var Ue = {
                                ADDITIONAL_VIEWERS: [],
                                DEFAULT_VIEWER: '',
                                MOBILE_WAKE_LOCK: !0,
                                DEBUG: !1,
                                DPDB_URL: 'https://dpdb.webvr.rocks/dpdb.json',
                                K_FILTER: 0.98,
                                PREDICTION_TIME_S: 0.04,
                                CARDBOARD_UI_DISABLED: !1,
                                ROTATE_INSTRUCTIONS_DISABLED: !1,
                                YAW_ONLY: !1,
                                BUFFER_SCALE: 0.5,
                                DIRTY_SUBMIT_FRAME_BINDINGS: !1,
                              },
                              He = { LEFT: 'left', RIGHT: 'right' }
                            function Ge(e) {
                              var t = S({}, Ue)
                              ;(e = S(t, e || {})),
                                Ne.call(this, { wakelock: e.MOBILE_WAKE_LOCK }),
                                (this.config = e),
                                (this.displayName = 'Cardboard VRDisplay'),
                                (this.capabilities = new ke({
                                  hasPosition: !1,
                                  hasOrientation: !0,
                                  hasExternalDisplay: !1,
                                  canPresent: !0,
                                  maxLayers: 1,
                                })),
                                (this.stageParameters = null),
                                (this.bufferScale_ = this.config.BUFFER_SCALE),
                                (this.poseSensor_ = new we(this.config)),
                                (this.distorter_ = null),
                                (this.cardboardUI_ = null),
                                (this.dpdb_ = new he(
                                  this.config.DPDB_URL,
                                  this.onDeviceParamsUpdated_.bind(this),
                                )),
                                (this.deviceInfo_ = new le(
                                  this.dpdb_.getDeviceParams(),
                                  e.ADDITIONAL_VIEWERS,
                                )),
                                (this.viewerSelector_ = new Se(e.DEFAULT_VIEWER)),
                                this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),
                                this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),
                                this.config.ROTATE_INSTRUCTIONS_DISABLED ||
                                  (this.rotateInstructions_ = new Ee()),
                                l() && window.addEventListener('resize', this.onResize_.bind(this))
                            }
                            return (
                              (Ge.prototype = Object.create(Ne.prototype)),
                              (Ge.prototype._getPose = function () {
                                return {
                                  position: null,
                                  orientation: this.poseSensor_.getOrientation(),
                                  linearVelocity: null,
                                  linearAcceleration: null,
                                  angularVelocity: null,
                                  angularAcceleration: null,
                                }
                              }),
                              (Ge.prototype._resetPose = function () {
                                this.poseSensor_.resetPose && this.poseSensor_.resetPose()
                              }),
                              (Ge.prototype._getFieldOfView = function (e) {
                                var t
                                if (e == He.LEFT) t = this.deviceInfo_.getFieldOfViewLeftEye()
                                else {
                                  if (e != He.RIGHT)
                                    return console.error('Invalid eye provided: %s', e), null
                                  t = this.deviceInfo_.getFieldOfViewRightEye()
                                }
                                return t
                              }),
                              (Ge.prototype._getEyeOffset = function (e) {
                                var t
                                if (e == He.LEFT)
                                  t = [0.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0]
                                else {
                                  if (e != He.RIGHT)
                                    return console.error('Invalid eye provided: %s', e), null
                                  t = [0.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0]
                                }
                                return t
                              }),
                              (Ge.prototype.getEyeParameters = function (e) {
                                var t = this._getEyeOffset(e),
                                  n = this._getFieldOfView(e),
                                  r = {
                                    offset: t,
                                    renderWidth:
                                      0.5 * this.deviceInfo_.device.width * this.bufferScale_,
                                    renderHeight:
                                      this.deviceInfo_.device.height * this.bufferScale_,
                                  }
                                return (
                                  Object.defineProperty(r, 'fieldOfView', {
                                    enumerable: !0,
                                    get: function () {
                                      return (
                                        I('VRFieldOfView', "VRFrameData's projection matrices"), n
                                      )
                                    },
                                  }),
                                  r
                                )
                              }),
                              (Ge.prototype.onDeviceParamsUpdated_ = function (e) {
                                this.config.DEBUG &&
                                  console.log('DPDB reported that device params were updated.'),
                                  this.deviceInfo_.updateDeviceParams(e),
                                  this.distorter_ &&
                                    this.distorter_.updateDeviceInfo(this.deviceInfo_)
                              }),
                              (Ge.prototype.updateBounds_ = function () {
                                this.layer_ &&
                                  this.distorter_ &&
                                  (this.layer_.leftBounds || this.layer_.rightBounds) &&
                                  this.distorter_.setTextureBounds(
                                    this.layer_.leftBounds,
                                    this.layer_.rightBounds,
                                  )
                              }),
                              (Ge.prototype.beginPresent_ = function () {
                                var e = this.layer_.source.getContext('webgl')
                                e || (e = this.layer_.source.getContext('experimental-webgl')),
                                  e || (e = this.layer_.source.getContext('webgl2')),
                                  e &&
                                    (this.layer_.predistorted
                                      ? this.config.CARDBOARD_UI_DISABLED ||
                                        ((e.canvas.width = y() * this.bufferScale_),
                                        (e.canvas.height = b() * this.bufferScale_),
                                        (this.cardboardUI_ = new J(e)))
                                      : (this.config.CARDBOARD_UI_DISABLED ||
                                          (this.cardboardUI_ = new J(e)),
                                        (this.distorter_ = new U(
                                          e,
                                          this.cardboardUI_,
                                          this.config.BUFFER_SCALE,
                                          this.config.DIRTY_SUBMIT_FRAME_BINDINGS,
                                        )),
                                        this.distorter_.updateDeviceInfo(this.deviceInfo_)),
                                    this.cardboardUI_ &&
                                      this.cardboardUI_.listen(
                                        function (e) {
                                          this.viewerSelector_.show(
                                            this.layer_.source.parentElement,
                                          ),
                                            e.stopPropagation(),
                                            e.preventDefault()
                                        }.bind(this),
                                        function (e) {
                                          this.exitPresent(),
                                            e.stopPropagation(),
                                            e.preventDefault()
                                        }.bind(this),
                                      ),
                                    this.rotateInstructions_ &&
                                      (v() && T()
                                        ? this.rotateInstructions_.showTemporarily(
                                            3e3,
                                            this.layer_.source.parentElement,
                                          )
                                        : this.rotateInstructions_.update()),
                                    (this.orientationHandler =
                                      this.onOrientationChange_.bind(this)),
                                    window.addEventListener(
                                      'orientationchange',
                                      this.orientationHandler,
                                    ),
                                    (this.vrdisplaypresentchangeHandler =
                                      this.updateBounds_.bind(this)),
                                    window.addEventListener(
                                      'vrdisplaypresentchange',
                                      this.vrdisplaypresentchangeHandler,
                                    ),
                                    this.fireVRDisplayDeviceParamsChange_())
                              }),
                              (Ge.prototype.endPresent_ = function () {
                                this.distorter_ &&
                                  (this.distorter_.destroy(), (this.distorter_ = null)),
                                  this.cardboardUI_ &&
                                    (this.cardboardUI_.destroy(), (this.cardboardUI_ = null)),
                                  this.rotateInstructions_ && this.rotateInstructions_.hide(),
                                  this.viewerSelector_.hide(),
                                  window.removeEventListener(
                                    'orientationchange',
                                    this.orientationHandler,
                                  ),
                                  window.removeEventListener(
                                    'vrdisplaypresentchange',
                                    this.vrdisplaypresentchangeHandler,
                                  )
                              }),
                              (Ge.prototype.updatePresent_ = function () {
                                this.endPresent_(), this.beginPresent_()
                              }),
                              (Ge.prototype.submitFrame = function (e) {
                                if (this.distorter_)
                                  this.updateBounds_(), this.distorter_.submitFrame()
                                else if (this.cardboardUI_ && this.layer_) {
                                  var t = this.layer_.source.getContext('webgl')
                                  t || (t = this.layer_.source.getContext('experimental-webgl')),
                                    t || (t = this.layer_.source.getContext('webgl2'))
                                  var n = t.canvas
                                  ;(n.width == this.lastWidth && n.height == this.lastHeight) ||
                                    this.cardboardUI_.onResize(),
                                    (this.lastWidth = n.width),
                                    (this.lastHeight = n.height),
                                    this.cardboardUI_.render()
                                }
                              }),
                              (Ge.prototype.onOrientationChange_ = function (e) {
                                this.viewerSelector_.hide(),
                                  this.rotateInstructions_ && this.rotateInstructions_.update(),
                                  this.onResize_()
                              }),
                              (Ge.prototype.onResize_ = function (e) {
                                if (this.layer_) {
                                  var t = this.layer_.source.getContext('webgl')
                                  t || (t = this.layer_.source.getContext('experimental-webgl')),
                                    t || (t = this.layer_.source.getContext('webgl2'))
                                  var n = [
                                    'position: absolute',
                                    'top: 0',
                                    'left: 0',
                                    'width: 100vw',
                                    'height: 100vh',
                                    'border: 0',
                                    'margin: 0',
                                    'padding: 0px',
                                    'box-sizing: content-box',
                                  ]
                                  t.canvas.setAttribute('style', n.join('; ') + ';'), C(t.canvas)
                                }
                              }),
                              (Ge.prototype.onViewerChanged_ = function (e) {
                                this.deviceInfo_.setViewer(e),
                                  this.distorter_ &&
                                    this.distorter_.updateDeviceInfo(this.deviceInfo_),
                                  this.fireVRDisplayDeviceParamsChange_()
                              }),
                              (Ge.prototype.fireVRDisplayDeviceParamsChange_ = function () {
                                var e = new CustomEvent('vrdisplaydeviceparamschange', {
                                  detail: { vrdisplay: this, deviceInfo: this.deviceInfo_ },
                                })
                                window.dispatchEvent(e)
                              }),
                              (Ge.VRFrameData = Fe),
                              (Ge.VRDisplay = Ne),
                              Ge
                            )
                          }),
                            (e.exports = r())
                        }),
                      ),
                      l = '0.10.12',
                      c = {
                        ADDITIONAL_VIEWERS: [],
                        DEFAULT_VIEWER: '',
                        PROVIDE_MOBILE_VRDISPLAY: !0,
                        MOBILE_WAKE_LOCK: !0,
                        DEBUG: !1,
                        DPDB_URL: 'https://dpdb.webvr.rocks/dpdb.json',
                        K_FILTER: 0.98,
                        PREDICTION_TIME_S: 0.04,
                        CARDBOARD_UI_DISABLED: !1,
                        ROTATE_INSTRUCTIONS_DISABLED: !1,
                        YAW_ONLY: !1,
                        BUFFER_SCALE: 0.5,
                        DIRTY_SUBMIT_FRAME_BINDINGS: !1,
                      }
                    function u(e) {
                      ;(this.config = a(a({}, c), e)),
                        (this.polyfillDisplays = []),
                        (this.enabled = !1),
                        (this.hasNative = 'getVRDisplays' in navigator),
                        (this.native = {}),
                        (this.native.getVRDisplays = navigator.getVRDisplays),
                        (this.native.VRFrameData = window.VRFrameData),
                        (this.native.VRDisplay = window.VRDisplay),
                        (!this.hasNative || (this.config.PROVIDE_MOBILE_VRDISPLAY && i())) &&
                          (this.enable(),
                          this.getVRDisplays().then(function (e) {
                            e && e[0] && e[0].fireVRDisplayConnect_ && e[0].fireVRDisplayConnect_()
                          }))
                    }
                    ;(u.prototype.getPolyfillDisplays = function () {
                      if (this._polyfillDisplaysPopulated) return this.polyfillDisplays
                      if (i()) {
                        var e = new s({
                          ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS,
                          DEFAULT_VIEWER: this.config.DEFAULT_VIEWER,
                          MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK,
                          DEBUG: this.config.DEBUG,
                          DPDB_URL: this.config.DPDB_URL,
                          CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED,
                          K_FILTER: this.config.K_FILTER,
                          PREDICTION_TIME_S: this.config.PREDICTION_TIME_S,
                          ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED,
                          YAW_ONLY: this.config.YAW_ONLY,
                          BUFFER_SCALE: this.config.BUFFER_SCALE,
                          DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS,
                        })
                        this.polyfillDisplays.push(e)
                      }
                      return (this._polyfillDisplaysPopulated = !0), this.polyfillDisplays
                    }),
                      (u.prototype.enable = function () {
                        if (((this.enabled = !0), this.hasNative && this.native.VRFrameData)) {
                          var e = this.native.VRFrameData,
                            t = new this.native.VRFrameData(),
                            n = this.native.VRDisplay.prototype.getFrameData
                          window.VRDisplay.prototype.getFrameData = function (r) {
                            r instanceof e
                              ? n.call(this, r)
                              : (n.call(this, t),
                                (r.pose = t.pose),
                                o(t.leftProjectionMatrix, r.leftProjectionMatrix),
                                o(t.rightProjectionMatrix, r.rightProjectionMatrix),
                                o(t.leftViewMatrix, r.leftViewMatrix),
                                o(t.rightViewMatrix, r.rightViewMatrix))
                          }
                        }
                        ;(navigator.getVRDisplays = this.getVRDisplays.bind(this)),
                          (window.VRDisplay = s.VRDisplay),
                          (window.VRFrameData = s.VRFrameData)
                      }),
                      (u.prototype.getVRDisplays = function () {
                        var e = this
                        return (
                          this.config,
                          this.hasNative
                            ? this.native.getVRDisplays.call(navigator).then(function (t) {
                                return t.length > 0 ? t : e.getPolyfillDisplays()
                              })
                            : Promise.resolve(this.getPolyfillDisplays())
                        )
                      }),
                      (u.version = l),
                      (u.VRFrameData = s.VRFrameData),
                      (u.VRDisplay = s.VRDisplay)
                    var h = Object.freeze({ default: u }),
                      d = (h && u) || h
                    return (
                      'undefined' !== typeof t &&
                        t.window &&
                        (t.document || (t.document = t.window.document),
                        t.navigator || (t.navigator = t.window.navigator)),
                      d
                    )
                  })
                }.call(
                  this,
                  'undefined' !== typeof r.g
                    ? r.g
                    : 'undefined' !== typeof self
                    ? self
                    : 'undefined' !== typeof window
                    ? window
                    : {},
                ))
              },
              {},
            ],
            69: [
              function (e, t, n) {
                var r = /\n/,
                  i = '\n',
                  o = /\s/
                function a(e, t, n, r) {
                  var i = e.indexOf(t, n)
                  return -1 === i || i > r ? r : i
                }
                function s(e) {
                  return o.test(e)
                }
                function l(e, t, n, i, o) {
                  for (var a = [], s = n, l = n; l < i && l < t.length; l++) {
                    var c = t.charAt(l),
                      u = r.test(c)
                    if (u || l === i - 1) {
                      var h = e(t, s, u ? l : l + 1, o)
                      a.push(h), (s = l + 1)
                    }
                  }
                  return a
                }
                function c(e, t, n, r, o, l) {
                  var c = [],
                    u = o
                  for ('nowrap' === l && (u = Number.MAX_VALUE); n < r && n < t.length; ) {
                    for (var h = a(t, i, n, r); n < h && s(t.charAt(n)); ) n++
                    var d = e(t, n, h, u),
                      p = n + (d.end - d.start),
                      f = p + i.length
                    if (p < h) {
                      for (; p > n && !s(t.charAt(p)); ) p--
                      if (p === n) f > n + i.length && f--, (p = f)
                      else for (f = p; p > n && s(t.charAt(p - i.length)); ) p--
                    }
                    if (p >= n) {
                      var m = e(t, n, p, u)
                      c.push(m)
                    }
                    n = f
                  }
                  return c
                }
                function u(e, t, n, r) {
                  return { start: t, end: t + Math.min(r, n - t) }
                }
                ;(t.exports = function (e, n) {
                  return t.exports
                    .lines(e, n)
                    .map(function (t) {
                      return e.substring(t.start, t.end)
                    })
                    .join('\n')
                }),
                  (t.exports.lines = function (e, t) {
                    if (0 === (t = t || {}).width && 'nowrap' !== t.mode) return []
                    e = e || ''
                    var n = 'number' === typeof t.width ? t.width : Number.MAX_VALUE,
                      r = Math.max(0, t.start || 0),
                      i = 'number' === typeof t.end ? t.end : e.length,
                      o = t.mode,
                      a = t.measure || u
                    return 'pre' === o ? l(a, e, r, i, n) : c(a, e, r, i, n, o)
                  })
              },
              {},
            ],
            70: [
              function (t, n, r) {
                'use strict'
                var i = t('global/window'),
                  o = t('is-function'),
                  a = t('parse-headers'),
                  s = t('xtend')
                function l(e, t) {
                  for (var n = 0; n < e.length; n++) t(e[n])
                }
                function c(e) {
                  for (var t in e) if (e.hasOwnProperty(t)) return !1
                  return !0
                }
                function u(e, t, n) {
                  var r = e
                  return (
                    o(t)
                      ? ((n = t), 'string' === typeof e && (r = { uri: e }))
                      : (r = s(t, { uri: e })),
                    (r.callback = n),
                    r
                  )
                }
                function h(e, t, n) {
                  return d((t = u(e, t, n)))
                }
                function d(t) {
                  if ('undefined' === typeof t.callback)
                    throw new Error('callback argument missing')
                  var n = !1,
                    r = function (e, r, i) {
                      n || ((n = !0), t.callback(e, r, i))
                    }
                  function i() {
                    4 === f.readyState && setTimeout(l, 0)
                  }
                  function o() {
                    var t = void 0
                    if (((t = f.response ? f.response : f.responseText || p(f)), w))
                      try {
                        t = JSON.parse(t)
                      } catch (e) {}
                    return t
                  }
                  function s(e) {
                    return (
                      clearTimeout(m),
                      e instanceof Error ||
                        (e = new Error('' + (e || 'Unknown XMLHttpRequest Error'))),
                      (e.statusCode = 0),
                      r(e, x)
                    )
                  }
                  function l() {
                    if (!d) {
                      var e
                      clearTimeout(m),
                        (e =
                          t.useXDR && void 0 === f.status
                            ? 200
                            : 1223 === f.status
                            ? 204
                            : f.status)
                      var n = x,
                        i = null
                      return (
                        0 !== e
                          ? ((n = {
                              body: o(),
                              statusCode: e,
                              method: g,
                              headers: {},
                              url: v,
                              rawRequest: f,
                            }),
                            f.getAllResponseHeaders && (n.headers = a(f.getAllResponseHeaders())))
                          : (i = new Error('Internal XMLHttpRequest Error')),
                        r(i, n, n.body)
                      )
                    }
                  }
                  var u,
                    d,
                    f = t.xhr || null
                  f || (f = t.cors || t.useXDR ? new h.XDomainRequest() : new h.XMLHttpRequest())
                  var m,
                    v = (f.url = t.uri || t.url),
                    g = (f.method = t.method || 'GET'),
                    y = t.body || t.data,
                    b = (f.headers = t.headers || {}),
                    A = !!t.sync,
                    w = !1,
                    x = {
                      body: void 0,
                      headers: {},
                      statusCode: 0,
                      method: g,
                      url: v,
                      rawRequest: f,
                    }
                  if (
                    ('json' in t &&
                      !1 !== t.json &&
                      ((w = !0),
                      b.accept || b.Accept || (b.Accept = 'application/json'),
                      'GET' !== g &&
                        'HEAD' !== g &&
                        (b['content-type'] ||
                          b['Content-Type'] ||
                          (b['Content-Type'] = 'application/json'),
                        (y = JSON.stringify(!0 === t.json ? y : t.json)))),
                    (f.onreadystatechange = i),
                    (f.onload = l),
                    (f.onerror = s),
                    (f.onprogress = function () {}),
                    (f.onabort = function () {
                      d = !0
                    }),
                    (f.ontimeout = s),
                    f.open(g, v, !A, t.username, t.password),
                    A || (f.withCredentials = !!t.withCredentials),
                    !A &&
                      t.timeout > 0 &&
                      (m = setTimeout(function () {
                        if (!d) {
                          ;(d = !0), f.abort('timeout')
                          var e = new Error('XMLHttpRequest timeout')
                          ;(e.code = 'ETIMEDOUT'), s(e)
                        }
                      }, t.timeout)),
                    f.setRequestHeader)
                  )
                    for (u in b) b.hasOwnProperty(u) && f.setRequestHeader(u, b[u])
                  else if (t.headers && !c(t.headers))
                    throw new Error('Headers cannot be set on an XDomainRequest object')
                  return (
                    'responseType' in t && (f.responseType = t.responseType),
                    'beforeSend' in t && 'function' === typeof t.beforeSend && t.beforeSend(f),
                    f.send(y || null),
                    f
                  )
                }
                function p(t) {
                  try {
                    if ('document' === t.responseType) return t.responseXML
                    var n =
                      t.responseXML && 'parsererror' === t.responseXML.documentElement.nodeName
                    if ('' === t.responseType && !n) return t.responseXML
                  } catch (e) {}
                  return null
                }
                function f() {}
                ;(n.exports = h),
                  (n.exports.default = h),
                  (h.XMLHttpRequest = i.XMLHttpRequest || f),
                  (h.XDomainRequest =
                    'withCredentials' in new h.XMLHttpRequest()
                      ? h.XMLHttpRequest
                      : i.XDomainRequest),
                  l(['get', 'put', 'post', 'patch', 'head', 'delete'], function (e) {
                    h['delete' === e ? 'del' : e] = function (t, n, r) {
                      return ((n = u(t, n, r)).method = e.toUpperCase()), d(n)
                    }
                  })
              },
              { 'global/window': 27, 'is-function': 33, 'parse-headers': 47, xtend: 72 },
            ],
            71: [
              function (e, t, n) {
                t.exports =
                  'undefined' !== typeof self.DOMParser
                    ? function (e) {
                        return new self.DOMParser().parseFromString(e, 'application/xml')
                      }
                    : 'undefined' !== typeof self.ActiveXObject &&
                      new self.ActiveXObject('Microsoft.XMLDOM')
                    ? function (e) {
                        var t = new self.ActiveXObject('Microsoft.XMLDOM')
                        return (t.async = 'false'), t.loadXML(e), t
                      }
                    : function (e) {
                        var t = document.createElement('div')
                        return (t.innerHTML = e), t
                      }
              },
              {},
            ],
            72: [
              function (e, t, n) {
                t.exports = i
                var r = Object.prototype.hasOwnProperty
                function i() {
                  for (var e = {}, t = 0; t < arguments.length; t++) {
                    var n = arguments[t]
                    for (var i in n) r.call(n, i) && (e[i] = n[i])
                  }
                  return e
                }
              },
              {},
            ],
            73: [
              function (e, t, n) {
                t.exports = {
                  name: 'aframe',
                  version: '1.2.0',
                  description: 'A web framework for building virtual reality experiences.',
                  homepage: 'https://aframe.io/',
                  main: 'dist/aframe-master.js',
                  scripts: {
                    browserify: "browserify src/index.js -s 'AFRAME' -p browserify-derequire",
                    build:
                      'shx mkdir -p build/ && npm run browserify -- --debug -t [ envify --INSPECTOR_VERSION dev ] -o build/aframe.js',
                    codecov: 'codecov',
                    dev: 'npm run build && cross-env INSPECTOR_VERSION=dev node ./scripts/budo -t envify',
                    dist: 'node scripts/updateVersionLog.js && npm run dist:min && npm run dist:max',
                    'dist:max':
                      'npm run browserify -s -- --debug | exorcist dist/aframe-master.js.map > dist/aframe-master.js',
                    'dist:min':
                      'npm run browserify -s -- --debug -p [ minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map ] -o dist/aframe-master.min.js',
                    docs: 'markserv --dir docs --port 9001',
                    preghpages: 'node ./scripts/preghpages.js',
                    ghpages: 'ghpages -p gh-pages/',
                    lint: 'semistandard -v | snazzy',
                    'lint:fix': 'semistandard --fix',
                    precommit: 'npm run lint',
                    prepush: 'node scripts/testOnlyCheck.js',
                    prerelease: 'node scripts/release.js 1.0.4 1.1.0',
                    start: 'npm run dev',
                    'start:https': 'cross-env SSL=true npm run dev',
                    test: 'karma start ./tests/karma.conf.js',
                    'test:docs': 'node scripts/docsLint.js',
                    'test:firefox': 'npm test -- --browsers Firefox',
                    'test:chrome': 'npm test -- --browsers Chrome',
                    'test:nobrowser': 'NO_BROWSER=true npm test',
                    'test:node': 'mocha --ui tdd tests/node',
                  },
                  repository: 'aframevr/aframe',
                  license: 'MIT',
                  files: ['dist/*', 'docs/**/*', 'src/**/*', 'vendor/**/*'],
                  dependencies: {
                    'custom-event-polyfill': '^1.0.6',
                    debug: 'ngokevin/debug#noTimestamp',
                    'deep-assign': '^2.0.0',
                    'document-register-element':
                      'dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90',
                    'load-bmfont': '^1.2.3',
                    'object-assign': '^4.0.1',
                    present: '0.0.6',
                    'promise-polyfill': '^3.1.0',
                    'super-animejs': '^3.1.0',
                    'super-three': '^0.125.1',
                    'three-bmfont-text':
                      'dmarcos/three-bmfont-text#1babdf8507c731a18f8af3b807292e2b9740955e',
                    'webvr-polyfill': '^0.10.12',
                  },
                  devDependencies: {
                    browserify: '^13.1.0',
                    'browserify-css': '^0.8.4',
                    'browserify-derequire': '^0.9.4',
                    'browserify-istanbul': '^2.0.0',
                    budo: '^9.2.0',
                    chai: '^3.5.0',
                    'chai-shallow-deep-equal': '^1.4.0',
                    chalk: '^1.1.3',
                    codecov: '^1.0.1',
                    'cross-env': '^5.0.1',
                    envify: '^3.4.1',
                    exorcist: '^0.4.0',
                    ghpages: '0.0.8',
                    'git-rev': '^0.2.1',
                    glob: '^7.1.1',
                    husky: '^0.11.7',
                    istanbul: '^0.4.5',
                    jsdom: '^9.11.0',
                    karma: '1.4.1',
                    'karma-browserify': '^5.1.0',
                    'karma-chai-shallow-deep-equal': '0.0.4',
                    'karma-chrome-launcher': '^2.0.0',
                    'karma-coverage': '^1.1.1',
                    'karma-env-preprocessor': '^0.1.1',
                    'karma-firefox-launcher': '^1.2.0',
                    'karma-mocha': '^1.1.1',
                    'karma-mocha-reporter': '^2.1.0',
                    'karma-sinon-chai': '1.2.4',
                    lolex: '^1.5.1',
                    markserv: 'github:sukima/markserv#feature/fix-broken-websoketio-link',
                    minifyify: '^7.3.3',
                    mocha: '^3.0.2',
                    'mozilla-download': '^1.1.1',
                    'replace-in-file': '^2.5.3',
                    semistandard: '^9.0.0',
                    shelljs: '^0.7.7',
                    shx: '^0.2.2',
                    sinon: '^1.17.5',
                    'sinon-chai': '2.8.0',
                    snazzy: '^5.0.0',
                    'too-wordy': 'ngokevin/too-wordy',
                    uglifyjs: '^2.4.10',
                    'write-good': '^0.9.1',
                  },
                  link: !0,
                  browserify: { transform: ['browserify-css', 'envify'] },
                  semistandard: {
                    ignore: ['build/**', 'dist/**', 'examples/**/shaders/*.js', '**/vendor/**'],
                  },
                  keywords: [
                    '3d',
                    'aframe',
                    'cardboard',
                    'components',
                    'oculus',
                    'three',
                    'three.js',
                    'rift',
                    'vive',
                    'vr',
                    'web-components',
                    'webvr',
                  ],
                  'browserify-css': { minify: !0 },
                  engines: { node: '>= 4.6.0', npm: '^2.15.9' },
                }
              },
              {},
            ],
            74: [
              function (e, t, n) {
                var r = e('super-animejs'),
                  i = e('../core/component').components,
                  o = e('../core/component').registerComponent,
                  a = e('../lib/three'),
                  s = e('../utils'),
                  l = new a.Color(),
                  c = new a.Color(),
                  u = s.entity.getComponentProperty,
                  h = s.entity.setComponentProperty,
                  d = {},
                  p = 'color',
                  f = 'position',
                  m = 'rotation',
                  v = 'scale',
                  g = 'components',
                  y = 'object3D'
                function b(e, t) {
                  var n, r, o, a
                  return (
                    (r = (o = t.split('.'))[0]),
                    (a = o[1]),
                    (n = e.components[r] || i[r])
                      ? a && !n.schema[a]
                        ? null
                        : a
                        ? n.schema[a].type
                        : n.schema.type
                      : null
                  )
                }
                function A(e) {
                  ;(e.x = a.Math.degToRad(e.x)),
                    (e.y = a.Math.degToRad(e.y)),
                    (e.z = a.Math.degToRad(e.z))
                }
                function w(e, t, n) {
                  var r
                  for (r = 0; r < t.length; r++) e.addEventListener(t[r], n)
                }
                function x(e, t, n) {
                  var r
                  for (r = 0; r < t.length; r++) e.removeEventListener(t[r], n)
                }
                function E(e, t) {
                  var n, r, i
                  for (r = _(t), i = e, n = 0; n < r.length; n++) i = i[r[n]]
                  if (void 0 === i)
                    throw (
                      (console.log(e),
                      new Error('[animation] property (' + t + ') could not be found'))
                    )
                  return i
                }
                function M(e, t, n, r) {
                  var i, o, s, l
                  for (
                    t.startsWith('object3D.rotation') && (n = a.Math.degToRad(n)),
                      o = _(t),
                      l = e,
                      i = 0;
                    i < o.length - 1;
                    i++
                  )
                    l = l[o[i]]
                  ;(s = o[o.length - 1]),
                    r !== p
                      ? (l[s] = n)
                      : 'r' in l[s]
                      ? ((l[s].r = n.r), (l[s].g = n.g), (l[s].b = n.b))
                      : ((l[s].x = n.r), (l[s].y = n.g), (l[s].z = n.b))
                }
                function _(e) {
                  return e in d || (d[e] = e.split('.')), d[e]
                }
                function T(e) {
                  return e.isRawProperty || e.property.startsWith(g) || e.property.startsWith(y)
                }
                t.exports.Component = o('animation', {
                  schema: {
                    autoplay: { default: !0 },
                    delay: { default: 0 },
                    dir: { default: '' },
                    dur: { default: 1e3 },
                    easing: { default: 'easeInQuad' },
                    elasticity: { default: 400 },
                    enabled: { default: !0 },
                    from: { default: '' },
                    loop: {
                      default: 0,
                      parse: function (e) {
                        return (
                          !0 === e || 'true' === e || (!1 !== e && 'false' !== e && parseInt(e, 10))
                        )
                      },
                    },
                    property: { default: '' },
                    startEvents: { type: 'array' },
                    pauseEvents: { type: 'array' },
                    resumeEvents: { type: 'array' },
                    round: { default: !1 },
                    to: { default: '' },
                    type: { default: '' },
                    isRawProperty: { default: !1 },
                  },
                  multiple: !0,
                  init: function () {
                    var e = this
                    ;(this.eventDetail = { name: this.attrName }),
                      (this.time = 0),
                      (this.animation = null),
                      (this.animationIsPlaying = !1),
                      (this.onStartEvent = this.onStartEvent.bind(this)),
                      (this.beginAnimation = this.beginAnimation.bind(this)),
                      (this.pauseAnimation = this.pauseAnimation.bind(this)),
                      (this.resumeAnimation = this.resumeAnimation.bind(this)),
                      (this.fromColor = {}),
                      (this.toColor = {}),
                      (this.targets = {}),
                      (this.targetsArray = []),
                      (this.updateConfigForDefault = this.updateConfigForDefault.bind(this)),
                      (this.updateConfigForRawColor = this.updateConfigForRawColor.bind(this)),
                      (this.config = {
                        complete: function () {
                          ;(e.animationIsPlaying = !1),
                            e.el.emit('animationcomplete', e.eventDetail, !1),
                            e.id && e.el.emit('animationcomplete__' + e.id, e.eventDetail, !1)
                        },
                      })
                  },
                  update: function (e) {
                    var t = this.config,
                      n = this.data
                    ;(this.animationIsPlaying = !1),
                      this.data.enabled &&
                        n.property &&
                        ((t.autoplay = !1),
                        (t.direction = n.dir),
                        (t.duration = n.dur),
                        (t.easing = n.easing),
                        (t.elasticity = n.elasticity),
                        (t.loop = n.loop),
                        (t.round = n.round),
                        this.createAndStartAnimation())
                  },
                  tick: function (e, t) {
                    this.animationIsPlaying && ((this.time += t), this.animation.tick(this.time))
                  },
                  remove: function () {
                    this.pauseAnimation(), this.removeEventListeners()
                  },
                  pause: function () {
                    ;(this.paused = !0),
                      (this.pausedWasPlaying = this.animationIsPlaying),
                      this.pauseAnimation(),
                      this.removeEventListeners()
                  },
                  play: function () {
                    this.paused &&
                      ((this.paused = !1),
                      this.addEventListeners(),
                      this.pausedWasPlaying &&
                        (this.resumeAnimation(), (this.pausedWasPlaying = !1)))
                  },
                  createAndStartAnimation: function () {
                    var e = this.data
                    this.updateConfig(),
                      (this.animationIsPlaying = !1),
                      (this.animation = r(this.config)),
                      (this.animation.began = !0),
                      this.removeEventListeners(),
                      this.addEventListeners(),
                      !e.autoplay ||
                        (e.startEvents && e.startEvents.length) ||
                        (e.delay ? setTimeout(this.beginAnimation, e.delay) : this.beginAnimation())
                  },
                  beginAnimation: function () {
                    this.updateConfig(),
                      (this.animation.began = !0),
                      (this.time = 0),
                      (this.animationIsPlaying = !0),
                      this.stopRelatedAnimations(),
                      this.el.emit('animationbegin', this.eventDetail, !1)
                  },
                  pauseAnimation: function () {
                    this.animationIsPlaying = !1
                  },
                  resumeAnimation: function () {
                    this.animationIsPlaying = !0
                  },
                  onStartEvent: function () {
                    this.data.enabled &&
                      (this.updateConfig(),
                      this.animation && this.animation.pause(),
                      (this.animation = r(this.config)),
                      this.data.delay
                        ? setTimeout(this.beginAnimation, this.data.delay)
                        : this.beginAnimation())
                  },
                  updateConfigForRawColor: function () {
                    var e,
                      t,
                      n,
                      r = this.config,
                      i = this.data,
                      o = this.el
                    if (!this.waitComponentInitRawProperty(this.updateConfigForRawColor)) {
                      for (t in ((e = '' === i.from ? E(o, i.property) : i.from),
                      (n = i.to),
                      this.setColorConfig(e, n),
                      (e = this.fromColor),
                      (n = this.toColor),
                      (this.targetsArray.length = 0),
                      this.targetsArray.push(e),
                      (r.targets = this.targetsArray),
                      n))
                        r[t] = n[t]
                      r.update = (function () {
                        var e = {}
                        return function (t) {
                          var n
                          ;((n = t.animatables[0].target).r === e.r &&
                            n.g === e.g &&
                            n.b === e.b) ||
                            M(o, i.property, n, i.type)
                        }
                      })()
                    }
                  },
                  updateConfigForDefault: function () {
                    var e,
                      t,
                      n,
                      r = this.config,
                      i = this.data,
                      o = this.el
                    this.waitComponentInitRawProperty(this.updateConfigForDefault) ||
                      ((e = '' === i.from ? (T(i) ? E(o, i.property) : u(o, i.property)) : i.from),
                      (n = i.to),
                      isNaN(e || n)
                        ? ((e = e ? e.toString() : e), (n = n ? n.toString() : n))
                        : ((e = parseFloat(e)), (n = parseFloat(n))),
                      (t = 'true' === i.to || 'false' === i.to || !0 === i.to || !1 === i.to) &&
                        ((e = 'true' === i.from || !0 === i.from ? 1 : 0),
                        (n = 'true' === i.to || !0 === i.to ? 1 : 0)),
                      (this.targets.aframeProperty = e),
                      (r.targets = this.targets),
                      (r.aframeProperty = n),
                      (r.update = (function () {
                        var e
                        return function (n) {
                          var r
                          ;(r = n.animatables[0].target.aframeProperty) !== e &&
                            ((e = r),
                            t && (r = r >= 1),
                            T(i) ? M(o, i.property, r, i.type) : h(o, i.property, r))
                        }
                      })()))
                  },
                  updateConfigForVector: function () {
                    var e,
                      t,
                      n,
                      r = this.config,
                      i = this.data,
                      o = this.el
                    for (e in ((t = '' !== i.from ? s.coordinates.parse(i.from) : u(o, i.property)),
                    (n = s.coordinates.parse(i.to)),
                    i.property === m && (A(t), A(n)),
                    (this.targetsArray.length = 0),
                    this.targetsArray.push(t),
                    (r.targets = this.targetsArray),
                    n))
                      r[e] = n[e]
                    i.property !== f && i.property !== m && i.property !== v
                      ? (r.update = (function () {
                          var e = {}
                          return function (t) {
                            var n = t.animatables[0].target
                            ;(n.x === e.x && n.y === e.y && n.z === e.z) ||
                              ((e.x = n.x), (e.y = n.y), (e.z = n.z), h(o, i.property, n))
                          }
                        })())
                      : (r.update = (function () {
                          var e = {}
                          return function (t) {
                            var n = t.animatables[0].target
                            i.property === v &&
                              ((n.x = Math.max(1e-4, n.x)),
                              (n.y = Math.max(1e-4, n.y)),
                              (n.z = Math.max(1e-4, n.z))),
                              (n.x === e.x && n.y === e.y && n.z === e.z) ||
                                ((e.x = n.x),
                                (e.y = n.y),
                                (e.z = n.z),
                                o.object3D[i.property].set(n.x, n.y, n.z))
                          }
                        })())
                  },
                  updateConfig: function () {
                    var e
                    ;(e = b(this.el, this.data.property)),
                      T(this.data) && this.data.type === p
                        ? this.updateConfigForRawColor()
                        : 'vec2' === e || 'vec3' === e || 'vec4' === e
                        ? this.updateConfigForVector()
                        : this.updateConfigForDefault()
                  },
                  waitComponentInitRawProperty: function (e) {
                    var t,
                      n = this.data,
                      i = this.el,
                      o = this
                    return (
                      '' === n.from &&
                      !!n.property.startsWith(g) &&
                      ((t = _(n.property)[1]),
                      !i.components[t] &&
                        (i.addEventListener('componentinitialized', function n(a) {
                          a.detail.name === t &&
                            (e(),
                            (o.animation = r(o.config)),
                            i.removeEventListener('componentinitialized', n))
                        }),
                        !0))
                    )
                  },
                  stopRelatedAnimations: function () {
                    var e, t
                    for (t in this.el.components)
                      (e = this.el.components[t]),
                        t !== this.attrName &&
                          'animation' === e.name &&
                          e.animationIsPlaying &&
                          e.data.property === this.data.property &&
                          (e.animationIsPlaying = !1)
                  },
                  addEventListeners: function () {
                    var e = this.data,
                      t = this.el
                    w(t, e.startEvents, this.onStartEvent),
                      w(t, e.pauseEvents, this.pauseAnimation),
                      w(t, e.resumeEvents, this.resumeAnimation)
                  },
                  removeEventListeners: function () {
                    var e = this.data,
                      t = this.el
                    x(t, e.startEvents, this.onStartEvent),
                      x(t, e.pauseEvents, this.pauseAnimation),
                      x(t, e.resumeEvents, this.resumeAnimation)
                  },
                  setColorConfig: function (e, t) {
                    l.set(e),
                      c.set(t),
                      (e = this.fromColor),
                      (t = this.toColor),
                      (e.r = l.r),
                      (e.g = l.g),
                      (e.b = l.b),
                      (t.r = c.r),
                      (t.g = c.g),
                      (t.b = c.b)
                  },
                })
              },
              {
                '../core/component': 131,
                '../lib/three': 179,
                '../utils': 205,
                'super-animejs': 56,
              },
            ],
            75: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../lib/three')
                t.exports.Component = r('camera', {
                  schema: {
                    active: { default: !0 },
                    far: { default: 1e4 },
                    fov: { default: 80, min: 0 },
                    near: { default: 0.005, min: 0 },
                    spectator: { default: !1 },
                    zoom: { default: 1, min: 0 },
                  },
                  init: function () {
                    var e,
                      t = this.el
                    ;(e = this.camera = new i.PerspectiveCamera()), t.setObject3D('camera', e)
                  },
                  update: function (e) {
                    var t = this.data,
                      n = this.camera
                    ;(n.aspect = t.aspect || window.innerWidth / window.innerHeight),
                      (n.far = t.far),
                      (n.fov = t.fov),
                      (n.near = t.near),
                      (n.zoom = t.zoom),
                      n.updateProjectionMatrix(),
                      this.updateActiveCamera(e),
                      this.updateSpectatorCamera(e)
                  },
                  updateActiveCamera: function (e) {
                    var t = this.data,
                      n = this.el,
                      r = this.system
                    ;(e && e.active === t.active) ||
                      t.spectator ||
                      (t.active && r.activeCameraEl !== n
                        ? r.setActiveCamera(n)
                        : t.active || r.activeCameraEl !== n || r.disableActiveCamera())
                  },
                  updateSpectatorCamera: function (e) {
                    var t = this.data,
                      n = this.el,
                      r = this.system
                    ;(e && e.spectator === t.spectator) ||
                      (t.spectator && r.spectatorCameraEl !== n
                        ? r.setSpectatorCamera(n)
                        : t.spectator || r.spectatorCameraEl !== n || r.disableSpectatorCamera())
                  },
                  remove: function () {
                    this.el.removeObject3D('camera')
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179 },
            ],
            76: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/'),
                  o = i.bind,
                  a = {
                    CLICK: 'click',
                    FUSING: 'fusing',
                    MOUSEENTER: 'mouseenter',
                    MOUSEDOWN: 'mousedown',
                    MOUSELEAVE: 'mouseleave',
                    MOUSEUP: 'mouseup',
                  },
                  s = {
                    FUSING: 'cursor-fusing',
                    HOVERING: 'cursor-hovering',
                    HOVERED: 'cursor-hovered',
                  },
                  l = { DOWN: ['mousedown', 'touchstart'], UP: ['mouseup', 'touchend'] },
                  c = { DOWN: ['selectstart'], UP: ['selectend'] },
                  u = 'a-mouse-cursor-hover'
                t.exports.Component = r('cursor', {
                  dependencies: ['raycaster'],
                  schema: {
                    downEvents: { default: [] },
                    fuse: { default: i.device.isMobile() },
                    fuseTimeout: { default: 1500, min: 0 },
                    mouseCursorStylesEnabled: { default: !0 },
                    upEvents: { default: [] },
                    rayOrigin: { default: 'entity', oneOf: ['mouse', 'entity'] },
                  },
                  init: function () {
                    var e = this
                    ;(this.fuseTimeout = void 0),
                      (this.cursorDownEl = null),
                      (this.intersectedEl = null),
                      (this.canvasBounds = document.body.getBoundingClientRect()),
                      (this.isCursorDown = !1),
                      (this.updateCanvasBounds = i.debounce(function () {
                        e.canvasBounds = e.el.sceneEl.canvas.getBoundingClientRect()
                      }, 500)),
                      (this.eventDetail = {}),
                      (this.intersectedEventDetail = { cursorEl: this.el }),
                      (this.onCursorDown = o(this.onCursorDown, this)),
                      (this.onCursorUp = o(this.onCursorUp, this)),
                      (this.onIntersection = o(this.onIntersection, this)),
                      (this.onIntersectionCleared = o(this.onIntersectionCleared, this)),
                      (this.onMouseMove = o(this.onMouseMove, this)),
                      (this.onEnterVR = o(this.onEnterVR, this))
                  },
                  update: function (e) {
                    this.data.rayOrigin !== e.rayOrigin && this.updateMouseEventListeners()
                  },
                  play: function () {
                    this.addEventListeners()
                  },
                  pause: function () {
                    this.removeEventListeners()
                  },
                  remove: function () {
                    var e = this.el
                    e.removeState(s.HOVERING),
                      e.removeState(s.FUSING),
                      clearTimeout(this.fuseTimeout),
                      this.intersectedEl && this.intersectedEl.removeState(s.HOVERED),
                      this.removeEventListeners()
                  },
                  addEventListeners: function () {
                    var e,
                      t = this.data,
                      n = this.el,
                      r = this
                    function i() {
                      ;(e = n.sceneEl.canvas),
                        t.downEvents.length ||
                          t.upEvents.length ||
                          (l.DOWN.forEach(function (t) {
                            e.addEventListener(t, r.onCursorDown)
                          }),
                          l.UP.forEach(function (t) {
                            e.addEventListener(t, r.onCursorUp)
                          }))
                    }
                    ;(e = n.sceneEl.canvas)
                      ? i()
                      : n.sceneEl.addEventListener('render-target-loaded', i),
                      t.downEvents.forEach(function (e) {
                        n.addEventListener(e, r.onCursorDown)
                      }),
                      t.upEvents.forEach(function (e) {
                        n.addEventListener(e, r.onCursorUp)
                      }),
                      n.addEventListener('raycaster-intersection', this.onIntersection),
                      n.addEventListener(
                        'raycaster-intersection-cleared',
                        this.onIntersectionCleared,
                      ),
                      n.sceneEl.addEventListener('rendererresize', this.updateCanvasBounds),
                      n.sceneEl.addEventListener('enter-vr', this.onEnterVR),
                      window.addEventListener('resize', this.updateCanvasBounds),
                      window.addEventListener('scroll', this.updateCanvasBounds),
                      this.updateMouseEventListeners()
                  },
                  removeEventListeners: function () {
                    var e,
                      t = this.data,
                      n = this.el,
                      r = this
                    !(e = n.sceneEl.canvas) ||
                      t.downEvents.length ||
                      t.upEvents.length ||
                      (l.DOWN.forEach(function (t) {
                        e.removeEventListener(t, r.onCursorDown)
                      }),
                      l.UP.forEach(function (t) {
                        e.removeEventListener(t, r.onCursorUp)
                      })),
                      t.downEvents.forEach(function (e) {
                        n.removeEventListener(e, r.onCursorDown)
                      }),
                      t.upEvents.forEach(function (e) {
                        n.removeEventListener(e, r.onCursorUp)
                      }),
                      n.removeEventListener('raycaster-intersection', this.onIntersection),
                      n.removeEventListener(
                        'raycaster-intersection-cleared',
                        this.onIntersectionCleared,
                      ),
                      e.removeEventListener('mousemove', this.onMouseMove),
                      e.removeEventListener('touchstart', this.onMouseMove),
                      e.removeEventListener('touchmove', this.onMouseMove),
                      n.sceneEl.removeEventListener('rendererresize', this.updateCanvasBounds),
                      n.sceneEl.removeEventListener('enter-vr', this.onEnterVR),
                      window.removeEventListener('resize', this.updateCanvasBounds),
                      window.removeEventListener('scroll', this.updateCanvasBounds)
                  },
                  updateMouseEventListeners: function () {
                    var e,
                      t = this.el
                    ;(e = t.sceneEl.canvas).removeEventListener('mousemove', this.onMouseMove),
                      e.removeEventListener('touchmove', this.onMouseMove),
                      t.setAttribute('raycaster', 'useWorldCoordinates', !1),
                      'mouse' === this.data.rayOrigin &&
                        (e.addEventListener('mousemove', this.onMouseMove, !1),
                        e.addEventListener('touchmove', this.onMouseMove, !1),
                        t.setAttribute('raycaster', 'useWorldCoordinates', !0),
                        this.updateCanvasBounds())
                  },
                  onMouseMove: (function () {
                    var e = new THREE.Vector3(),
                      t = new THREE.Vector2(),
                      n = new THREE.Vector3(),
                      r = { origin: n, direction: e }
                    return function (i) {
                      var o,
                        a,
                        s,
                        l = this.canvasBounds,
                        c = this.el.sceneEl.camera
                      c.parent.updateMatrixWorld(),
                        (o =
                          (a =
                            'touchmove' === i.type || 'touchstart' === i.type
                              ? i.touches.item(0)
                              : i).clientX - l.left),
                        (s = a.clientY - l.top),
                        (t.x = (o / l.width) * 2 - 1),
                        (t.y = (-s / l.height) * 2 + 1),
                        n.setFromMatrixPosition(c.matrixWorld),
                        e.set(t.x, t.y, 0.5).unproject(c).sub(n).normalize(),
                        this.el.setAttribute('raycaster', r),
                        'touchmove' === i.type && i.preventDefault()
                    }
                  })(),
                  onCursorDown: function (e) {
                    ;(this.isCursorDown = !0),
                      'mouse' === this.data.rayOrigin &&
                        'touchstart' === e.type &&
                        (this.onMouseMove(e),
                        this.el.components.raycaster.checkIntersections(),
                        e.preventDefault()),
                      this.twoWayEmit(a.MOUSEDOWN),
                      (this.cursorDownEl = this.intersectedEl)
                  },
                  onCursorUp: function (e) {
                    if (this.isCursorDown) {
                      this.isCursorDown = !1
                      var t = this.data
                      this.twoWayEmit(a.MOUSEUP),
                        this.cursorDownEl &&
                          this.cursorDownEl !== this.intersectedEl &&
                          ((this.intersectedEventDetail.intersection = null),
                          this.cursorDownEl.emit(a.MOUSEUP, this.intersectedEventDetail)),
                        (t.fuse && 'mouse' !== t.rayOrigin) ||
                          !this.intersectedEl ||
                          this.cursorDownEl !== this.intersectedEl ||
                          this.twoWayEmit(a.CLICK),
                        (this.cursorDownEl = null),
                        'touchend' === e.type && e.preventDefault()
                    }
                  },
                  onIntersection: function (e) {
                    var t,
                      n,
                      r,
                      i,
                      o = this.el
                    ;(n = e.detail.els[0] === o ? 1 : 0),
                      (i = e.detail.intersections[n]),
                      (r = e.detail.els[n]) &&
                        this.intersectedEl !== r &&
                        ((this.intersectedEl &&
                          (t = this.el.components.raycaster.getIntersection(this.intersectedEl)) &&
                          t.distance <= i.distance) ||
                          (this.clearCurrentIntersection(!0), this.setIntersection(r, i)))
                  },
                  onIntersectionCleared: function (e) {
                    ;-1 !== e.detail.clearedEls.indexOf(this.intersectedEl) &&
                      this.clearCurrentIntersection()
                  },
                  onEnterVR: function () {
                    this.clearCurrentIntersection(!0)
                    var e = this.el.sceneEl.xrSession,
                      t = this
                    e &&
                      'mouse' !== this.data.rayOrigin &&
                      (c.DOWN.forEach(function (n) {
                        e.addEventListener(n, t.onCursorDown)
                      }),
                      c.UP.forEach(function (n) {
                        e.addEventListener(n, t.onCursorUp)
                      }))
                  },
                  setIntersection: function (e, t) {
                    var n = this.el,
                      r = this.data,
                      i = this
                    this.intersectedEl !== e &&
                      ((this.intersectedEl = e),
                      n.addState(s.HOVERING),
                      e.addState(s.HOVERED),
                      this.twoWayEmit(a.MOUSEENTER),
                      this.data.mouseCursorStylesEnabled &&
                        'mouse' === this.data.rayOrigin &&
                        this.el.sceneEl.canvas.classList.add(u),
                      0 !== r.fuseTimeout &&
                        r.fuse &&
                        (n.addState(s.FUSING),
                        this.twoWayEmit(a.FUSING),
                        (this.fuseTimeout = setTimeout(function () {
                          n.removeState(s.FUSING), i.twoWayEmit(a.CLICK)
                        }, r.fuseTimeout))))
                  },
                  clearCurrentIntersection: function (e) {
                    var t,
                      n,
                      r = this.el
                    this.intersectedEl &&
                      (this.intersectedEl.removeState(s.HOVERED),
                      r.removeState(s.HOVERING),
                      r.removeState(s.FUSING),
                      this.twoWayEmit(a.MOUSELEAVE),
                      this.data.mouseCursorStylesEnabled &&
                        'mouse' === this.data.rayOrigin &&
                        this.el.sceneEl.canvas.classList.remove(u),
                      (this.intersectedEl = null),
                      clearTimeout(this.fuseTimeout),
                      !0 !== e &&
                        0 !== (n = this.el.components.raycaster.intersections).length &&
                        (t = n[n[0].object.el === r ? 1 : 0]) &&
                        this.setIntersection(t.object.el, t))
                  },
                  twoWayEmit: function (e) {
                    var t,
                      n = this.el,
                      r = this.intersectedEl
                    ;(t = this.el.components.raycaster.getIntersection(r)),
                      (this.eventDetail.intersectedEl = r),
                      (this.eventDetail.intersection = t),
                      n.emit(e, this.eventDetail),
                      r &&
                        ((this.intersectedEventDetail.intersection = t),
                        r.emit(e, this.intersectedEventDetail))
                  },
                })
              },
              { '../core/component': 131, '../utils/': 205 },
            ],
            77: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = 'https://cdn.aframe.io/controllers/google/',
                  u = c + 'vr_controller_daydream.obj',
                  h = c + 'vr_controller_daydream.mtl',
                  d = e('../utils/').device.isWebXRAvailable,
                  p = d ? 'google-daydream' : 'Daydream Controller',
                  f = d
                    ? {
                        axes: { touchpad: [0, 1] },
                        buttons: ['none', 'none', 'touchpad', 'menu', 'system'],
                      }
                    : { axes: { trackpad: [0, 1] }, buttons: ['trackpad', 'menu', 'system'] }
                t.exports.Component = r('daydream-controls', {
                  schema: {
                    hand: { default: '' },
                    buttonColor: { type: 'color', default: '#000000' },
                    buttonTouchedColor: { type: 'color', default: '#777777' },
                    buttonHighlightColor: { type: 'color', default: '#FFFFFF' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !0 },
                  },
                  mapping: f,
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      this.bindMethods()
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    a(this, p, this.data.hand ? { hand: this.data.hand } : {})
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      armModel: t.armModel,
                      hand: t.hand,
                      idPrefix: p,
                      id: p,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('obj-model', { obj: u, mtl: h })
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).menu = n.getObjectByName(
                        'AppButton_AppButton_Cylinder.004',
                      )),
                      (t.system = n.getObjectByName('HomeButton_HomeButton_Cylinder.005')),
                      (t.trackpad = n.getObjectByName('TouchPad_TouchPad_Cylinder.003')),
                      (t.touchpad = n.getObjectByName('TouchPad_TouchPad_Cylinder.003')),
                      n.position.set(0, 0, -0.04))
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t && this.el.emit(t + 'changed', e.detail.state)
                  },
                  updateModel: function (e, t) {
                    this.data.model && this.updateButtonModel(e, t)
                  },
                  updateButtonModel: function (e, t) {
                    var n = this.buttonMeshes
                    if (n && n[e]) {
                      var r
                      switch (t) {
                        case 'down':
                          r = this.data.buttonHighlightColor
                          break
                        case 'touchstart':
                          r = this.data.buttonTouchedColor
                          break
                        default:
                          r = this.data.buttonColor
                      }
                      n[e].material.color.set(r)
                    }
                  },
                })
              },
              {
                '../core/component': 131,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            78: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = e('../utils/').device.isWebXRAvailable,
                  u = 'https://cdn.aframe.io/controllers/samsung/',
                  h = u + 'gear_vr_controller.obj',
                  d = u + 'gear_vr_controller.mtl',
                  p = c ? 'samsung-gearvr' : 'Gear VR',
                  f = c
                    ? {
                        axes: { touchpad: [0, 1] },
                        buttons: ['trigger', 'none', 'touchpad', 'none', 'menu'],
                      }
                    : { axes: { trackpad: [0, 1] }, buttons: ['trackpad', 'trigger'] }
                t.exports.Component = r('gearvr-controls', {
                  schema: {
                    hand: { default: '' },
                    buttonColor: { type: 'color', default: '#000000' },
                    buttonTouchedColor: { type: 'color', default: '#777777' },
                    buttonHighlightColor: { type: 'color', default: '#FFFFFF' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !0 },
                  },
                  mapping: f,
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      this.bindMethods()
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    a(this, p, this.data.hand ? { hand: this.data.hand } : {})
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      armModel: t.armModel,
                      hand: t.hand,
                      idPrefix: p,
                      id: p,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('obj-model', { obj: h, mtl: d })
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).trigger = n.children[2]),
                      (t.trackpad = n.children[1]),
                      (t.touchpad = n.children[1]))
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t && this.el.emit(t + 'changed', e.detail.state)
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {
                    this.data.model && this.updateButtonModel(e, t)
                  },
                  updateButtonModel: function (e, t) {
                    var n = this.buttonMeshes
                    if (n && n[e]) {
                      var r
                      switch (t) {
                        case 'down':
                          r = this.data.buttonHighlightColor
                          break
                        case 'touchstart':
                          r = this.data.buttonTouchedColor
                          break
                        default:
                          r = this.data.buttonColor
                      }
                      n[e].material.color.set(r)
                    }
                  },
                })
              },
              {
                '../core/component': 131,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            79: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = 'generic',
                  u = {
                    axes: { touchpad: [0, 1], thumbstick: [2, 3] },
                    buttons: ['trigger', 'squeeze', 'touchpad', 'thumbstick'],
                  }
                t.exports.Component = r('generic-tracked-controller-controls', {
                  schema: {
                    hand: { default: '' },
                    defaultModel: { default: !0 },
                    defaultModelColor: { default: 'gray' },
                    orientationOffset: { type: 'vec3' },
                    disabled: { default: !1 },
                  },
                  mapping: u,
                  bindMethods: function () {
                    ;(this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.controllerPresent = !1),
                      (this.wasControllerConnected = !1),
                      (this.lastControllerCheck = 0),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods(),
                      this.el.addEventListener('controllerconnected', function (t) {
                        t.detail.name !== e.name &&
                          ((e.wasControllerConnected = !0),
                          e.removeEventListeners(),
                          e.removeControllersUpdateListener())
                      })
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    var e = this.data,
                      t = e.hand ? e.hand : void 0
                    a(this, c, { hand: t, iterateControllerProfiles: !0 })
                  },
                  play: function () {
                    this.wasControllerConnected ||
                      (this.checkIfControllerPresent(), this.addControllersUpdateListener())
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    this.el.components['tracked-controls']
                      ? this.removeEventListeners()
                      : (e.setAttribute('tracked-controls', {
                          hand: t.hand,
                          idPrefix: c,
                          orientationOffset: t.orientationOffset,
                          iterateControllerProfiles: !0,
                        }),
                        this.data.defaultModel && this.initDefaultModel())
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t && this.el.emit(t + 'changed', e.detail.state)
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  initDefaultModel: function () {
                    var e = (this.modelEl = document.createElement('a-entity'))
                    e.setAttribute('geometry', { primitive: 'sphere', radius: 0.03 }),
                      e.setAttribute('material', { color: this.data.color }),
                      this.el.appendChild(e)
                  },
                })
              },
              { '../core/component': 131, '../utils/bind': 199, '../utils/tracked-controls': 214 },
            ],
            80: [
              function (e, t, n) {
                var r = e('../core/geometry').geometries,
                  i = e('../core/geometry').geometryNames,
                  o = e('../core/component').registerComponent,
                  a = e('../lib/three'),
                  s = new a.BufferGeometry()
                t.exports.Component = o('geometry', {
                  schema: {
                    buffer: { default: !0 },
                    primitive: { default: 'box', oneOf: i, schemaChange: !0 },
                    skipCache: { default: !1 },
                  },
                  init: function () {
                    this.geometry = null
                  },
                  update: function (e) {
                    var t,
                      n = this.data,
                      r = this.el,
                      i = this.system
                    this.geometry && (i.unuseGeometry(e), (this.geometry = null)),
                      (this.geometry = i.getOrCreateGeometry(n)),
                      (t = r.getObject3D('mesh'))
                        ? (t.geometry = this.geometry)
                        : (((t = new a.Mesh()).geometry = this.geometry),
                          this.el.getAttribute('material') ||
                            (t.material = new a.MeshStandardMaterial({
                              color: 16777215 * Math.random(),
                              metalness: 0,
                              roughness: 0.5,
                            })),
                          r.setObject3D('mesh', t))
                  },
                  remove: function () {
                    this.system.unuseGeometry(this.data),
                      (this.el.getObject3D('mesh').geometry = s),
                      (this.geometry = null)
                  },
                  updateSchema: function (e) {
                    var t = this.oldData && this.oldData.primitive,
                      n = e.primitive,
                      i = r[n] && r[n].schema
                    if (!i) throw new Error('Unknown geometry schema `' + n + '`')
                    ;(t && t === n) || this.extendSchema(i)
                  },
                })
              },
              { '../core/component': 131, '../core/geometry': 132, '../lib/three': 179 },
            ],
            81: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../lib/three'),
                  o = e('../utils/').debug('components:gltf-model:warn')
                t.exports.Component = r('gltf-model', {
                  schema: { type: 'model' },
                  init: function () {
                    var e = this.system.getDRACOLoader()
                    ;(this.model = null),
                      (this.loader = new i.GLTFLoader()),
                      e && this.loader.setDRACOLoader(e)
                  },
                  update: function () {
                    var e = this,
                      t = this.el,
                      n = this.data
                    n &&
                      (this.remove(),
                      this.loader.load(
                        n,
                        function (n) {
                          ;(e.model = n.scene || n.scenes[0]),
                            (e.model.animations = n.animations),
                            t.setObject3D('mesh', e.model),
                            t.emit('model-loaded', { format: 'gltf', model: e.model })
                        },
                        void 0,
                        function (e) {
                          var r = e && e.message ? e.message : 'Failed to load glTF model'
                          o(r), t.emit('model-error', { format: 'gltf', src: n })
                        },
                      ))
                  },
                  remove: function () {
                    this.model && this.el.removeObject3D('mesh')
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/': 205 },
            ],
            82: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = {
                    toonLeft: 'https://cdn.aframe.io/controllers/hands/leftHand.glb',
                    toonRight: 'https://cdn.aframe.io/controllers/hands/rightHand.glb',
                    lowPolyLeft: 'https://cdn.aframe.io/controllers/hands/leftHandLow.glb',
                    lowPolyRight: 'https://cdn.aframe.io/controllers/hands/rightHandLow.glb',
                    highPolyLeft: 'https://cdn.aframe.io/controllers/hands/leftHandHigh.glb',
                    highPolyRight: 'https://cdn.aframe.io/controllers/hands/rightHandHigh.glb',
                  },
                  o = {
                    open: 'Open',
                    point: 'Point',
                    pointThumb: 'Point + Thumb',
                    fist: 'Fist',
                    hold: 'Hold',
                    thumbUp: 'Thumb Up',
                  },
                  a = {}
                function s(e, t) {
                  var n
                  if (e)
                    return 'grip' === (n = a[e])
                      ? n + (t ? 'close' : 'open')
                      : 'point' === n
                      ? n + (t ? 'up' : 'down')
                      : 'pointing' === n || 'pistol' === n
                      ? n + (t ? 'start' : 'end')
                      : void 0
                }
                function l(e) {
                  var t = e && e.controller
                  return (
                    t &&
                    ((t.id && 0 === t.id.indexOf('OpenVR ')) ||
                      (t.profiles && t.profiles[0] && 'htc-vive-controller-mv' === t.profiles[0]))
                  )
                }
                ;(a[o.fist] = 'grip'),
                  (a[o.thumbUp] = 'pistol'),
                  (a[o.point] = 'pointing'),
                  (t.exports.Component = r('hand-controls', {
                    schema: {
                      color: { default: 'white', type: 'color' },
                      hand: { default: 'left' },
                      handModelStyle: {
                        default: 'lowPoly',
                        oneOf: ['lowPoly', 'highPoly', 'toon'],
                      },
                    },
                    init: function () {
                      var e = this,
                        t = this.el
                      ;(this.gesture = o.open),
                        (this.pressedButtons = {}),
                        (this.touchedButtons = {}),
                        (this.loader = new THREE.GLTFLoader()),
                        this.loader.setCrossOrigin('anonymous'),
                        (this.onGripDown = function () {
                          e.handleButton('grip', 'down')
                        }),
                        (this.onGripUp = function () {
                          e.handleButton('grip', 'up')
                        }),
                        (this.onTrackpadDown = function () {
                          e.handleButton('trackpad', 'down')
                        }),
                        (this.onTrackpadUp = function () {
                          e.handleButton('trackpad', 'up')
                        }),
                        (this.onTrackpadTouchStart = function () {
                          e.handleButton('trackpad', 'touchstart')
                        }),
                        (this.onTrackpadTouchEnd = function () {
                          e.handleButton('trackpad', 'touchend')
                        }),
                        (this.onTriggerDown = function () {
                          e.handleButton('trigger', 'down')
                        }),
                        (this.onTriggerUp = function () {
                          e.handleButton('trigger', 'up')
                        }),
                        (this.onTriggerTouchStart = function () {
                          e.handleButton('trigger', 'touchstart')
                        }),
                        (this.onTriggerTouchEnd = function () {
                          e.handleButton('trigger', 'touchend')
                        }),
                        (this.onGripTouchStart = function () {
                          e.handleButton('grip', 'touchstart')
                        }),
                        (this.onGripTouchEnd = function () {
                          e.handleButton('grip', 'touchend')
                        }),
                        (this.onThumbstickDown = function () {
                          e.handleButton('thumbstick', 'down')
                        }),
                        (this.onThumbstickUp = function () {
                          e.handleButton('thumbstick', 'up')
                        }),
                        (this.onAorXTouchStart = function () {
                          e.handleButton('AorX', 'touchstart')
                        }),
                        (this.onAorXTouchEnd = function () {
                          e.handleButton('AorX', 'touchend')
                        }),
                        (this.onBorYTouchStart = function () {
                          e.handleButton('BorY', 'touchstart')
                        }),
                        (this.onBorYTouchEnd = function () {
                          e.handleButton('BorY', 'touchend')
                        }),
                        (this.onSurfaceTouchStart = function () {
                          e.handleButton('surface', 'touchstart')
                        }),
                        (this.onSurfaceTouchEnd = function () {
                          e.handleButton('surface', 'touchend')
                        }),
                        (this.onControllerConnected = this.onControllerConnected.bind(this)),
                        (this.onControllerDisconnected = this.onControllerDisconnected.bind(this)),
                        t.addEventListener('controllerconnected', this.onControllerConnected),
                        t.addEventListener('controllerdisconnected', this.onControllerDisconnected),
                        (t.object3D.visible = !1)
                    },
                    play: function () {
                      this.addEventListeners()
                    },
                    pause: function () {
                      this.removeEventListeners()
                    },
                    tick: function (e, t) {
                      var n = this.el.getObject3D('mesh')
                      n && n.mixer && n.mixer.update(t / 1e3)
                    },
                    onControllerConnected: function () {
                      this.el.object3D.visible = !0
                    },
                    onControllerDisconnected: function () {
                      this.el.object3D.visible = !1
                    },
                    addEventListeners: function () {
                      var e = this.el
                      e.addEventListener('gripdown', this.onGripDown),
                        e.addEventListener('gripup', this.onGripUp),
                        e.addEventListener('trackpaddown', this.onTrackpadDown),
                        e.addEventListener('trackpadup', this.onTrackpadUp),
                        e.addEventListener('trackpadtouchstart', this.onTrackpadTouchStart),
                        e.addEventListener('trackpadtouchend', this.onTrackpadTouchEnd),
                        e.addEventListener('triggerdown', this.onTriggerDown),
                        e.addEventListener('triggerup', this.onTriggerUp),
                        e.addEventListener('triggertouchstart', this.onTriggerTouchStart),
                        e.addEventListener('triggertouchend', this.onTriggerTouchEnd),
                        e.addEventListener('griptouchstart', this.onGripTouchStart),
                        e.addEventListener('griptouchend', this.onGripTouchEnd),
                        e.addEventListener('thumbstickdown', this.onThumbstickDown),
                        e.addEventListener('thumbstickup', this.onThumbstickUp),
                        e.addEventListener('abuttontouchstart', this.onAorXTouchStart),
                        e.addEventListener('abuttontouchend', this.onAorXTouchEnd),
                        e.addEventListener('bbuttontouchstart', this.onBorYTouchStart),
                        e.addEventListener('bbuttontouchend', this.onBorYTouchEnd),
                        e.addEventListener('xbuttontouchstart', this.onAorXTouchStart),
                        e.addEventListener('xbuttontouchend', this.onAorXTouchEnd),
                        e.addEventListener('ybuttontouchstart', this.onBorYTouchStart),
                        e.addEventListener('ybuttontouchend', this.onBorYTouchEnd),
                        e.addEventListener('surfacetouchstart', this.onSurfaceTouchStart),
                        e.addEventListener('surfacetouchend', this.onSurfaceTouchEnd)
                    },
                    removeEventListeners: function () {
                      var e = this.el
                      e.removeEventListener('gripdown', this.onGripDown),
                        e.removeEventListener('gripup', this.onGripUp),
                        e.removeEventListener('trackpaddown', this.onTrackpadDown),
                        e.removeEventListener('trackpadup', this.onTrackpadUp),
                        e.removeEventListener('trackpadtouchstart', this.onTrackpadTouchStart),
                        e.removeEventListener('trackpadtouchend', this.onTrackpadTouchEnd),
                        e.removeEventListener('triggerdown', this.onTriggerDown),
                        e.removeEventListener('triggerup', this.onTriggerUp),
                        e.removeEventListener('triggertouchstart', this.onTriggerTouchStart),
                        e.removeEventListener('triggertouchend', this.onTriggerTouchEnd),
                        e.removeEventListener('griptouchstart', this.onGripTouchStart),
                        e.removeEventListener('griptouchend', this.onGripTouchEnd),
                        e.removeEventListener('thumbstickdown', this.onThumbstickDown),
                        e.removeEventListener('thumbstickup', this.onThumbstickUp),
                        e.removeEventListener('abuttontouchstart', this.onAorXTouchStart),
                        e.removeEventListener('abuttontouchend', this.onAorXTouchEnd),
                        e.removeEventListener('bbuttontouchstart', this.onBorYTouchStart),
                        e.removeEventListener('bbuttontouchend', this.onBorYTouchEnd),
                        e.removeEventListener('xbuttontouchstart', this.onAorXTouchStart),
                        e.removeEventListener('xbuttontouchend', this.onAorXTouchEnd),
                        e.removeEventListener('ybuttontouchstart', this.onBorYTouchStart),
                        e.removeEventListener('ybuttontouchend', this.onBorYTouchEnd),
                        e.removeEventListener('surfacetouchstart', this.onSurfaceTouchStart),
                        e.removeEventListener('surfacetouchend', this.onSurfaceTouchEnd)
                    },
                    update: function (e) {
                      var t,
                        n = this.el,
                        r = this.data.hand,
                        o = this.data.handModelStyle,
                        a = this.data.color,
                        s = this
                      if (((t = { hand: r, model: !1 }), r !== e)) {
                        var l = i[o + r.charAt(0).toUpperCase() + r.slice(1)]
                        this.loader.load(l, function (e) {
                          var i = e.scene.children[0],
                            o = 'left' === r ? Math.PI / 2 : -Math.PI / 2
                          ;(i.mixer = new THREE.AnimationMixer(i)),
                            (s.clips = e.animations),
                            n.setObject3D('mesh', i),
                            (i.children[1].material.color = new THREE.Color(a)),
                            i.position.set(0, 0, 0),
                            i.rotation.set(0, 0, o),
                            n.setAttribute('magicleap-controls', t),
                            n.setAttribute('vive-controls', t),
                            n.setAttribute('oculus-touch-controls', t),
                            n.setAttribute('windows-motion-controls', t)
                        })
                      }
                    },
                    remove: function () {
                      this.el.removeObject3D('mesh')
                    },
                    handleButton: function (e, t) {
                      var n,
                        r = 'down' === t,
                        i = 'touchstart' === t
                      if (0 === t.indexOf('touch')) {
                        if (i === this.touchedButtons[e]) return
                        this.touchedButtons[e] = i
                      } else {
                        if (r === this.pressedButtons[e]) return
                        this.pressedButtons[e] = r
                      }
                      ;(n = this.gesture),
                        (this.gesture = this.determineGesture()),
                        this.gesture !== n &&
                          (this.animateGesture(this.gesture, n),
                          this.emitGestureEvents(this.gesture, n))
                    },
                    determineGesture: function () {
                      var e,
                        t = this.pressedButtons.grip,
                        n = this.pressedButtons.surface || this.touchedButtons.surface,
                        r = this.pressedButtons.trackpad || this.touchedButtons.trackpad,
                        i = this.pressedButtons.trigger || this.touchedButtons.trigger,
                        a = this.touchedButtons.AorX || this.touchedButtons.BorY
                      return (
                        l(this.el.components['tracked-controls'])
                          ? t || i
                            ? (e = o.fist)
                            : r && (e = o.point)
                          : t
                          ? (e =
                              n || a || r ? (i ? o.fist : o.point) : i ? o.thumbUp : o.pointThumb)
                          : i && (e = o.hold),
                        e
                      )
                    },
                    getClip: function (e) {
                      var t, n
                      for (n = 0; n < this.clips.length; n++)
                        if ((t = this.clips[n]).name === e) return t
                    },
                    animateGesture: function (e, t) {
                      e ? this.playAnimation(e || o.open, t, !1) : this.playAnimation(t, t, !0)
                    },
                    emitGestureEvents: function (e, t) {
                      var n,
                        r = this.el
                      t !== e && ((n = s(t, !1)) && r.emit(n), (n = s(e, !0)) && r.emit(n))
                    },
                    playAnimation: function (e, t, n) {
                      var r,
                        i,
                        o,
                        a = this.el.getObject3D('mesh')
                      if (a) {
                        if (
                          (a.mixer.stopAllAction(),
                          (r = this.getClip(e)),
                          ((o = a.mixer.clipAction(r)).clampWhenFinished = !0),
                          (o.loop = THREE.LoopRepeat),
                          (o.repetitions = 0),
                          (o.timeScale = n ? -1 : 1),
                          (o.time = n ? r.duration : 0),
                          (o.weight = 1),
                          !t || e === t)
                        )
                          return a.mixer.stopAllAction(), void o.play()
                        ;(r = this.getClip(t)),
                          ((i = a.mixer.clipAction(r)).weight = 0.15),
                          i.play(),
                          o.play(),
                          i.crossFadeTo(o, 0.15, !0)
                      }
                    },
                  }))
              },
              { '../core/component': 131 },
            ],
            83: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls').checkControllerPresentAndSetup,
                  a = 'https://cdn.aframe.io/controllers/oculus-hands/unity/left.glb',
                  s = 'https://cdn.aframe.io/controllers/oculus-hands/unity/right.glb',
                  l = { left: 'b_l_', right: 'b_r_' },
                  c = [
                    'wrist',
                    'thumb-metacarpal',
                    'thumb-phalanx-proximal',
                    'thumb-phalanx-distal',
                    'thumb-tip',
                    'index-finger-metacarpal',
                    'index-finger-phalanx-proximal',
                    'index-finger-phalanx-intermediate',
                    'index-finger-phalanx-distal',
                    'index-finger-tip',
                    'middle-finger-metacarpal',
                    'middle-finger-phalanx-proximal',
                    'middle-finger-phalanx-intermediate',
                    'middle-finger-phalanx-distal',
                    'middle-finger-tip',
                    'ring-finger-metacarpal',
                    'ring-finger-phalanx-proximal',
                    'ring-finger-phalanx-intermediate',
                    'ring-finger-phalanx-distal',
                    'ring-finger-tip',
                    'pinky-finger-metacarpal',
                    'pinky-finger-phalanx-proximal',
                    'pinky-finger-phalanx-intermediate',
                    'pinky-finger-phalanx-distal',
                    'pinky-finger-tip',
                  ],
                  u = {
                    wrist: 'wrist',
                    'thumb-metacarpal': 'thumb1',
                    'thumb-phalanx-proximal': 'thumb2',
                    'thumb-phalanx-distal': 'thumb3',
                    'thumb-tip': 'thumb_null',
                    'index-finger-phalanx-proximal': 'index1',
                    'index-finger-phalanx-intermediate': 'index2',
                    'index-finger-phalanx-distal': 'index3',
                    'index-finger-tip': 'index_null',
                    'middle-finger-phalanx-proximal': 'middle1',
                    'middle-finger-phalanx-intermediate': 'middle2',
                    'middle-finger-phalanx-distal': 'middle3',
                    'middle-finger-tip': 'middle_null',
                    'ring-finger-phalanx-proximal': 'ring1',
                    'ring-finger-phalanx-intermediate': 'ring2',
                    'ring-finger-phalanx-distal': 'ring3',
                    'ring-finger-tip': 'ring_null',
                    'pinky-finger-metacarpal': 'pinky0',
                    'pinky-finger-phalanx-proximal': 'pinky1',
                    'pinky-finger-phalanx-intermediate': 'pinky2',
                    'pinky-finger-phalanx-distal': 'pinky3',
                    'pinky-finger-tip': 'pinky_null',
                  },
                  h = 0.015,
                  d = 0.03,
                  p = 0.5
                t.exports.Component = r('hand-tracking-controls', {
                  schema: {
                    hand: { default: 'right', oneOf: ['left', 'right'] },
                    modelStyle: { default: 'mesh', oneOf: ['dots', 'mesh'] },
                    modelColor: { default: 'white' },
                  },
                  bindMethods: function () {
                    ;(this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      ))
                  },
                  addEventListeners: function () {
                    this.el.addEventListener('model-loaded', this.onModelLoaded)
                    for (var e = 0; e < this.jointEls.length; ++e)
                      this.jointEls[e].object3D.visible = !0
                  },
                  removeEventListeners: function () {
                    this.el.removeEventListener('model-loaded', this.onModelLoaded)
                    for (var e = 0; e < this.jointEls.length; ++e)
                      this.jointEls[e].object3D.visible = !1
                  },
                  init: function () {
                    var e = this.el.sceneEl,
                      t = e.getAttribute('webxr').optionalFeatures
                    t.push('hand-tracking'),
                      e.setAttribute('webxr', { optionalFeatures: t }),
                      (this.onModelLoaded = this.onModelLoaded.bind(this)),
                      (this.jointEls = []),
                      (this.controllerPresent = !1),
                      (this.isPinched = !1),
                      (this.pinchEventDetail = { position: new THREE.Vector3() }),
                      (this.indexTipPosition = new THREE.Vector3()),
                      this.bindMethods(),
                      (this.updateReferenceSpace = this.updateReferenceSpace.bind(this)),
                      this.el.sceneEl.addEventListener('enter-vr', this.updateReferenceSpace),
                      this.el.sceneEl.addEventListener('exit-vr', this.updateReferenceSpace)
                  },
                  updateReferenceSpace: function () {
                    var e = this,
                      t = this.el.sceneEl.xrSession
                    if (((this.referenceSpace = void 0), t)) {
                      var n = e.el.sceneEl.systems.webxr.sessionReferenceSpaceType
                      t.requestReferenceSpace(n)
                        .then(function (t) {
                          e.referenceSpace = t.getOffsetReferenceSpace(
                            new XRRigidTransform({ x: 0, y: 1.5, z: 0 }),
                          )
                        })
                        .catch(function (t) {
                          throw (
                            (e.el.sceneEl.systems.webxr.warnIfFeatureNotRequested(
                              n,
                              'tracked-controls-webxr uses reference space ' + n,
                            ),
                            t)
                          )
                        })
                    }
                  },
                  checkIfControllerPresent: function () {
                    var e = this.data,
                      t = e.hand ? e.hand : void 0
                    o(this, '', { hand: t, iterateControllerProfiles: !0, handTracking: !0 })
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  tick: function () {
                    var e = this.el.sceneEl,
                      t =
                        this.el.components['tracked-controls'] &&
                        this.el.components['tracked-controls'].controller,
                      n = e.frame,
                      r = this.el.components['tracked-controls-webxr']
                    t &&
                      n &&
                      r &&
                      t.hand &&
                      (this.el.object3D.position.set(0, 0, 0),
                      this.el.object3D.rotation.set(0, 0, 0),
                      n.getJointPose && this.updateHandModel(),
                      this.detectGesture())
                  },
                  updateHandModel: function () {
                    'dots' === this.data.modelStyle && this.updateHandDotsModel(),
                      'mesh' === this.data.modelStyle && this.updateHandMeshModel()
                  },
                  getBone: function (e) {
                    for (var t = this.bones, n = 0; n < t.length; n++)
                      if (t[n].name === e) return t[n]
                    return null
                  },
                  updateHandMeshModel: function () {
                    var e = this.el.sceneEl.frame,
                      t =
                        this.el.components['tracked-controls'] &&
                        this.el.components['tracked-controls'].controller,
                      n = this.referenceSpace
                    if (t && this.mesh && n)
                      for (var r of ((this.mesh.visible = !1), t.hand.values())) {
                        var i, o, a
                        ;(o = e.getJointPose(r, n)),
                          u[r.jointName] &&
                            null != (i = this.getBone(l[this.data.hand] + u[r.jointName])) &&
                            o &&
                            ((a = o.transform),
                            (this.mesh.visible = !0),
                            i.position.copy(a.position).multiplyScalar(100),
                            i.quaternion.set(
                              a.orientation.x,
                              a.orientation.y,
                              a.orientation.z,
                              a.orientation.w,
                            ))
                      }
                  },
                  updateHandDotsModel: function () {
                    var e,
                      t,
                      n,
                      r = this.el.sceneEl.frame,
                      i =
                        this.el.components['tracked-controls'] &&
                        this.el.components['tracked-controls'].controller,
                      o = this.el.components['tracked-controls-webxr'].system.referenceSpace,
                      a = 0
                    for (var s of i.hand.values())
                      (t = (e = this.jointEls[a++]).object3D),
                        (n = r.getJointPose(s, o)),
                        (e.object3D.visible = !!n),
                        n &&
                          ((t.matrix.elements = n.transform.matrix),
                          t.matrix.decompose(t.position, t.rotation, t.scale),
                          e.setAttribute('scale', { x: n.radius, y: n.radius, z: n.radius }))
                  },
                  detectGesture: function () {
                    this.detectPinch()
                  },
                  detectPinch: (function () {
                    var e = new THREE.Vector3()
                    return function () {
                      var t = this.el.sceneEl.frame,
                        n = this.indexTipPosition,
                        r =
                          this.el.components['tracked-controls'] &&
                          this.el.components['tracked-controls'].controller,
                        i = this.el.components['tracked-controls-webxr'],
                        o = this.referenceSpace || i.system.referenceSpace,
                        a = r.hand.get('index-finger-tip'),
                        s = r.hand.get('thumb-tip')
                      if (a && s) {
                        var l = t.getJointPose(a, o),
                          c = t.getJointPose(s, o)
                        if (l && c) {
                          e.copy(c.transform.position), n.copy(l.transform.position)
                          var u = n.distanceTo(e)
                          u < h &&
                            !1 === this.isPinched &&
                            ((this.isPinched = !0),
                            this.pinchEventDetail.position.copy(n).lerp(e, p),
                            (this.pinchEventDetail.position.y += 1.5),
                            this.el.emit('pinchstarted', this.pinchEventDetail)),
                            u > d &&
                              !0 === this.isPinched &&
                              ((this.isPinched = !1),
                              this.pinchEventDetail.position.copy(n).lerp(e, p),
                              (this.pinchEventDetail.position.y += 1.5),
                              this.el.emit('pinchended', this.pinchEventDetail)),
                            this.isPinched &&
                              (this.pinchEventDetail.position.copy(n).lerp(e, p),
                              (this.pinchEventDetail.position.y += 1.5),
                              this.el.emit('pinchmoved', this.pinchEventDetail)),
                            (n.y += 1.5)
                        }
                      }
                    }
                  })(),
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      hand: t.hand,
                      iterateControllerProfiles: !0,
                      handTrackingEnabled: !0,
                    }),
                      this.initDefaultModel()
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    var e
                    this.checkIfControllerPresent(),
                      (e =
                        this.el.components['tracked-controls'] &&
                        this.el.components['tracked-controls'].controller),
                      this.el.getObject3D('mesh') &&
                        ((e && e.hand && e.hand[0]) || (this.el.getObject3D('mesh').visible = !1))
                  },
                  initDefaultModel: function () {
                    this.el.getObject3D('mesh') ||
                      ('dots' === this.data.modelStyle && this.initDotsModel(),
                      'mesh' === this.data.modelStyle && this.initMeshHandModel())
                  },
                  initDotsModel: function () {
                    if (0 === this.jointEls.length)
                      for (var e = 0; e < c.length; ++e) {
                        var t = (this.jointEl = document.createElement('a-entity'))
                        t.setAttribute('geometry', { primitive: 'sphere', radius: 1 }),
                          t.setAttribute('material', { color: this.data.modelColor }),
                          (t.object3D.visible = !1),
                          this.el.appendChild(t),
                          this.jointEls.push(t)
                      }
                  },
                  initMeshHandModel: function () {
                    var e = 'left' === this.data.hand ? a : s
                    this.el.setAttribute('gltf-model', e)
                  },
                  onModelLoaded: function () {
                    var e = (this.mesh = this.el.getObject3D('mesh').children[0]),
                      t = (this.skinnedMesh = e.children[24])
                    this.skinnedMesh &&
                      ((this.bones = t.skeleton.bones),
                      this.el.removeObject3D('mesh'),
                      e.position.set(0, 1.5, 0),
                      e.rotation.set(0, 0, 0),
                      (t.frustumCulled = !1),
                      (t.material = new THREE.MeshStandardMaterial({
                        skinning: !0,
                        color: this.data.modelColor,
                      })),
                      this.el.setObject3D('mesh', e))
                  },
                })
              },
              { '../core/component': 131, '../utils/bind': 199, '../utils/tracked-controls': 214 },
            ],
            84: [
              function (e, t, n) {
                e('./animation'),
                  e('./camera'),
                  e('./cursor'),
                  e('./daydream-controls'),
                  e('./gearvr-controls'),
                  e('./geometry'),
                  e('./generic-tracked-controller-controls'),
                  e('./gltf-model'),
                  e('./hand-tracking-controls'),
                  e('./hand-controls'),
                  e('./layer'),
                  e('./laser-controls'),
                  e('./light'),
                  e('./line'),
                  e('./link'),
                  e('./look-controls'),
                  e('./magicleap-controls'),
                  e('./material'),
                  e('./obj-model'),
                  e('./oculus-go-controls'),
                  e('./oculus-touch-controls'),
                  e('./position'),
                  e('./raycaster'),
                  e('./rotation'),
                  e('./scale'),
                  e('./shadow'),
                  e('./sound'),
                  e('./text'),
                  e('./tracked-controls'),
                  e('./tracked-controls-webvr'),
                  e('./tracked-controls-webxr'),
                  e('./visible'),
                  e('./valve-index-controls'),
                  e('./vive-controls'),
                  e('./vive-focus-controls'),
                  e('./wasd-controls'),
                  e('./windows-motion-controls'),
                  e('./scene/background'),
                  e('./scene/debug'),
                  e('./scene/device-orientation-permission-ui'),
                  e('./scene/embedded'),
                  e('./scene/inspector'),
                  e('./scene/fog'),
                  e('./scene/keyboard-shortcuts'),
                  e('./scene/pool'),
                  e('./scene/screenshot'),
                  e('./scene/stats'),
                  e('./scene/vr-mode-ui')
              },
              {
                './animation': 74,
                './camera': 75,
                './cursor': 76,
                './daydream-controls': 77,
                './gearvr-controls': 78,
                './generic-tracked-controller-controls': 79,
                './geometry': 80,
                './gltf-model': 81,
                './hand-controls': 82,
                './hand-tracking-controls': 83,
                './laser-controls': 85,
                './layer': 86,
                './light': 87,
                './line': 88,
                './link': 89,
                './look-controls': 90,
                './magicleap-controls': 91,
                './material': 92,
                './obj-model': 93,
                './oculus-go-controls': 94,
                './oculus-touch-controls': 95,
                './position': 96,
                './raycaster': 97,
                './rotation': 98,
                './scale': 99,
                './scene/background': 100,
                './scene/debug': 101,
                './scene/device-orientation-permission-ui': 102,
                './scene/embedded': 103,
                './scene/fog': 104,
                './scene/inspector': 105,
                './scene/keyboard-shortcuts': 106,
                './scene/pool': 107,
                './scene/screenshot': 108,
                './scene/stats': 109,
                './scene/vr-mode-ui': 110,
                './shadow': 111,
                './sound': 112,
                './text': 113,
                './tracked-controls': 116,
                './tracked-controls-webvr': 114,
                './tracked-controls-webxr': 115,
                './valve-index-controls': 117,
                './visible': 118,
                './vive-controls': 119,
                './vive-focus-controls': 120,
                './wasd-controls': 121,
                './windows-motion-controls': 122,
              },
            ],
            85: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/')
                r('laser-controls', {
                  schema: {
                    hand: { default: 'right' },
                    model: { default: !0 },
                    defaultModelColor: { type: 'color', default: 'grey' },
                  },
                  init: function () {
                    var e = this.config,
                      t = this.data,
                      n = this.el,
                      r = this,
                      o = { hand: t.hand, model: t.model }
                    function a(t) {
                      var o = e[t.detail.name]
                      if (o) {
                        var a = i.extend({ showLine: !0 }, o.raycaster || {})
                        t.detail.rayOrigin &&
                          ((a.origin = t.detail.rayOrigin.origin),
                          (a.direction = t.detail.rayOrigin.direction),
                          (a.showLine = !0)),
                          t.detail.rayOrigin || !r.modelReady
                            ? n.setAttribute('raycaster', a)
                            : n.setAttribute('raycaster', 'showLine', !0),
                          n.setAttribute('cursor', i.extend({ fuse: !1 }, o.cursor))
                      }
                    }
                    function s() {
                      n.setAttribute('raycaster', 'showLine', !1)
                    }
                    n.setAttribute('daydream-controls', o),
                      n.setAttribute('gearvr-controls', o),
                      n.setAttribute('magicleap-controls', o),
                      n.setAttribute('oculus-go-controls', o),
                      n.setAttribute('oculus-touch-controls', o),
                      n.setAttribute('valve-index-controls', o),
                      n.setAttribute('vive-controls', o),
                      n.setAttribute('vive-focus-controls', o),
                      n.setAttribute('windows-motion-controls', o),
                      n.setAttribute('generic-tracked-controller-controls', o),
                      n.addEventListener('controllerconnected', a),
                      n.addEventListener('controllerdisconnected', s),
                      n.addEventListener('controllermodelready', function (e) {
                        a(e), (r.modelReady = !0)
                      })
                  },
                  config: {
                    'daydream-controls': {
                      cursor: {
                        downEvents: ['trackpaddown', 'triggerdown'],
                        upEvents: ['trackpadup', 'triggerup'],
                      },
                    },
                    'gearvr-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                      raycaster: { origin: { x: 0, y: 0.001, z: 0 } },
                    },
                    'generic-tracked-controller-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                    },
                    'magicleap-controls': {
                      cursor: {
                        downEvents: ['trackpaddown', 'triggerdown'],
                        upEvents: ['trackpadup', 'triggerup'],
                      },
                    },
                    'oculus-go-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                      raycaster: { origin: { x: 0, y: 5e-4, z: 0 } },
                    },
                    'oculus-touch-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                      raycaster: { origin: { x: 0, y: 0, z: 0 } },
                    },
                    'valve-index-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                    },
                    'vive-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                    },
                    'vive-focus-controls': {
                      cursor: {
                        downEvents: ['trackpaddown', 'triggerdown'],
                        upEvents: ['trackpadup', 'triggerup'],
                      },
                    },
                    'windows-motion-controls': {
                      cursor: { downEvents: ['triggerdown'], upEvents: ['triggerup'] },
                      raycaster: { showLine: !1 },
                    },
                  },
                })
              },
              { '../core/component': 131, '../utils/': 205 },
            ],
            86: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/').debug('components:layer:warn')
                function o(e, t, n, r) {
                  var i = e.createFramebuffer()
                  let o = n.viewport.x,
                    a = n.viewport.y,
                    s = n.viewport.x + n.viewport.width,
                    l = n.viewport.y + n.viewport.height
                  'VIDEO' === r.tagName &&
                    (e.bindTexture(e.TEXTURE_2D, t),
                    e.texSubImage2D(
                      e.TEXTURE_2D,
                      0,
                      0,
                      0,
                      r.width,
                      r.height,
                      e.RGB,
                      e.UNSIGNED_BYTE,
                      r,
                    )),
                    e.bindFramebuffer(e.READ_FRAMEBUFFER, i),
                    e.framebufferTexture2D(
                      e.READ_FRAMEBUFFER,
                      e.COLOR_ATTACHMENT0,
                      e.TEXTURE_2D,
                      t,
                      0,
                    ),
                    e.readBuffer(e.COLOR_ATTACHMENT0),
                    e.blitFramebuffer(
                      0,
                      0,
                      r.width,
                      r.height,
                      o,
                      a,
                      s,
                      l,
                      e.COLOR_BUFFER_BIT,
                      e.NEAREST,
                    ),
                    e.bindFramebuffer(e.READ_FRAMEBUFFER, null),
                    e.deleteFramebuffer(i)
                }
                t.exports.Component = r('layer', {
                  schema: {
                    type: { default: 'quad', oneOf: ['quad', 'monocubemap', 'stereocubemap'] },
                    src: { type: 'map' },
                    rotateCubemap: { default: !1 },
                    width: { default: 0 },
                    height: { default: 0 },
                  },
                  init: function () {
                    var e = this.el.sceneEl.renderer.getContext()
                    ;(this.quaternion = new THREE.Quaternion()),
                      (this.position = new THREE.Vector3()),
                      this.bindMethods(),
                      (this.needsRedraw = !1),
                      (this.frameBuffer = e.createFramebuffer())
                    var t = this.el.sceneEl.getAttribute('webxr').requiredFeatures
                    t.push('layers'),
                      this.el.sceneEl.getAttribute('webxr', 'requiredFeatures', t),
                      this.el.sceneEl.addEventListener('enter-vr', this.onEnterVR),
                      this.el.sceneEl.addEventListener('exit-vr', this.onExitVR)
                  },
                  bindMethods: function () {
                    ;(this.onRequestedReferenceSpace = this.onRequestedReferenceSpace.bind(this)),
                      (this.onEnterVR = this.onEnterVR.bind(this)),
                      (this.onExitVR = this.onExitVR.bind(this))
                  },
                  update: function (e) {
                    this.data.src !== e.src && this.updateSrc()
                  },
                  updateSrc: function () {
                    var e = this.data.type
                    ;(this.texture = void 0),
                      'quad' !== e
                        ? ('monocubemap' !== e && 'stereocubemap' !== e) || this.loadCubeMapImages()
                        : this.loadQuadImage()
                  },
                  loadCubeMapImages: function () {
                    var e,
                      t = this.data.type,
                      n = this.xrGLFactory,
                      r = this.el.sceneEl.frame,
                      i = this.data.src
                    ;(this.visibilityChanged = !1),
                      this.layer &&
                        (i.complete
                          ? (this.pendingCubeMapUpdate = !1)
                          : (this.pendingCubeMapUpdate = !0),
                        this.loadingScreen ? (this.loadingScreen = !1) : (this.loadingScreen = !0),
                        'monocubemap' === t
                          ? ((e = n.getSubImage(this.layer, r)),
                            this.loadCubeMapImage(e.colorTexture, i, 0))
                          : ((e = n.getSubImage(this.layer, r, 'left')),
                            this.loadCubeMapImage(e.colorTexture, i, 0),
                            (e = n.getSubImage(this.layer, r, 'right')),
                            this.loadCubeMapImage(e.colorTexture, i, 6)))
                  },
                  loadQuadImage: function () {
                    var e = this.data.src,
                      t = this
                    this.el.sceneEl.systems.material.loadTexture(e, { src: e }, function (n) {
                      t.el.sceneEl.renderer.initTexture(n),
                        (t.texture = n),
                        'VIDEO' === e.tagName &&
                          setTimeout(function () {
                            t.textureIsVideo = !0
                          }, 1e3),
                        t.layer &&
                          ((t.layer.height = t.data.height / 2 || t.texture.image.height / 1e3),
                          (t.layer.width = t.data.width / 2 || t.texture.image.width / 1e3),
                          (t.needsRedraw = !0)),
                        t.updateQuadPanel()
                    })
                  },
                  preGenerateCubeMapTextures: function (e, t) {
                    'monocubemap' === this.data.type
                      ? this.generateCubeMapTextures(e, 0, t)
                      : (this.generateCubeMapTextures(e, 0, t),
                        this.generateCubeMapTextures(e, 6, t))
                  },
                  generateCubeMapTextures: function (e, t, n) {
                    for (
                      var r,
                        i,
                        o = this.data,
                        a = this.cubeFaceSize,
                        s = Math.min(e.width, e.height),
                        l = [],
                        c = 0;
                      c < 6;
                      c++
                    ) {
                      var u = document.createElement('CANVAS')
                      u.width = u.height = a
                      var h = u.getContext('2d')
                      o.rotateCubemap &&
                        ((2 !== c && 3 !== c) || (h.save(), h.translate(a, a), h.rotate(Math.PI))),
                        h.drawImage(e, (c + t) * s, 0, s, s, 0, 0, a, a),
                        h.restore(),
                        n && n(),
                        l.push(u)
                    }
                    return (
                      o.rotateCubemap &&
                        ((r = l[0]),
                        (i = l[1]),
                        (l[0] = i),
                        (l[1] = r),
                        (r = l[4]),
                        (i = l[5]),
                        (l[4] = i),
                        (l[5] = r)),
                      n && n(),
                      l
                    )
                  },
                  loadCubeMapImage: function (e, t, n) {
                    var r,
                      i = this.el.sceneEl.renderer.getContext()
                    i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1),
                      i.bindTexture(i.TEXTURE_CUBE_MAP, e),
                      (r =
                        !t.complete || this.loadingScreen
                          ? this.loadingScreenImages
                          : this.generateCubeMapTextures(t, n))
                    var o = 0
                    r.forEach(function (e, t) {
                      i.texSubImage2D(
                        i.TEXTURE_CUBE_MAP_POSITIVE_X + t,
                        0,
                        0,
                        0,
                        i.RGBA,
                        i.UNSIGNED_BYTE,
                        e,
                      ),
                        (o = i.getError())
                    }),
                      0 !== o && console.log('renderingError, WebGL Error Code: ' + o),
                      i.bindTexture(i.TEXTURE_CUBE_MAP, null)
                  },
                  tick: function () {
                    this.el.sceneEl.xrSession &&
                      (!this.layer && this.el.sceneEl.is('vr-mode') && this.initLayer(),
                      this.updateTransform(),
                      this.data.src.complete &&
                        (this.pendingCubeMapUpdate ||
                          this.loadingScreen ||
                          this.visibilityChanged) &&
                        this.loadCubeMapImages(),
                      (this.needsRedraw || this.layer.needsRedraw || this.textureIsVideo) &&
                        ('quad' === this.data.type && this.draw(), (this.needsRedraw = !1)))
                  },
                  initLayer: function () {
                    var e = this,
                      t = this.data.type
                    ;(this.el.sceneEl.xrSession.onvisibilitychange = function (t) {
                      e.visibilityChanged = 'hidden' !== t.session.visibilityState
                    }),
                      'quad' !== t
                        ? ('monocubemap' !== t && 'stereocubemap' !== t) || this.initCubeMapLayer()
                        : this.initQuadLayer()
                  },
                  initQuadLayer: function () {
                    var e = this.el.sceneEl,
                      t = e.renderer.getContext(),
                      n = (this.xrGLFactory = new XRWebGLBinding(e.xrSession, t))
                    this.texture &&
                      ((this.layer = n.createQuadLayer({
                        space: this.referenceSpace,
                        viewPixelHeight: 2048,
                        viewPixelWidth: 2048,
                        height: this.data.height / 2 || this.texture.image.height / 1e3,
                        width: this.data.width / 2 || this.texture.image.width / 1e3,
                      })),
                      e.renderer.xr.addLayer(this.layer))
                  },
                  initCubeMapLayer: function () {
                    var e = this.data.src,
                      t = this.el.sceneEl,
                      n = t.renderer.getContext(),
                      r = n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),
                      i = (this.cubeFaceSize = Math.min(r, Math.min(e.width, e.height))),
                      o = (this.xrGLFactory = new XRWebGLBinding(t.xrSession, n))
                    ;(this.layer = o.createCubeLayer({
                      space: this.referenceSpace,
                      viewPixelWidth: i,
                      viewPixelHeight: i,
                      layout: 'monocubemap' === this.data.type ? 'mono' : 'stereo',
                      isStatic: !1,
                    })),
                      this.initLoadingScreenImages(),
                      this.loadCubeMapImages(),
                      t.renderer.xr.addLayer(this.layer)
                  },
                  initLoadingScreenImages: function () {
                    for (
                      var e = this.cubeFaceSize, t = (this.loadingScreenImages = []), n = 0;
                      n < 6;
                      n++
                    ) {
                      var r = document.createElement('CANVAS')
                      r.width = r.height = e
                      var i = r.getContext('2d')
                      ;(r.width = r.height = e),
                        (i.fillStyle = 'black'),
                        i.fillRect(0, 0, e, e),
                        2 !== n &&
                          3 !== n &&
                          (i.translate(e, 0),
                          i.scale(-1, 1),
                          (i.fillStyle = 'white'),
                          (i.font = '30px Arial'),
                          i.fillText('Loading', e / 2, e / 2)),
                        t.push(r)
                    }
                  },
                  destroyLayer: function () {
                    this.layer &&
                      (this.el.sceneEl.renderer.xr.removeLayer(this.layer),
                      this.layer.destroy(),
                      (this.layer = void 0))
                  },
                  toggleCompositorLayer: function () {
                    this.enableCompositorLayer(!this.layerEnabled)
                  },
                  enableCompositorLayer: function (e) {
                    ;(this.layerEnabled = e),
                      (this.quadPanelEl.object3D.visible = !this.layerEnabled)
                  },
                  updateQuadPanel: function () {
                    var e = this.quadPanelEl
                    this.quadPanelEl ||
                      ((e = this.quadPanelEl = document.createElement('a-entity')),
                      this.el.appendChild(e)),
                      e.setAttribute('material', {
                        shader: 'flat',
                        src: this.data.src,
                        transparent: !0,
                      }),
                      e.setAttribute('geometry', {
                        primitive: 'plane',
                        height: this.data.height || this.texture.image.height / 1e3,
                        width: this.data.width || this.texture.image.height / 1e3,
                      })
                  },
                  draw: function () {
                    var e = this.el.sceneEl,
                      t = this.el.sceneEl.renderer.getContext(),
                      n = this.xrGLFactory.getSubImage(this.layer, e.frame),
                      r = e.renderer.properties.get(this.texture).__webglTexture,
                      i = t.getParameter(t.FRAMEBUFFER_BINDING)
                    t.viewport(n.viewport.x, n.viewport.y, n.viewport.width, n.viewport.height),
                      t.bindFramebuffer(t.FRAMEBUFFER, this.frameBuffer),
                      t.framebufferTexture2D(
                        t.FRAMEBUFFER,
                        t.COLOR_ATTACHMENT0,
                        t.TEXTURE_2D,
                        n.colorTexture,
                        0,
                      ),
                      o(t, r, n, this.data.src),
                      t.bindFramebuffer(t.FRAMEBUFFER, i)
                  },
                  updateTransform: function () {
                    var e = this.el,
                      t = this.position,
                      n = this.quaternion
                    e.object3D.updateMatrixWorld(),
                      t.setFromMatrixPosition(e.object3D.matrixWorld),
                      n.setFromRotationMatrix(e.object3D.matrixWorld),
                      this.layerEnabled || t.set(0, 0, 1e8),
                      (this.layer.transform = new XRRigidTransform(t, n))
                  },
                  onEnterVR: function () {
                    var e = this.el.sceneEl,
                      t = e.xrSession
                    e.hasWebXR && XRWebGLBinding && t
                      ? (t.requestReferenceSpace('local').then(this.onRequestedReferenceSpace),
                        (this.needsRedraw = !0),
                        (this.layerEnabled = !0),
                        this.quadPanelEl && (this.quadPanelEl.object3D.visible = !1),
                        this.data.src.play && this.data.src.play())
                      : i('The layer component requires WebXR and the layers API enabled')
                  },
                  onExitVR: function () {
                    this.quadPanelEl && (this.quadPanelEl.object3D.visible = !0),
                      this.destroyLayer()
                  },
                  onRequestedReferenceSpace: function (e) {
                    this.referenceSpace = e
                  },
                })
              },
              { '../core/component': 131, '../utils/': 205 },
            ],
            87: [
              function (e, t, n) {
                var r = e('../utils/bind'),
                  i = e('../utils').diff,
                  o = e('../utils/debug'),
                  a = e('../core/component').registerComponent,
                  s = e('../lib/three'),
                  l = s.Math.degToRad,
                  c = o('components:light:warn')
                t.exports.Component = a('light', {
                  schema: {
                    angle: { default: 60, if: { type: ['spot'] } },
                    color: { type: 'color' },
                    groundColor: { type: 'color', if: { type: ['hemisphere'] } },
                    decay: { default: 1, if: { type: ['point', 'spot'] } },
                    distance: { default: 0, min: 0, if: { type: ['point', 'spot'] } },
                    intensity: {
                      default: 1,
                      min: 0,
                      if: { type: ['ambient', 'directional', 'hemisphere', 'point', 'spot'] },
                    },
                    penumbra: { default: 0, min: 0, max: 1, if: { type: ['spot'] } },
                    type: {
                      default: 'directional',
                      oneOf: ['ambient', 'directional', 'hemisphere', 'point', 'spot'],
                      schemaChange: !0,
                    },
                    target: { type: 'selector', if: { type: ['spot', 'directional'] } },
                    castShadow: { default: !1, if: { type: ['point', 'spot', 'directional'] } },
                    shadowBias: { default: 0, if: { castShadow: !0 } },
                    shadowCameraFar: { default: 500, if: { castShadow: !0 } },
                    shadowCameraFov: { default: 90, if: { castShadow: !0 } },
                    shadowCameraNear: { default: 0.5, if: { castShadow: !0 } },
                    shadowCameraTop: { default: 5, if: { castShadow: !0 } },
                    shadowCameraRight: { default: 5, if: { castShadow: !0 } },
                    shadowCameraBottom: { default: -5, if: { castShadow: !0 } },
                    shadowCameraLeft: { default: -5, if: { castShadow: !0 } },
                    shadowCameraVisible: { default: !1, if: { castShadow: !0 } },
                    shadowMapHeight: { default: 512, if: { castShadow: !0 } },
                    shadowMapWidth: { default: 512, if: { castShadow: !0 } },
                    shadowRadius: { default: 1, if: { castShadow: !0 } },
                  },
                  init: function () {
                    var e = this.el
                    ;(this.light = null),
                      (this.defaultTarget = null),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.system.registerLight(e)
                  },
                  update: function (e) {
                    var t = this.data,
                      n = i(t, e),
                      o = this.light,
                      a = this.rendererSystem,
                      s = this
                    if (!o || 'type' in n) this.setLight(this.data), this.updateShadow()
                    else {
                      var c = !1
                      Object.keys(n).forEach(function (e) {
                        var n = t[e]
                        switch (e) {
                          case 'color':
                            o.color.set(n), a.applyColorCorrection(o.color)
                            break
                          case 'groundColor':
                            o.groundColor.set(n), a.applyColorCorrection(o.groundColor)
                            break
                          case 'angle':
                            o.angle = l(n)
                            break
                          case 'target':
                            null === n
                              ? ('spot' !== t.type && 'directional' !== t.type) ||
                                (o.target = s.defaultTarget)
                              : n.hasLoaded
                              ? s.onSetTarget(n, o)
                              : n.addEventListener('loaded', r(s.onSetTarget, s, n, o))
                            break
                          case 'castShadow':
                          case 'shadowBias':
                          case 'shadowCameraFar':
                          case 'shadowCameraFov':
                          case 'shadowCameraNear':
                          case 'shadowCameraTop':
                          case 'shadowCameraRight':
                          case 'shadowCameraBottom':
                          case 'shadowCameraLeft':
                          case 'shadowCameraVisible':
                          case 'shadowMapHeight':
                          case 'shadowMapWidth':
                          case 'shadowRadius':
                            c || (s.updateShadow(), (c = !0))
                            break
                          default:
                            o[e] = n
                        }
                      })
                    }
                  },
                  setLight: function (e) {
                    var t = this.el,
                      n = this.getLight(e)
                    n &&
                      (this.light && t.removeObject3D('light'),
                      (this.light = n),
                      (this.light.el = t),
                      t.setObject3D('light', this.light),
                      ('spot' !== e.type && 'directional' !== e.type && 'hemisphere' !== e.type) ||
                        t.getObject3D('light').translateY(-1),
                      'spot' === e.type &&
                        (t.setObject3D('light-target', this.defaultTarget),
                        t.getObject3D('light-target').position.set(0, 0, -1)))
                  },
                  updateShadow: function () {
                    var e = this.el,
                      t = this.data,
                      n = this.light
                    n.castShadow = t.castShadow
                    var r = e.getObject3D('cameraHelper')
                    if (
                      (t.shadowCameraVisible && !r
                        ? e.setObject3D('cameraHelper', new s.CameraHelper(n.shadow.camera))
                        : !t.shadowCameraVisible && r && e.removeObject3D('cameraHelper'),
                      !t.castShadow)
                    )
                      return n
                    ;(n.shadow.bias = t.shadowBias),
                      (n.shadow.radius = t.shadowRadius),
                      (n.shadow.mapSize.height = t.shadowMapHeight),
                      (n.shadow.mapSize.width = t.shadowMapWidth),
                      (n.shadow.camera.near = t.shadowCameraNear),
                      (n.shadow.camera.far = t.shadowCameraFar),
                      n.shadow.camera instanceof s.OrthographicCamera
                        ? ((n.shadow.camera.top = t.shadowCameraTop),
                          (n.shadow.camera.right = t.shadowCameraRight),
                          (n.shadow.camera.bottom = t.shadowCameraBottom),
                          (n.shadow.camera.left = t.shadowCameraLeft))
                        : (n.shadow.camera.fov = t.shadowCameraFov),
                      n.shadow.camera.updateProjectionMatrix(),
                      r && r.update()
                  },
                  getLight: function (e) {
                    var t = e.angle,
                      n = new s.Color(e.color)
                    this.rendererSystem.applyColorCorrection(n), (n = n.getHex())
                    var i = e.decay,
                      o = e.distance,
                      a = new s.Color(e.groundColor)
                    this.rendererSystem.applyColorCorrection(a), (a = a.getHex())
                    var u = e.intensity,
                      h = e.type,
                      d = e.target,
                      p = null
                    switch (h.toLowerCase()) {
                      case 'ambient':
                        return new s.AmbientLight(n, u)
                      case 'directional':
                        return (
                          (p = new s.DirectionalLight(n, u)),
                          (this.defaultTarget = p.target),
                          d &&
                            (d.hasLoaded
                              ? this.onSetTarget(d, p)
                              : d.addEventListener('loaded', r(this.onSetTarget, this, d, p))),
                          p
                        )
                      case 'hemisphere':
                        return new s.HemisphereLight(n, a, u)
                      case 'point':
                        return new s.PointLight(n, u, o, i)
                      case 'spot':
                        return (
                          (p = new s.SpotLight(n, u, o, l(t), e.penumbra, i)),
                          (this.defaultTarget = p.target),
                          d &&
                            (d.hasLoaded
                              ? this.onSetTarget(d, p)
                              : d.addEventListener('loaded', r(this.onSetTarget, this, d, p))),
                          p
                        )
                      default:
                        c(
                          '%s is not a valid light type. Choose from ambient, directional, hemisphere, point, spot.',
                          h,
                        )
                    }
                  },
                  onSetTarget: function (e, t) {
                    t.target = e.object3D
                  },
                  remove: function () {
                    var e = this.el
                    e.removeObject3D('light'),
                      e.getObject3D('cameraHelper') && e.removeObject3D('cameraHelper')
                  },
                })
              },
              {
                '../core/component': 131,
                '../lib/three': 179,
                '../utils': 205,
                '../utils/bind': 199,
                '../utils/debug': 201,
              },
            ],
            88: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent
                function i(e, t) {
                  return !(!e || !t) && e.x === t.x && e.y === t.y && e.z === t.z
                }
                t.exports.Component = r('line', {
                  schema: {
                    start: { type: 'vec3', default: { x: 0, y: 0, z: 0 } },
                    end: { type: 'vec3', default: { x: 0, y: 0, z: 0 } },
                    color: { type: 'color', default: '#74BEC1' },
                    opacity: { type: 'number', default: 1 },
                    visible: { default: !0 },
                  },
                  multiple: !0,
                  init: function () {
                    var e,
                      t,
                      n = this.data
                    ;(this.rendererSystem = this.el.sceneEl.systems.renderer),
                      (t = this.material =
                        new THREE.LineBasicMaterial({
                          color: n.color,
                          opacity: n.opacity,
                          transparent: n.opacity < 1,
                          visible: n.visible,
                        })),
                      (e = this.geometry = new THREE.BufferGeometry()).setAttribute(
                        'position',
                        new THREE.BufferAttribute(new Float32Array(6), 3),
                      ),
                      this.rendererSystem.applyColorCorrection(t.color),
                      (this.line = new THREE.Line(e, t)),
                      this.el.setObject3D(this.attrName, this.line)
                  },
                  update: function (e) {
                    var t = this.data,
                      n = this.geometry,
                      r = !1,
                      o = this.material,
                      a = n.attributes.position.array
                    i(t.start, e.start) ||
                      ((a[0] = t.start.x), (a[1] = t.start.y), (a[2] = t.start.z), (r = !0)),
                      i(t.end, e.end) ||
                        ((a[3] = t.end.x), (a[4] = t.end.y), (a[5] = t.end.z), (r = !0)),
                      r && ((n.attributes.position.needsUpdate = !0), n.computeBoundingSphere()),
                      o.color.setStyle(t.color),
                      this.rendererSystem.applyColorCorrection(o.color),
                      (o.opacity = t.opacity),
                      (o.transparent = t.opacity < 1),
                      (o.visible = t.visible)
                  },
                  remove: function () {
                    this.el.removeObject3D('line', this.line)
                  },
                })
              },
              { '../core/component': 131 },
            ],
            89: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../core/shader').registerShader,
                  o = e('../lib/three')
                ;(t.exports.Component = r('link', {
                  schema: {
                    backgroundColor: { default: 'red', type: 'color' },
                    borderColor: { default: 'white', type: 'color' },
                    highlighted: { default: !1 },
                    highlightedColor: { default: '#24CAFF', type: 'color' },
                    href: { default: '' },
                    image: { type: 'asset' },
                    on: { default: 'click' },
                    peekMode: { default: !1 },
                    title: { default: '' },
                    titleColor: { default: 'white', type: 'color' },
                    visualAspectEnabled: { default: !1 },
                  },
                  init: function () {
                    ;(this.navigate = this.navigate.bind(this)),
                      (this.previousQuaternion = void 0),
                      (this.quaternionClone = new o.Quaternion()),
                      (this.hiddenEls = [])
                  },
                  update: function (e) {
                    var t,
                      n,
                      r = this.data,
                      i = this.el
                    r.visualAspectEnabled &&
                      (this.initVisualAspect(),
                      (t = r.highlighted ? r.highlightedColor : r.backgroundColor),
                      (n = r.highlighted ? r.highlightedColor : r.borderColor),
                      i.setAttribute('material', 'backgroundColor', t),
                      i.setAttribute('material', 'strokeColor', n),
                      r.on !== e.on && this.updateEventListener(),
                      void 0 !== e.peekMode && r.peekMode !== e.peekMode && this.updatePeekMode(),
                      r.image &&
                        e.image !== r.image &&
                        i.setAttribute(
                          'material',
                          'pano',
                          'string' === typeof r.image ? r.image : r.image.src,
                        ))
                  },
                  updatePeekMode: function () {
                    var e = this.el,
                      t = this.sphereEl
                    this.data.peekMode
                      ? (this.hideAll(),
                        (e.getObject3D('mesh').visible = !1),
                        t.setAttribute('visible', !0))
                      : (this.showAll(),
                        (e.getObject3D('mesh').visible = !0),
                        t.setAttribute('visible', !1))
                  },
                  play: function () {
                    this.updateEventListener()
                  },
                  pause: function () {
                    this.removeEventListener()
                  },
                  updateEventListener: function () {
                    var e = this.el
                    e.isPlaying &&
                      (this.removeEventListener(), e.addEventListener(this.data.on, this.navigate))
                  },
                  removeEventListener: function () {
                    var e = this.data.on
                    e && this.el.removeEventListener(e, this.navigate)
                  },
                  initVisualAspect: function () {
                    var e,
                      t,
                      n,
                      r = this.el
                    this.data.visualAspectEnabled &&
                      !this.visualAspectInitialized &&
                      ((n = this.textEl = this.textEl || document.createElement('a-entity')),
                      (t = this.sphereEl = this.sphereEl || document.createElement('a-entity')),
                      (e = this.semiSphereEl =
                        this.semiSphereEl || document.createElement('a-entity')),
                      r.setAttribute('geometry', { primitive: 'circle', radius: 1, segments: 64 }),
                      r.setAttribute('material', {
                        shader: 'portal',
                        pano: this.data.image,
                        side: 'double',
                      }),
                      n.setAttribute('text', {
                        color: this.data.titleColor,
                        align: 'center',
                        font: 'kelsonsans',
                        value: this.data.title || this.data.href,
                        width: 4,
                      }),
                      n.setAttribute('position', '0 1.5 0'),
                      r.appendChild(n),
                      e.setAttribute('geometry', {
                        primitive: 'sphere',
                        radius: 1,
                        phiStart: 0,
                        segmentsWidth: 64,
                        segmentsHeight: 64,
                        phiLength: 180,
                        thetaStart: 0,
                        thetaLength: 360,
                      }),
                      e.setAttribute('material', {
                        shader: 'portal',
                        borderEnabled: 0,
                        pano: this.data.image,
                        side: 'back',
                      }),
                      e.setAttribute('rotation', '0 180 0'),
                      e.setAttribute('position', '0 0 0'),
                      e.setAttribute('visible', !1),
                      r.appendChild(e),
                      t.setAttribute('geometry', {
                        primitive: 'sphere',
                        radius: 10,
                        segmentsWidth: 64,
                        segmentsHeight: 64,
                      }),
                      t.setAttribute('material', {
                        shader: 'portal',
                        borderEnabled: 0,
                        pano: this.data.image,
                        side: 'back',
                      }),
                      t.setAttribute('visible', !1),
                      r.appendChild(t),
                      (this.visualAspectInitialized = !0))
                  },
                  navigate: function () {
                    window.location = this.data.href
                  },
                  tick: (function () {
                    var e = new o.Vector3(),
                      t = new o.Vector3(),
                      n = new o.Quaternion(),
                      r = new o.Vector3()
                    return function () {
                      var i,
                        o,
                        a = this.el,
                        s = a.object3D,
                        l = a.sceneEl.camera,
                        c = this.textEl
                      if (this.data.visualAspectEnabled)
                        if (
                          (s.updateMatrixWorld(),
                          l.parent.updateMatrixWorld(),
                          l.updateMatrixWorld(),
                          s.matrix.decompose(t, n, r),
                          t.setFromMatrixPosition(s.matrixWorld),
                          e.setFromMatrixPosition(l.matrixWorld),
                          (o = t.distanceTo(e)) > 20)
                        )
                          this.previousQuaternion ||
                            (this.quaternionClone.copy(n),
                            (this.previousQuaternion = this.quaternionClone)),
                            s.lookAt(e)
                        else {
                          if (((i = this.calculateCameraPortalOrientation()), o < 0.5)) {
                            if (!0 === this.semiSphereEl.getAttribute('visible')) return
                            c.setAttribute('text', 'width', 1.5),
                              i <= 0
                                ? (c.setAttribute('position', '0 0 0.75'),
                                  c.setAttribute('rotation', '0 180 0'),
                                  this.semiSphereEl.setAttribute('rotation', '0 0 0'))
                                : (c.setAttribute('position', '0 0 -0.75'),
                                  c.setAttribute('rotation', '0 0 0'),
                                  this.semiSphereEl.setAttribute('rotation', '0 180 0')),
                              (a.getObject3D('mesh').visible = !1),
                              this.semiSphereEl.setAttribute('visible', !0),
                              (this.peekCameraPortalOrientation = i)
                          } else
                            i <= 0
                              ? c.setAttribute('rotation', '0 180 0')
                              : c.setAttribute('rotation', '0 0 0'),
                              c.setAttribute('text', 'width', 5),
                              c.setAttribute('position', '0 1.5 0'),
                              (a.getObject3D('mesh').visible = !0),
                              this.semiSphereEl.setAttribute('visible', !1),
                              (this.peekCameraPortalOrientation = void 0)
                          this.previousQuaternion &&
                            (s.quaternion.copy(this.previousQuaternion),
                            (this.previousQuaternion = void 0))
                        }
                    }
                  })(),
                  hideAll: function () {
                    var e = this.el,
                      t = this.hiddenEls,
                      n = this
                    t.length > 0 ||
                      e.sceneEl.object3D.traverse(function (r) {
                        ;(r && r.el && r.el.hasAttribute('link-controls')) ||
                          (r.el &&
                            r !== e.sceneEl.object3D &&
                            r.el !== e &&
                            r.el !== n.sphereEl &&
                            r.el !== e.sceneEl.cameraEl &&
                            !1 !== r.el.getAttribute('visible') &&
                            r.el !== n.textEl &&
                            r.el !== n.semiSphereEl &&
                            (r.el.setAttribute('visible', !1), t.push(r.el)))
                      })
                  },
                  showAll: function () {
                    this.hiddenEls.forEach(function (e) {
                      e.setAttribute('visible', !0)
                    }),
                      (this.hiddenEls = [])
                  },
                  calculateCameraPortalOrientation: (function () {
                    var e = new o.Matrix4(),
                      t = new o.Vector3(),
                      n = new o.Vector3(0, 0, 1),
                      r = new o.Vector3(0, 0, 0)
                    return function () {
                      var i = this.el,
                        o = i.sceneEl.camera
                      return (
                        t.set(0, 0, 0),
                        n.set(0, 0, 1),
                        r.set(0, 0, 0),
                        i.object3D.matrixWorld.extractRotation(e),
                        n.applyMatrix4(e),
                        i.object3D.updateMatrixWorld(),
                        i.object3D.localToWorld(r),
                        o.parent.parent.updateMatrixWorld(),
                        o.parent.updateMatrixWorld(),
                        o.updateMatrixWorld(),
                        o.localToWorld(t),
                        t.sub(r).normalize(),
                        n.normalize(),
                        Math.sign(n.dot(t))
                      )
                    }
                  })(),
                  remove: function () {
                    this.removeEventListener()
                  },
                })),
                  i('portal', {
                    schema: {
                      borderEnabled: { default: 1, type: 'int', is: 'uniform' },
                      backgroundColor: { default: 'red', type: 'color', is: 'uniform' },
                      pano: { type: 'map', is: 'uniform' },
                      strokeColor: { default: 'white', type: 'color', is: 'uniform' },
                    },
                    vertexShader: [
                      'vec3 portalPosition;',
                      'varying vec3 vWorldPosition;',
                      'varying float vDistanceToCenter;',
                      'varying float vDistance;',
                      'void main() {',
                      'vDistanceToCenter = clamp(length(position - vec3(0.0, 0.0, 0.0)), 0.0, 1.0);',
                      'portalPosition = (modelMatrix * vec4(0.0, 0.0, 0.0, 1.0)).xyz;',
                      'vDistance = length(portalPosition - cameraPosition);',
                      'vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',
                      'gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
                      '}',
                    ].join('\n'),
                    fragmentShader: [
                      '#define RECIPROCAL_PI2 0.15915494',
                      'uniform sampler2D pano;',
                      'uniform vec3 strokeColor;',
                      'uniform vec3 backgroundColor;',
                      'uniform float borderEnabled;',
                      'varying float vDistanceToCenter;',
                      'varying float vDistance;',
                      'varying vec3 vWorldPosition;',
                      'void main() {',
                      'vec3 direction = normalize(vWorldPosition - cameraPosition);',
                      'vec2 sampleUV;',
                      'float borderThickness = clamp(exp(-vDistance / 50.0), 0.6, 0.95);',
                      'sampleUV.y = clamp(direction.y * 0.5  + 0.5, 0.0, 1.0);',
                      'sampleUV.x = atan(direction.z, -direction.x) * -RECIPROCAL_PI2 + 0.5;',
                      'if (vDistanceToCenter > borderThickness && borderEnabled == 1.0) {',
                      'gl_FragColor = vec4(strokeColor, 1.0);',
                      '} else {',
                      'gl_FragColor = mix(texture2D(pano, sampleUV), vec4(backgroundColor, 1.0), clamp(pow((vDistance / 15.0), 2.0), 0.0, 1.0));',
                      '}',
                      '}',
                    ].join('\n'),
                  })
              },
              { '../core/component': 131, '../core/shader': 141, '../lib/three': 179 },
            ],
            90: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../lib/three'),
                  o = e('../utils/'),
                  a = o.bind,
                  s = Math.PI / 2
                t.exports.Component = r('look-controls', {
                  dependencies: ['position', 'rotation'],
                  schema: {
                    enabled: { default: !0 },
                    magicWindowTrackingEnabled: { default: !0 },
                    pointerLockEnabled: { default: !1 },
                    reverseMouseDrag: { default: !1 },
                    reverseTouchDrag: { default: !1 },
                    touchEnabled: { default: !0 },
                    mouseEnabled: { default: !0 },
                  },
                  init: function () {
                    ;(this.deltaYaw = 0),
                      (this.previousHMDPosition = new i.Vector3()),
                      (this.hmdQuaternion = new i.Quaternion()),
                      (this.magicWindowAbsoluteEuler = new i.Euler()),
                      (this.magicWindowDeltaEuler = new i.Euler()),
                      (this.position = new i.Vector3()),
                      (this.magicWindowObject = new i.Object3D()),
                      (this.rotation = {}),
                      (this.deltaRotation = {}),
                      (this.savedPose = null),
                      (this.pointerLocked = !1),
                      this.setupMouseControls(),
                      this.bindMethods(),
                      (this.previousMouseEvent = {}),
                      this.setupMagicWindowControls(),
                      (this.savedPose = { position: new i.Vector3(), rotation: new i.Euler() }),
                      this.el.sceneEl.is('vr-mode') && this.onEnterVR()
                  },
                  setupMagicWindowControls: function () {
                    var e,
                      t = this.data
                    o.device.isMobile() &&
                      ((e = this.magicWindowControls =
                        new i.DeviceOrientationControls(this.magicWindowObject)),
                      'undefined' !== typeof DeviceOrientationEvent &&
                        DeviceOrientationEvent.requestPermission &&
                        ((e.enabled = !1),
                        this.el.sceneEl.components['device-orientation-permission-ui']
                          .permissionGranted
                          ? (e.enabled = t.magicWindowTrackingEnabled)
                          : this.el.sceneEl.addEventListener(
                              'deviceorientationpermissiongranted',
                              function () {
                                e.enabled = t.magicWindowTrackingEnabled
                              },
                            )))
                  },
                  update: function (e) {
                    var t = this.data
                    t.enabled !== e.enabled && this.updateGrabCursor(t.enabled),
                      e &&
                        !t.magicWindowTrackingEnabled &&
                        e.magicWindowTrackingEnabled &&
                        (this.magicWindowAbsoluteEuler.set(0, 0, 0),
                        this.magicWindowDeltaEuler.set(0, 0, 0)),
                      this.magicWindowControls &&
                        (this.magicWindowControls.enabled = t.magicWindowTrackingEnabled),
                      e &&
                        !t.pointerLockEnabled !== e.pointerLockEnabled &&
                        (this.removeEventListeners(),
                        this.addEventListeners(),
                        this.pointerLocked && this.exitPointerLock())
                  },
                  tick: function (e) {
                    this.data.enabled && this.updateOrientation()
                  },
                  play: function () {
                    this.addEventListeners()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.pointerLocked && this.exitPointerLock()
                  },
                  remove: function () {
                    this.removeEventListeners(), this.pointerLocked && this.exitPointerLock()
                  },
                  bindMethods: function () {
                    ;(this.onMouseDown = a(this.onMouseDown, this)),
                      (this.onMouseMove = a(this.onMouseMove, this)),
                      (this.onMouseUp = a(this.onMouseUp, this)),
                      (this.onTouchStart = a(this.onTouchStart, this)),
                      (this.onTouchMove = a(this.onTouchMove, this)),
                      (this.onTouchEnd = a(this.onTouchEnd, this)),
                      (this.onEnterVR = a(this.onEnterVR, this)),
                      (this.onExitVR = a(this.onExitVR, this)),
                      (this.onPointerLockChange = a(this.onPointerLockChange, this)),
                      (this.onPointerLockError = a(this.onPointerLockError, this))
                  },
                  setupMouseControls: function () {
                    ;(this.mouseDown = !1),
                      (this.pitchObject = new i.Object3D()),
                      (this.yawObject = new i.Object3D()),
                      (this.yawObject.position.y = 10),
                      this.yawObject.add(this.pitchObject)
                  },
                  addEventListeners: function () {
                    var e = this.el.sceneEl,
                      t = e.canvas
                    t
                      ? (t.addEventListener('mousedown', this.onMouseDown, !1),
                        window.addEventListener('mousemove', this.onMouseMove, !1),
                        window.addEventListener('mouseup', this.onMouseUp, !1),
                        t.addEventListener('touchstart', this.onTouchStart),
                        window.addEventListener('touchmove', this.onTouchMove),
                        window.addEventListener('touchend', this.onTouchEnd),
                        e.addEventListener('enter-vr', this.onEnterVR),
                        e.addEventListener('exit-vr', this.onExitVR),
                        this.data.pointerLockEnabled &&
                          (document.addEventListener(
                            'pointerlockchange',
                            this.onPointerLockChange,
                            !1,
                          ),
                          document.addEventListener(
                            'mozpointerlockchange',
                            this.onPointerLockChange,
                            !1,
                          ),
                          document.addEventListener(
                            'pointerlockerror',
                            this.onPointerLockError,
                            !1,
                          )))
                      : e.addEventListener('render-target-loaded', a(this.addEventListeners, this))
                  },
                  removeEventListeners: function () {
                    var e = this.el.sceneEl,
                      t = e && e.canvas
                    t &&
                      (t.removeEventListener('mousedown', this.onMouseDown),
                      window.removeEventListener('mousemove', this.onMouseMove),
                      window.removeEventListener('mouseup', this.onMouseUp),
                      t.removeEventListener('touchstart', this.onTouchStart),
                      window.removeEventListener('touchmove', this.onTouchMove),
                      window.removeEventListener('touchend', this.onTouchEnd),
                      e.removeEventListener('enter-vr', this.onEnterVR),
                      e.removeEventListener('exit-vr', this.onExitVR),
                      document.removeEventListener(
                        'pointerlockchange',
                        this.onPointerLockChange,
                        !1,
                      ),
                      document.removeEventListener(
                        'mozpointerlockchange',
                        this.onPointerLockChange,
                        !1,
                      ),
                      document.removeEventListener('pointerlockerror', this.onPointerLockError, !1))
                  },
                  updateOrientation: (function () {
                    var e = new i.Matrix4()
                    return function () {
                      var t,
                        n = this.el.object3D,
                        r = this.pitchObject,
                        i = this.yawObject,
                        o = this.el.sceneEl
                      o.is('vr-mode') && o.checkHeadsetConnected()
                        ? o.hasWebXR &&
                          (t = o.renderer.xr.getCameraPose()) &&
                          ((e.elements = t.transform.matrix),
                          e.decompose(n.position, n.rotation, n.scale))
                        : (this.updateMagicWindowOrientation(),
                          (n.rotation.x = this.magicWindowDeltaEuler.x + r.rotation.x),
                          (n.rotation.y = this.magicWindowDeltaEuler.y + i.rotation.y),
                          (n.rotation.z = this.magicWindowDeltaEuler.z))
                    }
                  })(),
                  updateMagicWindowOrientation: function () {
                    var e = this.magicWindowAbsoluteEuler,
                      t = this.magicWindowDeltaEuler
                    this.magicWindowControls &&
                      this.magicWindowControls.enabled &&
                      (this.magicWindowControls.update(),
                      e.setFromQuaternion(this.magicWindowObject.quaternion, 'YXZ'),
                      this.previousMagicWindowYaw ||
                        0 === e.y ||
                        (this.previousMagicWindowYaw = e.y),
                      this.previousMagicWindowYaw &&
                        ((t.x = e.x),
                        (t.y += e.y - this.previousMagicWindowYaw),
                        (t.z = e.z),
                        (this.previousMagicWindowYaw = e.y)))
                  },
                  onMouseMove: function (e) {
                    var t,
                      n,
                      r,
                      i = this.pitchObject,
                      o = this.previousMouseEvent,
                      a = this.yawObject
                    this.data.enabled &&
                      (this.mouseDown || this.pointerLocked) &&
                      (this.pointerLocked
                        ? ((n = e.movementX || e.mozMovementX || 0),
                          (r = e.movementY || e.mozMovementY || 0))
                        : ((n = e.screenX - o.screenX), (r = e.screenY - o.screenY)),
                      (this.previousMouseEvent.screenX = e.screenX),
                      (this.previousMouseEvent.screenY = e.screenY),
                      (t = this.data.reverseMouseDrag ? 1 : -1),
                      (a.rotation.y += 0.002 * n * t),
                      (i.rotation.x += 0.002 * r * t),
                      (i.rotation.x = Math.max(-s, Math.min(s, i.rotation.x))))
                  },
                  onMouseDown: function (e) {
                    var t = this.el.sceneEl
                    if (
                      this.data.enabled &&
                      this.data.mouseEnabled &&
                      (!t.is('vr-mode') || !t.checkHeadsetConnected()) &&
                      0 === e.button
                    ) {
                      var n = t && t.canvas
                      ;(this.mouseDown = !0),
                        (this.previousMouseEvent.screenX = e.screenX),
                        (this.previousMouseEvent.screenY = e.screenY),
                        this.showGrabbingCursor(),
                        this.data.pointerLockEnabled &&
                          !this.pointerLocked &&
                          (n.requestPointerLock
                            ? n.requestPointerLock()
                            : n.mozRequestPointerLock && n.mozRequestPointerLock())
                    }
                  },
                  showGrabbingCursor: function () {
                    this.el.sceneEl.canvas.style.cursor = 'grabbing'
                  },
                  hideGrabbingCursor: function () {
                    this.el.sceneEl.canvas.style.cursor = ''
                  },
                  onMouseUp: function () {
                    ;(this.mouseDown = !1), this.hideGrabbingCursor()
                  },
                  onTouchStart: function (e) {
                    1 === e.touches.length &&
                      this.data.touchEnabled &&
                      !this.el.sceneEl.is('vr-mode') &&
                      ((this.touchStart = { x: e.touches[0].pageX, y: e.touches[0].pageY }),
                      (this.touchStarted = !0))
                  },
                  onTouchMove: function (e) {
                    var t,
                      n,
                      r = this.el.sceneEl.canvas,
                      i = this.yawObject
                    this.touchStarted &&
                      this.data.touchEnabled &&
                      ((n =
                        (2 * Math.PI * (e.touches[0].pageX - this.touchStart.x)) / r.clientWidth),
                      (t = this.data.reverseTouchDrag ? 1 : -1),
                      (i.rotation.y -= 0.5 * n * t),
                      (this.touchStart = { x: e.touches[0].pageX, y: e.touches[0].pageY }))
                  },
                  onTouchEnd: function () {
                    this.touchStarted = !1
                  },
                  onEnterVR: function () {
                    var e = this.el.sceneEl
                    e.checkHeadsetConnected() &&
                      (this.saveCameraPose(),
                      this.el.object3D.position.set(0, 0, 0),
                      this.el.object3D.rotation.set(0, 0, 0),
                      e.hasWebXR &&
                        ((this.el.object3D.matrixAutoUpdate = !1), this.el.object3D.updateMatrix()))
                  },
                  onExitVR: function () {
                    this.el.sceneEl.checkHeadsetConnected() &&
                      (this.restoreCameraPose(),
                      this.previousHMDPosition.set(0, 0, 0),
                      (this.el.object3D.matrixAutoUpdate = !0))
                  },
                  onPointerLockChange: function () {
                    this.pointerLocked = !(
                      !document.pointerLockElement && !document.mozPointerLockElement
                    )
                  },
                  onPointerLockError: function () {
                    this.pointerLocked = !1
                  },
                  exitPointerLock: function () {
                    document.exitPointerLock(), (this.pointerLocked = !1)
                  },
                  updateGrabCursor: function (e) {
                    var t = this.el.sceneEl
                    function n() {
                      t.canvas.classList.add('a-grab-cursor')
                    }
                    function r() {
                      t.canvas.classList.remove('a-grab-cursor')
                    }
                    t.canvas
                      ? e
                        ? n()
                        : r()
                      : e
                      ? t.addEventListener('render-target-loaded', n)
                      : t.addEventListener('render-target-loaded', r)
                  },
                  saveCameraPose: function () {
                    var e = this.el
                    this.savedPose.position.copy(e.object3D.position),
                      this.savedPose.rotation.copy(e.object3D.rotation),
                      (this.hasSavedPose = !0)
                  },
                  restoreCameraPose: function () {
                    var e = this.el,
                      t = this.savedPose
                    this.hasSavedPose &&
                      (e.object3D.position.copy(t.position),
                      e.object3D.rotation.copy(t.rotation),
                      (this.hasSavedPose = !1))
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/': 205 },
            ],
            91: [
              function (e, t, n) {
                var r = e('../utils/bind'),
                  i = e('../core/component').registerComponent,
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = 'magicleap-one',
                  u = 'https://cdn.aframe.io/controllers/magicleap/magicleap-one-controller.glb',
                  h = {
                    axes: { touchpad: [0, 1] },
                    buttons: ['trigger', 'grip', 'touchpad', 'menu'],
                  }
                t.exports.Component = i('magicleap-controls', {
                  schema: {
                    hand: { default: 'none' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                  },
                  mapping: h,
                  init: function () {
                    var e = this
                    ;(this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.onButtonChanged = r(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.previousButtonValues = {}),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods()
                  },
                  update: function () {
                    var e = this.data
                    this.controllerIndex = 'right' === e.hand ? 0 : 'left' === e.hand ? 1 : 2
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  bindMethods: function () {
                    ;(this.onModelLoaded = r(this.onModelLoaded, this)),
                      (this.onControllersUpdate = r(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = r(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = r(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = r(this.onAxisMoved, this))
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('axismove', this.onAxisMoved),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    var e = this.data
                    a(this, c, { index: this.controllerIndex, hand: e.hand })
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      idPrefix: c,
                      hand: t.hand,
                      controller: this.controllerIndex,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('gltf-model', u)
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onButtonChanged: function (e) {
                    var t,
                      n = this.mapping.buttons[e.detail.id]
                    n &&
                      ('trigger' === n &&
                        ((t = e.detail.state.value),
                        console.log('analog value of trigger press: ' + t)),
                      this.el.emit(n + 'changed', e.detail.state))
                  },
                  onModelLoaded: function (e) {
                    e.detail.model.scale.set(0.01, 0.01, 0.01)
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {},
                  setButtonColor: function (e, t) {},
                })
              },
              { '../core/component': 131, '../utils/bind': 199, '../utils/tracked-controls': 214 },
            ],
            92: [
              function (e, t, n) {
                var r = e('../utils/'),
                  i = e('../core/component'),
                  o = e('../lib/three'),
                  a = e('../core/shader'),
                  s = r.debug('components:material:error'),
                  l = i.registerComponent,
                  c = a.shaders,
                  u = a.shaderNames
                function h(e) {
                  switch (e) {
                    case 'back':
                      return o.BackSide
                    case 'double':
                      return o.DoubleSide
                    default:
                      return o.FrontSide
                  }
                }
                function d(e) {
                  switch (e) {
                    case 'face':
                      return o.FaceColors
                    case 'vertex':
                      return o.VertexColors
                    default:
                      return o.NoColors
                  }
                }
                function p(e) {
                  switch (e) {
                    case 'none':
                      return o.NoBlending
                    case 'additive':
                      return o.AdditiveBlending
                    case 'subtractive':
                      return o.SubtractiveBlending
                    case 'multiply':
                      return o.MultiplyBlending
                    default:
                      return o.NormalBlending
                  }
                }
                function f(e, t) {
                  e.dispose(), t.unregisterMaterial(e)
                }
                t.exports.Component = l('material', {
                  schema: {
                    alphaTest: { default: 0, min: 0, max: 1 },
                    depthTest: { default: !0 },
                    depthWrite: { default: !0 },
                    flatShading: { default: !1 },
                    npot: { default: !1 },
                    offset: { type: 'vec2', default: { x: 0, y: 0 } },
                    opacity: { default: 1, min: 0, max: 1 },
                    repeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    shader: { default: 'standard', oneOf: u, schemaChange: !0 },
                    side: { default: 'front', oneOf: ['front', 'back', 'double'] },
                    transparent: { default: !1 },
                    vertexColors: { type: 'string', default: 'none', oneOf: ['face', 'vertex'] },
                    visible: { default: !0 },
                    blending: {
                      default: 'normal',
                      oneOf: ['none', 'normal', 'additive', 'subtractive', 'multiply'],
                    },
                    dithering: { default: !0 },
                  },
                  init: function () {
                    this.material = null
                  },
                  update: function (e) {
                    var t = this.data
                    ;(this.shader && t.shader === e.shader) || this.updateShader(t.shader),
                      this.shader.update(this.data),
                      this.updateMaterial(e)
                  },
                  updateSchema: function (e) {
                    var t, n, r, i
                    ;(n = e && e.shader),
                      (t = this.oldData && this.oldData.shader),
                      (r = c[(i = n || t)] && c[i].schema) || s('Unknown shader schema ' + i),
                      (t && n === t) || (this.extendSchema(r), this.updateBehavior())
                  },
                  updateBehavior: function () {
                    var e,
                      t,
                      n = this.el.sceneEl,
                      r = this.schema,
                      i = this
                    function o(e, n) {
                      var r
                      for (r in t) t[r] = e
                      i.shader.update(t)
                    }
                    for (e in ((this.tick = void 0), (t = {}), r))
                      'time' === r[e].type && ((this.tick = o), (t[e] = !0))
                    n && (this.tick ? n.addBehavior(this) : n.removeBehavior(this))
                  },
                  updateShader: function (e) {
                    var t,
                      n = this.data,
                      r = c[e] && c[e].Shader
                    if (!r) throw new Error('Unknown shader ' + e)
                    ;((t = this.shader = new r()).el = this.el),
                      t.init(n),
                      this.setMaterial(t.material),
                      this.updateSchema(n)
                  },
                  updateMaterial: function (e) {
                    var t,
                      n = this.data,
                      r = this.material
                    for (t in ((r.alphaTest = n.alphaTest),
                    (r.depthTest = !1 !== n.depthTest),
                    (r.depthWrite = !1 !== n.depthWrite),
                    (r.opacity = n.opacity),
                    (r.flatShading = n.flatShading),
                    (r.side = h(n.side)),
                    (r.transparent = !1 !== n.transparent || n.opacity < 1),
                    (r.vertexColors = d(n.vertexColors)),
                    (r.visible = n.visible),
                    (r.blending = p(n.blending)),
                    (r.dithering = n.dithering),
                    e))
                      break
                    !t ||
                      (e.alphaTest === n.alphaTest &&
                        e.side === n.side &&
                        e.vertexColors === n.vertexColors) ||
                      (r.needsUpdate = !0)
                  },
                  remove: function () {
                    var e = new o.MeshBasicMaterial(),
                      t = this.material,
                      n = this.el.getObject3D('mesh')
                    n && (n.material = e), f(t, this.system)
                  },
                  setMaterial: function (e) {
                    var t,
                      n = this.el,
                      r = this.system
                    this.material && f(this.material, r),
                      (this.material = e),
                      r.registerMaterial(e),
                      (t = n.getObject3D('mesh'))
                        ? (t.material = e)
                        : n.addEventListener('object3dset', function t(r) {
                            'mesh' === r.detail.type &&
                              r.target === n &&
                              ((n.getObject3D('mesh').material = e),
                              n.removeEventListener('object3dset', t))
                          })
                  },
                })
              },
              {
                '../core/component': 131,
                '../core/shader': 141,
                '../lib/three': 179,
                '../utils/': 205,
              },
            ],
            93: [
              function (e, t, n) {
                var r = e('../utils/debug'),
                  i = e('../core/component').registerComponent,
                  o = e('../lib/three'),
                  a = r('components:obj-model:warn')
                t.exports.Component = i('obj-model', {
                  schema: { mtl: { type: 'model' }, obj: { type: 'model' } },
                  init: function () {
                    var e = this
                    ;(this.model = null),
                      (this.objLoader = new o.OBJLoader()),
                      (this.mtlLoader = new o.MTLLoader(this.objLoader.manager)),
                      (this.mtlLoader.crossOrigin = ''),
                      this.el.addEventListener('componentinitialized', function (t) {
                        e.model && 'material' === t.detail.name && e.applyMaterial()
                      })
                  },
                  update: function () {
                    var e = this.data
                    e.obj && (this.resetMesh(), this.loadObj(e.obj, e.mtl))
                  },
                  remove: function () {
                    this.model && this.resetMesh()
                  },
                  resetMesh: function () {
                    this.el.removeObject3D('mesh')
                  },
                  loadObj: function (e, t) {
                    var n = this,
                      r = this.el,
                      i = this.mtlLoader,
                      o = this.objLoader,
                      s = this.el.sceneEl.systems.renderer,
                      l = t.substr(0, t.lastIndexOf('/') + 1)
                    if (t)
                      return (
                        r.hasAttribute('material') &&
                          a('Material component properties are ignored when a .MTL is provided'),
                        i.setResourcePath(l),
                        void i.load(t, function (t) {
                          t.preload(),
                            o.setMaterials(t),
                            o.load(e, function (e) {
                              ;(n.model = e),
                                n.model.traverse(function (e) {
                                  if (e.isMesh) {
                                    var t = e.material
                                    t.color && s.applyColorCorrection(t.color),
                                      t.map && s.applyColorCorrection(t.map),
                                      t.emissive && s.applyColorCorrection(t.emissive),
                                      t.emissiveMap && s.applyColorCorrection(t.emissiveMap)
                                  }
                                }),
                                r.setObject3D('mesh', e),
                                r.emit('model-loaded', { format: 'obj', model: e })
                            })
                        })
                      )
                    o.load(e, function (e) {
                      ;(n.model = e),
                        n.applyMaterial(),
                        r.setObject3D('mesh', e),
                        r.emit('model-loaded', { format: 'obj', model: e })
                    })
                  },
                  applyMaterial: function () {
                    var e = this.el.components.material
                    e &&
                      this.model.traverse(function (t) {
                        t instanceof o.Mesh && (t.material = e.material)
                      })
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/debug': 201 },
            ],
            94: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = e('../utils/').device.isWebXRAvailable,
                  u = 'https://cdn.aframe.io/controllers/oculus/go/oculus-go-controller.gltf',
                  h = c ? 'oculus-go' : 'Oculus Go',
                  d = c
                    ? { axes: { touchpad: [0, 1] }, buttons: ['trigger', 'none', 'touchpad'] }
                    : { axes: { trackpad: [0, 1] }, buttons: ['trackpad', 'trigger'] }
                t.exports.Component = r('oculus-go-controls', {
                  schema: {
                    hand: { default: '' },
                    buttonColor: { type: 'color', default: '#FFFFFF' },
                    buttonTouchedColor: { type: 'color', default: '#BBBBBB' },
                    buttonHighlightColor: { type: 'color', default: '#7A7A7A' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !0 },
                  },
                  mapping: d,
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods()
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    a(this, h, this.data.hand ? { hand: this.data.hand } : {})
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      armModel: t.armModel,
                      hand: t.hand,
                      idPrefix: h,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('gltf-model', u)
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).trigger = n.getObjectByName(
                        'oculus_go_button_trigger',
                      )),
                      (t.trackpad = n.getObjectByName('oculus_go_touchpad')),
                      (t.touchpad = n.getObjectByName('oculus_go_touchpad')))
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t && this.el.emit(t + 'changed', e.detail.state)
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {
                    this.data.model && this.updateButtonModel(e, t)
                  },
                  updateButtonModel: function (e, t) {
                    var n = this.buttonMeshes
                    if (n && n[e]) {
                      var r, i
                      switch (t) {
                        case 'down':
                          r = this.data.buttonHighlightColor
                          break
                        case 'touchstart':
                          r = this.data.buttonTouchedColor
                          break
                        default:
                          r = this.data.buttonColor
                      }
                      ;(i = n[e]).material.color.set(r),
                        this.rendererSystem.applyColorCorrection(i.material.color)
                    }
                  },
                })
              },
              {
                '../core/component': 131,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            95: [
              function (e, t, n) {
                var r = e('../utils/bind'),
                  i = e('../core/component').registerComponent,
                  o = e('../lib/three'),
                  a = e('../utils/tracked-controls'),
                  s = a.checkControllerPresentAndSetup,
                  l = a.emitIfAxesChanged,
                  c = a.onButtonEvent,
                  u = e('../utils/').device.isWebXRAvailable,
                  h = 'oculus-touch',
                  d = u ? h : 'Oculus Touch',
                  p = 'https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-',
                  f = {
                    left: {
                      modelUrl: p + 'left.gltf',
                      rayOrigin: {
                        origin: { x: 0.008, y: -0.01, z: 0 },
                        direction: { x: 0, y: -0.8, z: -1 },
                      },
                      modelPivotOffset: new o.Vector3(-0.005, 0.003, -0.055),
                      modelPivotRotation: new o.Euler(0, 0, 0),
                    },
                    right: {
                      modelUrl: p + 'right.gltf',
                      rayOrigin: {
                        origin: { x: -0.008, y: -0.01, z: 0 },
                        direction: { x: 0, y: -0.8, z: -1 },
                      },
                      modelPivotOffset: new o.Vector3(0.005, 0.003, -0.055),
                      modelPivotRotation: new o.Euler(0, 0, 0),
                    },
                  },
                  m = {
                    left: {
                      modelUrl: p + 'left.gltf',
                      rayOrigin: {
                        origin: { x: 0.002, y: -0.005, z: -0.03 },
                        direction: { x: 0, y: -0.8, z: -1 },
                      },
                      modelPivotOffset: new o.Vector3(-0.005, 0.036, -0.037),
                      modelPivotRotation: new o.Euler(Math.PI / 4.5, 0, 0),
                    },
                    right: {
                      modelUrl: p + 'right.gltf',
                      rayOrigin: {
                        origin: { x: -0.002, y: -0.005, z: -0.03 },
                        direction: { x: 0, y: -0.8, z: -1 },
                      },
                      modelPivotOffset: new o.Vector3(0.005, 0.036, -0.037),
                      modelPivotRotation: new o.Euler(Math.PI / 4.5, 0, 0),
                    },
                  },
                  v = 'oculus-touch',
                  g = {
                    'oculus-touch': u ? m : f,
                    'oculus-touch-v2': {
                      left: {
                        modelUrl: p + 'gen2-left.gltf',
                        rayOrigin: {
                          origin: { x: -0.01, y: 0, z: -0.02 },
                          direction: { x: 0, y: -0.5, z: -1 },
                        },
                        modelPivotOffset: new o.Vector3(0, 0, 0),
                        modelPivotRotation: new o.Euler(0, 0, 0),
                      },
                      right: {
                        modelUrl: p + 'gen2-right.gltf',
                        rayOrigin: {
                          origin: { x: 0.01, y: 0, z: -0.02 },
                          direction: { x: 0, y: -0.5, z: -1 },
                        },
                        modelPivotOffset: new o.Vector3(0, 0, 0),
                        modelPivotRotation: new o.Euler(0, 0, 0),
                      },
                    },
                    'oculus-touch-v3': {
                      left: {
                        modelUrl: p + 'v3-left.glb',
                        rayOrigin: {
                          origin: { x: 0.015, y: 0.005, z: 0 },
                          direction: { x: 0, y: 0, z: -1 },
                        },
                        modelPivotOffset: new o.Vector3(0.01, -0.01, 0.05),
                        modelPivotRotation: new o.Euler(Math.PI / 4, 0, 0),
                      },
                      right: {
                        modelUrl: p + 'v3-right.glb',
                        rayOrigin: {
                          origin: { x: -0.015, y: 0.005, z: 0 },
                          direction: { x: 0, y: 0, z: -1 },
                        },
                        modelPivotOffset: new o.Vector3(-0.01, -0.01, 0.05),
                        modelPivotRotation: new o.Euler(Math.PI / 4, 0, 0),
                      },
                    },
                  },
                  y = u
                    ? {
                        left: {
                          axes: { thumbstick: [2, 3] },
                          buttons: [
                            'trigger',
                            'grip',
                            'none',
                            'thumbstick',
                            'xbutton',
                            'ybutton',
                            'surface',
                          ],
                        },
                        right: {
                          axes: { thumbstick: [2, 3] },
                          buttons: [
                            'trigger',
                            'grip',
                            'none',
                            'thumbstick',
                            'abutton',
                            'bbutton',
                            'surface',
                          ],
                        },
                      }
                    : {
                        left: {
                          axes: { thumbstick: [0, 1] },
                          buttons: [
                            'thumbstick',
                            'trigger',
                            'grip',
                            'xbutton',
                            'ybutton',
                            'surface',
                          ],
                        },
                        right: {
                          axes: { thumbstick: [0, 1] },
                          buttons: [
                            'thumbstick',
                            'trigger',
                            'grip',
                            'abutton',
                            'bbutton',
                            'surface',
                          ],
                        },
                      }
                t.exports.Component = i('oculus-touch-controls', {
                  schema: {
                    hand: { default: 'left' },
                    buttonColor: { type: 'color', default: '#999' },
                    buttonTouchColor: { type: 'color', default: '#8AB' },
                    buttonHighlightColor: { type: 'color', default: '#2DF' },
                    model: { default: !0 },
                    controllerType: {
                      default: 'auto',
                      oneOf: ['auto', 'oculus-touch', 'oculus-touch-v2', 'oculus-touch-v3'],
                    },
                    orientationOffset: { type: 'vec3', default: { x: 43, y: 0, z: 0 } },
                  },
                  mapping: y,
                  bindMethods: function () {
                    ;(this.onModelLoaded = r(this.onModelLoaded, this)),
                      (this.onControllersUpdate = r(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = r(this.checkIfControllerPresent, this)),
                      (this.onAxisMoved = r(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = r(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        c(t.detail.id, 'down', e, e.data.hand)
                      }),
                      (this.onButtonUp = function (t) {
                        c(t.detail.id, 'up', e, e.data.hand)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        c(t.detail.id, 'touchstart', e, e.data.hand)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        c(t.detail.id, 'touchend', e, e.data.hand)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.previousButtonValues = {}),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods()
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('axismove', this.onAxisMoved),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    s(this, d, { hand: this.data.hand })
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  loadModel: function (e) {
                    var t,
                      n = this.data
                    if (n.model) {
                      if (
                        ((this.displayModel = g[n.controllerType] || g[v]),
                        'auto' === n.controllerType)
                      ) {
                        var r = this.el.sceneEl.systems['tracked-controls-webvr']
                        if (r && r.vrDisplay) {
                          var i = r.vrDisplay.displayName
                          ;/^Oculus Quest$/.test(i) && (this.displayModel = g['oculus-touch-v2'])
                        } else
                          (t = v),
                            (t =
                              -1 !== e.profiles.indexOf('oculus-touch-v2') ? 'oculus-touch-v2' : t),
                            (t =
                              -1 !== e.profiles.indexOf('oculus-touch-v3') ? 'oculus-touch-v3' : t),
                            (this.displayModel = g[t])
                      }
                      var o = this.displayModel[n.hand].modelUrl
                      this.el.setAttribute('gltf-model', o)
                    }
                  },
                  injectTrackedControls: function (e) {
                    var t = this.data,
                      n = h,
                      r = 'right' === t.hand ? 'Oculus Touch (Right)' : 'Oculus Touch (Left)',
                      i = u ? n : r
                    this.el.setAttribute('tracked-controls', {
                      id: i,
                      hand: t.hand,
                      orientationOffset: t.orientationOffset,
                      handTrackingEnabled: !1,
                    }),
                      this.loadModel(e)
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onButtonChanged: function (e) {
                    var t,
                      n = this.mapping[this.data.hand].buttons[e.detail.id],
                      r = this.buttonMeshes
                    n &&
                      (('trigger' !== n && 'grip' !== n) || (t = e.detail.state.value),
                      r &&
                        ('trigger' === n &&
                          r.trigger &&
                          (r.trigger.rotation.x =
                            this.originalXRotationTrigger - t * (Math.PI / 26)),
                        'grip' === n &&
                          r.grip &&
                          (r.grip.position.x =
                            this.originalXPositionGrip +
                            ('left' === this.data.hand ? -1 : 1) * t * 0.004)),
                      this.el.emit(n + 'changed', e.detail.state))
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = (this.controllerObject3D = e.detail.model)
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).grip = n.getObjectByName('buttonHand')),
                      (this.originalXPositionGrip = t.grip && t.grip.position.x),
                      (t.thumbstick = n.getObjectByName('stick')),
                      (t.trigger = n.getObjectByName('buttonTrigger')),
                      (this.originalXRotationTrigger = t.trigger && t.trigger.rotation.x),
                      (t.xbutton = n.getObjectByName('buttonX')),
                      (t.abutton = n.getObjectByName('buttonA')),
                      (t.ybutton = n.getObjectByName('buttonY')),
                      (t.bbutton = n.getObjectByName('buttonB')),
                      n.position.copy(this.displayModel[this.data.hand].modelPivotOffset),
                      n.rotation.copy(this.displayModel[this.data.hand].modelPivotRotation),
                      this.el.emit('controllermodelready', {
                        name: 'oculus-touch-controls',
                        model: this.data.model,
                        rayOrigin: this.displayModel[this.data.hand].rayOrigin,
                      }))
                  },
                  onAxisMoved: function (e) {
                    l(this, this.mapping[this.data.hand].axes, e)
                  },
                  updateModel: function (e, t) {
                    this.data.model && this.updateButtonModel(e, t)
                  },
                  updateButtonModel: function (e, t) {
                    var n,
                      r =
                        'up' === t || 'touchend' === t
                          ? this.data.buttonColor
                          : 'touchstart' === t
                          ? this.data.buttonTouchColor
                          : this.data.buttonHighlightColor,
                      i = this.buttonMeshes
                    this.data.model &&
                      i &&
                      i[e] &&
                      ((n = i[e]).material.color.set(r),
                      this.rendererSystem.applyColorCorrection(n.material.color))
                  },
                })
              },
              {
                '../core/component': 131,
                '../lib/three': 179,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            96: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent
                t.exports.Component = r('position', {
                  schema: { type: 'vec3' },
                  update: function () {
                    var e = this.el.object3D,
                      t = this.data
                    e.position.set(t.x, t.y, t.z)
                  },
                  remove: function () {
                    this.el.object3D.position.set(0, 0, 0)
                  },
                })
              },
              { '../core/component': 131 },
            ],
            97: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../lib/three'),
                  o = e('../utils/').debug('components:raycaster:warn'),
                  a = /^[\w\s-.,[\]#]*$/,
                  s = { childList: !0, attributes: !0, subtree: !0 },
                  l = {
                    INTERSECT: 'raycaster-intersected',
                    INTERSECTION: 'raycaster-intersection',
                    INTERSECT_CLEAR: 'raycaster-intersected-cleared',
                    INTERSECTION_CLEAR: 'raycaster-intersection-cleared',
                  }
                function c(e, t) {
                  var n
                  for (e.length = t.length, n = 0; n < t.length; n++) e[n] = t[n]
                }
                t.exports.Component = r('raycaster', {
                  schema: {
                    autoRefresh: { default: !0 },
                    direction: { type: 'vec3', default: { x: 0, y: 0, z: -1 } },
                    enabled: { default: !0 },
                    far: { default: 1e3 },
                    interval: { default: 0 },
                    near: { default: 0 },
                    objects: { default: '' },
                    origin: { type: 'vec3' },
                    showLine: { default: !1 },
                    lineColor: { default: 'white' },
                    lineOpacity: { default: 1 },
                    useWorldCoordinates: { default: !1 },
                  },
                  multiple: !0,
                  init: function () {
                    ;(this.clearedIntersectedEls = []),
                      (this.unitLineEndVec3 = new i.Vector3()),
                      (this.intersectedEls = []),
                      (this.intersections = []),
                      (this.newIntersectedEls = []),
                      (this.newIntersections = []),
                      (this.objects = []),
                      (this.prevCheckTime = void 0),
                      (this.prevIntersectedEls = []),
                      (this.rawIntersections = []),
                      (this.raycaster = new i.Raycaster()),
                      this.updateOriginDirection(),
                      (this.setDirty = this.setDirty.bind(this)),
                      (this.updateLine = this.updateLine.bind(this)),
                      (this.observer = new MutationObserver(this.setDirty)),
                      (this.dirty = !0),
                      (this.lineEndVec3 = new i.Vector3()),
                      (this.otherLineEndVec3 = new i.Vector3()),
                      (this.lineData = { end: this.lineEndVec3 }),
                      (this.getIntersection = this.getIntersection.bind(this)),
                      (this.intersectedDetail = {
                        el: this.el,
                        getIntersection: this.getIntersection,
                      }),
                      (this.intersectedClearedDetail = { el: this.el }),
                      (this.intersectionClearedDetail = { clearedEls: this.clearedIntersectedEls }),
                      (this.intersectionDetail = {})
                  },
                  update: function (e) {
                    var t = this.data,
                      n = this.el,
                      r = this.raycaster
                    ;(r.far = t.far),
                      (r.near = t.near),
                      !t.showLine ||
                        (t.far === e.far &&
                          t.origin === e.origin &&
                          t.direction === e.direction &&
                          e.showLine) ||
                        (this.unitLineEndVec3.copy(t.origin).add(t.direction).normalize(),
                        this.drawLine()),
                      !t.showLine && e.showLine && n.removeAttribute('line'),
                      t.objects === e.objects ||
                        a.test(t.objects) ||
                        o(
                          '[raycaster] Selector "' +
                            t.objects +
                            '" may not update automatically with DOM changes.',
                        ),
                      t.objects ||
                        o(
                          '[raycaster] For performance, please define raycaster.objects when using raycaster or cursor components to whitelist which entities to intersect with. e.g., raycaster="objects: [data-raycastable]".',
                        ),
                      t.autoRefresh !== e.autoRefresh &&
                        n.isPlaying &&
                        (t.autoRefresh ? this.addEventListeners() : this.removeEventListeners()),
                      e.enabled && !t.enabled && this.clearAllIntersections(),
                      this.setDirty()
                  },
                  play: function () {
                    this.addEventListeners()
                  },
                  pause: function () {
                    this.removeEventListeners()
                  },
                  remove: function () {
                    this.data.showLine && this.el.removeAttribute('line'),
                      this.clearAllIntersections()
                  },
                  addEventListeners: function () {
                    this.data.autoRefresh &&
                      (this.observer.observe(this.el.sceneEl, s),
                      this.el.sceneEl.addEventListener('object3dset', this.setDirty),
                      this.el.sceneEl.addEventListener('object3dremove', this.setDirty))
                  },
                  removeEventListeners: function () {
                    this.observer.disconnect(),
                      this.el.sceneEl.removeEventListener('object3dset', this.setDirty),
                      this.el.sceneEl.removeEventListener('object3dremove', this.setDirty)
                  },
                  setDirty: function () {
                    this.dirty = !0
                  },
                  refreshObjects: function () {
                    var e,
                      t = this.data
                    ;(e = t.objects
                      ? this.el.sceneEl.querySelectorAll(t.objects)
                      : this.el.sceneEl.querySelectorAll('*')),
                      (this.objects = this.flattenObject3DMaps(e)),
                      (this.dirty = !1)
                  },
                  tock: function (e) {
                    var t = this.data,
                      n = this.prevCheckTime
                    t.enabled &&
                      ((n && e - n < t.interval) ||
                        ((this.prevCheckTime = e), this.checkIntersections()))
                  },
                  checkIntersections: function () {
                    var e,
                      t,
                      n = this.clearedIntersectedEls,
                      r = this.el,
                      i = this.data,
                      o = this.intersectedEls,
                      a = this.intersections,
                      s = this.newIntersectedEls,
                      u = this.newIntersections,
                      h = this.prevIntersectedEls,
                      d = this.rawIntersections
                    for (
                      this.dirty && this.refreshObjects(),
                        c(this.prevIntersectedEls, this.intersectedEls),
                        this.updateOriginDirection(),
                        d.length = 0,
                        this.raycaster.intersectObjects(this.objects, !0, d),
                        a.length = 0,
                        o.length = 0,
                        e = 0;
                      e < d.length;
                      e++
                    )
                      (t = d[e]),
                        (i.showLine && t.object === r.getObject3D('line')) ||
                          (t.object.el && (a.push(t), o.push(t.object.el)))
                    for (u.length = 0, s.length = 0, e = 0; e < a.length; e++)
                      -1 === h.indexOf(a[e].object.el) && (u.push(a[e]), s.push(a[e].object.el))
                    for (n.length = 0, e = 0; e < h.length; e++)
                      -1 === o.indexOf(h[e]) &&
                        (h[e].emit(l.INTERSECT_CLEAR, this.intersectedClearedDetail), n.push(h[e]))
                    for (
                      n.length && r.emit(l.INTERSECTION_CLEAR, this.intersectionClearedDetail),
                        e = 0;
                      e < s.length;
                      e++
                    )
                      s[e].emit(l.INTERSECT, this.intersectedDetail)
                    u.length &&
                      ((this.intersectionDetail.els = s),
                      (this.intersectionDetail.intersections = u),
                      r.emit(l.INTERSECTION, this.intersectionDetail)),
                      i.showLine && setTimeout(this.updateLine)
                  },
                  updateLine: function () {
                    var e,
                      t = this.el,
                      n = this.intersections
                    n.length && (e = n[0].object.el === t && n[1] ? n[1].distance : n[0].distance),
                      this.drawLine(e)
                  },
                  getIntersection: function (e) {
                    var t, n
                    for (t = 0; t < this.intersections.length; t++)
                      if ((n = this.intersections[t]).object.el === e) return n
                    return null
                  },
                  updateOriginDirection: (function () {
                    var e = new i.Vector3(),
                      t = new i.Vector3()
                    return function () {
                      var n = this.el,
                        r = this.data
                      r.useWorldCoordinates
                        ? this.raycaster.set(r.origin, r.direction)
                        : (n.object3D.updateMatrixWorld(),
                          t.setFromMatrixPosition(n.object3D.matrixWorld),
                          (0 === r.origin.x && 0 === r.origin.y && 0 === r.origin.z) ||
                            (t = n.object3D.localToWorld(t.copy(r.origin))),
                          e
                            .copy(r.direction)
                            .transformDirection(n.object3D.matrixWorld)
                            .normalize(),
                          this.raycaster.set(t, e))
                    }
                  })(),
                  drawLine: function (e) {
                    var t,
                      n = this.data,
                      r = this.el
                    ;(t =
                      this.lineData.end === this.lineEndVec3
                        ? this.otherLineEndVec3
                        : this.lineEndVec3),
                      void 0 === e && (e = n.far === 1 / 0 ? 1e3 : n.far),
                      (this.lineData.start = n.origin),
                      (this.lineData.end = t.copy(this.unitLineEndVec3).multiplyScalar(e)),
                      (this.lineData.color = n.lineColor),
                      (this.lineData.opacity = n.lineOpacity),
                      r.setAttribute('line', this.lineData)
                  },
                  flattenObject3DMaps: function (e) {
                    var t,
                      n,
                      r = this.objects
                    for (r.length = 0, n = 0; n < e.length; n++)
                      if (e[n].isEntity && e[n].object3D)
                        for (t in e[n].object3DMap) r.push(e[n].getObject3D(t))
                    return r
                  },
                  clearAllIntersections: function () {
                    var e
                    for (e = 0; e < this.intersectedEls.length; e++)
                      this.intersectedEls[e].emit(l.INTERSECT_CLEAR, this.intersectedClearedDetail)
                    c(this.clearedIntersectedEls, this.intersectedEls),
                      (this.intersectedEls.length = 0),
                      (this.intersections.length = 0),
                      this.el.emit(l.INTERSECTION_CLEAR, this.intersectionClearedDetail)
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/': 205 },
            ],
            98: [
              function (e, t, n) {
                var r = e('../lib/three').Math.degToRad,
                  i = e('../core/component').registerComponent
                t.exports.Component = i('rotation', {
                  schema: { type: 'vec3' },
                  update: function () {
                    var e = this.data,
                      t = this.el.object3D
                    t.rotation.set(r(e.x), r(e.y), r(e.z)), (t.rotation.order = 'YXZ')
                  },
                  remove: function () {
                    this.el.object3D.rotation.set(0, 0, 0)
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179 },
            ],
            99: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = 1e-5
                t.exports.Component = r('scale', {
                  schema: { type: 'vec3', default: { x: 1, y: 1, z: 1 } },
                  update: function () {
                    var e = this.data,
                      t = this.el.object3D,
                      n = 0 === e.x ? i : e.x,
                      r = 0 === e.y ? i : e.y,
                      o = 0 === e.z ? i : e.z
                    t.scale.set(n, r, o)
                  },
                  remove: function () {
                    this.el.object3D.scale.set(1, 1, 1)
                  },
                })
              },
              { '../core/component': 131 },
            ],
            100: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../core/component').components
                t.exports.Component = r('background', {
                  schema: {
                    color: { type: 'color', default: 'black' },
                    transparent: { default: !1 },
                  },
                  update: function () {
                    var e = this.data,
                      t = this.el.object3D
                    e.transparent
                      ? (t.background = null)
                      : (t.background = new THREE.Color(e.color))
                  },
                  remove: function () {
                    var e = this.data,
                      t = this.el.object3D
                    e.transparent
                      ? (t.background = null)
                      : (t.background = i[this.name].schema.color.default)
                  },
                })
              },
              { '../../core/component': 131 },
            ],
            101: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent
                t.exports.Component = r('debug', { schema: { default: !0 } })
              },
              { '../../core/component': 131 },
            ],
            102: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../utils/'),
                  o = i.bind,
                  a = e('../../constants/'),
                  s = 'a-modal',
                  l = 'a-dialog',
                  c = 'a-dialog-text',
                  u = 'a-dialog-text-container',
                  h = 'a-dialog-buttons-container',
                  d = 'a-dialog-button',
                  p = 'a-dialog-allow-button',
                  f = 'a-dialog-deny-button',
                  m = 'a-dialog-ok-button'
                function v(e, t, n, r, i) {
                  var o, s, l
                  return (
                    (o = document.createElement('div')).classList.add(h),
                    (s = document.createElement('button')).classList.add(d, f),
                    s.setAttribute(a.AFRAME_INJECTED, ''),
                    (s.innerHTML = e),
                    o.appendChild(s),
                    (l = document.createElement('button')).classList.add(d, p),
                    l.setAttribute(a.AFRAME_INJECTED, ''),
                    (l.innerHTML = t),
                    o.appendChild(l),
                    l.addEventListener('click', function (e) {
                      e.stopPropagation(), r()
                    }),
                    s.addEventListener('click', function (e) {
                      e.stopPropagation(), i()
                    }),
                    y(n, o)
                  )
                }
                function g(e, t, n) {
                  var r, i
                  return (
                    (r = document.createElement('div')).classList.add(h),
                    (i = document.createElement('button')).classList.add(d, m),
                    i.setAttribute(a.AFRAME_INJECTED, ''),
                    (i.innerHTML = e),
                    r.appendChild(i),
                    i.addEventListener('click', function (e) {
                      e.stopPropagation(), n()
                    }),
                    y(t, r)
                  )
                }
                function y(e, t) {
                  var n, r, i, o
                  return (
                    (n = document.createElement('div')).classList.add(s),
                    n.setAttribute(a.AFRAME_INJECTED, ''),
                    ((r = document.createElement('div')).className = l),
                    r.setAttribute(a.AFRAME_INJECTED, ''),
                    n.appendChild(r),
                    (i = document.createElement('div')).classList.add(u),
                    r.appendChild(i),
                    (o = document.createElement('div')).classList.add(c),
                    (o.innerHTML = e),
                    i.appendChild(o),
                    r.appendChild(t),
                    n
                  )
                }
                t.exports.Component = r('device-orientation-permission-ui', {
                  schema: {
                    enabled: { default: !0 },
                    deviceMotionMessage: {
                      default:
                        'This immersive website requires access to your device motion sensors.',
                    },
                    mobileDesktopMessage: {
                      default:
                        'Set your browser to request the mobile version of the site and reload the page to enjoy immersive mode.',
                    },
                    httpsMessage: {
                      default:
                        'Access this site over HTTPS to enter VR mode and grant access to the device sensors.',
                    },
                    denyButtonText: { default: 'Deny' },
                    allowButtonText: { default: 'Allow' },
                    cancelButtonText: { default: 'Cancel' },
                  },
                  init: function () {
                    var e = this
                    this.data.enabled &&
                      ('localhost' !== location.hostname &&
                        '127.0.0.1' !== location.hostname &&
                        'http:' === location.protocol &&
                        this.showHTTPAlert(),
                      i.device.isMobileDeviceRequestingDesktopSite()
                        ? this.showMobileDesktopModeAlert()
                        : 'undefined' !== typeof DeviceOrientationEvent &&
                          DeviceOrientationEvent.requestPermission
                        ? ((this.onDeviceMotionDialogAllowClicked = o(
                            this.onDeviceMotionDialogAllowClicked,
                            this,
                          )),
                          (this.onDeviceMotionDialogDenyClicked = o(
                            this.onDeviceMotionDialogDenyClicked,
                            this,
                          )),
                          DeviceOrientationEvent.requestPermission()
                            .catch(function () {
                              ;(e.devicePermissionDialogEl = v(
                                e.data.denyButtonText,
                                e.data.allowButtonText,
                                e.data.deviceMotionMessage,
                                e.onDeviceMotionDialogAllowClicked,
                                e.onDeviceMotionDialogDenyClicked,
                              )),
                                e.el.appendChild(e.devicePermissionDialogEl)
                            })
                            .then(function () {
                              e.el.emit('deviceorientationpermissiongranted'),
                                (e.permissionGranted = !0)
                            }))
                        : (this.permissionGranted = !0))
                  },
                  remove: function () {
                    this.devicePermissionDialogEl &&
                      this.el.removeChild(this.devicePermissionDialogEl)
                  },
                  onDeviceMotionDialogDenyClicked: function () {
                    this.remove()
                  },
                  showMobileDesktopModeAlert: function () {
                    var e = this,
                      t = g(e.data.cancelButtonText, e.data.mobileDesktopMessage, function () {
                        e.el.removeChild(t)
                      })
                    this.el.appendChild(t)
                  },
                  showHTTPAlert: function () {
                    var e = this,
                      t = g(e.data.cancelButtonText, e.data.httpsMessage, function () {
                        e.el.removeChild(t)
                      })
                    this.el.appendChild(t)
                  },
                  onDeviceMotionDialogAllowClicked: function () {
                    var e = this
                    this.el.emit('deviceorientationpermissionrequested'),
                      DeviceOrientationEvent.requestPermission()
                        .then(function (t) {
                          'granted' === t
                            ? (e.el.emit('deviceorientationpermissiongranted'),
                              (e.permissionGranted = !0))
                            : e.el.emit('deviceorientationpermissionrejected'),
                            e.remove()
                        })
                        .catch(console.error)
                  },
                })
              },
              { '../../constants/': 123, '../../core/component': 131, '../../utils/': 205 },
            ],
            103: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent
                t.exports.Component = r('embedded', {
                  dependencies: ['vr-mode-ui'],
                  schema: { default: !0 },
                  update: function () {
                    var e = this.el,
                      t = e.querySelector('.a-enter-vr')
                    !0 === this.data
                      ? (t && t.classList.add('embedded'), e.removeFullScreenStyles())
                      : (t && t.classList.remove('embedded'), e.addFullScreenStyles())
                  },
                })
              },
              { '../../core/component': 131 },
            ],
            104: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../lib/three'),
                  o = e('../../utils/debug')('components:fog:warn')
                function a(e) {
                  var t
                  return (
                    ((t =
                      'exponential' === e.type
                        ? new i.FogExp2(e.color, e.density)
                        : new i.Fog(e.color, e.near, e.far)).name = e.type),
                    t
                  )
                }
                t.exports.Component = r('fog', {
                  schema: {
                    color: { type: 'color', default: '#000' },
                    density: { default: 25e-5 },
                    far: { default: 1e3, min: 0 },
                    near: { default: 1, min: 0 },
                    type: { default: 'linear', oneOf: ['linear', 'exponential'] },
                  },
                  update: function () {
                    var e = this.data,
                      t = this.el,
                      n = this.el.object3D.fog
                    if (t.isScene)
                      return n && e.type === n.name
                        ? void Object.keys(this.schema).forEach(function (t) {
                            var r = e[t]
                            'color' === t && (r = new i.Color(r)), (n[t] = r)
                          })
                        : ((t.object3D.fog = a(e)), void t.systems.material.updateMaterials())
                    o('Fog component can only be applied to <a-scene>')
                  },
                  remove: function () {
                    var e = this.el.object3D.fog
                    e && ((e.far = 0), (e.near = 0.1))
                  },
                })
              },
              { '../../core/component': 131, '../../lib/three': 179, '../../utils/debug': 201 },
            ],
            105: [
              function (e, t, n) {
                ;(function (n) {
                  var r = e('../../constants').AFRAME_INJECTED,
                    i = e('../../../package'),
                    o = e('../../core/component').registerComponent,
                    a = e('../../utils/')
                  function s(e) {
                    var t = e.split('.')
                    return (t[2] = 'x'), t.join('.')
                  }
                  var l = 'https://aframe.io/aframe-inspector/dist/aframe-inspector.js',
                    c =
                      'https://unpkg.com/aframe-inspector@' +
                      s(i.version) +
                      '/dist/aframe-inspector.min.js',
                    u = 'dev' === n.env.INSPECTOR_VERSION ? l : c,
                    h = 'Loading Inspector',
                    d = 'Error loading Inspector'
                  t.exports.Component = o('inspector', {
                    schema: { url: { default: u } },
                    init: function () {
                      ;(this.firstPlay = !0),
                        (this.onKeydown = this.onKeydown.bind(this)),
                        (this.onMessage = this.onMessage.bind(this)),
                        this.initOverlay(),
                        window.addEventListener('keydown', this.onKeydown),
                        window.addEventListener('message', this.onMessage)
                    },
                    play: function () {
                      var e
                      this.firstPlay &&
                        'false' !== (e = a.getUrlParameter('inspector')) &&
                        e &&
                        (this.openInspector(), (this.firstPlay = !1))
                    },
                    initOverlay: function () {
                      var e = '<span class="dots"><span>.</span><span>.</span><span>.</span></span>'
                      ;(this.loadingMessageEl = document.createElement('div')),
                        this.loadingMessageEl.classList.add('a-inspector-loader'),
                        (this.loadingMessageEl.innerHTML = h + e)
                    },
                    remove: function () {
                      this.removeEventListeners()
                    },
                    onKeydown: function (e) {
                      73 === e.keyCode &&
                        ((e.ctrlKey && e.altKey) || e.getModifierState('AltGraph')) &&
                        this.openInspector()
                    },
                    showLoader: function () {
                      document.body.appendChild(this.loadingMessageEl)
                    },
                    hideLoader: function () {
                      document.body.removeChild(this.loadingMessageEl)
                    },
                    onMessage: function (e) {
                      'INJECT_AFRAME_INSPECTOR' === e.data && this.openInspector()
                    },
                    openInspector: function (e) {
                      var t,
                        n = this
                      AFRAME.INSPECTOR || AFRAME.inspectorInjected
                        ? AFRAME.INSPECTOR.open(e)
                        : (this.showLoader(),
                          ((t = document.createElement('script')).src = this.data.url),
                          t.setAttribute('data-name', 'aframe-inspector'),
                          t.setAttribute(r, ''),
                          (t.onload = function () {
                            AFRAME.INSPECTOR.open(e), n.hideLoader(), n.removeEventListeners()
                          }),
                          (t.onerror = function () {
                            n.loadingMessageEl.innerHTML = d
                          }),
                          document.head.appendChild(t),
                          (AFRAME.inspectorInjected = !0))
                    },
                    removeEventListeners: function () {
                      window.removeEventListener('keydown', this.onKeydown),
                        window.removeEventListener('message', this.onMessage)
                    },
                  })
                }.call(this, e('_process')))
              },
              {
                '../../../package': 73,
                '../../constants': 123,
                '../../core/component': 131,
                '../../utils/': 205,
                _process: 49,
              },
            ],
            106: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../utils/').shouldCaptureKeyEvent
                t.exports.Component = r('keyboard-shortcuts', {
                  schema: { enterVR: { default: !0 }, exitVR: { default: !0 } },
                  init: function () {
                    this.onKeyup = this.onKeyup.bind(this)
                  },
                  update: function (e) {
                    var t = this.data
                    this.enterVREnabled = t.enterVR
                  },
                  play: function () {
                    window.addEventListener('keyup', this.onKeyup, !1)
                  },
                  pause: function () {
                    window.removeEventListener('keyup', this.onKeyup)
                  },
                  onKeyup: function (e) {
                    var t = this.el
                    i(e) &&
                      (this.enterVREnabled && 70 === e.keyCode && t.enterVR(),
                      this.enterVREnabled && 27 === e.keyCode && t.exitVR())
                  },
                })
              },
              { '../../core/component': 131, '../../utils/': 205 },
            ],
            107: [
              function (e, t, n) {
                var r = e('../../utils/debug'),
                  i = e('../../core/component').registerComponent,
                  o = r('components:pool:warn')
                t.exports.Component = i('pool', {
                  schema: {
                    container: { default: '' },
                    mixin: { default: '' },
                    size: { default: 0 },
                    dynamic: { default: !1 },
                  },
                  multiple: !0,
                  initPool: function () {
                    var e
                    for (
                      this.availableEls = [],
                        this.usedEls = [],
                        this.data.mixin || o('No mixin provided for pool component.'),
                        this.data.container &&
                          ((this.container = document.querySelector(this.data.container)),
                          this.container || o('Container ' + this.data.container + ' not found.')),
                        this.container = this.container || this.el,
                        e = 0;
                      e < this.data.size;
                      ++e
                    )
                      this.createEntity()
                  },
                  update: function (e) {
                    var t = this.data
                    ;(e.mixin === t.mixin && e.size === t.size) || this.initPool()
                  },
                  createEntity: function () {
                    var e
                    ;((e = document.createElement('a-entity')).play = this.wrapPlay(e.play)),
                      e.setAttribute('mixin', this.data.mixin),
                      (e.object3D.visible = !1),
                      e.pause(),
                      this.container.appendChild(e),
                      this.availableEls.push(e)
                  },
                  wrapPlay: function (e) {
                    var t = this.usedEls
                    return function () {
                      ;-1 !== t.indexOf(this) && e.call(this)
                    }
                  },
                  requestEntity: function () {
                    var e
                    if (0 === this.availableEls.length) {
                      if (!1 === this.data.dynamic)
                        return void o('Requested entity from empty pool: ' + this.attrName)
                      o(
                        'Requested entity from empty pool. This pool is dynamic and will resize automatically. You might want to increase its initial size: ' +
                          this.attrName,
                      ),
                        this.createEntity()
                    }
                    return (
                      (e = this.availableEls.shift()),
                      this.usedEls.push(e),
                      (e.object3D.visible = !0),
                      e
                    )
                  },
                  returnEntity: function (e) {
                    var t = this.usedEls.indexOf(e)
                    if (-1 !== t)
                      return (
                        this.usedEls.splice(t, 1),
                        this.availableEls.push(e),
                        (e.object3D.visible = !1),
                        e.pause(),
                        e
                      )
                    o('The returned entity was not previously pooled from ' + this.attrName)
                  },
                })
              },
              { '../../core/component': 131, '../../utils/debug': 201 },
            ],
            108: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../lib/three'),
                  o = [
                    'attribute vec3 position;',
                    'attribute vec2 uv;',
                    'uniform mat4 projectionMatrix;',
                    'uniform mat4 modelViewMatrix;',
                    'varying vec2 vUv;',
                    'void main()  {',
                    '  vUv = vec2( 1.- uv.x, uv.y );',
                    '  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
                    '}',
                  ].join('\n'),
                  a = [
                    'precision mediump float;',
                    'uniform samplerCube map;',
                    'varying vec2 vUv;',
                    '#define M_PI 3.141592653589793238462643383279',
                    'void main() {',
                    '  vec2 uv = vUv;',
                    '  float longitude = uv.x * 2. * M_PI - M_PI + M_PI / 2.;',
                    '  float latitude = uv.y * M_PI;',
                    '  vec3 dir = vec3(',
                    '    - sin( longitude ) * sin( latitude ),',
                    '    cos( latitude ),',
                    '    - cos( longitude ) * sin( latitude )',
                    '  );',
                    '  normalize( dir );',
                    '  gl_FragColor = vec4( textureCube( map, dir ).rgb, 1.0 );',
                    '}',
                  ].join('\n')
                t.exports.Component = r('screenshot', {
                  schema: {
                    width: { default: 4096 },
                    height: { default: 2048 },
                    camera: { type: 'selector' },
                  },
                  init: function () {
                    var e = this.el,
                      t = this
                    function n() {
                      var n = e.renderer.getContext()
                      n &&
                        ((t.cubeMapSize = n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE)),
                        (t.material = new i.RawShaderMaterial({
                          uniforms: { map: { type: 't', value: null } },
                          vertexShader: o,
                          fragmentShader: a,
                          side: i.DoubleSide,
                        })),
                        (t.quad = new i.Mesh(new i.PlaneBufferGeometry(1, 1), t.material)),
                        (t.quad.visible = !1),
                        (t.camera = new i.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -1e4, 1e4)),
                        (t.canvas = document.createElement('canvas')),
                        (t.ctx = t.canvas.getContext('2d')),
                        e.object3D.add(t.quad),
                        (t.onKeyDown = t.onKeyDown.bind(t)))
                    }
                    e.renderer ? n() : e.addEventListener('render-target-loaded', n)
                  },
                  getRenderTarget: function (e, t) {
                    return new i.WebGLRenderTarget(e, t, {
                      minFilter: i.LinearFilter,
                      magFilter: i.LinearFilter,
                      wrapS: i.ClampToEdgeWrapping,
                      wrapT: i.ClampToEdgeWrapping,
                      format: i.RGBAFormat,
                      type: i.UnsignedByteType,
                    })
                  },
                  resize: function (e, t) {
                    this.quad.scale.set(e, t, 1),
                      (this.camera.left = (-1 * e) / 2),
                      (this.camera.right = e / 2),
                      (this.camera.top = t / 2),
                      (this.camera.bottom = (-1 * t) / 2),
                      this.camera.updateProjectionMatrix(),
                      (this.canvas.width = e),
                      (this.canvas.height = t)
                  },
                  play: function () {
                    window.addEventListener('keydown', this.onKeyDown)
                  },
                  onKeyDown: function (e) {
                    var t = 83 === e.keyCode && e.ctrlKey && e.altKey
                    if (this.data && t) {
                      var n = e.shiftKey ? 'equirectangular' : 'perspective'
                      this.capture(n)
                    }
                  },
                  setCapture: function (e) {
                    var t,
                      n,
                      r,
                      o,
                      a = this.el
                    return (
                      'perspective' === e
                        ? ((this.quad.visible = !1),
                          (n =
                            (this.data.camera && this.data.camera.components.camera.camera) ||
                            a.camera),
                          (t = { width: this.data.width, height: this.data.height }))
                        : ((n = this.camera),
                          (o = new i.WebGLCubeRenderTarget(Math.min(this.cubeMapSize, 2048), {
                            format: i.RGBFormat,
                            generateMipmaps: !0,
                            minFilter: i.LinearMipmapLinearFilter,
                            encoding: i.sRGBEncoding,
                          })),
                          (r = new i.CubeCamera(a.camera.near, a.camera.far, o)),
                          a.camera.getWorldPosition(r.position),
                          a.camera.getWorldQuaternion(r.quaternion),
                          r.update(a.renderer, a.object3D),
                          (this.quad.material.uniforms.map.value = r.renderTarget.texture),
                          (t = { width: this.data.width, height: this.data.height }),
                          (this.quad.visible = !0)),
                      { camera: n, size: t, projection: e }
                    )
                  },
                  capture: function (e) {
                    var t,
                      n = this.el.renderer.xr.enabled,
                      r = this.el.renderer
                    ;(r.xr.enabled = !1),
                      (t = this.setCapture(e)),
                      this.renderCapture(t.camera, t.size, t.projection),
                      this.saveCapture(),
                      (r.xr.enabled = n)
                  },
                  getCanvas: function (e) {
                    var t = this.el.renderer.xr.enabled,
                      n = this.el.renderer,
                      r = this.setCapture(e)
                    return (
                      (n.xr.enabled = !1),
                      this.renderCapture(r.camera, r.size, r.projection),
                      (n.xr.enabled = t),
                      this.canvas
                    )
                  },
                  renderCapture: function (e, t, n) {
                    var r,
                      i,
                      o,
                      a = this.el.renderer.autoClear,
                      s = this.el,
                      l = s.renderer
                    ;(i = this.getRenderTarget(t.width, t.height)),
                      (o = new Uint8Array(4 * t.width * t.height)),
                      this.resize(t.width, t.height),
                      (l.autoClear = !0),
                      l.clear(),
                      l.setRenderTarget(i),
                      l.render(s.object3D, e),
                      (l.autoClear = a),
                      l.readRenderTargetPixels(i, 0, 0, t.width, t.height, o),
                      l.setRenderTarget(null),
                      'perspective' === n && (o = this.flipPixelsVertically(o, t.width, t.height)),
                      (r = new ImageData(new Uint8ClampedArray(o), t.width, t.height)),
                      (this.quad.visible = !1),
                      this.ctx.putImageData(r, 0, 0)
                  },
                  flipPixelsVertically: function (e, t, n) {
                    for (var r = e.slice(0), i = 0; i < t; ++i)
                      for (var o = 0; o < n; ++o)
                        (r[4 * i + o * t * 4] = e[4 * i + (n - o) * t * 4]),
                          (r[4 * i + 1 + o * t * 4] = e[4 * i + 1 + (n - o) * t * 4]),
                          (r[4 * i + 2 + o * t * 4] = e[4 * i + 2 + (n - o) * t * 4]),
                          (r[4 * i + 3 + o * t * 4] = e[4 * i + 3 + (n - o) * t * 4])
                    return r
                  },
                  saveCapture: function () {
                    this.canvas.toBlob(function (e) {
                      var t =
                          'screenshot-' + document.title.toLowerCase() + '-' + Date.now() + '.png',
                        n = document.createElement('a'),
                        r = URL.createObjectURL(e)
                      ;(n.href = r),
                        n.setAttribute('download', t),
                        (n.innerHTML = 'downloading...'),
                        (n.style.display = 'none'),
                        document.body.appendChild(n),
                        setTimeout(function () {
                          n.click(), document.body.removeChild(n)
                        }, 1)
                    }, 'image/png')
                  },
                })
              },
              { '../../core/component': 131, '../../lib/three': 179 },
            ],
            109: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../../vendor/rStats'),
                  o = e('../../utils')
                e('../../../vendor/rStats.extras'), e('../../lib/rStatsAframe')
                var a = window.aframeStats,
                  s = o.bind,
                  l = 'a-hidden',
                  c = window.threeStats
                function u(e) {
                  var t = new c(e.renderer),
                    n = new a(e),
                    r = e.isMobile ? [] : [t, n]
                  return new i({
                    css: [],
                    values: { fps: { caption: 'fps', below: 30 } },
                    groups: [{ caption: 'Framerate', values: ['fps', 'raf'] }],
                    plugins: r,
                  })
                }
                t.exports.Component = r('stats', {
                  schema: { default: !0 },
                  init: function () {
                    var e = this.el
                    'false' !== o.getUrlParameter('stats') &&
                      ((this.stats = u(e)),
                      (this.statsEl = document.querySelector('.rs-base')),
                      (this.hideBound = s(this.hide, this)),
                      (this.showBound = s(this.show, this)),
                      e.addEventListener('enter-vr', this.hideBound),
                      e.addEventListener('exit-vr', this.showBound))
                  },
                  update: function () {
                    if (this.stats) return this.data ? this.show() : this.hide()
                  },
                  remove: function () {
                    this.el.removeEventListener('enter-vr', this.hideBound),
                      this.el.removeEventListener('exit-vr', this.showBound),
                      this.statsEl && this.statsEl.parentNode.removeChild(this.statsEl)
                  },
                  tick: function () {
                    var e = this.stats
                    e && (e('rAF').tick(), e('FPS').frame(), e().update())
                  },
                  hide: function () {
                    this.statsEl.classList.add(l)
                  },
                  show: function () {
                    this.statsEl.classList.remove(l)
                  },
                })
              },
              {
                '../../../vendor/rStats': 217,
                '../../../vendor/rStats.extras': 216,
                '../../core/component': 131,
                '../../lib/rStatsAframe': 178,
                '../../utils': 205,
              },
            ],
            110: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../constants/'),
                  o = e('../../utils/'),
                  a = o.bind,
                  s = 'a-enter-vr',
                  l = 'a-enter-ar',
                  c = 'a-enter-vr-button',
                  u = 'a-enter-ar-button',
                  h = 'a-hidden',
                  d = 'a-orientation-modal'
                function p(e) {
                  var t, n
                  return (
                    (n = document.createElement('div')).classList.add(s),
                    n.setAttribute(i.AFRAME_INJECTED, ''),
                    ((t = document.createElement('button')).className = c),
                    t.setAttribute(
                      'title',
                      'Enter VR mode with a headset or fullscreen mode on a desktop. Visit https://webvr.rocks or https://webvr.info for more information.',
                    ),
                    t.setAttribute(i.AFRAME_INJECTED, ''),
                    o.device.isMobile() && v(t),
                    n.appendChild(t),
                    t.addEventListener('click', function (t) {
                      e(), t.stopPropagation()
                    }),
                    n
                  )
                }
                function f(e) {
                  var t, n
                  return (
                    (n = document.createElement('div')).classList.add(l),
                    n.setAttribute(i.AFRAME_INJECTED, ''),
                    ((t = document.createElement('button')).className = u),
                    t.setAttribute(
                      'title',
                      'Enter AR mode with a headset or handheld device. Visit https://webvr.rocks or https://webvr.info for more information.',
                    ),
                    t.setAttribute(i.AFRAME_INJECTED, ''),
                    o.device.isMobile() && v(t),
                    n.appendChild(t),
                    t.addEventListener('click', function (t) {
                      e(), t.stopPropagation()
                    }),
                    n
                  )
                }
                function m(e) {
                  var t = document.createElement('div')
                  ;(t.className = d), t.classList.add(h), t.setAttribute(i.AFRAME_INJECTED, '')
                  var n = document.createElement('button')
                  return (
                    n.setAttribute(i.AFRAME_INJECTED, ''),
                    (n.innerHTML = 'Exit VR'),
                    n.addEventListener('click', e),
                    t.appendChild(n),
                    t
                  )
                }
                function v(e) {
                  e.addEventListener('touchstart', function () {
                    e.classList.remove('resethover')
                  }),
                    e.addEventListener('touchend', function () {
                      e.classList.add('resethover')
                    })
                }
                t.exports.Component = r('vr-mode-ui', {
                  dependencies: ['canvas'],
                  schema: {
                    enabled: { default: !0 },
                    enterVRButton: { default: '' },
                    enterARButton: { default: '' },
                  },
                  init: function () {
                    var e = this,
                      t = this.el
                    'false' !== o.getUrlParameter('ui') &&
                      ((this.insideLoader = !1),
                      (this.enterVREl = null),
                      (this.enterAREl = null),
                      (this.orientationModalEl = null),
                      this.bindMethods(),
                      t.addEventListener('enter-vr', this.updateEnterInterfaces),
                      t.addEventListener('exit-vr', this.updateEnterInterfaces),
                      t.addEventListener('update-vr-devices', this.updateEnterInterfaces),
                      window.addEventListener('message', function (t) {
                        'loaderReady' === t.data.type && ((e.insideLoader = !0), e.remove())
                      }),
                      window.addEventListener(
                        'orientationchange',
                        this.toggleOrientationModalIfNeeded,
                      ))
                  },
                  bindMethods: function () {
                    ;(this.onEnterVRButtonClick = a(this.onEnterVRButtonClick, this)),
                      (this.onEnterARButtonClick = a(this.onEnterARButtonClick, this)),
                      (this.onModalClick = a(this.onModalClick, this)),
                      (this.toggleOrientationModalIfNeeded = a(
                        this.toggleOrientationModalIfNeeded,
                        this,
                      )),
                      (this.updateEnterInterfaces = a(this.updateEnterInterfaces, this))
                  },
                  onModalClick: function () {
                    this.el.exitVR()
                  },
                  onEnterVRButtonClick: function () {
                    this.el.enterVR()
                  },
                  onEnterARButtonClick: function () {
                    this.el.enterAR()
                  },
                  update: function () {
                    var e = this.data,
                      t = this.el
                    if (!e.enabled || this.insideLoader || 'false' === o.getUrlParameter('ui'))
                      return this.remove()
                    this.enterVREl ||
                      this.enterAREl ||
                      this.orientationModalEl ||
                      (e.enterVRButton
                        ? ((this.enterVREl = document.querySelector(e.enterVRButton)),
                          this.enterVREl.addEventListener('click', this.onEnterVRButtonClick))
                        : ((this.enterVREl = p(this.onEnterVRButtonClick)),
                          t.appendChild(this.enterVREl)),
                      e.enterARButton
                        ? ((this.enterAREl = document.querySelector(e.enterARButton)),
                          this.enterAREl.addEventListener('click', this.onEnterARButtonClick))
                        : ((this.enterAREl = f(this.onEnterARButtonClick)),
                          t.appendChild(this.enterAREl)),
                      (this.orientationModalEl = m(this.onModalClick)),
                      t.appendChild(this.orientationModalEl),
                      this.updateEnterInterfaces())
                  },
                  remove: function () {
                    ;[this.enterVREl, this.enterAREl, this.orientationModalEl].forEach(function (
                      e,
                    ) {
                      e && e.parentNode && e.parentNode.removeChild(e)
                    }),
                      (this.enterVREl = void 0),
                      (this.enterAREl = void 0),
                      (this.orientationModalEl = void 0)
                  },
                  updateEnterInterfaces: function () {
                    this.toggleEnterVRButtonIfNeeded(),
                      this.toggleEnterARButtonIfNeeded(),
                      this.toggleOrientationModalIfNeeded()
                  },
                  toggleEnterVRButtonIfNeeded: function () {
                    var e = this.el
                    this.enterVREl &&
                      (e.is('vr-mode')
                        ? this.enterVREl.classList.add(h)
                        : this.enterVREl.classList.remove(h))
                  },
                  toggleEnterARButtonIfNeeded: function () {
                    var e = this.el
                    this.enterAREl &&
                      (e.is('vr-mode') || !o.device.checkARSupport()
                        ? this.enterAREl.classList.add(h)
                        : this.enterAREl.classList.remove(h))
                  },
                  toggleOrientationModalIfNeeded: function () {
                    var e = this.el,
                      t = this.orientationModalEl
                    t &&
                      e.isMobile &&
                      (!o.device.isLandscape() && e.is('vr-mode')
                        ? t.classList.remove(h)
                        : t.classList.add(h))
                  },
                })
              },
              { '../../constants/': 123, '../../core/component': 131, '../../utils/': 205 },
            ],
            111: [
              function (e, t, n) {
                var r = e('../core/component'),
                  i = e('../lib/three'),
                  o = e('../utils/bind'),
                  a = r.registerComponent
                t.exports.Component = a('shadow', {
                  schema: { cast: { default: !0 }, receive: { default: !0 } },
                  init: function () {
                    ;(this.onMeshChanged = o(this.update, this)),
                      this.el.addEventListener('object3dset', this.onMeshChanged),
                      this.system.setShadowMapEnabled(!0)
                  },
                  update: function () {
                    var e = this.data
                    this.updateDescendants(e.cast, e.receive)
                  },
                  remove: function () {
                    this.el.removeEventListener('object3dset', this.onMeshChanged),
                      this.updateDescendants(!1, !1)
                  },
                  updateDescendants: function (e, t) {
                    var n = this.el.sceneEl
                    this.el.object3D.traverse(function (r) {
                      if (
                        r instanceof i.Mesh &&
                        ((r.castShadow = e), (r.receiveShadow = t), n.hasLoaded && r.material)
                      )
                        for (
                          var o = Array.isArray(r.material) ? r.material : [r.material], a = 0;
                          a < o.length;
                          a++
                        )
                          o[a].needsUpdate = !0
                    })
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/bind': 199 },
            ],
            112: [
              function (t, n, r) {
                var i = t('../core/component').registerComponent,
                  o = t('../utils/debug'),
                  a = t('../lib/three'),
                  s = o('components:sound:warn')
                n.exports.Component = i('sound', {
                  schema: {
                    autoplay: { default: !1 },
                    distanceModel: {
                      default: 'inverse',
                      oneOf: ['linear', 'inverse', 'exponential'],
                    },
                    loop: { default: !1 },
                    maxDistance: { default: 1e4 },
                    on: { default: '' },
                    poolSize: { default: 1 },
                    positional: { default: !0 },
                    refDistance: { default: 1 },
                    rolloffFactor: { default: 1 },
                    src: { type: 'audio' },
                    volume: { default: 1 },
                  },
                  multiple: !0,
                  init: function () {
                    var e = this
                    ;(this.listener = null),
                      (this.audioLoader = new a.AudioLoader()),
                      (this.pool = new a.Group()),
                      (this.loaded = !1),
                      (this.mustPlay = !1),
                      (this.playSoundBound = function () {
                        e.playSound()
                      })
                  },
                  update: function (e) {
                    var t,
                      n,
                      r = this.data,
                      i = r.src !== e.src
                    if (i) {
                      if (!r.src) return
                      this.setupSound()
                    }
                    for (t = 0; t < this.pool.children.length; t++)
                      (n = this.pool.children[t]),
                        r.positional &&
                          (n.setDistanceModel(r.distanceModel),
                          n.setMaxDistance(r.maxDistance),
                          n.setRefDistance(r.refDistance),
                          n.setRolloffFactor(r.rolloffFactor)),
                        n.setLoop(r.loop),
                        n.setVolume(r.volume),
                        (n.isPaused = !1)
                    if ((r.on !== e.on && this.updateEventListener(e.on), i)) {
                      var o = this
                      ;(this.loaded = !1),
                        this.audioLoader.load(r.src, function (e) {
                          for (t = 0; t < o.pool.children.length; t++)
                            (n = o.pool.children[t]).setBuffer(e)
                          ;(o.loaded = !0),
                            a.Cache.remove(r.src),
                            (o.data.autoplay || o.mustPlay) && o.playSound(),
                            o.el.emit('sound-loaded', o.evtDetail, !1)
                        })
                    }
                  },
                  pause: function () {
                    this.stopSound(), this.removeEventListener()
                  },
                  play: function () {
                    this.data.autoplay && this.playSound(), this.updateEventListener()
                  },
                  remove: function () {
                    var t
                    this.removeEventListener(),
                      this.el.getObject3D(this.attrName) && this.el.removeObject3D(this.attrName)
                    try {
                      for (t = 0; t < this.pool.children.length; t++)
                        this.pool.children[t].disconnect()
                    } catch (e) {
                      s('Audio source not properly disconnected')
                    }
                  },
                  updateEventListener: function (e) {
                    var t = this.el
                    e && t.removeEventListener(e, this.playSoundBound),
                      t.addEventListener(this.data.on, this.playSoundBound)
                  },
                  removeEventListener: function () {
                    this.el.removeEventListener(this.data.on, this.playSoundBound)
                  },
                  setupSound: function () {
                    var e,
                      t,
                      n = this.el,
                      r = n.sceneEl,
                      i = this
                    this.pool.children.length > 0 && (this.stopSound(), n.removeObject3D('sound'))
                    var o = (this.listener = r.audioListener || new a.AudioListener())
                    for (
                      r.audioListener = o,
                        r.camera && r.camera.add(o),
                        r.addEventListener('camera-set-active', function (e) {
                          e.detail.cameraEl.getObject3D('camera').add(o)
                        }),
                        this.pool = new a.Group(),
                        e = 0;
                      e < this.data.poolSize;
                      e++
                    )
                      (t = this.data.positional ? new a.PositionalAudio(o) : new a.Audio(o)),
                        this.pool.add(t)
                    for (
                      n.setObject3D(this.attrName, this.pool), e = 0;
                      e < this.pool.children.length;
                      e++
                    )
                      (t = this.pool.children[e]).onEnded = function () {
                        ;(this.isPlaying = !1), i.el.emit('sound-ended', i.evtDetail, !1)
                      }
                  },
                  pauseSound: function () {
                    var e, t
                    for (this.isPlaying = !1, e = 0; e < this.pool.children.length; e++)
                      (t = this.pool.children[e]).source &&
                        t.source.buffer &&
                        t.isPlaying &&
                        !t.isPaused &&
                        ((t.isPaused = !0), t.pause())
                  },
                  playSound: function (e) {
                    var t, n, r
                    if (!this.loaded)
                      return (
                        s('Sound not loaded yet. It will be played once it finished loading'),
                        void (this.mustPlay = !0)
                      )
                    for (t = !1, this.isPlaying = !0, n = 0; n < this.pool.children.length; n++)
                      (r = this.pool.children[n]).isPlaying ||
                        !r.buffer ||
                        t ||
                        (e && e(r), r.play(), (r.isPaused = !1), (t = !0))
                    t
                      ? (this.mustPlay = !1)
                      : s(
                          'All the sounds are playing. If you need to play more sounds simultaneously consider increasing the size of pool with the `poolSize` attribute.',
                          this.el,
                        )
                  },
                  stopSound: function () {
                    var e, t
                    for (this.isPlaying = !1, e = 0; e < this.pool.children.length; e++) {
                      if (!(t = this.pool.children[e]).source || !t.source.buffer) return
                      t.stop()
                    }
                  },
                })
              },
              { '../core/component': 131, '../lib/three': 179, '../utils/debug': 201 },
            ],
            113: [
              function (e, t, n) {
                var r = e('three-bmfont-text'),
                  i = e('load-bmfont'),
                  o = e('../core/component').registerComponent,
                  a = e('../core/shader'),
                  s = e('../lib/three'),
                  l = e('../utils/'),
                  c = l.debug('components:text:error'),
                  u = a.shaders,
                  h = l.debug('components:text:warn'),
                  d = 1,
                  p = 16,
                  f = 'https://cdn.aframe.io/fonts/',
                  m = {
                    aileronsemibold: f + 'Aileron-Semibold.fnt',
                    dejavu: f + 'DejaVu-sdf.fnt',
                    exo2bold: f + 'Exo2Bold.fnt',
                    exo2semibold: f + 'Exo2SemiBold.fnt',
                    kelsonsans: f + 'KelsonSans.fnt',
                    monoid: f + 'Monoid.fnt',
                    mozillavr: f + 'mozillavr.fnt',
                    roboto: f + 'Roboto-msdf.json',
                    sourcecodepro: f + 'SourceCodePro.fnt',
                  },
                  v = ['roboto'],
                  g = 'roboto'
                t.exports.FONTS = m
                var y = new C(),
                  b = {},
                  A = {},
                  w = /^\w+:/
                function x(e) {
                  switch (e) {
                    case 'back':
                      return s.FrontSide
                    case 'double':
                      return s.DoubleSide
                    default:
                      return s.BackSide
                  }
                }
                function E(e, t) {
                  return new Promise(function (n, r) {
                    i(e, function (i, o) {
                      if (i) return c('Error loading font', e), void r(i)
                      e.indexOf('/Roboto-msdf.json') >= 0 && (t = 30),
                        t &&
                          o.chars.map(function (e) {
                            e.yoffset += t
                          }),
                        n(o)
                    })
                  })
                }
                function M(e) {
                  return new Promise(function (t, n) {
                    new s.ImageLoader().load(
                      e,
                      function (e) {
                        t(e)
                      },
                      void 0,
                      function () {
                        c('Error loading font image', e), n(null)
                      },
                    )
                  })
                }
                function _(e, t, n) {
                  var r, i
                  return (
                    ((i = new u[t].Shader()).el = e),
                    i.init(n),
                    i.update(n),
                    ((r = i.material).transparent = n.transparent),
                    { material: r, shader: i }
                  )
                }
                function T(e, t, n) {
                  return e || (0.5 + t) * n
                }
                function S(e) {
                  var t = 0,
                    n = 0,
                    r = 0
                  return (
                    e.chars.map(function (e) {
                      ;(t += e.xadvance), e.id >= 48 && e.id <= 57 && (r++, (n += e.xadvance))
                    }),
                    r ? n / r : t / e.chars.length
                  )
                }
                function C() {
                  var e = (this.cache = {})
                  this.get = function (t, n) {
                    return t in e || (e[t] = n()), e[t]
                  }
                }
                t.exports.Component = o('text', {
                  multiple: !0,
                  schema: {
                    align: { type: 'string', default: 'left', oneOf: ['left', 'right', 'center'] },
                    alphaTest: { default: 0.5 },
                    anchor: { default: 'center', oneOf: ['left', 'right', 'center', 'align'] },
                    baseline: { default: 'center', oneOf: ['top', 'center', 'bottom'] },
                    color: { type: 'color', default: '#FFF' },
                    font: { type: 'string', default: g },
                    fontImage: { type: 'string' },
                    height: { type: 'number' },
                    letterSpacing: { type: 'number', default: 0 },
                    lineHeight: { type: 'number' },
                    negate: { type: 'boolean', default: !0 },
                    opacity: { type: 'number', default: 1 },
                    shader: { default: 'sdf', oneOf: u },
                    side: { default: 'front', oneOf: ['front', 'back', 'double'] },
                    tabSize: { default: 4 },
                    transparent: { default: !0 },
                    value: { type: 'string' },
                    whiteSpace: { default: 'normal', oneOf: ['normal', 'pre', 'nowrap'] },
                    width: { type: 'number' },
                    wrapCount: { type: 'number', default: 40 },
                    wrapPixels: { type: 'number' },
                    xOffset: { type: 'number', default: 0 },
                    yOffset: { type: 'number', default: 0 },
                    zOffset: { type: 'number', default: 0.001 },
                  },
                  init: function () {
                    ;(this.shaderData = {}), (this.geometry = r()), this.createOrUpdateMaterial()
                  },
                  update: function (e) {
                    var t = this.data,
                      n = this.currentFont
                    A[t.font]
                      ? (this.texture = A[t.font])
                      : ((this.texture = A[t.font] = new s.Texture()),
                        (this.texture.anisotropy = p)),
                      this.createOrUpdateMaterial(),
                      e.font === t.font
                        ? n && (this.updateGeometry(this.geometry, n), this.updateLayout())
                        : this.updateFont()
                  },
                  remove: function () {
                    this.geometry.dispose(),
                      (this.geometry = null),
                      this.el.removeObject3D(this.attrName),
                      this.material.dispose(),
                      (this.material = null),
                      this.texture.dispose(),
                      (this.texture = null),
                      this.shaderObject && delete this.shaderObject
                  },
                  createOrUpdateMaterial: function () {
                    var e,
                      t,
                      n,
                      r = this.data,
                      i = this.material,
                      o = this.shaderData
                    if (
                      ((n = r.shader),
                      -1 !== v.indexOf(r.font) || r.font.indexOf('-msdf.') >= 0
                        ? (n = 'msdf')
                        : r.font in m && -1 === v.indexOf(r.font) && (n = 'sdf'),
                      (e = (this.shaderObject && this.shaderObject.name) !== n),
                      (o.alphaTest = r.alphaTest),
                      (o.color = r.color),
                      (o.map = this.texture),
                      (o.opacity = r.opacity),
                      (o.side = x(r.side)),
                      (o.transparent = r.transparent),
                      (o.negate = r.negate),
                      !e)
                    )
                      return (
                        this.shaderObject.update(o),
                        (i.transparent = o.transparent),
                        void (i.side = o.side)
                      )
                    ;(t = _(this.el, n, o)),
                      (this.material = t.material),
                      (this.shaderObject = t.shader),
                      (this.material.side = o.side),
                      this.mesh && (this.mesh.material = this.material)
                  },
                  updateFont: function () {
                    var e,
                      t = this.data,
                      n = this.el,
                      r = this.geometry,
                      i = this
                    t.font || h('No font specified. Using the default font.'),
                      this.mesh && (this.mesh.visible = !1),
                      (e = this.lookupFont(t.font || g) || t.font),
                      y
                        .get(e, function () {
                          return E(e, t.yOffset)
                        })
                        .then(function (o) {
                          var a
                          if (1 !== o.pages.length)
                            throw new Error(
                              'Currently only single-page bitmap fonts are supported.',
                            )
                          b[e] || (o.widthFactor = b[o] = S(o)),
                            (i.currentFont = o),
                            (a = i.getFontImageSrc()),
                            y
                              .get(a, function () {
                                return M(a)
                              })
                              .then(function (e) {
                                var a = i.texture
                                ;(a.image = e),
                                  (a.needsUpdate = !0),
                                  (A[t.font] = a),
                                  (i.texture = a),
                                  i.initMesh(),
                                  (i.currentFont = o),
                                  i.updateGeometry(r, o),
                                  i.updateLayout(),
                                  (i.mesh.visible = !0),
                                  n.emit('textfontset', { font: t.font, fontObj: o })
                              })
                              .catch(function (e) {
                                c(e.message), c(e.stack)
                              })
                        })
                        .catch(function (e) {
                          c(e.message), c(e.stack)
                        })
                  },
                  initMesh: function () {
                    this.mesh ||
                      ((this.mesh = new s.Mesh(this.geometry, this.material)),
                      this.el.setObject3D(this.attrName, this.mesh))
                  },
                  getFontImageSrc: function () {
                    if (this.data.fontImage) return this.data.fontImage
                    var e = this.lookupFont(this.data.font || g) || this.data.font,
                      t = this.currentFont.pages[0]
                    return t.match(w) && 0 !== t.indexOf('http')
                      ? e.replace(/(\.fnt)|(\.json)/, '.png')
                      : s.LoaderUtils.extractUrlBase(e) + t
                  },
                  updateLayout: function () {
                    var e,
                      t,
                      n,
                      r,
                      i,
                      o,
                      a,
                      s,
                      l,
                      c = this.el,
                      u = this.data,
                      h = this.geometry,
                      p = this.mesh
                    if (p && h.layout) {
                      if (
                        ((n = c.getAttribute('geometry')),
                        (r =
                          (o =
                            (a = u.width || (n && n.width) || d) /
                            T(u.wrapPixels, u.wrapCount, this.currentFont.widthFactor)) *
                          ((i = h.layout).height + i.descender)),
                        n &&
                          'plane' === n.primitive &&
                          (n.width || c.setAttribute('geometry', 'width', a),
                          n.height || c.setAttribute('geometry', 'height', r)),
                        'left' === (e = 'align' === u.anchor ? u.align : u.anchor))
                      )
                        s = 0
                      else if ('right' === e) s = -1 * i.width
                      else {
                        if ('center' !== e)
                          throw new TypeError('Invalid text.anchor property value', e)
                        s = (-1 * i.width) / 2
                      }
                      if ('bottom' === (t = u.baseline)) l = 0
                      else if ('top' === t) l = -1 * i.height + i.ascender
                      else {
                        if ('center' !== t)
                          throw new TypeError('Invalid text.baseline property value', t)
                        l = (-1 * i.height) / 2
                      }
                      ;(p.position.x = s * o + u.xOffset),
                        (p.position.y = l * o),
                        (p.position.z = u.zOffset),
                        p.scale.set(o, -1 * o, o)
                    }
                  },
                  lookupFont: function (e) {
                    return m[e]
                  },
                  updateGeometry: (function () {
                    var e = {},
                      t = {},
                      n = /\\n/g,
                      r = /\\t/g
                    return function (i, o) {
                      var a = this.data
                      ;(t.font = o),
                        (t.lineHeight =
                          a.lineHeight && isFinite(a.lineHeight)
                            ? a.lineHeight
                            : o.common.lineHeight),
                        (t.text = a.value.toString().replace(n, '\n').replace(r, '\t')),
                        (t.width = T(a.wrapPixels, a.wrapCount, o.widthFactor)),
                        i.update(l.extend(e, a, t))
                    }
                  })(),
                })
              },
              {
                '../core/component': 131,
                '../core/shader': 141,
                '../lib/three': 179,
                '../utils/': 205,
                'load-bmfont': 37,
                'three-bmfont-text': 63,
              },
            ],
            114: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/tracked-controls'),
                  o = e('../constants').DEFAULT_CAMERA_HEIGHT,
                  a = e('../lib/three'),
                  s = e('../constants').DEFAULT_HANDEDNESS,
                  l = { x: 0.175, y: -0.3, z: -0.03 },
                  c = { x: 0, y: 0, z: -0.175 },
                  u = { touches: [] },
                  h = {
                    AXISMOVE: 'axismove',
                    BUTTONCHANGED: 'buttonchanged',
                    BUTTONDOWN: 'buttondown',
                    BUTTONUP: 'buttonup',
                    TOUCHSTART: 'touchstart',
                    TOUCHEND: 'touchend',
                  }
                t.exports.Component = r('tracked-controls-webvr', {
                  schema: {
                    autoHide: { default: !0 },
                    controller: { default: 0 },
                    id: { type: 'string', default: '' },
                    hand: { type: 'string', default: '' },
                    idPrefix: { type: 'string', default: '' },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !1 },
                    headElement: { type: 'selector' },
                  },
                  init: function () {
                    ;(this.axis = this.el.components['tracked-controls'].axis = [0, 0, 0]),
                      (this.buttonStates = this.el.components['tracked-controls'].buttonStates =
                        {}),
                      (this.changedAxes = []),
                      (this.targetControllerNumber = this.data.controller),
                      (this.axisMoveEventDetail = { axis: this.axis, changed: this.changedAxes }),
                      (this.deltaControllerPosition = new a.Vector3()),
                      (this.controllerQuaternion = new a.Quaternion()),
                      (this.controllerEuler = new a.Euler()),
                      this.updateGamepad(),
                      (this.buttonEventDetails = {})
                  },
                  tick: function (e, t) {
                    var n = this.el.getObject3D('mesh')
                    n && n.update && n.update(t / 1e3),
                      this.updateGamepad(),
                      this.updatePose(),
                      this.updateButtons()
                  },
                  defaultUserHeight: function () {
                    return o
                  },
                  getHeadElement: function () {
                    return this.data.headElement || this.el.sceneEl.camera.el
                  },
                  updateGamepad: function () {
                    var e = this.data,
                      t = i.findMatchingControllerWebVR(
                        this.system.controllers,
                        e.id,
                        e.idPrefix,
                        e.hand,
                        e.controller,
                      )
                    ;(this.controller = t),
                      (this.el.components['tracked-controls'].controller = t),
                      this.data.autoHide && (this.el.object3D.visible = !!this.controller)
                  },
                  applyArmModel: function (e) {
                    var t,
                      n,
                      r,
                      i,
                      o = this.controller,
                      a = this.controllerEuler,
                      u = this.controllerQuaternion,
                      h = this.deltaControllerPosition
                    ;(n = this.getHeadElement().object3D),
                      (i = this.defaultUserHeight()),
                      (r = o.pose),
                      (t = (o ? o.hand : void 0) || s),
                      e.copy(n.position),
                      h.set(l.x * ('left' === t ? -1 : 'right' === t ? 1 : 0), l.y, l.z),
                      h.multiplyScalar(i),
                      h.applyAxisAngle(n.up, n.rotation.y),
                      e.add(h),
                      h.set(c.x, c.y, c.z),
                      h.multiplyScalar(i),
                      r.orientation ? u.fromArray(r.orientation) : u.copy(n.quaternion),
                      a.setFromQuaternion(u),
                      a.set(a.x, a.y, 0),
                      h.applyEuler(a),
                      e.add(h)
                  },
                  updatePose: function () {
                    var e,
                      t,
                      n = this.controller,
                      r = this.data,
                      i = this.el.object3D,
                      o = this.system.vrDisplay
                    n &&
                      ((e = n.pose).position
                        ? i.position.fromArray(e.position)
                        : r.armModel && this.applyArmModel(i.position),
                      e.orientation && i.quaternion.fromArray(e.orientation),
                      o &&
                        e.position &&
                        ((t = this.el.sceneEl.renderer.xr.getStandingMatrix()),
                        i.matrix.compose(i.position, i.quaternion, i.scale),
                        i.matrix.multiplyMatrices(t, i.matrix),
                        i.matrix.decompose(i.position, i.quaternion, i.scale)),
                      i.rotateX(this.data.orientationOffset.x * a.Math.DEG2RAD),
                      i.rotateY(this.data.orientationOffset.y * a.Math.DEG2RAD),
                      i.rotateZ(this.data.orientationOffset.z * a.Math.DEG2RAD))
                  },
                  updateButtons: function () {
                    var e,
                      t,
                      n = this.controller
                    if (n) {
                      for (t = 0; t < n.buttons.length; ++t)
                        this.buttonStates[t] ||
                          (this.buttonStates[t] = { pressed: !1, touched: !1, value: 0 }),
                          this.buttonEventDetails[t] ||
                            (this.buttonEventDetails[t] = { id: t, state: this.buttonStates[t] }),
                          (e = n.buttons[t]),
                          this.handleButton(t, e)
                      this.handleAxes()
                    }
                  },
                  handleButton: function (e, t) {
                    return (
                      !!(
                        this.handlePress(e, t) |
                        this.handleTouch(e, t) |
                        this.handleValue(e, t)
                      ) && (this.el.emit(h.BUTTONCHANGED, this.buttonEventDetails[e], !1), !0)
                    )
                  },
                  handleAxes: function () {
                    var e,
                      t = !1,
                      n = this.controller.axes,
                      r = this.axis,
                      i = this.changedAxes
                    for (
                      this.changedAxes.splice(0, this.changedAxes.length), e = 0;
                      e < n.length;
                      ++e
                    )
                      i.push(r[e] !== n[e]), i[e] && (t = !0)
                    if (!t) return !1
                    for (this.axis.splice(0, this.axis.length), e = 0; e < n.length; e++)
                      this.axis.push(n[e])
                    return this.el.emit(h.AXISMOVE, this.axisMoveEventDetail, !1), !0
                  },
                  handlePress: function (e, t) {
                    var n,
                      r = this.buttonStates[e]
                    return (
                      t.pressed !== r.pressed &&
                      ((n = t.pressed ? h.BUTTONDOWN : h.BUTTONUP),
                      this.el.emit(n, this.buttonEventDetails[e], !1),
                      (r.pressed = t.pressed),
                      !0)
                    )
                  },
                  handleTouch: function (e, t) {
                    var n,
                      r = this.buttonStates[e]
                    return (
                      t.touched !== r.touched &&
                      ((n = t.touched ? h.TOUCHSTART : h.TOUCHEND),
                      this.el.emit(n, this.buttonEventDetails[e], !1, u),
                      (r.touched = t.touched),
                      !0)
                    )
                  },
                  handleValue: function (e, t) {
                    var n = this.buttonStates[e]
                    return t.value !== n.value && ((n.value = t.value), !0)
                  },
                })
              },
              {
                '../constants': 123,
                '../core/component': 131,
                '../lib/three': 179,
                '../utils/tracked-controls': 214,
              },
            ],
            115: [
              function (e, t, n) {
                var r = e('../utils/tracked-controls'),
                  i = e('../core/component').registerComponent,
                  o = {
                    AXISMOVE: 'axismove',
                    BUTTONCHANGED: 'buttonchanged',
                    BUTTONDOWN: 'buttondown',
                    BUTTONUP: 'buttonup',
                    TOUCHSTART: 'touchstart',
                    TOUCHEND: 'touchend',
                  }
                t.exports.Component = i('tracked-controls-webxr', {
                  schema: {
                    id: { type: 'string', default: '' },
                    hand: { type: 'string', default: '' },
                    handTrackingEnabled: { default: !1 },
                    index: { type: 'int', default: -1 },
                    iterateControllerProfiles: { default: !1 },
                  },
                  init: function () {
                    ;(this.updateController = this.updateController.bind(this)),
                      (this.buttonEventDetails = {}),
                      (this.buttonStates = this.el.components['tracked-controls'].buttonStates =
                        {}),
                      (this.axis = this.el.components['tracked-controls'].axis = [0, 0, 0]),
                      (this.changedAxes = []),
                      (this.axisMoveEventDetail = { axis: this.axis, changed: this.changedAxes })
                  },
                  update: function () {
                    this.updateController()
                  },
                  play: function () {
                    var e = this.el.sceneEl
                    this.updateController(),
                      e.addEventListener('controllersupdated', this.updateController)
                  },
                  pause: function () {
                    this.el.sceneEl.removeEventListener('controllersupdated', this.updateController)
                  },
                  isControllerPresent: function (e) {
                    return (
                      !(!this.controller || this.controller.gamepad) &&
                      ('none' === e.inputSource.handedness ||
                        e.inputSource.handedness === this.data.hand)
                    )
                  },
                  updateController: function () {
                    ;(this.controller = r.findMatchingControllerWebXR(
                      this.system.controllers,
                      this.data.id,
                      this.data.hand,
                      this.data.index,
                      this.data.iterateControllerProfiles,
                      this.data.handTrackingEnabled,
                    )),
                      (this.el.components['tracked-controls'].controller = this.controller),
                      this.data.autoHide && (this.el.object3D.visible = !!this.controller)
                  },
                  tick: function () {
                    var e = this.el.sceneEl,
                      t = this.controller,
                      n = e.frame
                    t &&
                      e.frame &&
                      this.system.referenceSpace &&
                      (t.hand ||
                        ((this.pose = n.getPose(t.targetRaySpace, this.system.referenceSpace)),
                        this.updatePose(),
                        this.updateButtons()))
                  },
                  updatePose: function () {
                    var e = this.el.object3D,
                      t = this.pose
                    t &&
                      ((e.matrix.elements = t.transform.matrix),
                      e.matrix.decompose(e.position, e.rotation, e.scale))
                  },
                  updateButtons: function () {
                    var e,
                      t,
                      n,
                      r = this.controller
                    if (r && r.gamepad) {
                      for (n = r.gamepad, t = 0; t < n.buttons.length; ++t)
                        this.buttonStates[t] ||
                          (this.buttonStates[t] = { pressed: !1, touched: !1, value: 0 }),
                          this.buttonEventDetails[t] ||
                            (this.buttonEventDetails[t] = { id: t, state: this.buttonStates[t] }),
                          (e = n.buttons[t]),
                          this.handleButton(t, e)
                      this.handleAxes()
                    }
                  },
                  handleButton: function (e, t) {
                    return (
                      !!(
                        this.handlePress(e, t) |
                        this.handleTouch(e, t) |
                        this.handleValue(e, t)
                      ) && (this.el.emit(o.BUTTONCHANGED, this.buttonEventDetails[e], !1), !0)
                    )
                  },
                  handleAxes: function () {
                    var e,
                      t = !1,
                      n = this.controller.gamepad.axes,
                      r = this.axis,
                      i = this.changedAxes
                    for (
                      this.changedAxes.splice(0, this.changedAxes.length), e = 0;
                      e < n.length;
                      ++e
                    )
                      i.push(r[e] !== n[e]), i[e] && (t = !0)
                    if (!t) return !1
                    for (this.axis.splice(0, this.axis.length), e = 0; e < n.length; e++)
                      this.axis.push(n[e])
                    return this.el.emit(o.AXISMOVE, this.axisMoveEventDetail, !1), !0
                  },
                  handlePress: function (e, t) {
                    var n,
                      r = this.buttonStates[e]
                    return (
                      t.pressed !== r.pressed &&
                      ((n = t.pressed ? o.BUTTONDOWN : o.BUTTONUP),
                      this.el.emit(n, this.buttonEventDetails[e], !1),
                      (r.pressed = t.pressed),
                      !0)
                    )
                  },
                  handleTouch: function (e, t) {
                    var n,
                      r = this.buttonStates[e]
                    return (
                      t.touched !== r.touched &&
                      ((n = t.touched ? o.TOUCHSTART : o.TOUCHEND),
                      this.el.emit(n, this.buttonEventDetails[e], !1),
                      (r.touched = t.touched),
                      !0)
                    )
                  },
                  handleValue: function (e, t) {
                    var n = this.buttonStates[e]
                    return t.value !== n.value && ((n.value = t.value), !0)
                  },
                })
              },
              { '../core/component': 131, '../utils/tracked-controls': 214 },
            ],
            116: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent
                t.exports.Component = r('tracked-controls', {
                  schema: {
                    autoHide: { default: !0 },
                    controller: { default: -1 },
                    id: { type: 'string', default: '' },
                    hand: { type: 'string', default: '' },
                    idPrefix: { type: 'string', default: '' },
                    handTrackingEnabled: { default: !1 },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !1 },
                    headElement: { type: 'selector' },
                    iterateControllerProfiles: { default: !1 },
                  },
                  update: function () {
                    var e = this.data,
                      t = this.el
                    t.sceneEl.hasWebXR
                      ? t.setAttribute('tracked-controls-webxr', {
                          id: e.id,
                          hand: e.hand,
                          index: e.controller,
                          iterateControllerProfiles: e.iterateControllerProfiles,
                          handTrackingEnabled: e.handTrackingEnabled,
                        })
                      : t.setAttribute('tracked-controls-webvr', e)
                  },
                })
              },
              { '../core/component': 131 },
            ],
            117: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../lib/three'),
                  a = e('../utils/tracked-controls'),
                  s = a.checkControllerPresentAndSetup,
                  l = a.emitIfAxesChanged,
                  c = a.onButtonEvent,
                  u = 'https://cdn.aframe.io/controllers/valve/index/valve-index-',
                  h = { left: u + 'left.glb', right: u + 'right.glb' },
                  d = 'valve',
                  p = e('../utils/').device.isWebXRAvailable,
                  f = {
                    left: {
                      x: -0.00023692678902063457,
                      y: 0.04724540367838371,
                      z: -0.061959880395271096,
                    },
                    right: {
                      x: 0.002471558599671131,
                      y: 0.055765208987076195,
                      z: -0.061068168708348844,
                    },
                  },
                  m = { left: { x: 0, y: -0.05, z: 0.06 }, right: { x: 0, y: -0.05, z: 0.06 } },
                  v = {
                    left: {
                      _x: 0.692295102620542,
                      _y: -0.0627618864318427,
                      _z: -0.06265893149611756,
                      _order: 'XYZ',
                    },
                    right: {
                      _x: 0.6484021229942998,
                      _y: -0.032563619881892894,
                      _z: -0.1327973171917482,
                      _order: 'XYZ',
                    },
                  },
                  g = {
                    left: { _x: Math.PI / 3, _y: 0, _z: 0, _order: 'XYZ' },
                    right: { _x: Math.PI / 3, _y: 0, _z: 0, _order: 'XYZ' },
                  },
                  y = p ? g : v,
                  b = p ? m : f
                t.exports.Component = r('valve-index-controls', {
                  schema: {
                    hand: { default: 'left' },
                    buttonColor: { type: 'color', default: '#FAFAFA' },
                    buttonHighlightColor: { type: 'color', default: '#22D1EE' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                  },
                  mapping: {
                    axes: { trackpad: [0, 1], thumbstick: [2, 3] },
                    buttons: ['trigger', 'grip', 'trackpad', 'thumbstick', 'abutton'],
                  },
                  init: function () {
                    var e = this
                    ;(this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        c(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        c(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        c(t.detail.id, 'touchend', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        c(t.detail.id, 'touchstart', e)
                      }),
                      (this.previousButtonValues = {}),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods()
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    var e = this.data,
                      t = 'right' === e.hand ? 0 : 'left' === e.hand ? 1 : 2
                    s(this, d, { index: t, iterateControllerProfiles: !0, hand: e.hand })
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      idPrefix: d,
                      controller: 'right' === t.hand ? 1 : 'left' === t.hand ? 0 : 2,
                      hand: t.hand,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.loadModel()
                  },
                  loadModel: function () {
                    var e = this.data
                    e.model && this.el.setAttribute('gltf-model', '' + h[e.hand])
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onButtonChanged: function (e) {
                    var t,
                      n = this.mapping.buttons[e.detail.id],
                      r = this.buttonMeshes
                    n &&
                      ('trigger' === n &&
                        ((t = e.detail.state.value),
                        r &&
                          r.trigger &&
                          (r.trigger.rotation.x =
                            this.triggerOriginalRotationX - t * (Math.PI / 40))),
                      this.el.emit(n + 'changed', e.detail.state))
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model,
                      r = this
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).grip = {
                        left: n.getObjectByName('leftgrip'),
                        right: n.getObjectByName('rightgrip'),
                      }),
                      (t.menu = n.getObjectByName('menubutton')),
                      (t.system = n.getObjectByName('systembutton')),
                      (t.trackpad = n.getObjectByName('touchpad')),
                      (t.trigger = n.getObjectByName('trigger')),
                      (this.triggerOriginalRotationX = t.trigger.rotation.x),
                      Object.keys(t).forEach(function (e) {
                        r.setButtonColor(e, r.data.buttonColor)
                      }),
                      n.position.copy(b[this.data.hand]),
                      n.rotation.copy(y[this.data.hand]),
                      this.el.emit('controllermodelready', {
                        name: 'valve-index-controlls',
                        model: this.data.model,
                        rayOrigin: new o.Vector3(0, 0, 0),
                      }))
                  },
                  onAxisMoved: function (e) {
                    l(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {
                    var n
                    this.data.model &&
                      (-1 !== t.indexOf('touch') ||
                        ((n = 'up' === t ? this.data.buttonColor : this.data.buttonHighlightColor),
                        this.setButtonColor(e, n)))
                  },
                  setButtonColor: function (e, t) {},
                })
              },
              {
                '../core/component': 131,
                '../lib/three': 179,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            118: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent
                t.exports.Component = r('visible', {
                  schema: { default: !0 },
                  update: function () {
                    this.el.object3D.visible = this.data
                  },
                })
              },
              { '../core/component': 131 },
            ],
            119: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = 'https://cdn.aframe.io/controllers/vive/vr_controller_vive.obj',
                  u = 'https://cdn.aframe.io/controllers/vive/vr_controller_vive.mtl',
                  h = e('../utils/').device.isWebXRAvailable,
                  d = h ? 'htc-vive-controller-mv' : 'OpenVR ',
                  p = h
                    ? {
                        axes: { thumbstick: [0, 1] },
                        buttons: ['trigger', 'grip', 'trackpad', 'none', 'menu'],
                      }
                    : {
                        axes: { trackpad: [0, 1] },
                        buttons: ['trackpad', 'trigger', 'grip', 'menu', 'system'],
                      }
                t.exports.Component = r('vive-controls', {
                  schema: {
                    hand: { default: 'left' },
                    buttonColor: { type: 'color', default: '#FAFAFA' },
                    buttonHighlightColor: { type: 'color', default: '#22D1EE' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                  },
                  mapping: p,
                  init: function () {
                    var e = this
                    ;(this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.previousButtonValues = {}),
                      (this.rendererSystem = this.el.sceneEl.systems.renderer),
                      this.bindMethods()
                  },
                  update: function () {
                    var e = this.data
                    this.controllerIndex = 'right' === e.hand ? 0 : 'left' === e.hand ? 1 : 2
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    var e = this.data
                    a(this, d, { index: this.controllerIndex, hand: e.hand })
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      idPrefix: d,
                      hand: t.hand,
                      controller: this.controllerIndex,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('obj-model', { obj: c, mtl: u })
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onButtonChanged: function (e) {
                    var t,
                      n = this.mapping.buttons[e.detail.id],
                      r = this.buttonMeshes
                    n &&
                      ('trigger' === n &&
                        ((t = e.detail.state.value),
                        r && r.trigger && (r.trigger.rotation.x = -t * (Math.PI / 12))),
                      this.el.emit(n + 'changed', e.detail.state))
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model,
                      r = this
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).grip = {
                        left: n.getObjectByName('leftgrip'),
                        right: n.getObjectByName('rightgrip'),
                      }),
                      (t.menu = n.getObjectByName('menubutton')),
                      (t.system = n.getObjectByName('systembutton')),
                      (t.trackpad = n.getObjectByName('touchpad')),
                      (t.trigger = n.getObjectByName('trigger')),
                      Object.keys(t).forEach(function (e) {
                        r.setButtonColor(e, r.data.buttonColor)
                      }),
                      n.position.set(0, -0.015, 0.04))
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {
                    var n
                    this.data.model &&
                      (-1 !== t.indexOf('touch') ||
                        ((n = 'up' === t ? this.data.buttonColor : this.data.buttonHighlightColor),
                        this.setButtonColor(e, n)))
                  },
                  setButtonColor: function (e, t) {
                    var n = this.buttonMeshes,
                      r = this.rendererSystem
                    if (n) {
                      if ('grip' === e)
                        return (
                          n.grip.left.material.color.set(t),
                          n.grip.right.material.color.set(t),
                          r.applyColorCorrection(n.grip.left.material.color),
                          void r.applyColorCorrection(n.grip.right.material.color)
                        )
                      n[e].material.color.set(t), r.applyColorCorrection(n[e].material.color)
                    }
                  },
                })
              },
              {
                '../core/component': 131,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            120: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = 'HTC Vive Focus',
                  u =
                    'https://cdn.aframe.io/controllers/vive/focus-controller/focus-controller.gltf'
                t.exports.Component = r('vive-focus-controls', {
                  schema: {
                    hand: { default: '' },
                    buttonTouchedColor: { type: 'color', default: '#BBBBBB' },
                    buttonHighlightColor: { type: 'color', default: '#7A7A7A' },
                    model: { default: !0 },
                    orientationOffset: { type: 'vec3' },
                    armModel: { default: !0 },
                  },
                  mapping: { axes: { trackpad: [0, 1] }, buttons: ['trackpad', 'trigger'] },
                  bindMethods: function () {
                    ;(this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.removeControllersUpdateListener = i(
                        this.removeControllersUpdateListener,
                        this,
                      )),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      this.bindMethods()
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      e.addEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !0),
                      this.addControllersUpdateListener()
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      (this.controllerEventsActive = !1),
                      this.removeControllersUpdateListener()
                  },
                  checkIfControllerPresent: function () {
                    a(this, c, this.data.hand ? { hand: this.data.hand } : {})
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  injectTrackedControls: function () {
                    var e = this.el,
                      t = this.data
                    e.setAttribute('tracked-controls', {
                      armModel: t.armModel,
                      idPrefix: c,
                      orientationOffset: t.orientationOffset,
                    }),
                      this.data.model && this.el.setAttribute('gltf-model', u)
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n = e.detail.model
                    this.data.model &&
                      (((t = this.buttonMeshes = {}).trigger = n.getObjectByName('BumperKey')),
                      (t.triggerPressed = n.getObjectByName('BumperKey_Press')),
                      t.triggerPressed && (t.triggerPressed.visible = !1),
                      (t.trackpad = n.getObjectByName('TouchPad')),
                      (t.trackpadPressed = n.getObjectByName('TouchPad_Press')),
                      t.trackpadPressed && (t.trackpadPressed.visible = !1))
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t && this.el.emit(t + 'changed', e.detail.state)
                  },
                  onAxisMoved: function (e) {
                    s(this, this.mapping.axes, e)
                  },
                  updateModel: function (e, t) {
                    this.data.model && this.updateButtonModel(e, t)
                  },
                  updateButtonModel: function (e, t) {
                    var n = this.buttonMeshes,
                      r = e + 'Pressed'
                    if (n && n[e] && n[r]) {
                      var i
                      switch (t) {
                        case 'down':
                          i = this.data.buttonHighlightColor
                          break
                        case 'touchstart':
                          i = this.data.buttonTouchedColor
                      }
                      i && n[r].material.color.set(i), (n[r].visible = !!i), (n[e].visible = !i)
                    }
                  },
                })
              },
              { '../core/component': 131, '../utils/bind': 199, '../utils/tracked-controls': 214 },
            ],
            121: [
              function (e, t, n) {
                var r = e('../constants').keyboardevent.KEYCODE_TO_CODE,
                  i = e('../core/component').registerComponent,
                  o = e('../lib/three'),
                  a = e('../utils/'),
                  s = a.bind,
                  l = a.shouldCaptureKeyEvent,
                  c = 1e-5,
                  u = 0.2,
                  h = [
                    'KeyW',
                    'KeyA',
                    'KeyS',
                    'KeyD',
                    'ArrowUp',
                    'ArrowLeft',
                    'ArrowRight',
                    'ArrowDown',
                  ]
                function d(e) {
                  var t
                  for (t in e) return !1
                  return !0
                }
                t.exports.Component = i('wasd-controls', {
                  schema: {
                    acceleration: { default: 65 },
                    adAxis: { default: 'x', oneOf: ['x', 'y', 'z'] },
                    adEnabled: { default: !0 },
                    adInverted: { default: !1 },
                    enabled: { default: !0 },
                    fly: { default: !1 },
                    wsAxis: { default: 'z', oneOf: ['x', 'y', 'z'] },
                    wsEnabled: { default: !0 },
                    wsInverted: { default: !1 },
                  },
                  init: function () {
                    ;(this.keys = {}),
                      (this.easing = 1.1),
                      (this.velocity = new o.Vector3()),
                      (this.onBlur = s(this.onBlur, this)),
                      (this.onContextMenu = s(this.onContextMenu, this)),
                      (this.onFocus = s(this.onFocus, this)),
                      (this.onKeyDown = s(this.onKeyDown, this)),
                      (this.onKeyUp = s(this.onKeyUp, this)),
                      (this.onVisibilityChange = s(this.onVisibilityChange, this)),
                      this.attachVisibilityEventListeners()
                  },
                  tick: function (e, t) {
                    var n = this.data,
                      r = this.el,
                      i = this.velocity
                    ;(i[n.adAxis] || i[n.wsAxis] || !d(this.keys)) &&
                      ((t /= 1e3),
                      this.updateVelocity(t),
                      (i[n.adAxis] || i[n.wsAxis]) &&
                        r.object3D.position.add(this.getMovementVector(t)))
                  },
                  remove: function () {
                    this.removeKeyEventListeners(), this.removeVisibilityEventListeners()
                  },
                  play: function () {
                    this.attachKeyEventListeners()
                  },
                  pause: function () {
                    ;(this.keys = {}), this.removeKeyEventListeners()
                  },
                  updateVelocity: function (e) {
                    var t,
                      n,
                      r,
                      i,
                      o,
                      a = this.data,
                      s = this.keys,
                      l = this.velocity
                    if (((n = a.adAxis), (i = a.wsAxis), e > u)) return (l[n] = 0), void (l[i] = 0)
                    var h = Math.pow(1 / this.easing, 60 * e)
                    0 !== l[n] && (l[n] = l[n] * h),
                      0 !== l[i] && (l[i] = l[i] * h),
                      Math.abs(l[n]) < c && (l[n] = 0),
                      Math.abs(l[i]) < c && (l[i] = 0),
                      a.enabled &&
                        ((t = a.acceleration),
                        a.adEnabled &&
                          ((r = a.adInverted ? -1 : 1),
                          (s.KeyA || s.ArrowLeft) && (l[n] -= r * t * e),
                          (s.KeyD || s.ArrowRight) && (l[n] += r * t * e)),
                        a.wsEnabled &&
                          ((o = a.wsInverted ? -1 : 1),
                          (s.KeyW || s.ArrowUp) && (l[i] -= o * t * e),
                          (s.KeyS || s.ArrowDown) && (l[i] += o * t * e)))
                  },
                  getMovementVector: (function () {
                    var e = new o.Vector3(0, 0, 0),
                      t = new o.Euler(0, 0, 0, 'YXZ')
                    return function (n) {
                      var r,
                        i = this.el.getAttribute('rotation'),
                        a = this.velocity
                      return (
                        e.copy(a),
                        e.multiplyScalar(n),
                        i
                          ? ((r = this.data.fly ? i.x : 0),
                            t.set(o.Math.degToRad(r), o.Math.degToRad(i.y), 0),
                            e.applyEuler(t),
                            e)
                          : e
                      )
                    }
                  })(),
                  attachVisibilityEventListeners: function () {
                    ;(window.oncontextmenu = this.onContextMenu),
                      window.addEventListener('blur', this.onBlur),
                      window.addEventListener('focus', this.onFocus),
                      document.addEventListener('visibilitychange', this.onVisibilityChange)
                  },
                  removeVisibilityEventListeners: function () {
                    window.removeEventListener('blur', this.onBlur),
                      window.removeEventListener('focus', this.onFocus),
                      document.removeEventListener('visibilitychange', this.onVisibilityChange)
                  },
                  attachKeyEventListeners: function () {
                    window.addEventListener('keydown', this.onKeyDown),
                      window.addEventListener('keyup', this.onKeyUp)
                  },
                  removeKeyEventListeners: function () {
                    window.removeEventListener('keydown', this.onKeyDown),
                      window.removeEventListener('keyup', this.onKeyUp)
                  },
                  onContextMenu: function () {
                    for (var e = Object.keys(this.keys), t = 0; t < e.length; t++)
                      delete this.keys[e[t]]
                  },
                  onBlur: function () {
                    this.pause()
                  },
                  onFocus: function () {
                    this.play()
                  },
                  onVisibilityChange: function () {
                    document.hidden ? this.onBlur() : this.onFocus()
                  },
                  onKeyDown: function (e) {
                    var t
                    l(e) &&
                      ((t = e.code || r[e.keyCode]), -1 !== h.indexOf(t) && (this.keys[t] = !0))
                  },
                  onKeyUp: function (e) {
                    var t
                    ;(t = e.code || r[e.keyCode]), delete this.keys[t]
                  },
                })
              },
              {
                '../constants': 123,
                '../core/component': 131,
                '../lib/three': 179,
                '../utils/': 205,
              },
            ],
            122: [
              function (e, t, n) {
                var r = e('../core/component').registerComponent,
                  i = e('../utils/bind'),
                  o = e('../utils/tracked-controls'),
                  a = o.checkControllerPresentAndSetup,
                  s = o.emitIfAxesChanged,
                  l = o.onButtonEvent,
                  c = e('../utils/'),
                  u = c.debug('components:windows-motion-controls:debug'),
                  h = c.debug('components:windows-motion-controls:warn'),
                  d = e('../constants').DEFAULT_HANDEDNESS,
                  p = 'https://cdn.aframe.io/controllers/microsoft/',
                  f = { left: 'left.glb', right: 'right.glb', default: 'universal.glb' },
                  m = e('../utils/').device.isWebXRAvailable,
                  v = /([0-9a-zA-Z]+-[0-9a-zA-Z]+)$/,
                  g = m
                    ? 'windows-mixed-reality'
                    : 'Spatial Controller (Spatial Interaction Source) ',
                  y = m
                    ? {
                        axes: { touchpad: [0, 1], thumbstick: [2, 3] },
                        buttons: ['trigger', 'squeeze', 'touchpad', 'thumbstick', 'menu'],
                        axisMeshNames: [
                          'TOUCHPAD_TOUCH_X',
                          'TOUCHPAD_TOUCH_X',
                          'THUMBSTICK_X',
                          'THUMBSTICK_Y',
                        ],
                        buttonMeshNames: {
                          trigger: 'SELECT',
                          menu: 'MENU',
                          squeeze: 'GRASP',
                          thumbstick: 'THUMBSTICK_PRESS',
                          touchpad: 'TOUCHPAD_PRESS',
                        },
                        pointingPoseMeshName: 'POINTING_POSE',
                      }
                    : {
                        axes: { thumbstick: [0, 1], trackpad: [2, 3] },
                        buttons: ['thumbstick', 'trigger', 'grip', 'menu', 'trackpad'],
                        axisMeshNames: [
                          'THUMBSTICK_X',
                          'THUMBSTICK_Y',
                          'TOUCHPAD_TOUCH_X',
                          'TOUCHPAD_TOUCH_Y',
                        ],
                        buttonMeshNames: {
                          trigger: 'SELECT',
                          menu: 'MENU',
                          grip: 'GRASP',
                          thumbstick: 'THUMBSTICK_PRESS',
                          trackpad: 'TOUCHPAD_PRESS',
                        },
                        pointingPoseMeshName: 'POINTING_POSE',
                      }
                t.exports.Component = r('windows-motion-controls', {
                  schema: {
                    hand: { default: d },
                    pair: { default: 0 },
                    model: { default: !0 },
                    hideDisconnected: { default: !0 },
                  },
                  mapping: y,
                  bindMethods: function () {
                    ;(this.onModelError = i(this.onModelError, this)),
                      (this.onModelLoaded = i(this.onModelLoaded, this)),
                      (this.onControllersUpdate = i(this.onControllersUpdate, this)),
                      (this.checkIfControllerPresent = i(this.checkIfControllerPresent, this)),
                      (this.onAxisMoved = i(this.onAxisMoved, this))
                  },
                  init: function () {
                    var e = this,
                      t = this.el
                    ;(this.onButtonChanged = i(this.onButtonChanged, this)),
                      (this.onButtonDown = function (t) {
                        l(t.detail.id, 'down', e)
                      }),
                      (this.onButtonUp = function (t) {
                        l(t.detail.id, 'up', e)
                      }),
                      (this.onButtonTouchStart = function (t) {
                        l(t.detail.id, 'touchstart', e)
                      }),
                      (this.onButtonTouchEnd = function (t) {
                        l(t.detail.id, 'touchend', e)
                      }),
                      (this.onControllerConnected = function () {
                        e.setModelVisibility(!0)
                      }),
                      (this.onControllerDisconnected = function () {
                        e.setModelVisibility(!1)
                      }),
                      (this.controllerPresent = !1),
                      (this.lastControllerCheck = 0),
                      (this.previousButtonValues = {}),
                      this.bindMethods(),
                      (this.loadedMeshInfo = { buttonMeshes: null, axisMeshes: null }),
                      (this.rayOrigin = {
                        origin: new THREE.Vector3(),
                        direction: new THREE.Vector3(0, 0, -1),
                        createdFromMesh: !1,
                      }),
                      t.addEventListener('controllerconnected', this.onControllerConnected),
                      t.addEventListener('controllerdisconnected', this.onControllerDisconnected)
                  },
                  addEventListeners: function () {
                    var e = this.el
                    e.addEventListener('buttonchanged', this.onButtonChanged),
                      e.addEventListener('buttondown', this.onButtonDown),
                      e.addEventListener('buttonup', this.onButtonUp),
                      e.addEventListener('touchstart', this.onButtonTouchStart),
                      e.addEventListener('touchend', this.onButtonTouchEnd),
                      e.addEventListener('axismove', this.onAxisMoved),
                      e.addEventListener('model-error', this.onModelError),
                      e.addEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !0)
                  },
                  removeEventListeners: function () {
                    var e = this.el
                    e.removeEventListener('buttonchanged', this.onButtonChanged),
                      e.removeEventListener('buttondown', this.onButtonDown),
                      e.removeEventListener('buttonup', this.onButtonUp),
                      e.removeEventListener('touchstart', this.onButtonTouchStart),
                      e.removeEventListener('touchend', this.onButtonTouchEnd),
                      e.removeEventListener('axismove', this.onAxisMoved),
                      e.removeEventListener('model-error', this.onModelError),
                      e.removeEventListener('model-loaded', this.onModelLoaded),
                      (this.controllerEventsActive = !1)
                  },
                  checkIfControllerPresent: function () {
                    a(this, g, {
                      hand: this.data.hand,
                      index: this.data.pair,
                      iterateControllerProfiles: !0,
                    })
                  },
                  play: function () {
                    this.checkIfControllerPresent(), this.addControllersUpdateListener()
                  },
                  pause: function () {
                    this.removeEventListeners(), this.removeControllersUpdateListener()
                  },
                  updateControllerModel: function () {
                    if (this.data.model && !this.rayOrigin.createdFromMesh) {
                      var e = this.createControllerModelUrl()
                      this.loadModel(e)
                    } else this.modelReady()
                  },
                  createControllerModelUrl: function (e) {
                    var t,
                      n = this.el.components['tracked-controls'],
                      r = n ? n.controller : null,
                      i = 'default',
                      o = this.data.hand
                    if (r && !window.hasNativeWebXRImplementation && ((o = r.hand), !e)) {
                      var a = r.id.match(v)
                      i = (a && a[0]) || i
                    }
                    return (t = f[o] || f.default), p + i + '/' + t
                  },
                  injectTrackedControls: function () {
                    var e = this.data
                    this.el.setAttribute('tracked-controls', {
                      idPrefix: g,
                      controller: e.pair,
                      hand: e.hand,
                      armModel: !1,
                    }),
                      this.updateControllerModel()
                  },
                  addControllersUpdateListener: function () {
                    this.el.sceneEl.addEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  removeControllersUpdateListener: function () {
                    this.el.sceneEl.removeEventListener(
                      'controllersupdated',
                      this.onControllersUpdate,
                      !1,
                    )
                  },
                  onControllersUpdate: function () {
                    this.checkIfControllerPresent()
                  },
                  onModelError: function (e) {
                    var t = this.createControllerModelUrl(!0)
                    e.detail.src !== t
                      ? (h(
                          'Failed to load controller model for device, attempting to load default.',
                        ),
                        this.loadModel(t))
                      : h('Failed to load default controller model.')
                  },
                  loadModel: function (e) {
                    this.el.setAttribute('gltf-model', 'url(' + e + ')')
                  },
                  onModelLoaded: function (e) {
                    var t,
                      n,
                      r,
                      i,
                      o = (this.controllerModel = e.detail.model),
                      a = this.loadedMeshInfo
                    if ((u('Processing model'), (a.buttonMeshes = {}), (a.axisMeshes = {}), o)) {
                      for (t = 0; t < this.mapping.buttons.length; t++)
                        (n = this.mapping.buttonMeshNames[this.mapping.buttons[t]])
                          ? (r = o.getObjectByName(n))
                            ? (i = {
                                index: t,
                                value: s(r, 'VALUE'),
                                pressed: s(r, 'PRESSED'),
                                unpressed: s(r, 'UNPRESSED'),
                              }).value &&
                              i.pressed &&
                              i.unpressed
                              ? (a.buttonMeshes[this.mapping.buttons[t]] = i)
                              : h(
                                  'Missing button submesh under mesh with name: ' +
                                    n +
                                    '(VALUE: ' +
                                    !!i.value +
                                    ', PRESSED: ' +
                                    !!i.pressed +
                                    ', UNPRESSED:' +
                                    !!i.unpressed +
                                    ')',
                                )
                            : h('Missing button mesh with name: ' + n)
                          : u(
                              'Skipping unknown button at index: ' +
                                t +
                                ' with mapped name: ' +
                                this.mapping.buttons[t],
                            )
                      for (t = 0; t < this.mapping.axisMeshNames.length; t++)
                        (n = this.mapping.axisMeshNames[t])
                          ? (r = o.getObjectByName(n))
                            ? (i = {
                                index: t,
                                value: s(r, 'VALUE'),
                                min: s(r, 'MIN'),
                                max: s(r, 'MAX'),
                              }).value &&
                              i.min &&
                              i.max
                              ? (a.axisMeshes[t] = i)
                              : h(
                                  'Missing axis submesh under mesh with name: ' +
                                    n +
                                    '(VALUE: ' +
                                    !!i.value +
                                    ', MIN: ' +
                                    !!i.min +
                                    ', MAX:' +
                                    !!i.max +
                                    ')',
                                )
                            : h('Missing axis mesh with name: ' + n)
                          : u('Skipping unknown axis at index: ' + t)
                      this.calculateRayOriginFromMesh(o), this.setModelVisibility()
                    }
                    function s(e, t) {
                      for (var n = 0, r = e.children.length; n < r; n++) {
                        var i = e.children[n]
                        if (i && i.name === t) return i
                      }
                    }
                    u('Model load complete.')
                  },
                  calculateRayOriginFromMesh: (function () {
                    var e = new THREE.Quaternion()
                    return function (t) {
                      var n
                      if (
                        (this.rayOrigin.origin.set(0, 0, 0),
                        this.rayOrigin.direction.set(0, 0, -1),
                        (this.rayOrigin.createdFromMesh = !0),
                        (n = t.getObjectByName(this.mapping.pointingPoseMeshName)))
                      ) {
                        var r = t.parent
                        r && ((t.parent = null), t.updateMatrixWorld(!0), (t.parent = r)),
                          n.getWorldPosition(this.rayOrigin.origin),
                          n.getWorldQuaternion(e),
                          this.rayOrigin.direction.applyQuaternion(e),
                          r && t.updateMatrixWorld(!0)
                      } else u('Mesh does not contain pointing origin data, defaulting to none.')
                      this.modelReady()
                    }
                  })(),
                  lerpAxisTransform: (function () {
                    var e = new THREE.Quaternion()
                    return function (t, n) {
                      var r = this.loadedMeshInfo.axisMeshes[t]
                      if (r) {
                        var i = r.min,
                          o = r.max,
                          a = r.value,
                          s = 0.5 * n + 0.5
                        a.setRotationFromQuaternion(e.copy(i.quaternion).slerp(o.quaternion, s)),
                          a.position.lerpVectors(i.position, o.position, s)
                      }
                    }
                  })(),
                  lerpButtonTransform: (function () {
                    var e = new THREE.Quaternion()
                    return function (t, n) {
                      var r = this.loadedMeshInfo.buttonMeshes[t]
                      if (r) {
                        var i = r.unpressed,
                          o = r.pressed,
                          a = r.value
                        a.setRotationFromQuaternion(e.copy(i.quaternion).slerp(o.quaternion, n)),
                          a.position.lerpVectors(i.position, o.position, n)
                      }
                    }
                  })(),
                  modelReady: function () {
                    this.el.emit('controllermodelready', {
                      name: 'windows-motion-controls',
                      model: this.data.model,
                      rayOrigin: this.rayOrigin,
                    })
                  },
                  onButtonChanged: function (e) {
                    var t = this.mapping.buttons[e.detail.id]
                    t &&
                      (this.loadedMeshInfo &&
                        this.loadedMeshInfo.buttonMeshes &&
                        this.lerpButtonTransform(t, e.detail.state.value),
                      this.el.emit(t + 'changed', e.detail.state))
                  },
                  onAxisMoved: function (e) {
                    var t = this.mapping.axisMeshNames.length
                    if (this.loadedMeshInfo && this.loadedMeshInfo.axisMeshes)
                      for (var n = 0; n < t; n++) this.lerpAxisTransform(n, e.detail.axis[n] || 0)
                    s(this, this.mapping.axes, e)
                  },
                  setModelVisibility: function (e) {
                    var t = this.el.getObject3D('mesh')
                    ;(e = void 0 !== e ? e : this.modelVisible),
                      (this.modelVisible = e),
                      t && (t.visible = e)
                  },
                })
              },
              {
                '../constants': 123,
                '../core/component': 131,
                '../utils/': 205,
                '../utils/bind': 199,
                '../utils/tracked-controls': 214,
              },
            ],
            123: [
              function (e, t, n) {
                t.exports = {
                  AFRAME_INJECTED: 'aframe-injected',
                  DEFAULT_CAMERA_HEIGHT: 1.6,
                  DEFAULT_HANDEDNESS: 'right',
                  keyboardevent: e('./keyboardevent'),
                }
              },
              { './keyboardevent': 124 },
            ],
            124: [
              function (e, t, n) {
                t.exports = {
                  KEYCODE_TO_CODE: {
                    38: 'ArrowUp',
                    37: 'ArrowLeft',
                    40: 'ArrowDown',
                    39: 'ArrowRight',
                    87: 'KeyW',
                    65: 'KeyA',
                    83: 'KeyS',
                    68: 'KeyD',
                  },
                }
              },
              {},
            ],
            125: [
              function (e, t, n) {
                var r = e('./a-node'),
                  i = e('../utils/bind'),
                  o = e('../utils/debug'),
                  a = e('./a-register-element').registerElement,
                  s = e('../lib/three'),
                  l = new s.FileLoader(),
                  c = o('core:a-assets:warn')
                function u(e) {
                  if (e.hasAttribute('autoplay') || 'auto' === e.getAttribute('preload'))
                    return new Promise(function (t, n) {
                      if (4 === e.readyState) return t()
                      if (e.error) return n()
                      function r() {
                        for (var n = 0, r = 0; r < e.buffered.length; r++)
                          n += e.buffered.end(r) - e.buffered.start(r)
                        n >= e.duration &&
                          ('VIDEO' === e.tagName && (s.Cache.files[e.getAttribute('src')] = e), t())
                      }
                      e.addEventListener('loadeddata', r, !1),
                        e.addEventListener('progress', r, !1),
                        e.addEventListener('error', n, !1)
                    })
                }
                function h(e) {
                  var t = d(e)
                  return (
                    t.tagName &&
                      'video' === t.tagName.toLowerCase() &&
                      (t.setAttribute('playsinline', ''), t.setAttribute('webkit-playsinline', '')),
                    t !== e && (e.parentNode.appendChild(t), e.parentNode.removeChild(e)),
                    t
                  )
                }
                function d(e) {
                  var t
                  if (e.hasAttribute('crossorigin')) return e
                  if (null !== (t = e.getAttribute('src'))) {
                    if (-1 === t.indexOf('://')) return e
                    if (p(t) === window.location.host) return e
                  }
                  return (
                    c(
                      'Cross-origin element (e.g., <img>) was requested without `crossorigin` set. A-Frame will re-request the asset with `crossorigin` attribute set. Please set `crossorigin` on the element (e.g., <img crossorigin="anonymous">)',
                      t,
                    ),
                    (e.crossOrigin = 'anonymous'),
                    e.cloneNode(!0)
                  )
                }
                function p(e) {
                  var t = e.indexOf('://') > -1 ? e.split('/')[2] : e.split('/')[0]
                  return t.substring(0, t.indexOf(':'))
                }
                function f(e) {
                  var t = m(e),
                    n = t.lastIndexOf('.')
                  return n >= 0 && '.glb' === t.slice(n, e.search(/\?|#|$/))
                    ? 'arraybuffer'
                    : 'text'
                }
                function m(e) {
                  var t = document.createElement('a')
                  t.href = e
                  var n = t.search.replace(/^\?/, ''),
                    r = e.replace(n, '').replace('?', '')
                  return r.substring(r.lastIndexOf('/') + 1)
                }
                ;(t.exports = a('a-assets', {
                  prototype: Object.create(r.prototype, {
                    createdCallback: {
                      value: function () {
                        ;(this.isAssets = !0), (this.fileLoader = l), (this.timeout = null)
                      },
                    },
                    attachedCallback: {
                      value: function () {
                        var e,
                          t,
                          n,
                          r,
                          o,
                          a,
                          l = this,
                          d = []
                        if (!this.parentNode.isScene)
                          throw new Error('<a-assets> must be a child of a <a-scene>.')
                        for (o = this.querySelectorAll('img'), e = 0; e < o.length; e++)
                          (r = h(o[e])),
                            d.push(
                              new Promise(function (t, n) {
                                ;(s.Cache.files[o[e].getAttribute('src')] = r),
                                  (r.onload = t),
                                  (r.onerror = n)
                              }),
                            )
                        for (n = this.querySelectorAll('audio, video'), e = 0; e < n.length; e++)
                          (t = h(n[e])).src ||
                            t.srcObject ||
                            c('Audio/video asset has neither `src` nor `srcObject` attributes.'),
                            d.push(u(t))
                        Promise.all(d).then(i(this.load, this)),
                          (a = parseInt(this.getAttribute('timeout'), 10) || 3e3),
                          (this.timeout = setTimeout(function () {
                            l.hasLoaded ||
                              (c('Asset loading timed out in ', a, 'ms'),
                              l.emit('timeout'),
                              l.load())
                          }, a))
                      },
                    },
                    detachedCallback: {
                      value: function () {
                        this.timeout && clearTimeout(this.timeout)
                      },
                    },
                    load: {
                      value: function () {
                        r.prototype.load.call(this, null, function (e) {
                          return e.isAssetItem && e.hasAttribute('src')
                        })
                      },
                    },
                  }),
                })),
                  a('a-asset-item', {
                    prototype: Object.create(r.prototype, {
                      createdCallback: {
                        value: function () {
                          ;(this.data = null), (this.isAssetItem = !0)
                        },
                      },
                      attachedCallback: {
                        value: function () {
                          var e = this,
                            t = this.getAttribute('src')
                          l.setResponseType(this.getAttribute('response-type') || f(t)),
                            l.load(
                              t,
                              function (t) {
                                ;(e.data = t),
                                  setTimeout(function () {
                                    r.prototype.load.call(e)
                                  })
                              },
                              function (t) {
                                e.emit('progress', {
                                  loadedBytes: t.loaded,
                                  totalBytes: t.total,
                                  xhr: t,
                                })
                              },
                              function (t) {
                                e.emit('error', { xhr: t })
                              },
                            )
                        },
                      },
                    }),
                  }),
                  (t.exports.inferResponseType = f),
                  (t.exports.getFileNameFromURL = m)
              },
              {
                '../lib/three': 179,
                '../utils/bind': 199,
                '../utils/debug': 201,
                './a-node': 129,
                './a-register-element': 130,
              },
            ],
            126: [
              function (e, t, n) {
                var r = e('../utils/debug'),
                  i = e('./a-register-element').registerElement,
                  o = r('core:cubemap:warn')
                t.exports = i('a-cubemap', {
                  prototype: Object.create(window.HTMLElement.prototype, {
                    attachedCallback: {
                      value: function () {
                        this.srcs = this.validate()
                      },
                      writable: window.debug,
                    },
                    validate: {
                      value: function () {
                        var e,
                          t = this.querySelectorAll('[src]'),
                          n = []
                        if (6 === t.length) {
                          for (e = 0; e < t.length; e++) n.push(t[e].getAttribute('src'))
                          return n
                        }
                        o(
                          '<a-cubemap> did not contain exactly six elements each with a `src` attribute.',
                        )
                      },
                      writable: window.debug,
                    },
                  }),
                })
              },
              { '../utils/debug': 201, './a-register-element': 130 },
            ],
            127: [
              function (e, t, n) {
                var r,
                  i = e('./a-node'),
                  o = e('./component').components,
                  a = e('./a-register-element').registerElement,
                  s = e('../lib/three'),
                  l = e('../utils/'),
                  c = l.debug('core:a-entity:debug'),
                  u = l.debug('core:a-entity:warn'),
                  h = '__',
                  d = ['position', 'rotation', 'scale', 'visible'],
                  p = { once: !0 },
                  f = Object.create(i.prototype, {
                    createdCallback: {
                      value: function () {
                        ;(this.components = {}),
                          (this.initializingComponents = {}),
                          (this.componentsToUpdate = {}),
                          (this.isEntity = !0),
                          (this.isPlaying = !1),
                          (this.object3D = new s.Group()),
                          (this.object3D.el = this),
                          (this.object3DMap = {}),
                          (this.parentEl = null),
                          (this.rotationObj = {}),
                          (this.states = [])
                      },
                    },
                    attributeChangedCallback: {
                      value: function (e, t, n) {
                        var r = this.components[e]
                        r && r.justInitialized && '' === n
                          ? delete r.justInitialized
                          : (r || null !== n) && this.setEntityAttribute(e, t, n)
                      },
                    },
                    attachedCallback: {
                      value: function () {
                        var e,
                          t = this.sceneEl,
                          n = this
                        this.addToParent(),
                          this.isScene ||
                            (t
                              ? !(e = t.querySelector('a-assets')) || e.hasLoaded
                                ? this.load()
                                : e.addEventListener('loaded', function () {
                                    n.load()
                                  })
                              : this.load())
                      },
                    },
                    detachedCallback: {
                      value: function () {
                        var e
                        if (this.parentEl) {
                          for (e in this.components) this.removeComponent(e, !1)
                          this.isScene ||
                            (this.removeFromParent(),
                            i.prototype.detachedCallback.call(this),
                            (this.object3D.el = null))
                        }
                      },
                    },
                    getObject3D: {
                      value: function (e) {
                        return this.object3DMap[e]
                      },
                    },
                    setObject3D: {
                      value: function (e, t) {
                        var n,
                          r = this
                        if (!(t instanceof s.Object3D))
                          throw new Error(
                            '`Entity.setObject3D` was called with an object that was not an instance of THREE.Object3D.',
                          )
                        ;(n = this.getObject3D(e)) && this.object3D.remove(n),
                          (t.el = this),
                          t.children.length &&
                            t.traverse(function (e) {
                              e.el = r
                            }),
                          this.object3D.add(t),
                          (this.object3DMap[e] = t),
                          this.emit('object3dset', { object: t, type: e })
                      },
                    },
                    removeObject3D: {
                      value: function (e) {
                        var t = this.getObject3D(e)
                        t
                          ? (this.object3D.remove(t),
                            delete this.object3DMap[e],
                            this.emit('object3dremove', { type: e }))
                          : u('Tried to remove `Object3D` of type:', e, 'which was not defined.')
                      },
                    },
                    getOrCreateObject3D: {
                      value: function (e, t) {
                        var n = this.getObject3D(e)
                        return (
                          !n && t && ((n = new t()), this.setObject3D(e, n)),
                          u(
                            '`getOrCreateObject3D` has been deprecated. Use `setObject3D()` and `object3dset` event instead.',
                          ),
                          n
                        )
                      },
                    },
                    add: {
                      value: function (e) {
                        if (!e.object3D)
                          throw new Error(
                            "Trying to add an element that doesn't have an `object3D`",
                          )
                        this.object3D.add(e.object3D), this.emit('child-attached', { el: e })
                      },
                    },
                    addToParent: {
                      value: function () {
                        var e = (this.parentEl = this.parentNode)
                        e &&
                          e.add &&
                          !this.attachedToParent &&
                          (e.add(this), (this.attachedToParent = !0))
                      },
                    },
                    removeFromParent: {
                      value: function () {
                        var e = this.parentEl
                        this.parentEl.remove(this),
                          (this.attachedToParent = !1),
                          (this.parentEl = null),
                          e.emit('child-detached', { el: this })
                      },
                    },
                    load: {
                      value: function () {
                        var e = this
                        !this.hasLoaded &&
                          this.parentEl &&
                          i.prototype.load.call(this, function () {
                            e.parentEl &&
                              (e.updateComponents(),
                              (e.isScene || e.parentEl.isPlaying) && e.play())
                          })
                      },
                      writable: window.debug,
                    },
                    remove: {
                      value: function (e) {
                        e ? this.object3D.remove(e.object3D) : this.parentNode.removeChild(this)
                      },
                    },
                    getChildEntities: {
                      value: function () {
                        for (var e = this.children, t = [], n = 0; n < e.length; n++) {
                          var i = e[n]
                          i instanceof r && t.push(i)
                        }
                        return t
                      },
                    },
                    initComponent: {
                      value: function (e, t, n) {
                        var r, i, a, s
                        if (
                          ((s = (a = l.split(e, h))[0]),
                          (i = a.length > 2 ? a.slice(1).join('__') : a[1]),
                          o[s] && (m(this, e) || void 0 !== t || n) && !(e in this.components))
                        ) {
                          if ((this.initComponentDependencies(s), i && !o[s].multiple))
                            throw new Error(
                              'Trying to initialize multiple components of type `' +
                                s +
                                '`. There can only be one component of this type per entity.',
                            )
                          ;(r = new o[s].Component(this, t, i)),
                            this.isPlaying && r.play(),
                            this.hasAttribute(e) ||
                              ((r.justInitialized = !0),
                              window.HTMLElement.prototype.setAttribute.call(this, e, '')),
                            c('Component initialized: %s', e)
                        }
                      },
                      writable: window.debug,
                    },
                    initComponentDependencies: {
                      value: function (e) {
                        var t,
                          n,
                          r = this
                        if (o[e] && (t = o[e].dependencies))
                          for (n = 0; n < t.length; n++)
                            r.initComponent(
                              t[n],
                              window.HTMLElement.prototype.getAttribute.call(r, t[n]) || void 0,
                              !0,
                            )
                      },
                    },
                    removeComponent: {
                      value: function (e, t) {
                        var n
                        ;(n = this.components[e]) &&
                          (n.initialized
                            ? (n.pause(),
                              n.remove(),
                              t && (n.destroy(), delete this.components[e]),
                              this.emit('componentremoved', n.evtDetail, !1))
                            : this.addEventListener('componentinitialized', function n(r) {
                                r.detail.name === e &&
                                  (this.removeComponent(e, t),
                                  this.removeEventListener('componentinitialized', n))
                              }))
                      },
                      writable: window.debug,
                    },
                    updateComponents: {
                      value: function () {
                        var e,
                          t,
                          n,
                          r,
                          i = this.componentsToUpdate
                        if (this.hasLoaded) {
                          for (n = 0; n < this.mixinEls.length; n++)
                            for (r in this.mixinEls[n].componentCache) y(r) && (i[r] = !0)
                          if (this.getExtraComponents)
                            for (r in (t = this.getExtraComponents())) y(r) && (i[r] = !0)
                          for (n = 0; n < this.attributes.length; ++n)
                            (r = this.attributes[n].name),
                              -1 === d.indexOf(r) && y(r) && (i[r] = !0)
                          for (n = 0; n < d.length; n++)
                            (r = d[n]),
                              this.hasAttribute(r) &&
                                this.updateComponent(r, this.getDOMAttribute(r))
                          for (r in i)
                            (e = g(this.getDOMAttribute(r), t && t[r])),
                              this.updateComponent(r, e),
                              delete i[r]
                        }
                      },
                      writable: window.debug,
                    },
                    updateComponent: {
                      value: function (e, t, n) {
                        var r = this.components[e]
                        if (r)
                          return null !== t || m(this, e)
                            ? void r.updateProperties(t, n)
                            : void this.removeComponent(e, !0)
                        this.initComponent(e, t, !1)
                      },
                    },
                    removeAttribute: {
                      value: function (e, t) {
                        var n = this.components[e]
                        n && void 0 === t && this.removeComponent(e, !0),
                          n && void 0 !== t
                            ? n.resetProperty(t)
                            : ('mixin' === e && this.mixinUpdate(''),
                              window.HTMLElement.prototype.removeAttribute.call(this, e))
                      },
                    },
                    play: {
                      value: function () {
                        var e, t, n
                        if (!this.isPlaying && this.hasLoaded) {
                          for (n in ((this.isPlaying = !0), this.components))
                            this.components[n].play()
                          for (e = this.getChildEntities(), t = 0; t < e.length; t++) e[t].play()
                          this.emit('play')
                        }
                      },
                      writable: !0,
                    },
                    pause: {
                      value: function () {
                        var e, t, n
                        if (this.isPlaying) {
                          for (n in ((this.isPlaying = !1), this.components))
                            this.components[n].pause()
                          for (e = this.getChildEntities(), t = 0; t < e.length; t++) e[t].pause()
                          this.emit('pause')
                        }
                      },
                      writable: !0,
                    },
                    setEntityAttribute: {
                      value: function (e, t, n) {
                        if (o[e] || this.components[e]) this.updateComponent(e, n)
                        else if ('mixin' === e) {
                          if (n === this.computedMixinStr) return
                          this.mixinUpdate(n, t)
                        }
                      },
                    },
                    mixinUpdate: {
                      value: (function () {
                        var e = []
                        return function (t, n) {
                          var r,
                            i,
                            o,
                            a,
                            s = this
                          if (this.hasLoaded) {
                            for (
                              n = n || this.getAttribute('mixin'),
                                o = this.updateMixins(t, n),
                                e.length = 0,
                                a = 0;
                              a < this.mixinEls.length;
                              a++
                            )
                              for (r in this.mixinEls[a].componentCache)
                                -1 === e.indexOf(r) &&
                                  (this.components[r]
                                    ? this.components[r].handleMixinUpdate()
                                    : this.initComponent(r, null),
                                  e.push(r))
                            for (a = 0; a < o.oldMixinIds.length; a++)
                              if ((i = document.getElementById(o.oldMixinIds[a])))
                                for (r in i.componentCache)
                                  -1 === e.indexOf(r) &&
                                    this.components[r] &&
                                    (this.getDOMAttribute(r)
                                      ? this.components[r].handleMixinUpdate()
                                      : this.removeComponent(r, !0))
                          } else
                            this.addEventListener(
                              'loaded',
                              function () {
                                s.mixinUpdate(t, n)
                              },
                              p,
                            )
                        }
                      })(),
                    },
                    setAttribute: {
                      value: (function () {
                        var e = {}
                        return function (t, n, r) {
                          var a, s, c, u, d
                          if (((c = (u = t.indexOf(h)) > 0 ? t.substring(0, u) : t), !o[c]))
                            return (
                              'mixin' === t && this.mixinUpdate(n),
                              void i.prototype.setAttribute.call(this, t, n)
                            )
                          if (
                            (!this.components[t] &&
                              this.hasAttribute(t) &&
                              this.updateComponent(
                                t,
                                window.HTMLElement.prototype.getAttribute.call(this, t),
                              ),
                            'undefined' !== typeof r &&
                              'string' === typeof n &&
                              n.length > 0 &&
                              'string' === typeof l.styleParser.parse(n))
                          ) {
                            for (d in e) delete e[d]
                            ;((a = e)[n] = r), (s = !1)
                          } else (a = n), (s = !0 === r)
                          this.updateComponent(t, a, s),
                            this.sceneEl &&
                              this.sceneEl.getAttribute('debug') &&
                              this.components[t].flushToDOM()
                        }
                      })(),
                      writable: window.debug,
                    },
                    flushToDOM: {
                      value: function (e) {
                        var t,
                          n,
                          r,
                          i = this.components,
                          o = this.children
                        for (r in i) i[r].flushToDOM()
                        if (e)
                          for (n = 0; n < o.length; ++n) (t = o[n]).flushToDOM && t.flushToDOM(e)
                      },
                    },
                    getAttribute: {
                      value: function (e) {
                        var t
                        return 'position' === e
                          ? this.object3D.position
                          : 'rotation' === e
                          ? b(this)
                          : 'scale' === e
                          ? this.object3D.scale
                          : 'visible' === e
                          ? this.object3D.visible
                          : (t = this.components[e])
                          ? t.data
                          : window.HTMLElement.prototype.getAttribute.call(this, e)
                      },
                      writable: window.debug,
                    },
                    getDOMAttribute: {
                      value: function (e) {
                        var t = this.components[e]
                        return t
                          ? t.attrValue
                          : window.HTMLElement.prototype.getAttribute.call(this, e)
                      },
                      writable: window.debug,
                    },
                    addState: {
                      value: function (e) {
                        this.is(e) || (this.states.push(e), this.emit('stateadded', e))
                      },
                    },
                    removeState: {
                      value: function (e) {
                        var t = this.states.indexOf(e)
                        ;-1 !== t && (this.states.splice(t, 1), this.emit('stateremoved', e))
                      },
                    },
                    is: {
                      value: function (e) {
                        return -1 !== this.states.indexOf(e)
                      },
                    },
                    inspect: {
                      value: function () {
                        this.sceneEl.components.inspector.openInspector(this)
                      },
                    },
                    destroy: {
                      value: function () {
                        var e
                        if (this.parentNode)
                          u('Entity can only be destroyed if detached from scenegraph.')
                        else for (e in this.components) this.components[e].destroy()
                      },
                    },
                  })
                function m(e, t) {
                  return !(!e.components[t] || !e.components[t].attrValue) || v(t, e.mixinEls)
                }
                function v(e, t) {
                  var n,
                    r = !1
                  for (n = 0; n < t.length && !(r = t[n].hasAttribute(e)); ++n);
                  return r
                }
                function g(e, t) {
                  return t
                    ? t.constructor === Object
                      ? l.extend(t, l.styleParser.parse(e || {}))
                      : e || t
                    : e
                }
                function y(e) {
                  return -1 !== e.indexOf(h) && (e = l.split(e, h)[0]), !!o[e]
                }
                function b(e) {
                  var t = s.Math.radToDeg,
                    n = e.object3D.rotation,
                    r = e.rotationObj
                  return (r.x = t(n.x)), (r.y = t(n.y)), (r.z = t(n.z)), r
                }
                ;(r = a('a-entity', { prototype: f })), (t.exports = r)
              },
              {
                '../lib/three': 179,
                '../utils/': 205,
                './a-node': 129,
                './a-register-element': 130,
                './component': 131,
              },
            ],
            128: [
              function (e, t, n) {
                var r = e('./a-node'),
                  i = e('./a-register-element').registerElement,
                  o = e('./component').components,
                  a = e('../utils'),
                  s = '__'
                t.exports = i('a-mixin', {
                  prototype: Object.create(r.prototype, {
                    createdCallback: {
                      value: function () {
                        ;(this.componentCache = {}),
                          (this.id = this.getAttribute('id')),
                          (this.isMixin = !0)
                      },
                    },
                    attributeChangedCallback: {
                      value: function (e, t, n) {
                        this.cacheAttribute(e, n), this.updateEntities()
                      },
                    },
                    attachedCallback: {
                      value: function () {
                        ;(this.sceneEl = this.closestScene()),
                          this.cacheAttributes(),
                          this.updateEntities(),
                          this.load()
                      },
                    },
                    setAttribute: {
                      value: function (e, t) {
                        window.HTMLElement.prototype.setAttribute.call(this, e, t),
                          this.cacheAttribute(e, t)
                      },
                    },
                    cacheAttribute: {
                      value: function (e, t) {
                        var n, r
                        ;(r = a.split(e, s)[0]),
                          (n = o[r]) &&
                            (void 0 === t &&
                              (t = window.HTMLElement.prototype.getAttribute.call(this, e)),
                            (this.componentCache[e] = n.parseAttrValueForCache(t)))
                      },
                    },
                    getAttribute: {
                      value: function (e) {
                        return (
                          this.componentCache[e] ||
                          window.HTMLElement.prototype.getAttribute.call(this, e)
                        )
                      },
                    },
                    cacheAttributes: {
                      value: function () {
                        var e,
                          t,
                          n = this.attributes
                        for (t = 0; t < n.length; t++) (e = n[t].name), this.cacheAttribute(e)
                      },
                    },
                    updateEntities: {
                      value: function () {
                        var e, t, n
                        if (this.sceneEl)
                          for (
                            t = this.sceneEl.querySelectorAll('[mixin~=' + this.id + ']'), n = 0;
                            n < t.length;
                            n++
                          )
                            (e = t[n]).hasLoaded && !e.isMixin && e.mixinUpdate(this.id)
                      },
                    },
                  }),
                })
              },
              { '../utils': 205, './a-node': 129, './a-register-element': 130, './component': 131 },
            ],
            129: [
              function (e, t, n) {
                var r = e('./a-register-element').registerElement,
                  i = e('./a-register-element').isNode,
                  o = e('../utils/'),
                  a = o.debug('core:a-node:warn'),
                  s = o.debug('core:a-node:error')
                t.exports = r('a-node', {
                  prototype: Object.create(window.HTMLElement.prototype, {
                    createdCallback: {
                      value: function () {
                        ;(this.computedMixinStr = ''),
                          (this.hasLoaded = !1),
                          (this.isNode = !0),
                          (this.mixinEls = [])
                      },
                      writable: window.debug,
                    },
                    attachedCallback: {
                      value: function () {
                        var e
                        ;(this.sceneEl = this.closestScene()),
                          this.sceneEl ||
                            a(
                              'You are attempting to attach <' +
                                this.tagName +
                                '> outside of an A-Frame scene. Append this element to `<a-scene>` instead.',
                            ),
                          (this.hasLoaded = !1),
                          this.emit('nodeready', void 0, !1),
                          this.isMixin || ((e = this.getAttribute('mixin')) && this.updateMixins(e))
                      },
                      writable: window.debug,
                    },
                    attributeChangedCallback: {
                      value: function (e, t, n) {
                        n !== this.computedMixinStr &&
                          ('mixin' !== e || this.isMixin || this.updateMixins(n, t))
                      },
                    },
                    closestScene: {
                      value: function () {
                        for (var e = this; e && !e.isScene; ) e = e.parentElement
                        return e
                      },
                    },
                    closest: {
                      value: function (e) {
                        for (
                          var t =
                              this.matches ||
                              this.mozMatchesSelector ||
                              this.msMatchesSelector ||
                              this.oMatchesSelector ||
                              this.webkitMatchesSelector,
                            n = this;
                          n && !t.call(n, e);

                        )
                          n = n.parentElement
                        return n
                      },
                    },
                    detachedCallback: {
                      value: function () {
                        this.hasLoaded = !1
                      },
                    },
                    load: {
                      value: function (e, t) {
                        var n,
                          r = this
                        this.hasLoaded ||
                          ((t = t || i),
                          (n = this.getChildren()
                            .filter(t)
                            .map(function (e) {
                              return new Promise(function (t) {
                                if (e.hasLoaded) return t()
                                e.addEventListener('loaded', t)
                              })
                            })),
                          Promise.all(n)
                            .then(function () {
                              ;(r.hasLoaded = !0), e && e(), r.emit('loaded', void 0, !1)
                            })
                            .catch(function (e) {
                              s('Failure loading node: ', e)
                            }))
                      },
                      writable: !0,
                    },
                    getChildren: {
                      value: function () {
                        return Array.prototype.slice.call(this.children, 0)
                      },
                    },
                    updateMixins: {
                      value: (function () {
                        var e = [],
                          t = [],
                          n = {}
                        return function (r, i) {
                          var a, s, l
                          for (
                            e.length = 0,
                              t.length = 0,
                              s = r ? o.split(r.trim(), /\s+/) : e,
                              l = i ? o.split(i.trim(), /\s+/) : t,
                              n.newMixinIds = s,
                              n.oldMixinIds = l,
                              a = 0;
                            a < l.length;
                            a++
                          )
                            -1 === s.indexOf(l[a]) && this.unregisterMixin(l[a])
                          for (
                            this.computedMixinStr = '', this.mixinEls.length = 0, a = 0;
                            a < s.length;
                            a++
                          )
                            this.registerMixin(document.getElementById(s[a]))
                          return (
                            this.computedMixinStr &&
                              ((this.computedMixinStr = this.computedMixinStr.trim()),
                              window.HTMLElement.prototype.setAttribute.call(
                                this,
                                'mixin',
                                this.computedMixinStr,
                              )),
                            n
                          )
                        }
                      })(),
                    },
                    registerMixin: {
                      value: function (e) {
                        var t, n, r
                        if (e) {
                          if ((r = e.getAttribute('mixin')))
                            for (t = o.split(r.trim(), /\s+/), n = 0; n < t.length; n++)
                              this.registerMixin(document.getElementById(t[n]))
                          ;(this.computedMixinStr = this.computedMixinStr + ' ' + e.id),
                            this.mixinEls.push(e)
                        }
                      },
                    },
                    setAttribute: {
                      value: function (e, t) {
                        'mixin' === e && this.updateMixins(t),
                          window.HTMLElement.prototype.setAttribute.call(this, e, t)
                      },
                    },
                    unregisterMixin: {
                      value: function (e) {
                        var t,
                          n = this.mixinEls
                        for (t = 0; t < n.length; ++t)
                          if (e === n[t].id) {
                            n.splice(t, 1)
                            break
                          }
                      },
                    },
                    emit: {
                      value: (function () {
                        var e = {}
                        return function (t, n, r, i) {
                          void 0 === r && (r = !0),
                            (e.bubbles = !!r),
                            (e.detail = n),
                            i && (e = o.extend({}, i, e)),
                            this.dispatchEvent(new CustomEvent(t, e))
                        }
                      })(),
                      writable: window.debug,
                    },
                  }),
                })
              },
              { '../utils/': 205, './a-register-element': 130 },
            ],
            130: [
              function (e, t, n) {
                var r, i
                e('document-register-element')
                var o = (t.exports.knownTags = {})
                function a(e) {
                  o[e.toLowerCase()] = !0
                }
                function s(e) {
                  var t = {}
                  return (
                    c(
                      t,
                      [
                        'attachedCallback',
                        'attributeChangedCallback',
                        'createdCallback',
                        'detachedCallback',
                      ],
                      e,
                      r.prototype,
                    ),
                    h(e, t),
                    t
                  )
                }
                function l(e) {
                  var t = {},
                    n = [
                      'attachedCallback',
                      'attributeChangedCallback',
                      'createdCallback',
                      'detachedCallback',
                    ]
                  return (
                    c(
                      t,
                      [
                        'attachedCallback',
                        'attributeChangedCallback',
                        'createdCallback',
                        'detachedCallback',
                      ],
                      e,
                      r.prototype,
                    ),
                    c(t, n, e, i.prototype),
                    h(e, t),
                    t
                  )
                }
                function c(e, t, n, r) {
                  t.forEach(function (t) {
                    u(e, t, n, r)
                  })
                }
                function u(e, t, n, r) {
                  var i = n[t],
                    o = r[t]
                  i &&
                    o &&
                    i !== o &&
                    (e[t] = {
                      value: function () {
                        return o.apply(this, arguments), i.apply(this, arguments)
                      },
                      writable: window.debug,
                    })
                }
                function h(e, t) {
                  Object.getOwnPropertyNames(e).forEach(function (n) {
                    var r
                    t[n] ||
                      ((r = Object.getOwnPropertyDescriptor(e, n)),
                      (t[n] = { value: e[n], writable: r.writable }))
                  })
                }
                ;(t.exports.isNode = function (e) {
                  return e.tagName.toLowerCase() in o || e.isNode
                }),
                  (t.exports.registerElement = function (e, t) {
                    var n = Object.getPrototypeOf(t.prototype),
                      o = t,
                      c = r && n === r.prototype,
                      u = i && n === i.prototype
                    return (
                      (c || u) && a(e),
                      c && ((o = s(t.prototype)), (o = { prototype: Object.create(n, o) })),
                      u && ((o = l(t.prototype)), (o = { prototype: Object.create(n, o) })),
                      Object.getOwnPropertyNames(o.prototype).forEach(function (e) {
                        var t = o.prototype[e]
                        'function' === typeof t && (t.displayName = e)
                      }),
                      document.registerElement(e, o)
                    )
                  }),
                  (t.exports.wrapMethods = c),
                  (r = e('./a-node')),
                  (i = e('./a-entity'))
              },
              { './a-entity': 127, './a-node': 129, 'document-register-element': 12 },
            ],
            131: [
              function (e, t, n) {
                var r = e('./schema'),
                  i = e('./scene/scenes'),
                  o = e('./system'),
                  a = e('../utils/'),
                  s = (t.exports.components = {}),
                  l = r.parseProperties,
                  c = r.parseProperty,
                  u = r.process,
                  h = r.isSingleProperty,
                  d = r.stringifyProperties,
                  p = r.stringifyProperty,
                  f = a.styleParser,
                  m = a.debug('core:component:warn'),
                  v = document.currentScript,
                  g = new RegExp('[A-Z]+'),
                  y = {},
                  b = (t.exports.Component = function (e, t, n) {
                    var r = this
                    ;(this.el = e),
                      (this.id = n),
                      (this.attrName = this.name + (n ? '__' + n : '')),
                      (this.evtDetail = { id: this.id, name: this.name }),
                      (this.initialized = !1),
                      (this.isSingleProperty = h(this.schema)),
                      (this.isSinglePropertyObject =
                        this.isSingleProperty &&
                        S(c(void 0, this.schema)) &&
                        !(this.schema.default instanceof window.HTMLElement)),
                      (this.isObjectBased = !this.isSingleProperty || this.isSinglePropertyObject),
                      (this.el.components[this.attrName] = this),
                      (this.objectPool = y[this.name])
                    const i = this.events
                    ;(this.events = {}),
                      A(this, i),
                      (this.attrValue = void 0),
                      this.isObjectBased
                        ? ((this.nextData = this.objectPool.use()),
                          a.objectPool.removeUnusedKeys(this.nextData, this.schema),
                          (this.oldData = this.objectPool.use()),
                          a.objectPool.removeUnusedKeys(this.oldData, this.schema),
                          (this.previousOldData = this.objectPool.use()),
                          a.objectPool.removeUnusedKeys(this.previousOldData, this.schema),
                          (this.parsingAttrValue = this.objectPool.use()),
                          a.objectPool.removeUnusedKeys(this.parsingAttrValue, this.schema))
                        : ((this.nextData = void 0),
                          (this.oldData = void 0),
                          (this.previousOldData = void 0),
                          (this.parsingAttrValue = void 0)),
                      (this.throttledEmitComponentChanged = a.throttle(function () {
                        e.emit('componentchanged', r.evtDetail, !1)
                      }, 200)),
                      this.updateProperties(t)
                  })
                function A(e, t) {
                  var n
                  for (n in t) e.events[n] = t[n].bind(e)
                }
                if (
                  ((b.prototype = {
                    schema: {},
                    init: function () {},
                    events: {},
                    update: function (e) {},
                    updateSchema: void 0,
                    tick: void 0,
                    tock: void 0,
                    play: function () {},
                    pause: function () {},
                    remove: function () {},
                    parse: function (e, t) {
                      var n = this.schema
                      return this.isSingleProperty ? c(e, n) : l(f.parse(e), n, !0, this.name, t)
                    },
                    stringify: function (e) {
                      var t = this.schema
                      return 'string' === typeof e
                        ? e
                        : this.isSingleProperty
                        ? p(e, t)
                        : ((e = d(e, t)), f.stringify(e))
                    },
                    updateCachedAttrValue: function (e, t) {
                      var n, r, i
                      if (void 0 !== e) {
                        if (null === e)
                          return (
                            this.isObjectBased &&
                              this.attrValue &&
                              this.objectPool.recycle(this.attrValue),
                            void (this.attrValue = void 0)
                          )
                        if (
                          (e instanceof Object && !(e instanceof window.HTMLElement)
                            ? ((r = this.objectPool.use()), (n = a.extend(r, e)))
                            : (n = this.parseAttrValueForCache(e)),
                          this.isObjectBased && !t && this.attrValue)
                        )
                          for (i in this.attrValue) void 0 === n[i] && (n[i] = this.attrValue[i])
                        this.isObjectBased &&
                          !this.attrValue &&
                          (this.attrValue = this.objectPool.use()),
                          a.objectPool.clearObject(this.attrValue),
                          (this.attrValue = E(this.attrValue, n, this.isObjectBased)),
                          a.objectPool.clearObject(r)
                      }
                    },
                    parseAttrValueForCache: function (e) {
                      var t
                      return 'string' !== typeof e
                        ? e
                        : (this.isSingleProperty
                            ? 'string' === typeof (t = this.schema.parse(e)) && (t = e)
                            : (a.objectPool.clearObject(this.parsingAttrValue),
                              (t = f.parse(e, this.parsingAttrValue))),
                          t)
                    },
                    flushToDOM: function (e) {
                      var t = e ? this.data : this.attrValue
                      null !== t &&
                        void 0 !== t &&
                        window.HTMLElement.prototype.setAttribute.call(
                          this.el,
                          this.attrName,
                          this.stringify(t),
                        )
                    },
                    updateProperties: function (e, t) {
                      this.el.hasLoaded
                        ? (null !== e && (e = this.parseAttrValueForCache(e)),
                          this.updateCachedAttrValue(e, t),
                          this.initialized
                            ? (this.updateComponent(e, t), this.callUpdateHandler())
                            : this.initComponent())
                        : this.updateCachedAttrValue(e)
                    },
                    initComponent: function () {
                      var e,
                        t = this.el
                      this.updateSchema &&
                        this.updateSchema(this.buildData(this.attrValue, !1, !0)),
                        (this.data = this.buildData(this.attrValue)),
                        t.initializingComponents[this.name] ||
                          ((t.initializingComponents[this.name] = !0),
                          this.init(),
                          (this.initialized = !0),
                          delete t.initializingComponents[this.name],
                          (this.oldData = E(this.oldData, this.data, this.isObjectBased)),
                          (e = this.isObjectBased ? this.objectPool.use() : void 0),
                          this.update(e),
                          this.isObjectBased && this.objectPool.recycle(e),
                          t.isPlaying && this.play(),
                          t.emit('componentinitialized', this.evtDetail, !1))
                    },
                    updateComponent: function (e, t) {
                      var n, r
                      if (t)
                        return (
                          this.updateSchema &&
                            this.updateSchema(this.buildData(this.attrValue, !0, !0)),
                          void (this.data = this.buildData(this.attrValue, !0, !1))
                        )
                      if (this.isSingleProperty)
                        return this.isObjectBased && c(e, this.schema), void (this.data = e)
                      if ((l(e, this.schema, !0, this.name), this.schemaChangeKeys.length))
                        for (n in e)
                          if (this.schema[n].schemaChange) {
                            r = !0
                            break
                          }
                      if (r)
                        return (
                          this.updateSchema &&
                            this.updateSchema(this.buildData(this.attrValue, !0, !0)),
                          void (this.data = this.buildData(this.attrValue, !0, !1))
                        )
                      for (n in e) void 0 !== e[n] && (this.data[n] = e[n])
                    },
                    callUpdateHandler: function () {
                      var e
                      this.previousOldData instanceof Object &&
                        a.objectPool.clearObject(this.previousOldData),
                        this.isObjectBased
                          ? x(this.previousOldData, this.oldData)
                          : (this.previousOldData = this.oldData),
                        (e = !a.deepEqual(this.oldData, this.data)),
                        (this.isPositionRotationScale || e) &&
                          (this.oldData instanceof Object && a.objectPool.clearObject(this.oldData),
                          (this.oldData = E(this.oldData, this.data, this.isObjectBased)),
                          this.update(this.previousOldData),
                          this.throttledEmitComponentChanged())
                    },
                    handleMixinUpdate: function () {
                      ;(this.data = this.buildData(this.attrValue)), this.callUpdateHandler()
                    },
                    resetProperty: function (e) {
                      if (this.isObjectBased) {
                        if (!(e in this.attrValue)) return
                        delete this.attrValue[e], (this.data[e] = this.schema[e].default)
                      } else
                        (this.attrValue = this.schema.default), (this.data = this.schema.default)
                      this.updateProperties(this.attrValue)
                    },
                    extendSchema: function (e) {
                      var t
                      ;(t = a.extend({}, s[this.name].schema)),
                        a.extend(t, e),
                        (this.schema = u(t)),
                        this.el.emit('schemachanged', this.evtDetail)
                    },
                    buildData: function (e, t, n) {
                      var r,
                        i,
                        o,
                        s,
                        u,
                        h,
                        d,
                        p = this.nextData,
                        f = this.schema,
                        m = this.el.mixinEls
                      if (
                        ((r = e && e.constructor === Array ? e.length : void 0 !== e && null !== e),
                        this.isObjectBased && a.objectPool.clearObject(p),
                        this.isSingleProperty)
                      )
                        i = this.isObjectBased
                          ? x(p, f.default)
                          : C(f.default)
                          ? a.clone(f.default)
                          : f.default
                      else
                        for (s in ((i = (d = !t && this.attrValue) instanceof Object ? x(p, d) : p),
                        f))
                          (o = f[s].default), void 0 === i[s] && (i[s] = C(o) ? a.clone(o) : o)
                      for (h = 0; h < m.length; h++)
                        (u = m[h].getAttribute(this.attrName)) && (i = E(i, u, this.isObjectBased))
                      if (r) {
                        if (this.isSingleProperty)
                          return S(e)
                            ? (x(this.parsingAttrValue, e), c(this.parsingAttrValue, f))
                            : c(e, f)
                        i = E(i, e, this.isObjectBased)
                      } else if (this.isSingleProperty) return c(i, f)
                      return l(i, f, void 0, this.name, n)
                    },
                    eventsAttach: function () {
                      var e
                      for (e in (this.eventsDetach(), this.events))
                        this.el.addEventListener(e, this.events[e])
                    },
                    eventsDetach: function () {
                      var e
                      for (e in this.events) this.el.removeEventListener(e, this.events[e])
                    },
                    destroy: function () {
                      this.objectPool.recycle(this.attrValue),
                        this.objectPool.recycle(this.oldData),
                        this.objectPool.recycle(this.parsingAttrValue),
                        (this.attrValue = this.oldData = this.parsingAttrValue = void 0)
                    },
                  }),
                  window.debug)
                )
                  var w = (t.exports.registrationOrderWarnings = {})
                function x(e, t) {
                  var n, r
                  for (r in t) void 0 !== t[r] && ((n = t[r]), (e[r] = C(n) ? a.clone(n) : n))
                  return e
                }
                function E(e, t, n) {
                  var r
                  if (n && t.constructor === Object) {
                    for (r in t)
                      void 0 !== t[r] &&
                        (t[r] && t[r].constructor === Object
                          ? (e[r] = a.clone(t[r]))
                          : (e[r] = t[r]))
                    return e
                  }
                  return t
                }
                function M(e) {
                  return e.tick || e.tock
                }
                function _(e) {
                  return function () {
                    var t = this.el.sceneEl
                    this.isPlaying &&
                      (e.call(this),
                      (this.isPlaying = !1),
                      this.eventsDetach(),
                      M(this) && t.removeBehavior(this))
                  }
                }
                function T(e) {
                  return function () {
                    var t = this.el.sceneEl,
                      n = this.el.isPlaying && !this.isPlaying
                    this.initialized &&
                      n &&
                      (e.call(this),
                      (this.isPlaying = !0),
                      this.eventsAttach(),
                      M(this) && t.addBehavior(this))
                  }
                }
                function S(e) {
                  return e && e.constructor === Object && !(e instanceof window.HTMLElement)
                }
                function C(e) {
                  return (
                    e &&
                    (e.constructor === Object || e.constructor === Array) &&
                    !(e instanceof window.HTMLElement)
                  )
                }
                t.exports.registerComponent = function (e, t) {
                  var n,
                    r,
                    l,
                    c,
                    d = {}
                  if (
                    (document.currentScript &&
                      document.currentScript !== v &&
                      i.forEach(function (t) {
                        t.hasLoaded ||
                          (document.currentScript.compareDocumentPosition(t) !==
                            Node.DOCUMENT_POSITION_FOLLOWING &&
                            (m(
                              'The component `' +
                                e +
                                '` was registered in a <script> tag after the scene. Component <script> tags in an HTML file should be declared *before* the scene such that the component is available to entities during scene initialization.',
                            ),
                            window.debug && (w[e] = !0)))
                      }),
                    !0 === g.test(e) &&
                      m(
                        'The component name `' +
                          e +
                          '` contains uppercase characters, but HTML will ignore the capitalization of attribute names. Change the name to be lowercase: `' +
                          e.toLowerCase() +
                          '`',
                      ),
                    -1 !== e.indexOf('__'))
                  )
                    throw new Error(
                      'The component name `' +
                        e +
                        '` is not allowed. The sequence __ (double underscore) is reserved to specify an id for multiple components of the same type',
                    )
                  if (
                    (Object.keys(t).forEach(function (e) {
                      d[e] = { value: t[e], writable: !0 }
                    }),
                    s[e])
                  )
                    throw new Error(
                      'The component `' +
                        e +
                        '` has been already registered. Check that you are not loading two versions of the same component or two different components of the same name.',
                    )
                  if (
                    (((n = function (e, t, n) {
                      b.call(this, e, t, n)
                    }).prototype = Object.create(b.prototype, d)),
                    (n.prototype.name = e),
                    (n.prototype.isPositionRotationScale =
                      'position' === e || 'rotation' === e || 'scale' === e),
                    (n.prototype.constructor = n),
                    (n.prototype.system = o && o.systems[e]),
                    (n.prototype.play = T(n.prototype.play)),
                    (n.prototype.pause = _(n.prototype.pause)),
                    (l = a.extend(u(n.prototype.schema, n.prototype.name))),
                    !(c = h(n.prototype.schema)))
                  )
                    for (r in ((n.prototype.schemaChangeKeys = []), l))
                      l[r].schemaChange && n.prototype.schemaChangeKeys.push(r)
                  return (
                    (y[e] = a.objectPool.createPool()),
                    (s[e] = {
                      Component: n,
                      dependencies: n.prototype.dependencies,
                      isSingleProp: c,
                      multiple: n.prototype.multiple,
                      name: e,
                      parse: n.prototype.parse,
                      parseAttrValueForCache: n.prototype.parseAttrValueForCache,
                      schema: l,
                      stringify: n.prototype.stringify,
                      type: n.prototype.type,
                    }),
                    n
                  )
                }
              },
              { '../utils/': 205, './scene/scenes': 138, './schema': 140, './system': 142 },
            ],
            132: [
              function (e, t, n) {
                var r = e('./schema').process,
                  i = (t.exports.geometries = {}),
                  o = (t.exports.geometryNames = []),
                  a = e('../lib/three'),
                  s = (t.exports.Geometry = function () {})
                ;(s.prototype = {
                  schema: {},
                  init: function (e) {
                    return (this.geometry = new a.BufferGeometry()), this.geometry
                  },
                  update: function (e) {},
                }),
                  (t.exports.registerGeometry = function (e, t) {
                    var n,
                      a = {}
                    if (
                      (Object.keys(t).forEach(function (e) {
                        a[e] = { value: t[e], writable: !0 }
                      }),
                      i[e])
                    )
                      throw new Error('The geometry `' + e + '` has been already registered')
                    return (
                      ((n = function () {
                        s.call(this)
                      }).prototype = Object.create(s.prototype, a)),
                      (n.prototype.name = e),
                      (n.prototype.constructor = n),
                      (i[e] = { Geometry: n, schema: r(n.prototype.schema) }),
                      o.push(e),
                      n
                    )
                  })
              },
              { '../lib/three': 179, './schema': 140 },
            ],
            133: [
              function (e, t, n) {
                var r = e('../utils/coordinates'),
                  i = e('debug'),
                  o = i('core:propertyTypes:warn'),
                  a = i('core:propertyTypes:warn'),
                  s = (t.exports.propertyTypes = {}),
                  l = /[,> .[\]:]/,
                  c = /\url\((.+)\)/
                function u(e, t, n, r) {
                  'type' in s
                    ? o('Property type ' + e + ' is already registered.')
                    : (s[e] = { default: t, parse: n || f, stringify: r || m })
                }
                function h(e) {
                  return Array.isArray(e)
                    ? e
                    : e && 'string' === typeof e
                    ? e.split(',').map(t)
                    : []
                  function t(e) {
                    return e.trim()
                  }
                }
                function d(e) {
                  return e.join(', ')
                }
                function p(e) {
                  var t, n
                  return 'string' !== typeof e
                    ? e
                    : (n = e.match(c))
                    ? n[1]
                    : '#' === e.charAt(0)
                    ? (t = document.getElementById(e.substring(1)))
                      ? 'CANVAS' === t.tagName || 'VIDEO' === t.tagName || 'IMG' === t.tagName
                        ? t
                        : t.getAttribute('src')
                      : void a('"' + e + '" asset not found.')
                    : e
                }
                function f(e) {
                  return e
                }
                function m(e) {
                  return null === e ? 'null' : e.toString()
                }
                function v(e) {
                  return 'false' !== e && !1 !== e
                }
                function g(e) {
                  return parseInt(e, 10)
                }
                function y(e) {
                  return parseFloat(e, 10)
                }
                function b(e) {
                  return e
                    ? 'string' !== typeof e
                      ? e
                      : '#' !== e[0] || l.test(e)
                      ? document.querySelector(e)
                      : document.getElementById(e.substring(1))
                    : null
                }
                function A(e) {
                  return e
                    ? 'string' !== typeof e
                      ? e
                      : Array.prototype.slice.call(document.querySelectorAll(e), 0)
                    : null
                }
                function w(e) {
                  return e.getAttribute ? '#' + e.getAttribute('id') : m(e)
                }
                function x(e) {
                  return e instanceof Array
                    ? e
                        .map(function (e) {
                          return '#' + e.getAttribute('id')
                        })
                        .join(', ')
                    : m(e)
                }
                function E(e) {
                  return a('`src` property type is deprecated. Use `asset` instead.'), p(e)
                }
                function M(e) {
                  return r.parse(e, this.default)
                }
                function _(e, t) {
                  return (
                    ('audio' !== e || 'string' === typeof t) &&
                    !('array' === e && !Array.isArray(t)) &&
                    ('asset' !== e || 'string' === typeof t) &&
                    ('boolean' !== e || 'boolean' === typeof t) &&
                    ('color' !== e || 'string' === typeof t) &&
                    ('int' !== e || 'number' === typeof t) &&
                    ('number' !== e || 'number' === typeof t) &&
                    ('map' !== e || 'string' === typeof t) &&
                    ('model' !== e || 'string' === typeof t) &&
                    ('selector' !== e || 'string' === typeof t || null === t) &&
                    ('selectorAll' !== e || 'string' === typeof t || null === t) &&
                    ('src' !== e || 'string' === typeof t) &&
                    ('string' !== e || 'string' === typeof t) &&
                    ('time' !== e || 'number' === typeof t) &&
                    ('vec2' === e ? T(t, 2) : 'vec3' === e ? T(t, 3) : 'vec4' !== e || T(t, 4))
                  )
                }
                function T(e, t) {
                  if (null === e) return !0
                  if ('object' !== typeof e) return !1
                  if (Object.keys(e).length !== t) return !1
                  var n = e.x,
                    r = e.y,
                    i = e.z,
                    o = e.w
                  return (
                    'number' === typeof n &&
                    'number' === typeof r &&
                    !(t > 2 && 'number' !== typeof i) &&
                    !(t > 3 && 'number' !== typeof o)
                  )
                }
                u('audio', '', p),
                  u('array', [], h, d),
                  u('asset', '', p),
                  u('boolean', !1, v),
                  u('color', '#FFF', f, m),
                  u('int', 0, g),
                  u('number', 0, y),
                  u('map', '', p),
                  u('model', '', p),
                  u('selector', null, b, w),
                  u('selectorAll', null, A, x),
                  u('src', '', E),
                  u('string', '', f, m),
                  u('time', 0, g),
                  u('vec2', { x: 0, y: 0 }, M, r.stringify),
                  u('vec3', { x: 0, y: 0, z: 0 }, M, r.stringify),
                  u('vec4', { x: 0, y: 0, z: 0, w: 1 }, M, r.stringify),
                  (t.exports.registerPropertyType = u),
                  (t.exports.isValidDefaultValue = _),
                  (t.exports.isValidDefaultCoordinate = T)
              },
              { '../utils/coordinates': 200, debug: 8 },
            ],
            134: [
              function (e, t, n) {
                var r = e('./metaTags').inject,
                  i = e('./wakelock'),
                  o = e('./loadingScreen'),
                  a = e('../a-register-element'),
                  s = e('./scenes'),
                  l = e('../system').systems,
                  c = e('../../lib/three'),
                  u = e('../../utils/'),
                  h = e('../a-entity'),
                  d = e('../a-node'),
                  p = e('./postMessage'),
                  f = u.bind,
                  m = u.device.isIOS(),
                  v = u.device.isMobile(),
                  g = u.device.isWebXRAvailable,
                  y = a.registerElement,
                  b = u.debug('core:a-scene:warn')
                function A(e, t, n, r) {
                  return e.parentElement
                    ? t
                      ? { height: e.parentElement.offsetHeight, width: e.parentElement.offsetWidth }
                      : w(n, r)
                    : { height: 0, width: 0 }
                }
                function w(e, t) {
                  var n,
                    r,
                    i = window.devicePixelRatio
                  return (
                    (r = { height: document.body.offsetHeight, width: document.body.offsetWidth }),
                    !e ||
                      t ||
                      (-1 === e.width && -1 === e.height) ||
                      (r.width * i < e.width && r.height * i < e.height) ||
                      ((n = r.width / r.height),
                      r.width * i > e.width &&
                        -1 !== e.width &&
                        ((r.width = Math.round(e.width / i)),
                        (r.height = Math.round(e.width / n / i))),
                      r.height * i > e.height &&
                        -1 !== e.height &&
                        ((r.height = Math.round(e.height / i)),
                        (r.width = Math.round((e.height * n) / i)))),
                    r
                  )
                }
                function x(e) {
                  ;(
                    e.requestFullscreen ||
                    e.webkitRequestFullscreen ||
                    e.mozRequestFullScreen ||
                    e.msRequestFullscreen
                  ).apply(e, [{ navigationUI: 'hide' }])
                }
                function E() {
                  ;(document.fullscreenElement ||
                    document.webkitFullscreenElement ||
                    document.mozFullScreenElement) &&
                    (document.exitFullscreen
                      ? document.exitFullscreen()
                      : document.mozCancelFullScreen
                      ? document.mozCancelFullScreen()
                      : document.webkitExitFullscreen && document.webkitExitFullscreen())
                }
                function M(e) {
                  var t
                  function n() {
                    document.fullscreenElement ||
                      document.mozFullScreenElement ||
                      document.webkitFullscreenElement ||
                      e.exitVR(),
                      document.activeElement.blur(),
                      document.body.focus()
                  }
                  ;(t = document.createElement('canvas')).classList.add('a-canvas'),
                    (t.dataset.aframeCanvas = !0),
                    e.appendChild(t),
                    document.addEventListener('fullscreenchange', n),
                    document.addEventListener('mozfullscreenchange', n),
                    document.addEventListener('webkitfullscreenchange', n),
                    document.addEventListener('MSFullscreenChange', n),
                    t.addEventListener('touchmove', function (e) {
                      e.preventDefault()
                    }),
                    (e.canvas = t),
                    e.emit('render-target-loaded', { target: t }),
                    setTimeout(f(e.resize, e), 0)
                }
                m && e('../../utils/ios-orientationchange-blank-bug'),
                  (t.exports.AScene = y('a-scene', {
                    prototype: Object.create(h.prototype, {
                      createdCallback: {
                        value: function () {
                          ;(this.clock = new c.Clock()),
                            (this.isIOS = m),
                            (this.isMobile = v),
                            (this.hasWebXR = g),
                            (this.isAR = !1),
                            (this.isScene = !0),
                            (this.object3D = new c.Scene())
                          var e = this
                          ;(this.object3D.onAfterRender = function (t, n, r) {
                            e.isPlaying && e.tock(e.time, e.delta, r)
                          }),
                            (this.resize = f(this.resize, this)),
                            (this.render = f(this.render, this)),
                            (this.systems = {}),
                            (this.systemNames = []),
                            (this.time = this.delta = 0),
                            (this.behaviors = { tick: [], tock: [] }),
                            (this.hasLoaded = !1),
                            (this.isPlaying = !1),
                            (this.originalHTML = this.innerHTML),
                            this.setAttribute('inspector', ''),
                            this.setAttribute('keyboard-shortcuts', ''),
                            this.setAttribute('screenshot', ''),
                            this.setAttribute('vr-mode-ui', ''),
                            this.setAttribute('device-orientation-permission-ui', '')
                        },
                      },
                      addFullScreenStyles: {
                        value: function () {
                          document.documentElement.classList.add('a-fullscreen')
                        },
                      },
                      removeFullScreenStyles: {
                        value: function () {
                          document.documentElement.classList.remove('a-fullscreen')
                        },
                      },
                      attachedCallback: {
                        value: function () {
                          var e = this,
                            t = this.hasAttribute('embedded')
                          M(this),
                            this.setupRenderer(),
                            o.setup(this, A),
                            this.resize(),
                            t || this.addFullScreenStyles(),
                            p(this),
                            r(this),
                            i(this),
                            (this.onVRPresentChangeBound = f(this.onVRPresentChange, this)),
                            window.addEventListener(
                              'vrdisplaypresentchange',
                              this.onVRPresentChangeBound,
                            ),
                            (this.enterVRBound = function () {
                              e.enterVR()
                            }),
                            (this.exitVRBound = function () {
                              e.exitVR()
                            }),
                            (this.exitVRTrueBound = function () {
                              e.exitVR(!0)
                            }),
                            (this.pointerRestrictedBound = function () {
                              e.pointerRestricted()
                            }),
                            (this.pointerUnrestrictedBound = function () {
                              e.pointerUnrestricted()
                            }),
                            g ||
                              (window.addEventListener('vrdisplaydeactivate', this.exitVRBound),
                              window.addEventListener('vrdisplaydisconnect', this.exitVRTrueBound),
                              window.addEventListener(
                                'vrdisplaypointerrestricted',
                                this.pointerRestrictedBound,
                              ),
                              window.addEventListener(
                                'vrdisplaypointerunrestricted',
                                this.pointerUnrestrictedBound,
                              )),
                            window.addEventListener('sessionend', this.resize),
                            this.addEventListener('cameraready', function () {
                              e.attachedCallbackPostCamera()
                            }),
                            this.initSystems(),
                            this.hasWebXR &&
                              navigator.xr &&
                              navigator.xr.addEventListener &&
                              navigator.xr.addEventListener('sessiongranted', function () {
                                e.enterVR()
                              })
                        },
                      },
                      attachedCallbackPostCamera: {
                        value: function () {
                          var e,
                            t = this
                          window.addEventListener('load', e),
                            window.addEventListener('resize', function () {
                              t.isIOS ? setTimeout(t.resize, 100) : t.resize()
                            }),
                            this.play(),
                            s.push(this)
                        },
                        writable: window.debug,
                      },
                      initSystems: {
                        value: function () {
                          var e
                          for (e in (this.initSystem('camera'), l))
                            'camera' !== e && this.initSystem(e)
                        },
                      },
                      initSystem: {
                        value: function (e) {
                          this.systems[e] ||
                            ((this.systems[e] = new l[e](this)), this.systemNames.push(e))
                        },
                      },
                      detachedCallback: {
                        value: function () {
                          var e = s.indexOf(this)
                          s.splice(e, 1),
                            window.removeEventListener(
                              'vrdisplaypresentchange',
                              this.onVRPresentChangeBound,
                            ),
                            window.removeEventListener('vrdisplayactivate', this.enterVRBound),
                            window.removeEventListener('vrdisplaydeactivate', this.exitVRBound),
                            window.removeEventListener('vrdisplayconnect', this.enterVRBound),
                            window.removeEventListener('vrdisplaydisconnect', this.exitVRTrueBound),
                            window.removeEventListener(
                              'vrdisplaypointerrestricted',
                              this.pointerRestrictedBound,
                            ),
                            window.removeEventListener(
                              'vrdisplaypointerunrestricted',
                              this.pointerUnrestrictedBound,
                            ),
                            window.removeEventListener('sessionend', this.resize),
                            this.renderer.xr.dispose()
                        },
                      },
                      addBehavior: {
                        value: function (e) {
                          var t,
                            n,
                            r = this.behaviors
                          for (n in r)
                            e[n] && -1 === (t = this.behaviors[n]).indexOf(e) && t.push(e)
                        },
                      },
                      getPointerLockElement: {
                        value: function () {
                          return document.pointerLockElement
                        },
                        writable: window.debug,
                      },
                      checkHeadsetConnected: {
                        value: u.device.checkHeadsetConnected,
                        writable: window.debug,
                      },
                      enterAR: {
                        value: function () {
                          var e
                          if (!this.hasWebXR)
                            throw (
                              ((e = 'Failed to enter AR mode, WebXR not supported.'), new Error(e))
                            )
                          if (!u.device.checkARSupport())
                            throw (
                              ((e =
                                'Failed to enter AR, WebXR immersive-ar mode not supported in your browser or device.'),
                              new Error(e))
                            )
                          return this.enterVR(!0)
                        },
                      },
                      enterVR: {
                        value: function (e) {
                          var t,
                            n,
                            r = this,
                            i = r.renderer.xr
                          if (this.is('vr-mode')) return Promise.resolve('Already in VR.')
                          if (this.checkHeadsetConnected() || this.isMobile) {
                            if (((i.enabled = !0), this.hasWebXR)) {
                              this.xrSession &&
                                this.xrSession.removeEventListener('end', this.exitVRBound)
                              var o = this.sceneEl.systems.webxr.sessionReferenceSpaceType
                              i.setReferenceSpaceType(o)
                              var a = e ? 'immersive-ar' : 'immersive-vr'
                              return (
                                (n = this.sceneEl.systems.webxr.sessionConfiguration),
                                new Promise(function (e, t) {
                                  navigator.xr.requestSession(a, n).then(
                                    function (t) {
                                      ;(r.xrSession = t),
                                        (i.layersEnabled =
                                          -1 !== n.requiredFeatures.indexOf('layers')),
                                        i.setSession(t),
                                        t.addEventListener('end', r.exitVRBound),
                                        c(e)
                                    },
                                    function (e) {
                                      throw new Error(
                                        'Failed to enter ' +
                                          ('immersive-ar' === a ? 'AR' : 'VR') +
                                          ' mode (`requestSession`) ' +
                                          e,
                                      )
                                    },
                                  )
                                })
                              )
                            }
                            if (
                              ((t = u.device.getVRDisplay()),
                              i.setDevice(t),
                              t.isPresenting && !window.hasNativeWebVRImplementation)
                            )
                              return c(), Promise.resolve()
                            var s = this.getAttribute('renderer'),
                              l = {
                                highRefreshRate: s.highRefreshRate,
                                foveationLevel: s.foveationLevel,
                              }
                            return t
                              .requestPresent([{ source: this.canvas, attributes: l }])
                              .then(c, h)
                          }
                          return c(), Promise.resolve()
                          function c(t) {
                            var n
                            window.hasNativeWebVRImplementation &&
                              !window.hasNativeWebXRImplementation &&
                              ((n = new CustomEvent('vrdisplaypresentchange', {
                                detail: { display: u.device.getVRDisplay() },
                              })),
                              window.dispatchEvent(n)),
                              e ? r.addState('ar-mode') : r.addState('vr-mode'),
                              r.emit('enter-vr', { target: r }),
                              !g &&
                                r.isMobile &&
                                screen.orientation &&
                                screen.orientation.lock &&
                                screen.orientation.lock('landscape'),
                              r.addFullScreenStyles(),
                              r.isMobile || r.checkHeadsetConnected() || x(r.canvas),
                              r.renderer.setAnimationLoop(r.render),
                              r.resize(),
                              t && t()
                          }
                          function h(e) {
                            throw (
                              (r.removeState('vr-mode'),
                              e && e.message
                                ? new Error(
                                    'Failed to enter VR mode (`requestPresent`): ' + e.message,
                                  )
                                : new Error('Failed to enter VR mode (`requestPresent`).'))
                            )
                          }
                        },
                        writable: !0,
                      },
                      exitVR: {
                        value: function () {
                          var e,
                            t = this,
                            n = this.renderer.xr
                          if (!this.is('vr-mode') && !this.is('ar-mode'))
                            return Promise.resolve('Not in immersive mode.')
                          if (this.checkHeadsetConnected() || this.isMobile) {
                            if (((n.enabled = !1), (e = u.device.getVRDisplay()), this.hasWebXR))
                              this.xrSession.removeEventListener('end', this.exitVRBound),
                                this.xrSession.end().then(
                                  function () {},
                                  function () {},
                                ),
                                (this.xrSession = void 0),
                                n.setSession(null)
                            else if (e.isPresenting) return e.exitPresent().then(r, i)
                          } else E()
                          return r(), Promise.resolve()
                          function r() {
                            t.removeState('vr-mode'),
                              t.removeState('ar-mode'),
                              t.isMobile &&
                                screen.orientation &&
                                screen.orientation.unlock &&
                                screen.orientation.unlock(),
                              t.hasAttribute('embedded') && t.removeFullScreenStyles(),
                              t.resize(),
                              t.isIOS && u.forceCanvasResizeSafariMobile(t.canvas),
                              t.renderer.setPixelRatio(window.devicePixelRatio),
                              t.emit('exit-vr', { target: t })
                          }
                          function i(e) {
                            throw e && e.message
                              ? new Error('Failed to exit VR mode (`exitPresent`): ' + e.message)
                              : new Error('Failed to exit VR mode (`exitPresent`).')
                          }
                        },
                        writable: !0,
                      },
                      pointerRestricted: {
                        value: function () {
                          if (this.canvas) {
                            var e = this.getPointerLockElement()
                            e &&
                              e !== this.canvas &&
                              document.exitPointerLock &&
                              document.exitPointerLock(),
                              this.canvas.requestPointerLock && this.canvas.requestPointerLock()
                          }
                        },
                      },
                      pointerUnrestricted: {
                        value: function () {
                          var e = this.getPointerLockElement()
                          e &&
                            e === this.canvas &&
                            document.exitPointerLock &&
                            document.exitPointerLock()
                        },
                      },
                      onVRPresentChange: {
                        value: function (e) {
                          var t = e.display || e.detail.display
                          t && t.isPresenting ? this.enterVR() : this.exitVR()
                        },
                      },
                      getAttribute: {
                        value: function (e) {
                          var t = this.systems[e]
                          return t ? t.data : h.prototype.getAttribute.call(this, e)
                        },
                      },
                      getComputedAttribute: {
                        value: function (e) {
                          b('`getComputedAttribute` is deprecated. Use `getAttribute` instead.'),
                            this.getAttribute(e)
                        },
                      },
                      getDOMAttribute: {
                        value: function (e) {
                          var t = this.systems[e]
                          return t ? t.data : h.prototype.getDOMAttribute.call(this, e)
                        },
                      },
                      setAttribute: {
                        value: function (e, t, n) {
                          var r = this.systems[e]
                          if (r)
                            return (
                              d.prototype.setAttribute.call(this, e, t), void r.updateProperties(t)
                            )
                          h.prototype.setAttribute.call(this, e, t, n)
                        },
                      },
                      removeBehavior: {
                        value: function (e) {
                          var t,
                            n,
                            r,
                            i = this.behaviors
                          for (n in i)
                            e[n] &&
                              -1 !== (r = (t = this.behaviors[n]).indexOf(e)) &&
                              t.splice(r, 1)
                        },
                      },
                      resize: {
                        value: function () {
                          var e,
                            t,
                            n = this.camera,
                            r = this.canvas,
                            i = this.renderer.xr.isPresenting
                          ;(e = this.renderer.xr.enabled && i),
                            !n ||
                              !r ||
                              (this.is('vr-mode') && (this.isMobile || e)) ||
                              ((t = A(
                                r,
                                this.getAttribute('embedded') && !this.is('vr-mode'),
                                this.maxCanvasSize,
                                this.is('vr-mode'),
                              )),
                              (n.aspect = t.width / t.height),
                              n.updateProjectionMatrix(),
                              this.renderer.setSize(t.width, t.height, !1),
                              this.emit('rendererresize', null, !1))
                        },
                        writable: !0,
                      },
                      setupRenderer: {
                        value: function () {
                          var e,
                            t,
                            n,
                            r,
                            i = this
                          ;(r = {
                            alpha: !0,
                            antialias: !v,
                            canvas: this.canvas,
                            logarithmicDepthBuffer: !1,
                            powerPreference: 'high-performance',
                          }),
                            (this.maxCanvasSize = { height: 1920, width: 1920 }),
                            this.hasAttribute('renderer') &&
                              ((n = this.getAttribute('renderer')),
                              (t = u.styleParser.parse(n)).precision &&
                                (r.precision = t.precision + 'p'),
                              t.antialias &&
                                'auto' !== t.antialias &&
                                (r.antialias = 'true' === t.antialias),
                              t.logarithmicDepthBuffer &&
                                'auto' !== t.logarithmicDepthBuffer &&
                                (r.logarithmicDepthBuffer = 'true' === t.logarithmicDepthBuffer),
                              t.alpha && (r.alpha = 'true' === t.alpha),
                              (this.maxCanvasSize = {
                                width: t.maxCanvasWidth
                                  ? parseInt(t.maxCanvasWidth)
                                  : this.maxCanvasSize.width,
                                height: t.maxCanvasHeight
                                  ? parseInt(t.maxCanvasHeight)
                                  : this.maxCanvasSize.height,
                              })),
                            (e = this.renderer = new c.WebGLRenderer(r)).setPixelRatio(
                              window.devicePixelRatio,
                            ),
                            (e.sortObjects = !1),
                            this.camera && e.xr.setPoseTarget(this.camera.el.object3D),
                            this.addEventListener('camera-set-active', function () {
                              e.xr.setPoseTarget(i.camera.el.object3D)
                            })
                        },
                        writable: window.debug,
                      },
                      play: {
                        value: function () {
                          var e = this,
                            t = this
                          this.renderStarted
                            ? h.prototype.play.call(this)
                            : (this.addEventListener('loaded', function () {
                                var e,
                                  n = this.renderer,
                                  r = this.renderer.xr
                                h.prototype.play.call(this),
                                  t.renderStarted ||
                                    (t.resize(),
                                    t.renderer &&
                                      (window.performance &&
                                        window.performance.mark('render-started'),
                                      o.remove(),
                                      (e = u.device.getVRDisplay()) &&
                                        e.isPresenting &&
                                        (r.setDevice(e), (r.enabled = !0), t.enterVR()),
                                      n.setAnimationLoop(this.render),
                                      (t.renderStarted = !0),
                                      t.emit('renderstart')))
                              }),
                              setTimeout(function () {
                                h.prototype.load.call(e)
                              }))
                        },
                      },
                      updateComponent: {
                        value: function (e) {
                          e in l || h.prototype.updateComponent.apply(this, arguments)
                        },
                      },
                      tick: {
                        value: function (e, t) {
                          var n,
                            r = this.systems
                          for (n = 0; n < this.behaviors.tick.length; n++)
                            this.behaviors.tick[n].el.isPlaying && this.behaviors.tick[n].tick(e, t)
                          for (n = 0; n < this.systemNames.length; n++)
                            r[this.systemNames[n]].tick && r[this.systemNames[n]].tick(e, t)
                        },
                      },
                      tock: {
                        value: function (e, t, n) {
                          var r,
                            i = this.systems
                          for (r = 0; r < this.behaviors.tock.length; r++)
                            this.behaviors.tock[r].el.isPlaying &&
                              this.behaviors.tock[r].tock(e, t, n)
                          for (r = 0; r < this.systemNames.length; r++)
                            i[this.systemNames[r]].tock && i[this.systemNames[r]].tock(e, t, n)
                        },
                      },
                      render: {
                        value: function (e, t) {
                          var n = this.renderer
                          ;(this.frame = t),
                            (this.delta = 1e3 * this.clock.getDelta()),
                            (this.time = 1e3 * this.clock.elapsedTime),
                            this.isPlaying && this.tick(this.time, this.delta)
                          var r = null
                          this.is('ar-mode') &&
                            ((r = this.object3D.background), (this.object3D.background = null)),
                            n.render(this.object3D, this.camera),
                            r && (this.object3D.background = r)
                        },
                        writable: !0,
                      },
                    }),
                  })),
                  (t.exports.setupCanvas = M)
              },
              {
                '../../lib/three': 179,
                '../../utils/': 205,
                '../../utils/ios-orientationchange-blank-bug': 206,
                '../a-entity': 127,
                '../a-node': 129,
                '../a-register-element': 130,
                '../system': 142,
                './loadingScreen': 135,
                './metaTags': 136,
                './postMessage': 137,
                './scenes': 138,
                './wakelock': 139,
              },
            ],
            135: [
              function (e, t, n) {
                var r,
                  i,
                  o,
                  a = e('../../utils/').styleParser,
                  s = 'loading-screen',
                  l = 'a-loader-title'
                function c(e) {
                  var t = r.hasAttribute('embedded'),
                    n = o(r.canvas, t, r.maxCanvasSize, r.is('vr-mode'))
                  ;(e.aspect = n.width / n.height),
                    e.updateProjectionMatrix(),
                    r.renderer.setSize(n.width, n.height, !1)
                }
                function u() {
                  ;((i = document.createElement('div')).className = l),
                    (i.innerHTML = document.title),
                    (i.style.display = 'none'),
                    r.appendChild(i)
                }
                ;(t.exports.setup = function (e, t) {
                  o = t
                  var n,
                    l,
                    h,
                    d,
                    p,
                    f,
                    m,
                    v,
                    g,
                    y,
                    b = (r = e).hasAttribute(s) ? a.parse(r.getAttribute(s)) : void 0,
                    A = (b && b.dotsColor) || 'white',
                    w = (b && b.backgroundColor) || '#24CAFF'
                  ;(void 0 === b || 'true' === b.enabled || void 0 === b.enabled) &&
                    ((n = new THREE.Scene()),
                    (l = new THREE.SphereGeometry(0.2, 36, 18, 0, 2 * Math.PI, 0, Math.PI)),
                    (h = new THREE.MeshBasicMaterial({ color: A })),
                    (d = new THREE.Mesh(l, h)),
                    (p = d.clone()),
                    (f = d.clone()),
                    (m = new THREE.PerspectiveCamera(
                      80,
                      window.innerWidth / window.innerHeight,
                      5e-4,
                      1e4,
                    )),
                    (v = new THREE.Clock()),
                    (g = 0),
                    (y = function () {
                      r.renderer.render(n, m),
                        (g = v.getElapsedTime() % 4),
                        (d.visible = g >= 1),
                        (p.visible = g >= 2),
                        (f.visible = g >= 3)
                    }),
                    (n.background = new THREE.Color(w)),
                    n.add(m),
                    d.position.set(-1, 0, -15),
                    p.position.set(0, 0, -15),
                    f.position.set(1, 0, -15),
                    m.add(d),
                    m.add(p),
                    m.add(f),
                    u(),
                    setTimeout(function () {
                      r.hasLoaded ||
                        (c(m),
                        (i.style.display = 'block'),
                        window.addEventListener('resize', function () {
                          c(m)
                        }),
                        r.renderer.setAnimationLoop(y))
                    }, 200))
                }),
                  (t.exports.remove = function () {
                    window.removeEventListener('resize', c), i && (i.style.display = 'none')
                  })
              },
              { '../../utils/': 205 },
            ],
            136: [
              function (e, t, n) {
                var r = e('../../constants/'),
                  i = e('../../utils').extend,
                  o = (t.exports.MOBILE_HEAD_TAGS = [
                    s({
                      name: 'viewport',
                      content:
                        'width=device-width,initial-scale=1,maximum-scale=1,shrink-to-fit=no,user-scalable=no,minimal-ui,viewport-fit=cover',
                    }),
                    s({ name: 'mobile-web-app-capable', content: 'yes' }),
                    s({ name: 'theme-color', content: 'black' }),
                  ]),
                  a = [
                    s({ name: 'apple-mobile-web-app-capable', content: 'yes' }),
                    s({ name: 'apple-mobile-web-app-status-bar-style', content: 'black' }),
                    l({
                      rel: 'apple-touch-icon',
                      href: 'https://aframe.io/images/aframe-logo-152.png',
                    }),
                  ]
                function s(e) {
                  return {
                    tagName: 'meta',
                    attributes: e,
                    exists: function () {
                      return document.querySelector('meta[name="' + e.name + '"]')
                    },
                  }
                }
                function l(e) {
                  return {
                    tagName: 'link',
                    attributes: e,
                    exists: function () {
                      return document.querySelector('link[rel="' + e.rel + '"]')
                    },
                  }
                }
                function c(e) {
                  if (e && e.tagName) {
                    var t = document.createElement(e.tagName)
                    return t.setAttribute(r.AFRAME_INJECTED, ''), i(t, e.attributes)
                  }
                }
                t.exports.inject = function (e) {
                  var t,
                    n = document.head,
                    r = n.querySelector('script'),
                    i = []
                  return o.forEach(s), e.isIOS && a.forEach(s), i
                  function s(e) {
                    e &&
                      !e.exists() &&
                      (t = c(e)) &&
                      (r ? r.parentNode.insertBefore(t, r) : n.appendChild(t), i.push(t))
                  }
                }
              },
              { '../../constants/': 123, '../../utils': 205 },
            ],
            137: [
              function (e, t, n) {
                var r = e('../../utils/bind'),
                  i = e('../../utils/').isIframed
                function o(e) {
                  var t = this
                  if (e.data)
                    switch (e.data.type) {
                      case 'vr':
                        switch (e.data.data) {
                          case 'enter':
                            t.enterVR()
                            break
                          case 'exit':
                            t.exitVR()
                        }
                    }
                }
                t.exports = function (e) {
                  i() && window.addEventListener('message', r(o, e))
                }
              },
              { '../../utils/': 205, '../../utils/bind': 199 },
            ],
            138: [
              function (e, t, n) {
                t.exports = []
              },
              {},
            ],
            139: [
              function (e, t, n) {
                var r = e('../../../vendor/wakelock/wakelock')
                t.exports = function (e) {
                  if (e.isMobile) {
                    var t = (e.wakelock = new r())
                    e.addEventListener('enter-vr', function () {
                      t.request()
                    }),
                      e.addEventListener('exit-vr', function () {
                        t.release()
                      })
                  }
                }
              },
              { '../../../vendor/wakelock/wakelock': 220 },
            ],
            140: [
              function (e, t, n) {
                var r = e('../utils/'),
                  i = e('./propertyTypes'),
                  o = r.debug,
                  a = i.isValidDefaultValue,
                  s = i.propertyTypes,
                  l = o('core:schema:warn')
                function c(e) {
                  return 'type' in e ? 'string' === typeof e.type : 'default' in e
                }
                function u(e, t) {
                  var n,
                    r,
                    i = e.default,
                    o = e.type
                  return (
                    e.type
                      ? 'bool' === e.type
                        ? (o = 'boolean')
                        : 'float' === e.type && (o = 'number')
                      : (o =
                          void 0 === i || ('boolean' !== typeof i && 'number' !== typeof i)
                            ? Array.isArray(i)
                              ? 'array'
                              : 'string'
                            : typeof i),
                    (r = s[o]) || l('Unknown property type for component `' + t + '`: ' + o),
                    (n = !!e.parse),
                    (e.parse = e.parse || r.parse),
                    (e.stringify = e.stringify || r.stringify),
                    (e.type = o),
                    'default' in e
                      ? n ||
                        a(o, i) ||
                        l(
                          'Default value `' +
                            i +
                            '` does not match type `' +
                            o +
                            '` in component `' +
                            t +
                            '`',
                        )
                      : (e.default = r.default),
                    e
                  )
                }
                function h(e, t) {
                  return (
                    (void 0 !== e && null !== e && '' !== e) ||
                      ((e = t.default), Array.isArray(e) && (e = e.slice())),
                    t.parse(e, t.default)
                  )
                }
                function d(e, t) {
                  return 'object' !== typeof e
                    ? e
                    : t && null !== e
                    ? t.stringify(e)
                    : JSON.stringify(e)
                }
                ;(t.exports.isSingleProperty = c),
                  (t.exports.process = function (e, t) {
                    var n
                    if (c(e)) return u(e, t)
                    for (n in e) e[n] = u(e[n], t)
                    return e
                  }),
                  (t.exports.processPropertyDefinition = u),
                  (t.exports.parseProperties = (function () {
                    var e = []
                    return function (t, n, r, i, o) {
                      var a, s, c, u
                      for (s in ((e.length = 0), r ? t : n)) (r && void 0 === t[s]) || e.push(s)
                      if (null === t || 'object' !== typeof t) return t
                      for (s in t)
                        void 0 === t[s] ||
                          n[s] ||
                          o ||
                          l('Unknown property `' + s + '` for component/system `' + i + '`.')
                      for (a = 0; a < e.length; a++) {
                        if (((c = n[(s = e[a])]), (u = t[s]), !n[s])) return
                        t[s] = h(u, c)
                      }
                      return t
                    }
                  })()),
                  (t.exports.parseProperty = h),
                  (t.exports.stringifyProperties = function (e, t) {
                    var n,
                      r,
                      i,
                      o,
                      a = {}
                    for (n in e)
                      (r = t[n]),
                        'object' === typeof (o = i = e[n]) &&
                          ((o = d(i, r)), r || l('Unknown component property: ' + n)),
                        (a[n] = o)
                    return a
                  }),
                  (t.exports.stringifyProperty = d)
              },
              { '../utils/': 205, './propertyTypes': 133 },
            ],
            141: [
              function (e, t, n) {
                var r = e('./schema').process,
                  i = (t.exports.shaders = {}),
                  o = (t.exports.shaderNames = []),
                  a = e('../lib/three'),
                  s = e('../utils'),
                  l = {
                    array: 'v3',
                    color: 'v3',
                    int: 'i',
                    number: 'f',
                    map: 't',
                    time: 'f',
                    vec2: 'v2',
                    vec3: 'v3',
                    vec4: 'v4',
                  },
                  c = (t.exports.Shader = function () {})
                ;(c.prototype = {
                  schema: {},
                  vertexShader:
                    'void main() {gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}',
                  fragmentShader: 'void main() {gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);}',
                  init: function (e) {
                    return (
                      (this.attributes = this.initVariables(e, 'attribute')),
                      (this.uniforms = this.initVariables(e, 'uniform')),
                      (this.material = new (this.raw ? a.RawShaderMaterial : a.ShaderMaterial)({
                        uniforms: this.uniforms,
                        vertexShader: this.vertexShader,
                        fragmentShader: this.fragmentShader,
                      })),
                      this.material
                    )
                  },
                  initVariables: function (e, t) {
                    var n,
                      r,
                      i = this.schema,
                      o = {}
                    for (n in i)
                      i[n].is === t && ((r = l[i[n].type]), (o[n] = { type: r, value: void 0 }))
                    return o
                  },
                  update: function (e) {
                    this.updateVariables(e, 'attribute'), this.updateVariables(e, 'uniform')
                  },
                  updateVariables: function (e, t) {
                    var n,
                      r,
                      i,
                      o = this.schema
                    for (n in ((i = 'uniform' === t ? this.uniforms : this.attributes), e))
                      if (o[n] && o[n].is === t)
                        if ('map' !== o[n].type)
                          (i[n].value = this.parseValue(o[n].type, e[n])), (i[n].needsUpdate = !0)
                        else {
                          if (!i[n] || i[n].value === e[n]) continue
                          ;(r = '_texture_' + n),
                            this.setMapOnTextureLoad(i, n, r),
                            s.material.updateMapMaterialFromData(r, n, this, e)
                        }
                  },
                  parseValue: function (e, t) {
                    var n
                    switch (e) {
                      case 'vec2':
                        return new a.Vector2(t.x, t.y)
                      case 'vec3':
                        return new a.Vector3(t.x, t.y, t.z)
                      case 'vec4':
                        return new a.Vector4(t.x, t.y, t.z, t.w)
                      case 'color':
                        return (n = new a.Color(t)), new a.Vector3(n.r, n.g, n.b)
                      case 'map':
                        return a.ImageUtils.loadTexture(t)
                      default:
                        return t
                    }
                  },
                  setMapOnTextureLoad: function (e, t, n) {
                    var r = this
                    this.el.addEventListener('materialtextureloaded', function () {
                      ;(e[t].value = r.material[n]), (e[t].needsUpdate = !0)
                    })
                  },
                }),
                  (t.exports.registerShader = function (e, t) {
                    var n,
                      a = {}
                    if (
                      (Object.keys(t).forEach(function (e) {
                        a[e] = { value: t[e], writable: !0 }
                      }),
                      i[e])
                    )
                      throw new Error('The shader ' + e + ' has been already registered')
                    return (
                      ((n = function () {
                        c.call(this)
                      }).prototype = Object.create(c.prototype, a)),
                      (n.prototype.name = e),
                      (n.prototype.constructor = n),
                      (i[e] = { Shader: n, schema: r(n.prototype.schema) }),
                      o.push(e),
                      n
                    )
                  })
              },
              { '../lib/three': 179, '../utils': 205, './schema': 140 },
            ],
            142: [
              function (e, t, n) {
                var r = e('./component'),
                  i = e('./schema'),
                  o = e('../utils/'),
                  a = i.parseProperties,
                  s = i.parseProperty,
                  l = i.process,
                  c = i.isSingleProperty,
                  u = o.styleParser,
                  h = (t.exports.systems = {}),
                  d = (t.exports.System = function (e) {
                    var t = r && r.components[this.name]
                    ;(this.el = e),
                      (this.sceneEl = e),
                      t && (t.Component.prototype.system = this),
                      this.buildData(),
                      this.init(),
                      this.update({})
                  })
                ;(d.prototype = {
                  schema: {},
                  init: function () {},
                  update: function (e) {},
                  updateProperties: function (e) {
                    var t = this.data
                    Object.keys(i).length && (this.buildData(e), this.update(t))
                  },
                  buildData: function (e) {
                    var t = this.schema
                    Object.keys(t).length &&
                      ((e =
                        e ||
                        window.HTMLElement.prototype.getAttribute.call(this.sceneEl, this.name)),
                      c(t) ? (this.data = s(e, t)) : (this.data = a(u.parse(e) || {}, t)))
                  },
                  tick: void 0,
                  tock: void 0,
                  play: function () {},
                  pause: function () {},
                }),
                  (t.exports.registerSystem = function (e, t) {
                    var n,
                      r,
                      i = {},
                      a = o.findAllScenes(document)
                    if (
                      (Object.keys(t).forEach(function (e) {
                        i[e] = { value: t[e], writable: !0 }
                      }),
                      h[e])
                    )
                      throw new Error(
                        'The system `' +
                          e +
                          '` has been already registered. Check that you are not loading two versions of the same system or two different systems of the same name.',
                      )
                    for (
                      (r = function (e) {
                        d.call(this, e)
                      }).prototype = Object.create(d.prototype, i),
                        r.prototype.name = e,
                        r.prototype.constructor = r,
                        r.prototype.schema = o.extend(l(r.prototype.schema)),
                        h[e] = r,
                        n = 0;
                      n < a.length;
                      n++
                    )
                      a[n].initSystem(e)
                  })
              },
              { '../utils/': 205, './component': 131, './schema': 140 },
            ],
            143: [
              function (e, t, n) {
                e('./pivot')
              },
              { './pivot': 144 },
            ],
            144: [
              function (e, t, n) {
                var r = e('../../core/component').registerComponent,
                  i = e('../../lib/three'),
                  o = new i.Vector3(),
                  a = new i.Vector3()
                r('pivot', {
                  dependencies: ['position'],
                  schema: { type: 'vec3' },
                  init: function () {
                    var e = this.data,
                      t = this.el,
                      n = t.object3D.parent,
                      r = t.object3D,
                      s = new i.Group()
                    o.copy(r.position),
                      a.copy(r.rotation),
                      n.remove(r),
                      s.add(r),
                      n.add(s),
                      (t.object3D = s),
                      r.position.set(-1 * e.x, -1 * e.y, -1 * e.z),
                      s.position.set(e.x + o.x, e.y + o.y, e.z + o.z),
                      s.rotation.copy(r.rotation),
                      r.rotation.set(0, 0, 0)
                  },
                })
              },
              { '../../core/component': 131, '../../lib/three': 179 },
            ],
            145: [
              function (e, t, n) {
                var r = e('../../core/component').components,
                  i = e('../../core/shader').shaders,
                  o = e('../../utils/'),
                  a = {}
                function s(e) {
                  var t = e.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
                  'fog' === e && (t = 'material-fog'),
                    'visible' === e && (t = 'material-visible'),
                    (a[t] = 'material.' + e)
                }
                Object.keys(r.material.schema).forEach(s),
                  Object.keys(i.standard.schema).forEach(s),
                  (t.exports = function () {
                    return { defaultComponents: { material: {} }, mappings: o.extend({}, a) }
                  })
              },
              { '../../core/component': 131, '../../core/shader': 141, '../../utils/': 205 },
            ],
            146: [
              function (e, t, n) {
                e('./primitives/a-camera'),
                  e('./primitives/a-cursor'),
                  e('./primitives/a-curvedimage'),
                  e('./primitives/a-gltf-model'),
                  e('./primitives/a-image'),
                  e('./primitives/a-light'),
                  e('./primitives/a-link'),
                  e('./primitives/a-obj-model'),
                  e('./primitives/a-sky'),
                  e('./primitives/a-sound'),
                  e('./primitives/a-text'),
                  e('./primitives/a-video'),
                  e('./primitives/a-videosphere'),
                  e('./primitives/meshPrimitives')
              },
              {
                './primitives/a-camera': 148,
                './primitives/a-cursor': 149,
                './primitives/a-curvedimage': 150,
                './primitives/a-gltf-model': 151,
                './primitives/a-image': 152,
                './primitives/a-light': 153,
                './primitives/a-link': 154,
                './primitives/a-obj-model': 155,
                './primitives/a-sky': 156,
                './primitives/a-sound': 157,
                './primitives/a-text': 158,
                './primitives/a-video': 159,
                './primitives/a-videosphere': 160,
                './primitives/meshPrimitives': 161,
              },
            ],
            147: [
              function (e, t, n) {
                var r = e('../../core/a-entity'),
                  i = e('../../core/component').components,
                  o = e('../../core/a-register-element').registerElement,
                  a = e('../../utils/'),
                  s = a.debug,
                  l = a.entity.setComponentProperty,
                  c = s('extras:primitives:debug'),
                  u = s('extras:primitives:warn'),
                  h = (t.exports.primitives = {})
                function d(e, t) {
                  var n = i[e].schema
                  Object.keys(n).map(function (n) {
                    var r = n.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
                    void 0 !== t[r] && (r = e + '-' + n), (t[r] = e + '.' + n)
                  })
                }
                function p(e, n, r) {
                  ;(r = r || {}),
                    Object.keys(n).map(function (e) {
                      d(e, r)
                    }),
                    t.exports.registerPrimitive(
                      e,
                      a.extendDeep({}, null, { defaultComponents: n, mappings: r }),
                    )
                }
                ;(t.exports.registerPrimitive = function (e, t) {
                  ;(e = e.toLowerCase()),
                    c('Registering <%s>', e),
                    t.defaultAttributes &&
                      u(
                        "The 'defaultAttributes' object is deprecated. Use 'defaultComponents' instead.",
                      )
                  var n = o(e, {
                    prototype: Object.create(r.prototype, {
                      defaultComponentsFromPrimitive: {
                        value: t.defaultComponents || t.defaultAttributes || {},
                      },
                      deprecated: { value: t.deprecated || null },
                      deprecatedMappings: { value: t.deprecatedMappings || {} },
                      mappings: { value: t.mappings || {} },
                      createdCallback: {
                        value: function () {
                          t.deprecated && console.warn(t.deprecated),
                            this.resolveMappingCollisions()
                        },
                      },
                      resolveMappingCollisions: {
                        value: function () {
                          var e = this.mappings,
                            t = this
                          Object.keys(e).forEach(function (n) {
                            var r
                            n !== n.toLowerCase() &&
                              u(
                                'Mapping keys should be specified in lower case. The mapping key ' +
                                  n +
                                  ' may not be recognized',
                              ),
                              i[n] &&
                                ((r = e[n].replace('.', '-')),
                                (e[r] = e[n]),
                                delete e[n],
                                console.warn(
                                  'The primitive ' +
                                    t.tagName.toLowerCase() +
                                    ' has a mapping collision. The attribute ' +
                                    n +
                                    ' has the same name as a registered component and has been renamed to ' +
                                    r,
                                ))
                          })
                        },
                      },
                      getExtraComponents: {
                        value: function () {
                          var e,
                            t,
                            n,
                            r,
                            i,
                            o,
                            s = this
                          for (
                            t = a.clone(this.defaultComponentsFromPrimitive),
                              (i = this.getAttribute('mixin')) &&
                                (i = i.trim().split(' ')).forEach(function (e) {
                                  var n = s.sceneEl.querySelector('#' + e).componentCache
                                  Object.keys(n).forEach(function (e) {
                                    t[e] = l(t[e], n[e])
                                  })
                                }),
                              n = 0;
                            n < this.attributes.length;
                            n++
                          )
                            (e = this.attributes[n]),
                              (r = this.mappings[e.name]) &&
                                ((o = a.entity.getComponentPropertyPath(r)).constructor === Array
                                  ? ((t[o[0]] = t[o[0]] || {}), (t[o[0]][o[1]] = e.value.trim()))
                                  : (t[o] = e.value.trim()))
                          return t
                          function l(e, t) {
                            return c(e)
                              ? u(t)
                              : c(t)
                              ? u(e)
                              : h(e) && h(t)
                              ? a.extendDeep(e, t)
                              : u(t)
                          }
                          function c(e) {
                            return 'undefined' === typeof e
                          }
                          function u(e) {
                            return h(e) ? a.extendDeep({}, e) : e
                          }
                          function h(e) {
                            return null !== e && e.constructor === Object
                          }
                        },
                      },
                      attributeChangedCallback: {
                        value: function (e, t, n) {
                          var r = this.mappings[e]
                          e in this.deprecatedMappings && console.warn(this.deprecatedMappings[e]),
                            e && r && l(this, r, n)
                        },
                      },
                    }),
                  })
                  return (h[e] = n), n
                }),
                  (t.exports.definePrimitive = p)
              },
              {
                '../../core/a-entity': 127,
                '../../core/a-register-element': 130,
                '../../core/component': 131,
                '../../utils/': 205,
              },
            ],
            148: [
              function (e, t, n) {
                ;(0, e('../primitives').registerPrimitive)('a-camera', {
                  defaultComponents: {
                    camera: {},
                    'look-controls': {},
                    'wasd-controls': {},
                    position: { x: 0, y: 1.6, z: 0 },
                  },
                  mappings: {
                    active: 'camera.active',
                    far: 'camera.far',
                    fov: 'camera.fov',
                    'look-controls-enabled': 'look-controls.enabled',
                    near: 'camera.near',
                    'pointer-lock-enabled': 'look-controls.pointerLockEnabled',
                    'wasd-controls-enabled': 'wasd-controls.enabled',
                    'reverse-mouse-drag': 'look-controls.reverseMouseDrag',
                    zoom: 'camera.zoom',
                  },
                })
              },
              { '../primitives': 147 },
            ],
            149: [
              function (e, t, n) {
                var r = e('../getMeshMixin')
                ;(0, e('../primitives').registerPrimitive)(
                  'a-cursor',
                  e('../../../utils/').extendDeep({}, r(), {
                    defaultComponents: {
                      cursor: {},
                      geometry: {
                        primitive: 'ring',
                        radiusOuter: 0.016,
                        radiusInner: 0.01,
                        segmentsTheta: 32,
                      },
                      material: { color: '#000', shader: 'flat', opacity: 0.8 },
                      position: { x: 0, y: 0, z: -1 },
                    },
                    mappings: {
                      far: 'raycaster.far',
                      fuse: 'cursor.fuse',
                      'fuse-timeout': 'cursor.fuseTimeout',
                      interval: 'raycaster.interval',
                      objects: 'raycaster.objects',
                    },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            150: [
              function (e, t, n) {
                var r = e('../getMeshMixin')
                ;(0, e('../primitives').registerPrimitive)(
                  'a-curvedimage',
                  e('../../../utils/').extendDeep({}, r(), {
                    defaultComponents: {
                      geometry: {
                        height: 1,
                        primitive: 'cylinder',
                        radius: 2,
                        segmentsRadial: 48,
                        thetaLength: 270,
                        openEnded: !0,
                        thetaStart: 0,
                      },
                      material: {
                        color: '#FFF',
                        shader: 'flat',
                        side: 'double',
                        transparent: !0,
                        repeat: '-1 1',
                      },
                    },
                    mappings: {
                      height: 'geometry.height',
                      'open-ended': 'geometry.openEnded',
                      radius: 'geometry.radius',
                      segments: 'geometry.segmentsRadial',
                      start: 'geometry.thetaStart',
                      'theta-length': 'geometry.thetaLength',
                      'theta-start': 'geometry.thetaStart',
                      width: 'geometry.thetaLength',
                    },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            151: [
              function (e, t, n) {
                ;(0, e('../primitives').registerPrimitive)('a-gltf-model', {
                  mappings: { src: 'gltf-model' },
                })
              },
              { '../primitives': 147 },
            ],
            152: [
              function (e, t, n) {
                var r = e('../getMeshMixin')
                ;(0, e('../primitives').registerPrimitive)(
                  'a-image',
                  e('../../../utils/').extendDeep({}, r(), {
                    defaultComponents: {
                      geometry: { primitive: 'plane' },
                      material: { color: '#FFF', shader: 'flat', side: 'double', transparent: !0 },
                    },
                    mappings: { height: 'geometry.height', width: 'geometry.width' },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            153: [
              function (e, t, n) {
                ;(0, e('../primitives').registerPrimitive)('a-light', {
                  defaultComponents: { light: {} },
                  mappings: {
                    angle: 'light.angle',
                    color: 'light.color',
                    'ground-color': 'light.groundColor',
                    decay: 'light.decay',
                    distance: 'light.distance',
                    intensity: 'light.intensity',
                    penumbra: 'light.penumbra',
                    type: 'light.type',
                    target: 'light.target',
                  },
                })
              },
              { '../primitives': 147 },
            ],
            154: [
              function (e, t, n) {
                ;(0, e('../primitives').registerPrimitive)('a-link', {
                  defaultComponents: { link: { visualAspectEnabled: !0 } },
                  mappings: { href: 'link.href', image: 'link.image', title: 'link.title' },
                })
              },
              { '../primitives': 147 },
            ],
            155: [
              function (e, t, n) {
                var r = e('../getMeshMixin')()
                ;(0, e('../primitives').registerPrimitive)(
                  'a-obj-model',
                  e('../../../utils/').extendDeep({}, r, {
                    defaultComponents: { 'obj-model': {} },
                    mappings: { src: 'obj-model.obj', mtl: 'obj-model.mtl' },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            156: [
              function (e, t, n) {
                var r = e('../getMeshMixin'),
                  i = e('../primitives').registerPrimitive,
                  o = e('../../../utils/'),
                  a = e('./meshPrimitives')
                i(
                  'a-sky',
                  o.extendDeep({}, r(), {
                    defaultComponents: {
                      geometry: {
                        primitive: 'sphere',
                        radius: 500,
                        segmentsWidth: 64,
                        segmentsHeight: 32,
                      },
                      material: { color: '#FFF', side: 'back', shader: 'flat', npot: !0 },
                      scale: '-1 1 1',
                    },
                    mappings: o.extendDeep({}, a['a-sphere'].prototype.mappings),
                  }),
                )
              },
              {
                '../../../utils/': 205,
                '../getMeshMixin': 145,
                '../primitives': 147,
                './meshPrimitives': 161,
              },
            ],
            157: [
              function (e, t, n) {
                ;(0, e('../primitives').registerPrimitive)('a-sound', {
                  defaultComponents: { sound: {} },
                  mappings: {
                    src: 'sound.src',
                    on: 'sound.on',
                    autoplay: 'sound.autoplay',
                    loop: 'sound.loop',
                    volume: 'sound.volume',
                  },
                })
              },
              { '../primitives': 147 },
            ],
            158: [
              function (e, t, n) {
                ;(0, e('../primitives').definePrimitive)('a-text', {
                  text: { anchor: 'align', width: 5 },
                })
              },
              { '../primitives': 147 },
            ],
            159: [
              function (e, t, n) {
                var r = e('../getMeshMixin')
                ;(0, e('../primitives').registerPrimitive)(
                  'a-video',
                  e('../../../utils/').extendDeep({}, r(), {
                    defaultComponents: {
                      geometry: { primitive: 'plane' },
                      material: { color: '#FFF', shader: 'flat', side: 'double', transparent: !0 },
                    },
                    mappings: { height: 'geometry.height', width: 'geometry.width' },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            160: [
              function (e, t, n) {
                var r = e('../getMeshMixin')
                ;(0, e('../primitives').registerPrimitive)(
                  'a-videosphere',
                  e('../../../utils/').extendDeep({}, r(), {
                    defaultComponents: {
                      geometry: {
                        primitive: 'sphere',
                        radius: 500,
                        segmentsWidth: 64,
                        segmentsHeight: 32,
                      },
                      material: { color: '#FFF', shader: 'flat', side: 'back', npot: !0 },
                      scale: '-1 1 1',
                    },
                    mappings: {
                      radius: 'geometry.radius',
                      'segments-height': 'geometry.segmentsHeight',
                      'segments-width': 'geometry.segmentsWidth',
                    },
                  }),
                )
              },
              { '../../../utils/': 205, '../getMeshMixin': 145, '../primitives': 147 },
            ],
            161: [
              function (e, t, n) {
                var r = e('../getMeshMixin'),
                  i = e('../../../core/geometry').geometries,
                  o = e('../../../core/geometry').geometryNames,
                  a = e('../primitives').registerPrimitive,
                  s = e('../../../utils/'),
                  l = (t.exports = {})
                function c(e) {
                  return e.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
                }
                o.forEach(function (e) {
                  var t = i[e],
                    n = c(e),
                    o = {}
                  Object.keys(t.schema).forEach(function (e) {
                    o[c(e)] = 'geometry.' + e
                  })
                  var u = 'a-' + n,
                    h = a(
                      u,
                      s.extendDeep({}, r(), {
                        defaultComponents: { geometry: { primitive: e } },
                        mappings: o,
                      }),
                    )
                  l[u] = h
                })
              },
              {
                '../../../core/geometry': 132,
                '../../../utils/': 205,
                '../getMeshMixin': 145,
                '../primitives': 147,
              },
            ],
            162: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('box', {
                  schema: {
                    depth: { default: 1, min: 0 },
                    height: { default: 1, min: 0 },
                    width: { default: 1, min: 0 },
                    segmentsHeight: { default: 1, min: 1, max: 20, type: 'int' },
                    segmentsWidth: { default: 1, min: 1, max: 20, type: 'int' },
                    segmentsDepth: { default: 1, min: 1, max: 20, type: 'int' },
                  },
                  init: function (e) {
                    this.geometry = new i.BoxGeometry(
                      e.width,
                      e.height,
                      e.depth,
                      e.segmentsWidth,
                      e.segmentsHeight,
                      e.segmentsDepth,
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            163: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('circle', {
                  schema: {
                    radius: { default: 1, min: 0 },
                    segments: { default: 32, min: 3, type: 'int' },
                    thetaLength: { default: 360, min: 0 },
                    thetaStart: { default: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.CircleGeometry(
                      e.radius,
                      e.segments,
                      o(e.thetaStart),
                      o(e.thetaLength),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            164: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('cone', {
                  schema: {
                    height: { default: 1, min: 0 },
                    openEnded: { default: !1 },
                    radiusBottom: { default: 1, min: 0 },
                    radiusTop: { default: 0.01, min: 0 },
                    segmentsHeight: { default: 18, min: 1, type: 'int' },
                    segmentsRadial: { default: 36, min: 3, type: 'int' },
                    thetaLength: { default: 360, min: 0 },
                    thetaStart: { default: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.CylinderGeometry(
                      e.radiusTop,
                      e.radiusBottom,
                      e.height,
                      e.segmentsRadial,
                      e.segmentsHeight,
                      e.openEnded,
                      o(e.thetaStart),
                      o(e.thetaLength),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            165: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('cylinder', {
                  schema: {
                    height: { default: 1, min: 0 },
                    openEnded: { default: !1 },
                    radius: { default: 1, min: 0 },
                    segmentsHeight: { default: 18, min: 1, type: 'int' },
                    segmentsRadial: { default: 36, min: 3, type: 'int' },
                    thetaLength: { default: 360, min: 0 },
                    thetaStart: { default: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.CylinderGeometry(
                      e.radius,
                      e.radius,
                      e.height,
                      e.segmentsRadial,
                      e.segmentsHeight,
                      e.openEnded,
                      o(e.thetaStart),
                      o(e.thetaLength),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            166: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('dodecahedron', {
                  schema: {
                    detail: { default: 0, min: 0, max: 5, type: 'int' },
                    radius: { default: 1, min: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.DodecahedronGeometry(e.radius, e.detail)
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            167: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('icosahedron', {
                  schema: {
                    detail: { default: 0, min: 0, max: 5, type: 'int' },
                    radius: { default: 1, min: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.IcosahedronGeometry(e.radius, e.detail)
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            168: [
              function (e, t, n) {
                e('./box.js'),
                  e('./circle.js'),
                  e('./cone.js'),
                  e('./cylinder.js'),
                  e('./dodecahedron.js'),
                  e('./icosahedron.js'),
                  e('./octahedron.js'),
                  e('./plane.js'),
                  e('./ring.js'),
                  e('./sphere.js'),
                  e('./tetrahedron.js'),
                  e('./torus.js'),
                  e('./torusKnot.js'),
                  e('./triangle.js')
              },
              {
                './box.js': 162,
                './circle.js': 163,
                './cone.js': 164,
                './cylinder.js': 165,
                './dodecahedron.js': 166,
                './icosahedron.js': 167,
                './octahedron.js': 169,
                './plane.js': 170,
                './ring.js': 171,
                './sphere.js': 172,
                './tetrahedron.js': 173,
                './torus.js': 174,
                './torusKnot.js': 175,
                './triangle.js': 176,
              },
            ],
            169: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('octahedron', {
                  schema: {
                    detail: { default: 0, min: 0, max: 5, type: 'int' },
                    radius: { default: 1, min: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.OctahedronGeometry(e.radius, e.detail)
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            170: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('plane', {
                  schema: {
                    height: { default: 1, min: 0 },
                    width: { default: 1, min: 0 },
                    segmentsHeight: { default: 1, min: 1, max: 20, type: 'int' },
                    segmentsWidth: { default: 1, min: 1, max: 20, type: 'int' },
                  },
                  init: function (e) {
                    this.geometry = new i.PlaneGeometry(
                      e.width,
                      e.height,
                      e.segmentsWidth,
                      e.segmentsHeight,
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            171: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('ring', {
                  schema: {
                    radiusInner: { default: 0.8, min: 0 },
                    radiusOuter: { default: 1.2, min: 0 },
                    segmentsPhi: { default: 10, min: 1, type: 'int' },
                    segmentsTheta: { default: 32, min: 3, type: 'int' },
                    thetaLength: { default: 360, min: 0 },
                    thetaStart: { default: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.RingGeometry(
                      e.radiusInner,
                      e.radiusOuter,
                      e.segmentsTheta,
                      e.segmentsPhi,
                      o(e.thetaStart),
                      o(e.thetaLength),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            172: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('sphere', {
                  schema: {
                    radius: { default: 1, min: 0 },
                    phiLength: { default: 360 },
                    phiStart: { default: 0, min: 0 },
                    thetaLength: { default: 180, min: 0 },
                    thetaStart: { default: 0 },
                    segmentsHeight: { default: 18, min: 2, type: 'int' },
                    segmentsWidth: { default: 36, min: 3, type: 'int' },
                  },
                  init: function (e) {
                    this.geometry = new i.SphereGeometry(
                      e.radius,
                      e.segmentsWidth,
                      e.segmentsHeight,
                      o(e.phiStart),
                      o(e.phiLength),
                      o(e.thetaStart),
                      o(e.thetaLength),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            173: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('tetrahedron', {
                  schema: {
                    detail: { default: 0, min: 0, max: 5, type: 'int' },
                    radius: { default: 1, min: 0 },
                  },
                  init: function (e) {
                    this.geometry = new i.TetrahedronGeometry(e.radius, e.detail)
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            174: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = i.Math.degToRad
                r('torus', {
                  schema: {
                    arc: { default: 360 },
                    radius: { default: 1, min: 0 },
                    radiusTubular: { default: 0.2, min: 0 },
                    segmentsRadial: { default: 36, min: 2, type: 'int' },
                    segmentsTubular: { default: 32, min: 3, type: 'int' },
                  },
                  init: function (e) {
                    this.geometry = new i.TorusGeometry(
                      e.radius,
                      2 * e.radiusTubular,
                      e.segmentsRadial,
                      e.segmentsTubular,
                      o(e.arc),
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            175: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three')
                r('torusKnot', {
                  schema: {
                    p: { default: 2, min: 1 },
                    q: { default: 3, min: 1 },
                    radius: { default: 1, min: 0 },
                    radiusTubular: { default: 0.2, min: 0 },
                    segmentsRadial: { default: 8, min: 3, type: 'int' },
                    segmentsTubular: { default: 100, min: 3, type: 'int' },
                  },
                  init: function (e) {
                    this.geometry = new i.TorusKnotGeometry(
                      e.radius,
                      2 * e.radiusTubular,
                      e.segmentsTubular,
                      e.segmentsRadial,
                      e.p,
                      e.q,
                    )
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            176: [
              function (e, t, n) {
                var r = e('../core/geometry').registerGeometry,
                  i = e('../lib/three'),
                  o = new i.Quaternion(),
                  a = new i.Vector3(0, 0, 1),
                  s = new i.Vector2(),
                  l = new i.Vector2(),
                  c = new i.Vector2()
                r('triangle', {
                  schema: {
                    vertexA: { type: 'vec3', default: { x: 0, y: 0.5, z: 0 } },
                    vertexB: { type: 'vec3', default: { x: -0.5, y: -0.5, z: 0 } },
                    vertexC: { type: 'vec3', default: { x: 0.5, y: -0.5, z: 0 } },
                  },
                  init: function (e) {
                    var t, n, r, u, h, d, p, f, m
                    ;(r = new i.Triangle()).a.set(e.vertexA.x, e.vertexA.y, e.vertexA.z),
                      r.b.set(e.vertexB.x, e.vertexB.y, e.vertexB.z),
                      r.c.set(e.vertexC.x, e.vertexC.y, e.vertexC.z),
                      (n = r.getNormal(new i.Vector3())),
                      o.setFromUnitVectors(n, a),
                      (u = r.a.clone().applyQuaternion(o)),
                      (h = r.b.clone().applyQuaternion(o)),
                      (d = r.c.clone().applyQuaternion(o)),
                      s.set(Math.min(u.x, h.x, d.x), Math.min(u.y, h.y, d.y)),
                      l.set(Math.max(u.x, h.x, d.x), Math.max(u.y, h.y, d.y)),
                      c.set(0, 0).subVectors(l, s),
                      (u = new i.Vector2().subVectors(u, s).divide(c)),
                      (h = new i.Vector2().subVectors(h, s).divide(c)),
                      (d = new i.Vector2().subVectors(d, s).divide(c)),
                      (t = this.geometry = new i.BufferGeometry()),
                      (p = [r.a.x, r.a.y, r.a.z, r.b.x, r.b.y, r.b.z, r.c.x, r.c.y, r.c.z]),
                      (f = [n.x, n.y, n.z, n.x, n.y, n.z, n.x, n.y, n.z]),
                      (m = [u.x, u.y, h.x, h.y, d.x, d.y]),
                      t.setAttribute('position', new i.Float32BufferAttribute(p, 3)),
                      t.setAttribute('normal', new i.Float32BufferAttribute(f, 3)),
                      t.setAttribute('uv', new i.Float32BufferAttribute(m, 2))
                  },
                })
              },
              { '../core/geometry': 132, '../lib/three': 179 },
            ],
            177: [
              function (e, t, n) {
                if (
                  ((window.Promise = window.Promise || e('promise-polyfill')),
                  (window.hasNativeWebVRImplementation =
                    !!window.navigator.getVRDisplays || !!window.navigator.getVRDevices),
                  (window.hasNativeWebXRImplementation = void 0 !== navigator.xr),
                  !window.hasNativeWebXRImplementation && !window.hasNativeWebVRImplementation)
                ) {
                  var r = e('./utils/isIOSOlderThan10')(window.navigator.userAgent)
                      ? 1 / window.devicePixelRatio
                      : 1,
                    i = e('webvr-polyfill'),
                    o = {
                      BUFFER_SCALE: r,
                      CARDBOARD_UI_DISABLED: !0,
                      ROTATE_INSTRUCTIONS_DISABLED: !0,
                      MOBILE_WAKE_LOCK: !!window.cordova,
                    }
                  window.webvrpolyfill = new i(o)
                }
                var a = e('./utils/'),
                  s = a.debug
                a.isIE11 && (e('custom-event-polyfill'), e('../vendor/starts-with-polyfill'))
                var l = s('A-Frame:error'),
                  c = s('A-Frame:warn')
                window.document.currentScript &&
                  window.document.currentScript.parentNode !== window.document.head &&
                  !window.debug &&
                  c(
                    'Put the A-Frame <script> tag in the <head> of the HTML *before* the scene to ensure everything for A-Frame is properly registered before they are used from HTML.',
                  ),
                  window.cordova ||
                    'file:' !== window.location.protocol ||
                    l(
                      'This HTML file is currently being served via the file:// protocol. Assets, textures, and models WILL NOT WORK due to cross-origin policy! Please use a local or hosted server: https://aframe.io/docs/0.5.0/introduction/getting-started.html#using-a-local-server.',
                    ),
                  e('present'),
                  a.device.isBrowserEnvironment &&
                    (e('./style/aframe.css'), e('./style/rStats.css'))
                var u = e('./core/scene/a-scene').AScene,
                  h = e('./core/component').components,
                  d = e('./core/component').registerComponent,
                  p = e('./core/geometry').registerGeometry,
                  f = e('./extras/primitives/primitives').registerPrimitive,
                  m = e('./core/shader').registerShader,
                  v = e('./core/system').registerSystem,
                  g = e('./core/shader').shaders,
                  y = e('./core/system').systems,
                  b = (window.THREE = e('./lib/three')),
                  A = e('../package')
                e('./components/index'),
                  e('./geometries/index'),
                  e('./shaders/index'),
                  e('./systems/index')
                var w = e('./core/a-node'),
                  x = e('./core/a-entity')
                e('./core/a-assets'),
                  e('./core/a-cubemap'),
                  e('./core/a-mixin'),
                  e('./extras/components/'),
                  e('./extras/primitives/'),
                  console.log('A-Frame Version: 1.2.0 (Date 2021-02-05, Commit #b220fa00)'),
                  console.log(
                    'THREE Version (https://github.com/supermedium/three.js):',
                    A.dependencies['super-three'],
                  ),
                  console.log('WebVR Polyfill Version:', A.dependencies['webvr-polyfill']),
                  (t.exports = window.AFRAME =
                    {
                      AComponent: e('./core/component').Component,
                      AEntity: x,
                      ANode: w,
                      ANIME: e('super-animejs'),
                      AScene: u,
                      components: h,
                      coreComponents: Object.keys(h),
                      geometries: e('./core/geometry').geometries,
                      registerComponent: d,
                      registerElement: e('./core/a-register-element').registerElement,
                      registerGeometry: p,
                      registerPrimitive: f,
                      registerShader: m,
                      registerSystem: v,
                      primitives: {
                        getMeshMixin: e('./extras/primitives/getMeshMixin'),
                        primitives: e('./extras/primitives/primitives').primitives,
                      },
                      scenes: e('./core/scene/scenes'),
                      schema: e('./core/schema'),
                      shaders: g,
                      systems: y,
                      THREE: b,
                      utils: a,
                      version: A.version,
                    })
              },
              {
                '../package': 73,
                '../vendor/starts-with-polyfill': 218,
                './components/index': 84,
                './core/a-assets': 125,
                './core/a-cubemap': 126,
                './core/a-entity': 127,
                './core/a-mixin': 128,
                './core/a-node': 129,
                './core/a-register-element': 130,
                './core/component': 131,
                './core/geometry': 132,
                './core/scene/a-scene': 134,
                './core/scene/scenes': 138,
                './core/schema': 140,
                './core/shader': 141,
                './core/system': 142,
                './extras/components/': 143,
                './extras/primitives/': 146,
                './extras/primitives/getMeshMixin': 145,
                './extras/primitives/primitives': 147,
                './geometries/index': 168,
                './lib/three': 179,
                './shaders/index': 181,
                './style/aframe.css': 186,
                './style/rStats.css': 187,
                './systems/index': 191,
                './utils/': 205,
                './utils/isIOSOlderThan10': 208,
                'custom-event-polyfill': 7,
                present: 48,
                'promise-polyfill': 50,
                'super-animejs': 56,
                'webvr-polyfill': 68,
              },
            ],
            178: [
              function (e, t, n) {
                ;(window.aframeStats = function (e) {
                  var t = null,
                    n = e
                  function r() {
                    t('te').set(i()),
                      window.performance.getEntriesByName &&
                        t('lt').set(
                          window.performance
                            .getEntriesByName('render-started')[0]
                            .startTime.toFixed(0),
                        )
                  }
                  function i() {
                    var e = n.querySelectorAll('*')
                    return (
                      Array.prototype.slice.call(e).filter(function (e) {
                        return e.isEntity
                      }),
                      e.length
                    )
                  }
                  function o() {}
                  function a() {}
                  function s(e) {
                    t = e
                  }
                  return {
                    update: r,
                    start: o,
                    end: a,
                    attach: s,
                    values: { te: { caption: 'Entities' }, lt: { caption: 'Load Time' } },
                    groups: [{ caption: 'A-Frame', values: ['te', 'lt'] }],
                    fractions: [],
                  }
                }),
                  'object' === typeof t && (t.exports = { aframeStats: window.aframeStats })
              },
              {},
            ],
            179: [
              function (e, t, n) {
                ;(function (n) {
                  var r = (n.THREE = e('super-three'))
                  r.TextureLoader && (r.TextureLoader.prototype.crossOrigin = 'anonymous'),
                    r.ImageLoader && (r.ImageLoader.prototype.crossOrigin = 'anonymous'),
                    r.Cache && (r.Cache.enabled = !0),
                    e('../../vendor/DeviceOrientationControls'),
                    e('super-three/examples/js/loaders/DRACOLoader'),
                    e('super-three/examples/js/loaders/GLTFLoader'),
                    e('super-three/examples/js/loaders/OBJLoader'),
                    e('super-three/examples/js/loaders/MTLLoader'),
                    e('super-three/examples/js/utils/BufferGeometryUtils'),
                    (r.DRACOLoader.prototype.crossOrigin = 'anonymous'),
                    (r.GLTFLoader.prototype.crossOrigin = 'anonymous'),
                    (r.MTLLoader.prototype.crossOrigin = 'anonymous'),
                    (r.OBJLoader.prototype.crossOrigin = 'anonymous'),
                    (t.exports = r)
                }.call(
                  this,
                  'undefined' !== typeof r.g
                    ? r.g
                    : 'undefined' !== typeof self
                    ? self
                    : 'undefined' !== typeof window
                    ? window
                    : {},
                ))
              },
              {
                '../../vendor/DeviceOrientationControls': 215,
                'super-three': 57,
                'super-three/examples/js/loaders/DRACOLoader': 58,
                'super-three/examples/js/loaders/GLTFLoader': 59,
                'super-three/examples/js/loaders/MTLLoader': 60,
                'super-three/examples/js/loaders/OBJLoader': 61,
                'super-three/examples/js/utils/BufferGeometryUtils': 62,
              },
            ],
            180: [
              function (e, t, n) {
                var r = e('../core/shader').registerShader,
                  i = e('../lib/three'),
                  o = e('../utils/')
                function a(e, t) {
                  return (
                    t.color.set(e.color),
                    (t.fog = e.fog),
                    (t.wireframe = e.wireframe),
                    (t.wireframeLinewidth = e.wireframeLinewidth),
                    t
                  )
                }
                t.exports.Shader = r('flat', {
                  schema: {
                    color: { type: 'color' },
                    fog: { default: !0 },
                    height: { default: 256 },
                    offset: { type: 'vec2', default: { x: 0, y: 0 } },
                    repeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    src: { type: 'map' },
                    width: { default: 512 },
                    wireframe: { default: !1 },
                    wireframeLinewidth: { default: 2 },
                  },
                  init: function (e) {
                    ;(this.rendererSystem = this.el.sceneEl.systems.renderer),
                      (this.materialData = { color: new i.Color() }),
                      (this.textureSrc = null),
                      a(e, this.materialData),
                      this.rendererSystem.applyColorCorrection(this.materialData.color),
                      (this.material = new i.MeshBasicMaterial(this.materialData)),
                      o.material.updateMap(this, e)
                  },
                  update: function (e) {
                    this.updateMaterial(e), o.material.updateMap(this, e)
                  },
                  updateMaterial: function (e) {
                    var t
                    for (t in (a(e, this.materialData),
                    this.rendererSystem.applyColorCorrection(this.materialData.color),
                    this.materialData))
                      this.material[t] = this.materialData[t]
                  },
                })
              },
              { '../core/shader': 141, '../lib/three': 179, '../utils/': 205 },
            ],
            181: [
              function (e, t, n) {
                e('./flat'), e('./standard'), e('./sdf'), e('./msdf'), e('./ios10hls')
              },
              { './flat': 180, './ios10hls': 182, './msdf': 183, './sdf': 184, './standard': 185 },
            ],
            182: [
              function (e, t, n) {
                var r = e('../core/shader').registerShader
                t.exports.Shader = r('ios10hls', {
                  schema: {
                    src: { type: 'map', is: 'uniform' },
                    opacity: { type: 'number', is: 'uniform', default: 1 },
                  },
                  vertexShader: [
                    'varying vec2 vUV;',
                    'void main(void) {',
                    '  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
                    '  vUV = uv;',
                    '}',
                  ].join('\n'),
                  fragmentShader: [
                    'uniform sampler2D src;',
                    'uniform float opacity;',
                    'varying vec2 vUV;',
                    'void main() {',
                    '  vec2 offset = vec2(0, 0);',
                    '  vec2 repeat = vec2(1, 1);',
                    '  vec4 color = texture2D(src, vec2(vUV.x / repeat.x + offset.x, (1.0 - vUV.y) / repeat.y + offset.y)).bgra;',
                    '  gl_FragColor = vec4(color.rgb, opacity);',
                    '}',
                  ].join('\n'),
                })
              },
              { '../core/shader': 141 },
            ],
            183: [
              function (e, t, n) {
                var r = e('../core/shader').registerShader,
                  i = !!document.createElement('canvas').getContext('webgl2'),
                  o = [
                    'attribute vec2 uv;',
                    'attribute vec3 position;',
                    'uniform mat4 projectionMatrix;',
                    'uniform mat4 modelViewMatrix;',
                    'varying vec2 vUV;',
                    'void main(void) {',
                    '  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
                    '  vUV = uv;',
                    '}',
                  ].join('\n'),
                  a = [
                    '#version 300 es',
                    'in vec2 uv;',
                    'in vec3 position;',
                    'uniform mat4 projectionMatrix;',
                    'uniform mat4 modelViewMatrix;',
                    'out vec2 vUV;',
                    'void main(void) {',
                    '  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
                    '  vUV = uv;',
                    '}',
                  ].join('\n'),
                  s = i ? a : o,
                  l = [
                    '#ifdef GL_OES_standard_derivatives',
                    '#extension GL_OES_standard_derivatives: enable',
                    '#endif',
                    'precision highp float;',
                    'uniform bool negate;',
                    'uniform float alphaTest;',
                    'uniform float opacity;',
                    'uniform sampler2D map;',
                    'uniform vec3 color;',
                    'varying vec2 vUV;',
                    'float median(float r, float g, float b) {',
                    '  return max(min(r, g), min(max(r, g), b));',
                    '}',
                    '#define BIG_ENOUGH 0.001',
                    '#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)',
                    'void main() {',
                    '  vec3 sampleColor = texture2D(map, vUV).rgb;',
                    '  if (negate) { sampleColor = 1.0 - sampleColor; }',
                    '  float sigDist = median(sampleColor.r, sampleColor.g, sampleColor.b) - 0.5;',
                    '  float alpha = clamp(sigDist / fwidth(sigDist) + 0.5, 0.0, 1.0);',
                    '  float dscale = 0.353505;',
                    '  vec2 duv = dscale * (dFdx(vUV) + dFdy(vUV));',
                    '  float isBigEnough = max(abs(duv.x), abs(duv.y));',
                    '  // Do modified alpha test.',
                    '  if (isBigEnough > BIG_ENOUGH) {',
                    '    float ratio = BIG_ENOUGH / isBigEnough;',
                    '    alpha = ratio * alpha + (1.0 - ratio) * (sigDist + 0.5);',
                    '  }',
                    '  // Do modified alpha test.',
                    '  if (alpha < alphaTest * MODIFIED_ALPHATEST) { discard; return; }',
                    '  gl_FragColor = vec4(color.xyz, alpha * opacity);',
                    '}',
                  ].join('\n'),
                  c = [
                    '#version 300 es',
                    'precision highp float;',
                    'uniform bool negate;',
                    'uniform float alphaTest;',
                    'uniform float opacity;',
                    'uniform sampler2D map;',
                    'uniform vec3 color;',
                    'in vec2 vUV;',
                    'out vec4 fragColor;',
                    'float median(float r, float g, float b) {',
                    '  return max(min(r, g), min(max(r, g), b));',
                    '}',
                    '#define BIG_ENOUGH 0.001',
                    '#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)',
                    'void main() {',
                    '  vec3 sampleColor = texture(map, vUV).rgb;',
                    '  if (negate) { sampleColor = 1.0 - sampleColor; }',
                    '  float sigDist = median(sampleColor.r, sampleColor.g, sampleColor.b) - 0.5;',
                    '  float alpha = clamp(sigDist / fwidth(sigDist) + 0.5, 0.0, 1.0);',
                    '  float dscale = 0.353505;',
                    '  vec2 duv = dscale * (dFdx(vUV) + dFdy(vUV));',
                    '  float isBigEnough = max(abs(duv.x), abs(duv.y));',
                    '  // Do modified alpha test.',
                    '  if (isBigEnough > BIG_ENOUGH) {',
                    '    float ratio = BIG_ENOUGH / isBigEnough;',
                    '    alpha = ratio * alpha + (1.0 - ratio) * (sigDist + 0.5);',
                    '  }',
                    '  // Do modified alpha test.',
                    '  if (alpha < alphaTest * MODIFIED_ALPHATEST) { discard; return; }',
                    '  fragColor = vec4(color.xyz, alpha * opacity);',
                    '}',
                  ].join('\n'),
                  u = i ? c : l
                t.exports.Shader = r('msdf', {
                  schema: {
                    alphaTest: { type: 'number', is: 'uniform', default: 0.5 },
                    color: { type: 'color', is: 'uniform', default: 'white' },
                    map: { type: 'map', is: 'uniform' },
                    negate: { type: 'boolean', is: 'uniform', default: !0 },
                    opacity: { type: 'number', is: 'uniform', default: 1 },
                  },
                  raw: !0,
                  vertexShader: s,
                  fragmentShader: u,
                })
              },
              { '../core/shader': 141 },
            ],
            184: [
              function (e, t, n) {
                var r = e('../core/shader').registerShader
                t.exports.Shader = r('sdf', {
                  schema: {
                    alphaTest: { type: 'number', is: 'uniform', default: 0.5 },
                    color: { type: 'color', is: 'uniform', default: 'white' },
                    map: { type: 'map', is: 'uniform' },
                    opacity: { type: 'number', is: 'uniform', default: 1 },
                  },
                  raw: !0,
                  vertexShader: [
                    '#version 300 es',
                    'in vec2 uv;',
                    'in vec3 position;',
                    'uniform mat4 projectionMatrix;',
                    'uniform mat4 modelViewMatrix;',
                    'out vec2 vUV;',
                    'void main(void) {',
                    '  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
                    '  vUV = uv;',
                    '}',
                  ].join('\n'),
                  fragmentShader: [
                    '#version 300 es',
                    'precision highp float;',
                    'uniform float alphaTest;',
                    'uniform float opacity;',
                    'uniform sampler2D map;',
                    'uniform vec3 color;',
                    'in vec2 vUV;',
                    'out vec4 fragColor;',
                    '#ifdef GL_OES_standard_derivatives',
                    '  float contour(float width, float value) {',
                    '    return smoothstep(0.5 - value, 0.5 + value, width);',
                    '  }',
                    '#else',
                    '  float aastep(float value, float afwidth) {',
                    '    return smoothstep(0.5 - afwidth, 0.5 + afwidth, value);',
                    '  }',
                    '#endif',
                    '#define BIG_ENOUGH 0.001',
                    '#define MODIFIED_ALPHATEST (0.02 * isBigEnough / BIG_ENOUGH)',
                    '#define ALL_SMOOTH 0.4',
                    '#define ALL_ROUGH 0.02',
                    '#define DISCARD_ALPHA (alphaTest / (2.2 - 1.2 * ratio))',
                    'void main() {',
                    '  #ifdef GL_OES_standard_derivatives',
                    '    vec2 uv = vUV;',
                    '    vec4 texColor = texture(map, uv);',
                    '    float dist = texColor.a;',
                    '    float width = fwidth(dist);',
                    '    float alpha = contour(dist, width);',
                    '    float dscale = 0.353505;',
                    '    vec2 duv = dscale * (dFdx(uv) + dFdy(uv));',
                    '    float isBigEnough = max(abs(duv.x), abs(duv.y));',
                    '    if (isBigEnough > BIG_ENOUGH) {',
                    '      float ratio = BIG_ENOUGH / isBigEnough;',
                    '      alpha = ratio * alpha + (1.0 - ratio) * dist;',
                    '    }',
                    '    if (isBigEnough <= BIG_ENOUGH) {',
                    '      vec4 box = vec4 (uv - duv, uv + duv);',
                    '      alpha = (alpha + 0.5 * (',
                    '        contour(texture(map, box.xy).a, width)',
                    '        + contour(texture(map, box.zw).a, width)',
                    '        + contour(texture(map, box.xw).a, width)',
                    '        + contour(texture(map, box.zy).a, width)',
                    '      )) / 3.0;',
                    '    }',
                    '    if (alpha < alphaTest * MODIFIED_ALPHATEST) { discard; return; }',
                    '  #else',
                    '    vec4 texColor = texture(map, vUV);',
                    '    float value = texColor.a;',
                    '    float afwidth = (1.0 / 32.0) * (1.4142135623730951 / (2.0 * gl_FragCoord.w));',
                    '    float alpha = aastep(value, afwidth);',
                    '    float ratio = (gl_FragCoord.w >= ALL_SMOOTH) ? 1.0 : (gl_FragCoord.w < ALL_ROUGH) ? 0.0 : (gl_FragCoord.w - ALL_ROUGH) / (ALL_SMOOTH - ALL_ROUGH);',
                    '    if (alpha < alphaTest) { if (ratio >= 1.0) { discard; return; } alpha = 0.0; }',
                    '    alpha = alpha * ratio + (1.0 - ratio) * value;',
                    '    if (ratio < 1.0 && alpha <= DISCARD_ALPHA) { discard; return; }',
                    '  #endif',
                    '  fragColor = vec4(color, opacity * alpha);',
                    '}',
                  ].join('\n'),
                })
              },
              { '../core/shader': 141 },
            ],
            185: [
              function (e, t, n) {
                var r = e('../core/shader').registerShader,
                  i = e('../lib/three'),
                  o = e('../utils/'),
                  a = new i.CubeTextureLoader(),
                  s = {}
                function l(e, t) {
                  return (
                    t.color.set(e.color),
                    t.emissive.set(e.emissive),
                    (t.emissiveIntensity = e.emissiveIntensity),
                    (t.fog = e.fog),
                    (t.metalness = e.metalness),
                    (t.roughness = e.roughness),
                    (t.wireframe = e.wireframe),
                    (t.wireframeLinewidth = e.wireframeLinewidth),
                    e.normalMap && (t.normalScale = e.normalScale),
                    e.ambientOcclusionMap && (t.aoMapIntensity = e.ambientOcclusionMapIntensity),
                    e.displacementMap &&
                      ((t.displacementScale = e.displacementScale),
                      (t.displacementBias = e.displacementBias)),
                    t
                  )
                }
                t.exports.Shader = r('standard', {
                  schema: {
                    ambientOcclusionMap: { type: 'map' },
                    ambientOcclusionMapIntensity: { default: 1 },
                    ambientOcclusionTextureOffset: { type: 'vec2' },
                    ambientOcclusionTextureRepeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    color: { type: 'color' },
                    displacementMap: { type: 'map' },
                    displacementScale: { default: 1 },
                    displacementBias: { default: 0.5 },
                    displacementTextureOffset: { type: 'vec2' },
                    displacementTextureRepeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    emissive: { type: 'color', default: '#000' },
                    emissiveIntensity: { default: 1 },
                    envMap: { default: '' },
                    fog: { default: !0 },
                    height: { default: 256 },
                    metalness: { default: 0, min: 0, max: 1 },
                    metalnessMap: { type: 'map' },
                    metalnessTextureOffset: { type: 'vec2' },
                    metalnessTextureRepeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    normalMap: { type: 'map' },
                    normalScale: { type: 'vec2', default: { x: 1, y: 1 } },
                    normalTextureOffset: { type: 'vec2' },
                    normalTextureRepeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    offset: { type: 'vec2', default: { x: 0, y: 0 } },
                    repeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    roughness: { default: 0.5, min: 0, max: 1 },
                    roughnessMap: { type: 'map' },
                    roughnessTextureOffset: { type: 'vec2' },
                    roughnessTextureRepeat: { type: 'vec2', default: { x: 1, y: 1 } },
                    sphericalEnvMap: { type: 'map' },
                    src: { type: 'map' },
                    width: { default: 512 },
                    wireframe: { default: !1 },
                    wireframeLinewidth: { default: 2 },
                  },
                  init: function (e) {
                    ;(this.rendererSystem = this.el.sceneEl.systems.renderer),
                      (this.materialData = { color: new i.Color(), emissive: new i.Color() }),
                      l(e, this.materialData),
                      this.rendererSystem.applyColorCorrection(this.materialData.color),
                      this.rendererSystem.applyColorCorrection(this.materialData.emissive),
                      (this.material = new i.MeshStandardMaterial(this.materialData)),
                      o.material.updateMap(this, e),
                      e.normalMap && o.material.updateDistortionMap('normal', this, e),
                      e.displacementMap && o.material.updateDistortionMap('displacement', this, e),
                      e.ambientOcclusionMap &&
                        o.material.updateDistortionMap('ambientOcclusion', this, e),
                      e.metalnessMap && o.material.updateDistortionMap('metalness', this, e),
                      e.roughnessMap && o.material.updateDistortionMap('roughness', this, e),
                      this.updateEnvMap(e)
                  },
                  update: function (e) {
                    this.updateMaterial(e),
                      o.material.updateMap(this, e),
                      e.normalMap && o.material.updateDistortionMap('normal', this, e),
                      e.displacementMap && o.material.updateDistortionMap('displacement', this, e),
                      e.ambientOcclusionMap &&
                        o.material.updateDistortionMap('ambientOcclusion', this, e),
                      e.metalnessMap && o.material.updateDistortionMap('metalness', this, e),
                      e.roughnessMap && o.material.updateDistortionMap('roughness', this, e),
                      this.updateEnvMap(e)
                  },
                  updateMaterial: function (e) {
                    var t,
                      n = this.material
                    for (t in (l(e, this.materialData),
                    this.rendererSystem.applyColorCorrection(this.materialData.color),
                    this.rendererSystem.applyColorCorrection(this.materialData.emissive),
                    this.materialData))
                      n[t] = this.materialData[t]
                  },
                  updateEnvMap: function (e) {
                    var t = this,
                      n = this.material,
                      r = e.envMap,
                      l = e.sphericalEnvMap
                    if ((!r && !l) || this.isLoadingEnvMap)
                      return (n.envMap = null), void (n.needsUpdate = !0)
                    ;(this.isLoadingEnvMap = !0),
                      l
                        ? this.el.sceneEl.systems.material.loadTexture(l, { src: l }, function (e) {
                            ;(t.isLoadingEnvMap = !1),
                              (e.mapping = i.SphericalReflectionMapping),
                              (n.envMap = e),
                              o.material.handleTextureEvents(t.el, e),
                              (n.needsUpdate = !0)
                          })
                        : s[r]
                        ? s[r].then(function (e) {
                            ;(t.isLoadingEnvMap = !1),
                              (n.envMap = e),
                              o.material.handleTextureEvents(t.el, e),
                              (n.needsUpdate = !0)
                          })
                        : (s[r] = new Promise(function (e) {
                            o.srcLoader.validateCubemapSrc(r, function (r) {
                              a.load(r, function (r) {
                                ;(t.isLoadingEnvMap = !1),
                                  (n.envMap = r),
                                  o.material.handleTextureEvents(t.el, r),
                                  e(r)
                              })
                            })
                          }))
                  },
                })
              },
              { '../core/shader': 141, '../lib/three': 179, '../utils/': 205 },
            ],
            186: [
              function (e, t, n) {
                var r =
                  "html.a-fullscreen{bottom:0;left:0;position:fixed;right:0;top:0}html.a-fullscreen body{height:100%;margin:0;overflow:hidden;padding:0;width:100%}html.a-fullscreen .a-canvas{width:100%!important;height:100%!important;top:0!important;left:0!important;right:0!important;bottom:0!important;position:fixed!important}html:not(.a-fullscreen) .a-enter-ar,html:not(.a-fullscreen) .a-enter-vr{right:5px;bottom:5px}:-webkit-full-screen{background-color:transparent}.a-hidden{display:none!important}.a-canvas{height:100%;left:0;position:absolute;top:0;width:100%}.a-canvas.a-grab-cursor:hover{cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}canvas.a-canvas.a-mouse-cursor-hover:hover{cursor:pointer}.a-inspector-loader{background-color:#ed3160;position:fixed;left:3px;top:3px;padding:6px 10px;color:#fff;text-decoration:none;font-size:12px;font-family:Roboto,sans-serif;text-align:center;z-index:99999;width:204px}@keyframes dots-1{from{opacity:0}25%{opacity:1}}@keyframes dots-2{from{opacity:0}50%{opacity:1}}@keyframes dots-3{from{opacity:0}75%{opacity:1}}@-webkit-keyframes dots-1{from{opacity:0}25%{opacity:1}}@-webkit-keyframes dots-2{from{opacity:0}50%{opacity:1}}@-webkit-keyframes dots-3{from{opacity:0}75%{opacity:1}}.a-inspector-loader .dots span{animation:dots-1 2s infinite steps(1);-webkit-animation:dots-1 2s infinite steps(1)}.a-inspector-loader .dots span:first-child+span{animation-name:dots-2;-webkit-animation-name:dots-2}.a-inspector-loader .dots span:first-child+span+span{animation-name:dots-3;-webkit-animation-name:dots-3}a-scene{display:block;position:relative;height:100%;width:100%}a-assets,a-scene audio,a-scene img,a-scene video{display:none}.a-enter-vr-modal,.a-orientation-modal{font-family:Consolas,Andale Mono,Courier New,monospace}.a-enter-vr-modal a{border-bottom:1px solid #fff;padding:2px 0;text-decoration:none;transition:.1s color ease-in}.a-enter-vr-modal a:hover{background-color:#fff;color:#111;padding:2px 4px;position:relative;left:-4px}.a-enter-ar,.a-enter-vr{font-family:sans-serif,monospace;font-size:13px;width:100%;font-weight:200;line-height:16px;position:absolute;right:20px;bottom:20px}.a-enter-ar{right:80px}.a-enter-vr-button,.a-enter-vr-modal,.a-enter-vr-modal a{color:#fff;user-select:none;outline:0}.a-enter-vr-button{background:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='108' height='62' viewBox='0 0 108 62'%3E%3Ctitle%3Eaframe-vrmode-noborder-reduced-tracking%3C/title%3E%3Cpath d='M68.81,21.56H64.23v8.27h4.58a4.13,4.13,0,0,0,3.1-1.09,4.2,4.2,0,0,0,1-3,4.24,4.24,0,0,0-1-3A4.05,4.05,0,0,0,68.81,21.56Z' fill='%23fff'/%3E%3Cpath d='M96,0H12A12,12,0,0,0,0,12V50A12,12,0,0,0,12,62H96a12,12,0,0,0,12-12V12A12,12,0,0,0,96,0ZM41.9,46H34L24,16h8l6,21.84,6-21.84H52Zm39.29,0H73.44L68.15,35.39H64.23V46H57V16H68.81q5.32,0,8.34,2.37a8,8,0,0,1,3,6.69,9.68,9.68,0,0,1-1.27,5.18,8.9,8.9,0,0,1-4,3.34l6.26,12.11Z' fill='%23fff'/%3E%3C/svg%3E\") 50% 50% no-repeat rgba(0,0,0,.35)}.a-enter-ar-button{background:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='108' height='62' viewBox='0 0 108 62'%3E%3Ctitle%3Eaframe-armode-noborder-reduced-tracking%3C/title%3E%3Cpath d='M96,0H12A12,12,0,0,0,0,12V50A12,12,0,0,0,12,62H96a12,12,0,0,0,12-12V12A12,12,0,0,0,96,0Zm8,50a8,8,0,0,1-8,8H12a8,8,0,0,1-8-8V12a8,8,0,0,1,8-8H96a8,8,0,0,1,8,8Z' fill='%23fff'/%3E%3Cpath d='M43.35,39.82H32.51L30.45,46H23.88L35,16h5.73L52,46H45.43Zm-9.17-5h7.5L37.91,23.58Z' fill='%23fff'/%3E%3Cpath d='M68.11,35H63.18V46H57V16H68.15q5.31,0,8.2,2.37a8.18,8.18,0,0,1,2.88,6.7,9.22,9.22,0,0,1-1.33,5.12,9.09,9.09,0,0,1-4,3.26l6.49,12.26V46H73.73Zm-4.93-5h5a5.09,5.09,0,0,0,3.6-1.18,4.21,4.21,0,0,0,1.28-3.27,4.56,4.56,0,0,0-1.2-3.34A5,5,0,0,0,68.15,21h-5Z' fill='%23fff'/%3E%3C/svg%3E\") 50% 50% no-repeat rgba(0,0,0,.2)}.a-enter-ar-button,.a-enter-vr-button{background-size:90% 90%;border:0;bottom:0;cursor:pointer;min-width:58px;min-height:34px;padding-right:0;padding-top:0;position:absolute;right:0;transition:background-color .05s ease;-webkit-transition:background-color .05s ease;z-index:9999;border-radius:8px;touch-action:manipulation}.a-enter-ar-button{background-size:100% 90%;margin-right:10px;border-radius:7px}.a-enter-ar-button:active,.a-enter-ar-button:hover,.a-enter-vr-button:active,.a-enter-vr-button:hover{background-color:#ef2d5e}.a-enter-vr-button.resethover{background-color:rgba(0,0,0,.35)}[data-a-enter-vr-no-webvr] .a-enter-vr-button{border-color:#666;opacity:.65}[data-a-enter-vr-no-webvr] .a-enter-vr-button:active,[data-a-enter-vr-no-webvr] .a-enter-vr-button:hover{background-color:rgba(0,0,0,.35);cursor:not-allowed}.a-enter-vr-modal{background-color:#666;border-radius:0;display:none;min-height:32px;margin-right:70px;padding:9px;width:280px;right:2%;position:absolute}.a-enter-vr-modal:after{border-bottom:10px solid transparent;border-left:10px solid #666;border-top:10px solid transparent;display:inline-block;content:'';position:absolute;right:-5px;top:5px;width:0;height:0}.a-enter-vr-modal a,.a-enter-vr-modal p{display:inline}.a-enter-vr-modal p{margin:0}.a-enter-vr-modal p:after{content:' '}[data-a-enter-vr-no-headset].a-enter-vr:hover .a-enter-vr-modal,[data-a-enter-vr-no-webvr].a-enter-vr:hover .a-enter-vr-modal{display:block}.a-orientation-modal{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%2090%2090%22%20enable-background%3D%22new%200%200%2090%2090%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%220%2C0%200%2C0%200%2C0%20%22%3E%3C/polygon%3E%3Cg%3E%3Cpath%20d%3D%22M71.545%2C48.145h-31.98V20.743c0-2.627-2.138-4.765-4.765-4.765H18.456c-2.628%2C0-4.767%2C2.138-4.767%2C4.765v42.789%20%20%20c0%2C2.628%2C2.138%2C4.766%2C4.767%2C4.766h5.535v0.959c0%2C2.628%2C2.138%2C4.765%2C4.766%2C4.765h42.788c2.628%2C0%2C4.766-2.137%2C4.766-4.765V52.914%20%20%20C76.311%2C50.284%2C74.173%2C48.145%2C71.545%2C48.145z%20M18.455%2C16.935h16.344c2.1%2C0%2C3.808%2C1.708%2C3.808%2C3.808v27.401H37.25V22.636%20%20%20c0-0.264-0.215-0.478-0.479-0.478H16.482c-0.264%2C0-0.479%2C0.214-0.479%2C0.478v36.585c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h7.507v7.644%20%20%20h-5.534c-2.101%2C0-3.81-1.709-3.81-3.81V20.743C14.645%2C18.643%2C16.354%2C16.935%2C18.455%2C16.935z%20M16.96%2C23.116h19.331v25.031h-7.535%20%20%20c-2.628%2C0-4.766%2C2.139-4.766%2C4.768v5.828h-7.03V23.116z%20M71.545%2C73.064H28.757c-2.101%2C0-3.81-1.708-3.81-3.808V52.914%20%20%20c0-2.102%2C1.709-3.812%2C3.81-3.812h42.788c2.1%2C0%2C3.809%2C1.71%2C3.809%2C3.812v16.343C75.354%2C71.356%2C73.645%2C73.064%2C71.545%2C73.064z%22%3E%3C/path%3E%3Cpath%20d%3D%22M28.919%2C58.424c-1.466%2C0-2.659%2C1.193-2.659%2C2.66c0%2C1.466%2C1.193%2C2.658%2C2.659%2C2.658c1.468%2C0%2C2.662-1.192%2C2.662-2.658%20%20%20C31.581%2C59.617%2C30.387%2C58.424%2C28.919%2C58.424z%20M28.919%2C62.786c-0.939%2C0-1.703-0.764-1.703-1.702c0-0.939%2C0.764-1.704%2C1.703-1.704%20%20%20c0.94%2C0%2C1.705%2C0.765%2C1.705%2C1.704C30.623%2C62.022%2C29.858%2C62.786%2C28.919%2C62.786z%22%3E%3C/path%3E%3Cpath%20d%3D%22M69.654%2C50.461H33.069c-0.264%2C0-0.479%2C0.215-0.479%2C0.479v20.288c0%2C0.264%2C0.215%2C0.478%2C0.479%2C0.478h36.585%20%20%20c0.263%2C0%2C0.477-0.214%2C0.477-0.478V50.939C70.131%2C50.676%2C69.917%2C50.461%2C69.654%2C50.461z%20M69.174%2C51.417V70.75H33.548V51.417H69.174z%22%3E%3C/path%3E%3Cpath%20d%3D%22M45.201%2C30.296c6.651%2C0%2C12.233%2C5.351%2C12.551%2C11.977l-3.033-2.638c-0.193-0.165-0.507-0.142-0.675%2C0.048%20%20%20c-0.174%2C0.198-0.153%2C0.501%2C0.045%2C0.676l3.883%2C3.375c0.09%2C0.075%2C0.198%2C0.115%2C0.312%2C0.115c0.141%2C0%2C0.273-0.061%2C0.362-0.166%20%20%20l3.371-3.877c0.173-0.2%2C0.151-0.502-0.047-0.675c-0.194-0.166-0.508-0.144-0.676%2C0.048l-2.592%2C2.979%20%20%20c-0.18-3.417-1.629-6.605-4.099-9.001c-2.538-2.461-5.877-3.817-9.404-3.817c-0.264%2C0-0.479%2C0.215-0.479%2C0.479%20%20%20C44.72%2C30.083%2C44.936%2C30.296%2C45.201%2C30.296z%22%3E%3C/path%3E%3C/g%3E%3C/svg%3E) center/50% 50% no-repeat rgba(244,244,244,1);bottom:0;font-size:14px;font-weight:600;left:0;line-height:20px;right:0;position:fixed;top:0;z-index:9999999}.a-orientation-modal:after{color:#666;content:\"Insert phone into Cardboard holder.\";display:block;position:absolute;text-align:center;top:70%;transform:translateY(-70%);width:100%}.a-orientation-modal button{background:url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%20100%20100%22%20enable-background%3D%22new%200%200%20100%20100%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23000000%22%20d%3D%22M55.209%2C50l17.803-17.803c1.416-1.416%2C1.416-3.713%2C0-5.129c-1.416-1.417-3.713-1.417-5.129%2C0L50.08%2C44.872%20%20L32.278%2C27.069c-1.416-1.417-3.714-1.417-5.129%2C0c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129L44.951%2C50L27.149%2C67.803%20%20c-1.417%2C1.416-1.417%2C3.713%2C0%2C5.129c0.708%2C0.708%2C1.636%2C1.062%2C2.564%2C1.062c0.928%2C0%2C1.856-0.354%2C2.564-1.062L50.08%2C55.13l17.803%2C17.802%20%20c0.708%2C0.708%2C1.637%2C1.062%2C2.564%2C1.062s1.856-0.354%2C2.564-1.062c1.416-1.416%2C1.416-3.713%2C0-5.129L55.209%2C50z%22%3E%3C/path%3E%3C/svg%3E) no-repeat;border:none;height:50px;text-indent:-9999px;width:50px}.a-loader-title{background-color:rgba(0,0,0,.6);font-family:sans-serif,monospace;text-align:center;font-size:20px;height:50px;font-weight:300;line-height:50px;position:absolute;right:0;left:0;top:0;color:#fff}.a-modal{background:0 0/50% 50% rgba(0,0,0,.6);bottom:0;font-size:14px;font-weight:600;left:0;line-height:20px;right:0;position:fixed;top:0;z-index:9999999}.a-dialog{position:relative;left:50%;top:50%;transform:translate(-50%,-50%);z-index:199995;width:300px;height:200px;background-size:contain;background-color:#fff;font-family:sans-serif,monospace;font-size:20px;border-radius:3px;padding:6px}.a-dialog-text-container{width:100%;height:70%;align-self:flex-start;display:flex;justify-content:center;align-content:center;flex-direction:column}.a-dialog-text{display:inline-block;font-weight:400;font-size:14pt;margin:8px}.a-dialog-buttons-container{display:inline-flex;align-self:flex-end;width:100%;height:30%}.a-dialog-button{cursor:pointer;align-self:center;opacity:.9;height:80%;width:50%;font-size:12pt;margin:4px;border-radius:2px;text-align:center;border:none;display:inline-block;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out;box-shadow:0 1px 3px rgba(0,0,0,.1),0 1px 2px rgba(0,0,0,.2);user-select:none}.a-dialog-permission-button:hover{box-shadow:0 7px 14px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.2)}.a-dialog-allow-button{background-color:#00ceff}.a-dialog-deny-button{background-color:#ff005b}.a-dialog-ok-button{background-color:#00ceff;width:100%}"
                e('browserify-css').createStyle(r, { href: 'src/style/aframe.css' }),
                  (t.exports = r)
              },
              { 'browserify-css': 4 },
            ],
            187: [
              function (e, t, n) {
                var r =
                  '.rs-base{background-color:#333;color:#fafafa;border-radius:0;font:10px monospace;left:5px;line-height:1em;opacity:.85;overflow:hidden;padding:10px;position:fixed;top:5px;width:300px;z-index:10000}.rs-base div.hidden{display:none}.rs-base h1{color:#fff;cursor:pointer;font-size:1.4em;font-weight:300;margin:0 0 5px;padding:0}.rs-group{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-direction:column-reverse;flex-direction:column-reverse;margin-bottom:5px}.rs-group:last-child{margin-bottom:0}.rs-counter-base{align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;height:10px;-webkit-justify-content:space-between;justify-content:space-between;margin:2px 0}.rs-counter-base.alarm{color:#b70000;text-shadow:0 0 0 #b70000,0 0 1px #fff,0 0 1px #fff,0 0 2px #fff,0 0 2px #fff,0 0 3px #fff,0 0 3px #fff,0 0 4px #fff,0 0 4px #fff}.rs-counter-id{font-weight:300;-webkit-box-ordinal-group:0;-webkit-order:0;order:0;width:54px}.rs-counter-value{font-weight:300;-webkit-box-ordinal-group:1;-webkit-order:1;order:1;text-align:right;width:35px}.rs-canvas{-webkit-box-ordinal-group:2;-webkit-order:2;order:2}@media (min-width:480px){.rs-base{left:20px;top:20px}}'
                e('browserify-css').createStyle(r, { href: 'src/style/rStats.css' }),
                  (t.exports = r)
              },
              { 'browserify-css': 4 },
            ],
            188: [
              function (e, t, n) {
                var r = e('../constants/'),
                  i = e('../core/system').registerSystem,
                  o = 'data-aframe-default-camera'
                function a(e) {
                  var t
                  e.camera && (t = e.querySelector('[' + o + ']')) && e.removeChild(t)
                }
                t.exports.System = i('camera', {
                  init: function () {
                    ;(this.activeCameraEl = null),
                      (this.render = this.render.bind(this)),
                      (this.unwrapRender = this.unwrapRender.bind(this)),
                      (this.wrapRender = this.wrapRender.bind(this)),
                      (this.initialCameraFound = !1),
                      (this.numUserCameras = 0),
                      (this.numUserCamerasChecked = 0),
                      this.setupInitialCamera()
                  },
                  setupInitialCamera: function () {
                    var e,
                      t,
                      n = this.sceneEl,
                      r = this
                    if (!n.camera || n.camera.el.getAttribute('camera').spectator)
                      if ((e = n.querySelectorAll('a-camera, [camera]')).length)
                        for (this.numUserCameras = e.length, t = 0; t < e.length; t++)
                          e[t].addEventListener('object3dset', function (e) {
                            'camera' === e.detail.type && r.checkUserCamera(this)
                          }),
                            e[t].isNode
                              ? e[t].load()
                              : e[t].addEventListener('nodeready', function () {
                                  this.load()
                                })
                      else this.createDefaultCamera()
                    else n.emit('cameraready', { cameraEl: n.camera.el })
                  },
                  checkUserCamera: function (e) {
                    var t,
                      n = this.el.sceneEl
                    this.numUserCamerasChecked++,
                      this.initialCameraFound ||
                        ((t = e.getAttribute('camera')).active && !t.spectator
                          ? ((this.initialCameraFound = !0),
                            (n.camera = e.getObject3D('camera')),
                            n.emit('cameraready', { cameraEl: e }))
                          : this.numUserCamerasChecked === this.numUserCameras &&
                            this.createDefaultCamera())
                  },
                  createDefaultCamera: function () {
                    var e,
                      t = this.sceneEl
                    ;(e = document.createElement('a-entity')).setAttribute('camera', {
                      active: !0,
                    }),
                      e.setAttribute('position', { x: 0, y: r.DEFAULT_CAMERA_HEIGHT, z: 0 }),
                      e.setAttribute('wasd-controls', ''),
                      e.setAttribute('look-controls', ''),
                      e.setAttribute(r.AFRAME_INJECTED, ''),
                      e.addEventListener('object3dset', function (n) {
                        'camera' === n.detail.type &&
                          ((t.camera = n.detail.object), t.emit('cameraready', { cameraEl: e }))
                      }),
                      t.appendChild(e)
                  },
                  disableActiveCamera: function () {
                    var e
                    ;(e = this.sceneEl.querySelectorAll('[camera]'))[e.length - 1].setAttribute(
                      'camera',
                      'active',
                      !0,
                    )
                  },
                  setActiveCamera: function (e) {
                    var t,
                      n,
                      r,
                      i,
                      s = this.activeCameraEl,
                      l = this.sceneEl
                    if ((i = e.getObject3D('camera')) && e !== this.activeCameraEl) {
                      var c = l.querySelector('[' + o + ']')
                      for (
                        e !== (c && c.querySelector('[camera]')) && a(l),
                          this.activeCameraEl = e,
                          this.activeCameraEl.play(),
                          l.camera = i,
                          s && s.setAttribute('camera', 'active', !1),
                          n = l.querySelectorAll('[camera]'),
                          r = 0;
                        r < n.length;
                        r++
                      )
                        (t = n[r]).isEntity &&
                          e !== t &&
                          (t.setAttribute('camera', 'active', !1), t.pause())
                      l.emit('camera-set-active', { cameraEl: e })
                    }
                  },
                  setSpectatorCamera: function (e) {
                    var t,
                      n = this.spectatorCameraEl,
                      r = this.sceneEl
                    e.getObject3D('camera') &&
                      e !== this.spectatorCameraEl &&
                      (n && n.setAttribute('camera', 'spectator', !1),
                      (t = this.spectatorCameraEl = e),
                      r.addEventListener('enter-vr', this.wrapRender),
                      r.addEventListener('exit-vr', this.unwrapRender),
                      t.setAttribute('camera', 'active', !1),
                      t.play(),
                      r.emit('camera-set-spectator', { cameraEl: e }))
                  },
                  disableSpectatorCamera: function () {
                    this.spectatorCameraEl = void 0
                  },
                  wrapRender: function () {
                    this.spectatorCameraEl &&
                      !this.originalRender &&
                      ((this.originalRender = this.sceneEl.renderer.render),
                      (this.sceneEl.renderer.render = this.render))
                  },
                  unwrapRender: function () {
                    this.originalRender &&
                      ((this.sceneEl.renderer.render = this.originalRender),
                      (this.originalRender = void 0))
                  },
                  render: function (e, t) {
                    var n,
                      r,
                      i = this.sceneEl
                    ;(n = i.renderer.xr.enabled),
                      this.originalRender.call(i.renderer, e, t),
                      this.spectatorCameraEl &&
                        !i.isMobile &&
                        n &&
                        ((r = this.spectatorCameraEl.components.camera.camera),
                        (i.renderer.xr.enabled = !1),
                        this.originalRender.call(i.renderer, e, r),
                        (i.renderer.xr.enabled = n))
                  },
                })
              },
              { '../constants/': 123, '../core/system': 142 },
            ],
            189: [
              function (e, t, n) {
                var r = e('../core/geometry').geometries,
                  i = e('../core/system').registerSystem
                function o(e) {
                  var t = e.primitive,
                    n = r[t] && r[t].Geometry,
                    i = new n()
                  if (!n) throw new Error('Unknown geometry `' + t + '`')
                  return i.init(e), i.geometry
                }
                function a(e, t) {
                  e[t]--
                }
                function s(e, t) {
                  e[t] = void 0 === e[t] ? 1 : e[t] + 1
                }
                t.exports.System = i('geometry', {
                  init: function () {
                    ;(this.cache = {}), (this.cacheCount = {})
                  },
                  clearCache: function () {
                    ;(this.cache = {}), (this.cacheCount = {})
                  },
                  getOrCreateGeometry: function (e) {
                    var t,
                      n,
                      r = this.cache
                    return e.skipCache
                      ? o(e)
                      : ((t = r[(n = this.hash(e))]),
                        s(this.cacheCount, n),
                        t || ((t = o(e)), (r[n] = t), t))
                  },
                  unuseGeometry: function (e) {
                    var t,
                      n = this.cache,
                      r = this.cacheCount
                    e.skipCache ||
                      (n[(t = this.hash(e))] &&
                        (a(r, t), r[t] > 0 || (n[t].dispose(), delete n[t], delete r[t])))
                  },
                  hash: function (e) {
                    return JSON.stringify(e)
                  },
                })
              },
              { '../core/geometry': 132, '../core/system': 142 },
            ],
            190: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../lib/three')
                t.exports.System = r('gltf-model', {
                  schema: { dracoDecoderPath: { default: '' } },
                  init: function () {
                    var e = this.data.dracoDecoderPath
                    ;(this.dracoLoader = new i.DRACOLoader()), this.dracoLoader.setDecoderPath(e)
                  },
                  update: function () {
                    var e
                    this.dracoLoader ||
                      ((e = this.data.dracoDecoderPath),
                      (this.dracoLoader = new i.DRACOLoader()),
                      this.dracoLoader.setDecoderPath(e))
                  },
                  getDRACOLoader: function () {
                    return this.dracoLoader
                  },
                })
              },
              { '../core/system': 142, '../lib/three': 179 },
            ],
            191: [
              function (e, t, n) {
                e('./camera'),
                  e('./geometry'),
                  e('./gltf-model'),
                  e('./light'),
                  e('./material'),
                  e('./renderer'),
                  e('./shadow'),
                  e('./tracked-controls-webvr'),
                  e('./tracked-controls-webxr'),
                  e('./webxr')
              },
              {
                './camera': 188,
                './geometry': 189,
                './gltf-model': 190,
                './light': 192,
                './material': 193,
                './renderer': 194,
                './shadow': 195,
                './tracked-controls-webvr': 196,
                './tracked-controls-webxr': 197,
                './webxr': 198,
              },
            ],
            192: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../utils/bind'),
                  o = e('../constants/'),
                  a = 'data-aframe-default-light'
                t.exports.System = r('light', {
                  schema: { defaultLightsEnabled: { default: !0 } },
                  init: function () {
                    ;(this.defaultLights = !1),
                      (this.userDefinedLights = !1),
                      this.sceneEl.addEventListener('loaded', i(this.setupDefaultLights, this))
                  },
                  registerLight: function (e) {
                    e.hasAttribute(a) || (this.removeDefaultLights(), (this.userDefinedLights = !0))
                  },
                  removeDefaultLights: function () {
                    var e,
                      t = this.sceneEl
                    if (this.defaultLights) {
                      e = document.querySelectorAll('[' + a + ']')
                      for (var n = 0; n < e.length; n++) t.removeChild(e[n])
                      this.defaultLights = !1
                    }
                  },
                  setupDefaultLights: function () {
                    var e,
                      t,
                      n = this.sceneEl
                    this.userDefinedLights ||
                      this.defaultLights ||
                      !this.data.defaultLightsEnabled ||
                      ((e = document.createElement('a-entity')).setAttribute('light', {
                        color: '#BBB',
                        type: 'ambient',
                      }),
                      e.setAttribute(a, ''),
                      e.setAttribute(o.AFRAME_INJECTED, ''),
                      n.appendChild(e),
                      (t = document.createElement('a-entity')).setAttribute('light', {
                        color: '#FFF',
                        intensity: 0.6,
                        castShadow: !0,
                      }),
                      t.setAttribute('position', { x: -0.5, y: 1, z: 1 }),
                      t.setAttribute(a, ''),
                      t.setAttribute(o.AFRAME_INJECTED, ''),
                      n.appendChild(t),
                      (this.defaultLights = !0))
                  },
                })
              },
              { '../constants/': 123, '../core/system': 142, '../utils/bind': 199 },
            ],
            193: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../lib/three'),
                  o = e('../utils/'),
                  a = e('../utils/material').isHLS,
                  s = o.bind,
                  l = o.debug,
                  c = l('components:texture:error'),
                  u = new i.TextureLoader(),
                  h = l('components:texture:warn')
                function d(e, t) {
                  var n,
                    r,
                    i,
                    o = t.getAttribute('id')
                  if (o) return o
                  for (r = '', i = e || {}, n = 0; n < t.attributes.length; n++)
                    i[t.attributes[n].name] = t.attributes[n].value
                  return (
                    Object.keys(i)
                      .sort()
                      .forEach(function (e) {
                        r += e + ':' + i[e] + ';'
                      }),
                    r
                  )
                }
                function p(e, t) {
                  return new Promise(n)
                  function n(n, r) {
                    function o(e) {
                      f(e, t), (e.needsUpdate = !0), n(e)
                    }
                    'string' !== typeof e
                      ? o(new i.Texture(e))
                      : u.load(
                          e,
                          o,
                          function () {},
                          function (e) {
                            c(
                              '`$s` could not be fetched (Error code: %s; Response: %s)',
                              e.status,
                              e.statusText,
                            )
                          },
                        )
                  }
                }
                function f(e, t) {
                  var n = t.offset || { x: 0, y: 0 },
                    r = t.repeat || { x: 1, y: 1 }
                  !!t.npot &&
                    ((e.wrapS = i.ClampToEdgeWrapping),
                    (e.wrapT = i.ClampToEdgeWrapping),
                    (e.magFilter = i.LinearFilter),
                    (e.minFilter = i.LinearFilter)),
                    (1 === r.x && 1 === r.y) ||
                      ((e.wrapS = i.RepeatWrapping),
                      (e.wrapT = i.RepeatWrapping),
                      e.repeat.set(r.x, r.y)),
                    (0 === n.x && 0 === n.y) || e.offset.set(n.x, n.y)
                }
                function m(e, t, n) {
                  var r = document.createElement('video')
                  return (
                    (r.width = t),
                    (r.height = n),
                    r.setAttribute('playsinline', ''),
                    r.setAttribute('webkit-playsinline', ''),
                    (r.autoplay = !0),
                    (r.loop = !0),
                    (r.crossOrigin = 'anonymous'),
                    r.addEventListener(
                      'error',
                      function () {
                        h('`$s` is not a valid video', e)
                      },
                      !0,
                    ),
                    (r.src = e),
                    r
                  )
                }
                function v(e) {
                  return (
                    (e.autoplay =
                      e.hasAttribute('autoplay') && 'false' !== e.getAttribute('autoplay')),
                    (e.controls =
                      e.hasAttribute('controls') && 'false' !== e.getAttribute('controls')),
                    'false' === e.getAttribute('loop') && e.removeAttribute('loop'),
                    'false' === e.getAttribute('preload') && (e.preload = 'none'),
                    (e.crossOrigin = e.crossOrigin || 'anonymous'),
                    e.setAttribute('playsinline', ''),
                    e.setAttribute('webkit-playsinline', ''),
                    e
                  )
                }
                u.setCrossOrigin('anonymous'),
                  (t.exports.System = r('material', {
                    init: function () {
                      ;(this.materials = {}),
                        (this.textureCounts = {}),
                        (this.textureCache = {}),
                        this.sceneEl.addEventListener(
                          'materialtextureloaded',
                          s(this.onMaterialTextureLoaded, this),
                        )
                    },
                    clearTextureCache: function () {
                      this.textureCache = {}
                    },
                    loadTexture: function (e, t, n) {
                      var r = this
                      if ('CANVAS' !== e.tagName) {
                        if ('VIDEO' === e.tagName)
                          return (
                            e.src ||
                              e.srcObject ||
                              e.childElementCount ||
                              h(
                                'Video element was defined with neither `source` elements nor `src` / `srcObject` attributes.',
                              ),
                            void this.loadVideo(e, t, n)
                          )
                        o.srcLoader.validateSrc(e, i, a)
                      } else this.loadCanvas(e, t, n)
                      function i(e) {
                        r.loadImage(e, t, n)
                      }
                      function a(e) {
                        r.loadVideo(e, t, n)
                      }
                    },
                    loadImage: function (e, t, n) {
                      var r = this.hash(t),
                        i = this.textureCache
                      i[r] || (i[r] = p(e, t)), i[r].then(n)
                    },
                    loadCanvas: function (e, t, n) {
                      var r
                      f((r = new i.CanvasTexture(e)), t), n(r)
                    },
                    loadVideo: function (e, t, n) {
                      var r,
                        o,
                        s,
                        l,
                        c = this.textureCache
                      function u(e) {
                        ;(e.texture.needsUpdate = !0), n(e.texture, e.videoEl)
                      }
                      if ('string' !== typeof e) {
                        if (((s = e), c[(r = this.hashVideo(t, s))])) return void c[r].then(u)
                        v(s)
                      }
                      ;(s = s || m(e, t.width, t.height)),
                        c[(r = this.hashVideo(t, s))]
                          ? c[r].then(u)
                          : (((o = new i.VideoTexture(s)).minFilter = i.LinearFilter),
                            f(o, t),
                            this.sceneEl.isIOS &&
                              a(s.src || s.getAttribute('src'), s.type || s.getAttribute('type')) &&
                              ((o.format = i.RGBAFormat),
                              (o.needsCorrectionBGRA = !0),
                              (o.flipY = !1),
                              (o.needsCorrectionFlipY = !0)),
                            (l = { texture: o, videoEl: s }),
                            (c[r] = Promise.resolve(l)),
                            u(l))
                    },
                    hash: function (e) {
                      return (
                        e.src.tagName && ((e = o.extendDeep({}, e)).src = e.src.src),
                        JSON.stringify(e)
                      )
                    },
                    hashVideo: function (e, t) {
                      return d(e, t)
                    },
                    registerMaterial: function (e) {
                      this.materials[e.uuid] = e
                    },
                    unregisterMaterial: function (e) {
                      delete this.materials[e.uuid]
                      var t = this.textureCounts
                      Object.keys(e)
                        .filter(function (t) {
                          return e[t] && e[t].isTexture
                        })
                        .forEach(function (n) {
                          t[e[n].uuid]--, t[e[n].uuid] <= 0 && e[n].dispose()
                        })
                    },
                    updateMaterials: function (e) {
                      var t = this.materials
                      Object.keys(t).forEach(function (e) {
                        t[e].needsUpdate = !0
                      })
                    },
                    onMaterialTextureLoaded: function (e) {
                      this.textureCounts[e.detail.texture.uuid] ||
                        (this.textureCounts[e.detail.texture.uuid] = 0),
                        this.textureCounts[e.detail.texture.uuid]++
                    },
                  }))
              },
              {
                '../core/system': 142,
                '../lib/three': 179,
                '../utils/': 205,
                '../utils/material': 209,
              },
            ],
            194: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../utils/'),
                  o = e('../lib/three'),
                  a = (0, i.debug)('components:renderer:warn')
                t.exports.System = r('renderer', {
                  schema: {
                    antialias: { default: 'auto', oneOf: ['true', 'false', 'auto'] },
                    highRefreshRate: { default: i.device.isOculusBrowser() },
                    logarithmicDepthBuffer: { default: 'auto', oneOf: ['true', 'false', 'auto'] },
                    maxCanvasWidth: { default: 1920 },
                    maxCanvasHeight: { default: 1920 },
                    physicallyCorrectLights: { default: !1 },
                    precision: { default: 'high', oneOf: ['high', 'medium', 'low'] },
                    sortObjects: { default: !1 },
                    colorManagement: { default: !1 },
                    gammaOutput: { default: !1 },
                    alpha: { default: !0 },
                    foveationLevel: { default: 0 },
                  },
                  init: function () {
                    var e = this.data,
                      t = this.el,
                      n = t.renderer
                    ;(n.sortObjects = e.sortObjects),
                      (n.physicallyCorrectLights = e.physicallyCorrectLights),
                      (e.colorManagement || e.gammaOutput) &&
                        ((n.outputEncoding = o.sRGBEncoding),
                        e.gammaOutput &&
                          a(
                            'Property `gammaOutput` is deprecated. Use `renderer="colorManagement: true;"` instead.',
                          )),
                      t.hasAttribute('antialias') &&
                        a(
                          'Component `antialias` is deprecated. Use `renderer="antialias: true"` instead.',
                        ),
                      t.hasAttribute('logarithmicDepthBuffer') &&
                        a(
                          'Component `logarithmicDepthBuffer` is deprecated. Use `renderer="logarithmicDepthBuffer: true"` instead.',
                        )
                  },
                  applyColorCorrection: function (e) {
                    this.data.colorManagement &&
                      e &&
                      (e.isColor
                        ? e.convertSRGBToLinear()
                        : e.isTexture && (e.encoding = o.sRGBEncoding))
                  },
                })
              },
              { '../core/system': 142, '../lib/three': 179, '../utils/': 205 },
            ],
            195: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../lib/three'),
                  o = { basic: i.BasicShadowMap, pcf: i.PCFShadowMap, pcfsoft: i.PCFSoftShadowMap }
                t.exports.System = r('shadow', {
                  schema: {
                    enabled: { default: !0 },
                    autoUpdate: { default: !0 },
                    type: { default: 'pcf', oneOf: ['basic', 'pcf', 'pcfsoft'] },
                  },
                  init: function () {
                    var e = this.sceneEl,
                      t = this.data
                    ;(this.shadowMapEnabled = !1),
                      e.renderer &&
                        ((e.renderer.shadowMap.type = o[t.type]),
                        (e.renderer.shadowMap.autoUpdate = t.autoUpdate),
                        this.setShadowMapEnabled(this.shadowMapEnabled))
                  },
                  update: function (e) {
                    e.enabled !== this.data.enabled && this.setShadowMapEnabled(this.data.enabled)
                  },
                  setShadowMapEnabled: function (e) {
                    var t = this.sceneEl.renderer
                    ;(this.shadowMapEnabled = this.data.enabled && e),
                      t && (t.shadowMap.enabled = this.shadowMapEnabled)
                  },
                })
              },
              { '../core/system': 142, '../lib/three': 179 },
            ],
            196: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../utils'),
                  o = i.device.isWebXRAvailable
                t.exports.System = r('tracked-controls-webvr', {
                  init: function () {
                    var e = this
                    ;(this.controllers = []),
                      (this.isChrome = -1 !== navigator.userAgent.indexOf('Chrome')),
                      this.updateControllerList(),
                      (this.throttledUpdateControllerList = i.throttle(
                        this.updateControllerList,
                        500,
                        this,
                      )),
                      o ||
                        (navigator.getVRDisplays &&
                          this.sceneEl.addEventListener('enter-vr', function () {
                            navigator.getVRDisplays().then(function (t) {
                              t.length && (e.vrDisplay = t[0])
                            })
                          }))
                  },
                  tick: function () {
                    this.isChrome
                      ? this.updateControllerList()
                      : this.throttledUpdateControllerList()
                  },
                  updateControllerList: function () {
                    var e,
                      t,
                      n,
                      r,
                      i = this.controllers
                    if ((t = navigator.getGamepads && navigator.getGamepads())) {
                      for (r = i.length, i.length = 0, n = 0; n < t.length; ++n)
                        (e = t[n]) && e.pose && i.push(e)
                      i.length !== r && this.el.emit('controllersupdated', void 0, !1)
                    }
                  },
                })
              },
              { '../core/system': 142, '../utils': 205 },
            ],
            197: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../utils')
                t.exports.System = r('tracked-controls-webxr', {
                  init: function () {
                    ;(this.controllers = []),
                      (this.oldControllers = []),
                      (this.oldControllersLength = 0),
                      (this.throttledUpdateControllerList = i.throttle(
                        this.updateControllerList,
                        500,
                        this,
                      )),
                      (this.updateReferenceSpace = this.updateReferenceSpace.bind(this)),
                      this.el.addEventListener('enter-vr', this.updateReferenceSpace),
                      this.el.addEventListener('exit-vr', this.updateReferenceSpace)
                  },
                  tick: function () {
                    this.throttledUpdateControllerList()
                  },
                  updateReferenceSpace: function () {
                    var e = this,
                      t = this.el.xrSession
                    if (!t)
                      return (
                        (this.referenceSpace = void 0),
                        (this.controllers = []),
                        void (
                          this.oldControllersLength > 0 &&
                          ((this.oldControllersLength = 0),
                          this.el.emit('controllersupdated', void 0, !1))
                        )
                      )
                    var n = e.el.sceneEl.systems.webxr.sessionReferenceSpaceType
                    t.requestReferenceSpace(n)
                      .then(function (t) {
                        e.referenceSpace = t
                      })
                      .catch(function (t) {
                        throw (
                          (e.el.sceneEl.systems.webxr.warnIfFeatureNotRequested(
                            n,
                            'tracked-controls-webxr uses reference space "' + n + '".',
                          ),
                          t)
                        )
                      })
                  },
                  updateControllerList: function () {
                    var e,
                      t = this.el.xrSession,
                      n = this.oldControllers
                    if (!t) {
                      if (0 === this.oldControllersLength) return
                      return (
                        (this.oldControllersLength = 0),
                        (this.controllers = []),
                        void this.el.emit('controllersupdated', void 0, !1)
                      )
                    }
                    if (t.inputSources) {
                      if (
                        ((this.controllers = t.inputSources),
                        this.oldControllersLength === this.controllers.length)
                      ) {
                        var r = !0
                        for (e = 0; e < this.controllers.length; ++e)
                          if (
                            this.controllers[e] !== n[e] ||
                            this.controllers[e].gamepad !== n[e].gamepad
                          ) {
                            r = !1
                            break
                          }
                        if (r) return
                      }
                      for (n.length = 0, e = 0; e < this.controllers.length; e++)
                        n.push(this.controllers[e])
                      ;(this.oldControllersLength = this.controllers.length),
                        this.el.emit('controllersupdated', void 0, !1)
                    }
                  },
                })
              },
              { '../core/system': 142, '../utils': 205 },
            ],
            198: [
              function (e, t, n) {
                var r = e('../core/system').registerSystem,
                  i = e('../utils/').debug('systems:webxr:warn')
                t.exports.System = r('webxr', {
                  schema: {
                    referenceSpaceType: { type: 'string', default: 'local-floor' },
                    requiredFeatures: { type: 'array', default: ['local-floor'] },
                    optionalFeatures: { type: 'array', default: ['bounded-floor'] },
                    overlayElement: { type: 'selector' },
                  },
                  update: function () {
                    var e = this.data
                    ;(this.sessionConfiguration = {
                      requiredFeatures: e.requiredFeatures,
                      optionalFeatures: e.optionalFeatures,
                    }),
                      (this.sessionReferenceSpaceType = e.referenceSpaceType),
                      e.overlayElement &&
                        (this.warnIfFeatureNotRequested('dom-overlay'),
                        (this.sessionConfiguration.domOverlay = { root: e.overlayElement }))
                  },
                  wasFeatureRequested: function (e) {
                    return (
                      'viewer' === e ||
                      'local' === e ||
                      !(
                        !this.sessionConfiguration.requiredFeatures.includes(e) &&
                        !this.sessionConfiguration.optionalFeatures.includes(e)
                      )
                    )
                  },
                  warnIfFeatureNotRequested: function (e, t) {
                    this.wasFeatureRequested(e) ||
                      i(
                        (t ? t + ' ' : '') +
                          'Please add the feature "' +
                          e +
                          '" to a-scene\'s webxr system options in requiredFeatures/optionalFeatures.',
                      )
                  },
                })
              },
              { '../core/system': 142, '../utils/': 205 },
            ],
            199: [
              function (e, t, n) {
                t.exports = function (e, t) {
                  return (
                    (n = Array.prototype.slice.call(arguments, 2)),
                    function () {
                      var r = n.concat(Array.prototype.slice.call(arguments, 0))
                      return e.apply(t, r)
                    }
                  )
                  var n
                }
              },
              {},
            ],
            200: [
              function (e, t, n) {
                var r = e('./debug'),
                  i = e('object-assign'),
                  o = r('utils:coordinates:warn'),
                  a = ['x', 'y', 'z', 'w'],
                  s = /^\s*((-?\d*\.{0,1}\d+(e-?\d+)?)\s+){2,3}(-?\d*\.{0,1}\d+(e-?\d+)?)\s*$/
                t.exports.regex = s
                var l = 'object',
                  c = /\s+/g
                function u(e, t) {
                  var n, r, o, s, u, h, d, f, m
                  if (e && e instanceof Object)
                    return (
                      (h = void 0 === e.x ? t && t.x : e.x),
                      (d = void 0 === e.y ? t && t.y : e.y),
                      (f = void 0 === e.z ? t && t.z : e.z),
                      (m = void 0 === e.w ? t && t.w : e.w),
                      void 0 !== h && null !== h && (e.x = p(h)),
                      void 0 !== d && null !== d && (e.y = p(d)),
                      void 0 !== f && null !== f && (e.z = p(f)),
                      void 0 !== m && null !== m && (e.w = p(m)),
                      e
                    )
                  if (null === e || void 0 === e) return typeof t === l ? i({}, t) : t
                  for (n = e.trim().split(c), u = {}, s = 0; s < a.length; s++)
                    if (((o = a[s]), n[s])) u[o] = parseFloat(n[s], 10)
                    else {
                      if (void 0 === (r = t && t[o])) continue
                      u[o] = p(r)
                    }
                  return u
                }
                function h(e) {
                  var t
                  return typeof e !== l
                    ? e
                    : ((t = e.x + ' ' + e.y),
                      null != e.z && (t += ' ' + e.z),
                      null != e.w && (t += ' ' + e.w),
                      t)
                }
                function d(e) {
                  return s.test(e)
                }
                function p(e) {
                  return null !== e && void 0 !== e && e.constructor === String
                    ? parseFloat(e, 10)
                    : e
                }
                ;(t.exports.parse = u),
                  (t.exports.stringify = h),
                  (t.exports.isCoordinates = d),
                  (t.exports.isCoordinate = function (e) {
                    return (
                      o(
                        '`AFRAME.utils.isCoordinate` has been renamed to `AFRAME.utils.isCoordinates`',
                      ),
                      d(e)
                    )
                  }),
                  (t.exports.toVector3 = function (e) {
                    return new THREE.Vector3(e.x, e.y, e.z)
                  })
              },
              { './debug': 201, 'object-assign': 39 },
            ],
            201: [
              function (t, n, r) {
                ;(function (r) {
                  var i = t('debug'),
                    o = t('object-assign'),
                    a = { colors: { debug: 'gray', error: 'red', info: 'gray', warn: 'orange' } },
                    s = function (e) {
                      var t = i(e)
                      return (t.color = c(e)), t
                    }
                  function l(e) {
                    var t = e.split(':')
                    return t[t.length - 1]
                  }
                  function c(e) {
                    var t = l(e)
                    return (a.colors && a.colors[t]) || null
                  }
                  function u() {
                    try {
                      return window.localStorage
                    } catch (e) {}
                  }
                  o(s, i)
                  var h = u()
                  h && (parseInt(h.logs, 10) || 'true' === h.logs)
                    ? s.enable('*')
                    : s.enable('*:error,*:info,*:warn'),
                    r.browser && (window.logs = s),
                    (n.exports = s)
                }.call(this, t('_process')))
              },
              { _process: 49, debug: 8, 'object-assign': 39 },
            ],
            202: [
              function (e, t, n) {
                ;(function (n) {
                  var r,
                    i = e('debug')('device:error'),
                    o = !1,
                    a = !1,
                    s = (t.exports.isWebXRAvailable = !window.debug && void 0 !== navigator.xr)
                  if (
                    (window.addEventListener('vrdisplayactivate', function (e) {
                      var t
                      s ||
                        ((t = document.createElement('canvas')),
                        (r = e.display),
                        t.getContext('webgl', {}),
                        r.requestPresent([{ source: t }]).then(
                          function () {},
                          function () {},
                        ))
                    }),
                    s)
                  ) {
                    var l = function () {
                        var e = document.querySelector('a-scene')
                        e
                          ? e.hasLoaded
                            ? e.components['vr-mode-ui'].updateEnterInterfaces()
                            : e.addEventListener('loaded', l)
                          : window.addEventListener('DOMContentLoaded', l)
                      },
                      c = function (e) {
                        i('WebXR session support error: ' + e.message)
                      }
                    navigator.xr.isSessionSupported
                      ? (navigator.xr
                          .isSessionSupported('immersive-vr')
                          .then(function (e) {
                            ;(o = e), l()
                          })
                          .catch(c),
                        navigator.xr
                          .isSessionSupported('immersive-ar')
                          .then(function (e) {
                            ;(a = e), l()
                          })
                          .catch(function () {}))
                      : navigator.xr.supportsSession
                      ? (navigator.xr
                          .supportsSession('immersive-vr')
                          .then(function () {
                            ;(o = !0), l()
                          })
                          .catch(c),
                        navigator.xr
                          .supportsSession('immersive-ar')
                          .then(function () {
                            ;(a = !0), l()
                          })
                          .catch(function () {}))
                      : i('WebXR has neither isSessionSupported or supportsSession?!')
                  } else
                    navigator.getVRDisplays &&
                      navigator.getVRDisplays().then(function (e) {
                        var t = document.querySelector('a-scene')
                        ;(r = e.length && e[0]), t && t.emit('displayconnected', { vrDisplay: r })
                      })
                  function u() {
                    return r
                  }
                  function h() {
                    return o || a || !!u()
                  }
                  function d() {
                    return a
                  }
                  ;(t.exports.getVRDisplay = u),
                    (t.exports.checkHeadsetConnected = h),
                    (t.exports.checkARSupport = d)
                  var p = (function () {
                    var e,
                      t = !1
                    return (
                      (e = window.navigator.userAgent || window.navigator.vendor || window.opera),
                      (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
                        e,
                      ) ||
                        /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
                          e.substr(0, 4),
                        )) &&
                        (t = !0),
                      (m() || f() || A()) && (t = !0),
                      b() && (t = !1),
                      function () {
                        return t
                      }
                    )
                  })()
                  function f(e) {
                    var t = e || window.navigator.userAgent
                    return /ipad|Nexus (7|9)|xoom|sch-i800|playbook|tablet|kindle/i.test(t)
                  }
                  function m() {
                    return /iPad|iPhone|iPod/.test(window.navigator.platform)
                  }
                  function v() {
                    return !p() && !b() && void 0 !== window.orientation
                  }
                  function g() {
                    return /(OculusBrowser)/i.test(window.navigator.userAgent)
                  }
                  function y() {
                    return /(Mobile VR)/i.test(window.navigator.userAgent)
                  }
                  function b() {
                    return g() || y()
                  }
                  function A() {
                    return /R7 Build/.test(window.navigator.userAgent)
                  }
                  ;(t.exports.isMobile = p),
                    (t.exports.isTablet = f),
                    (t.exports.isIOS = m),
                    (t.exports.isMobileDeviceRequestingDesktopSite = v),
                    (t.exports.isOculusBrowser = g),
                    (t.exports.isFirefoxReality = y),
                    (t.exports.isMobileVR = b),
                    (t.exports.isR7 = A),
                    (t.exports.isLandscape = function () {
                      var e = window.orientation
                      return A() && (e += 90), 90 === e || -90 === e
                    }),
                    (t.exports.isBrowserEnvironment = !(n && !n.browser)),
                    (t.exports.isNodeEnvironment = !t.exports.isBrowserEnvironment)
                }.call(this, e('_process')))
              },
              { _process: 49, debug: 8 },
            ],
            203: [
              function (e, t, n) {
                var r = {}
                function i(e, t) {
                  return (
                    r[(t = t || '.')] || (r[t] = {}),
                    -1 !== e.indexOf(t) ? (r[t][e] = e.split(t)) : (r[t][e] = e),
                    r[t][e]
                  )
                }
                ;(t.exports.getComponentPropertyPath = i),
                  (t.exports.propertyPathCache = r),
                  (t.exports.getComponentProperty = function (e, t, n) {
                    var r
                    return (
                      (n = n || '.'),
                      -1 !== t.indexOf(n)
                        ? (r = i(t, n)).constructor === String
                          ? e.getAttribute(r)
                          : e.getAttribute(r[0])[r[1]]
                        : e.getAttribute(t)
                    )
                  }),
                  (t.exports.setComponentProperty = function (e, t, n, r) {
                    var o
                    ;(r = r || '.'),
                      -1 === t.indexOf(r)
                        ? e.setAttribute(t, n)
                        : (o = i(t, r)).constructor === String
                        ? e.setAttribute(o, n)
                        : e.setAttribute(o[0], o[1], n)
                  })
              },
              {},
            ],
            204: [
              function (e, t, n) {
                t.exports = function (e) {
                  var t = e.style.width,
                    n = e.style.height
                  ;(e.style.width = parseInt(t, 10) + 1 + 'px'),
                    (e.style.height = parseInt(n, 10) + 1 + 'px'),
                    setTimeout(function () {
                      ;(e.style.width = t), (e.style.height = n)
                    }, 200)
                }
              },
              {},
            ],
            205: [
              function (e, t, n) {
                var r = e('./debug'),
                  i = e('deep-assign'),
                  o = e('./device'),
                  a = e('object-assign'),
                  s = e('./object-pool'),
                  l = r('utils:warn')
                ;(t.exports.bind = e('./bind')),
                  (t.exports.coordinates = e('./coordinates')),
                  (t.exports.debug = r),
                  (t.exports.device = o),
                  (t.exports.entity = e('./entity')),
                  (t.exports.forceCanvasResizeSafariMobile = e('./forceCanvasResizeSafariMobile')),
                  (t.exports.isIE11 = e('./is-ie11')),
                  (t.exports.material = e('./material')),
                  (t.exports.objectPool = s),
                  (t.exports.split = e('./split').split),
                  (t.exports.styleParser = e('./styleParser')),
                  (t.exports.trackedControls = e('./tracked-controls')),
                  (t.exports.checkHeadsetConnected = function () {
                    return (
                      l(
                        '`utils.checkHeadsetConnected` has moved to `utils.device.checkHeadsetConnected`',
                      ),
                      o.checkHeadsetConnected(arguments)
                    )
                  }),
                  (t.exports.isGearVR = t.exports.device.isGearVR =
                    function () {
                      l('`utils.isGearVR` has been deprecated, use `utils.device.isMobileVR`')
                    }),
                  (t.exports.isIOS = function () {
                    return l('`utils.isIOS` has moved to `utils.device.isIOS`'), o.isIOS(arguments)
                  }),
                  (t.exports.isOculusGo = t.exports.device.isOculusGo =
                    function () {
                      l('`utils.isOculusGo` has been deprecated, use `utils.device.isMobileVR`')
                    }),
                  (t.exports.isMobile = function () {
                    return (
                      l('`utils.isMobile has moved to `utils.device.isMobile`'),
                      o.isMobile(arguments)
                    )
                  }),
                  (t.exports.throttle = function (e, n, r) {
                    var i
                    return (
                      r && (e = t.exports.bind(e, r)),
                      function () {
                        var t = Date.now()
                        ;('undefined' === typeof i ||
                          ('undefined' === typeof i ? n : t - i) >= n) &&
                          ((i = t), e.apply(null, arguments))
                      }
                    )
                  }),
                  (t.exports.throttleTick = function (e, n, r) {
                    var i
                    return (
                      r && (e = t.exports.bind(e, r)),
                      function (t, r) {
                        var o = 'undefined' === typeof i ? r : t - i
                        ;('undefined' === typeof i || o >= n) && ((i = t), e(t, o))
                      }
                    )
                  }),
                  (t.exports.debounce = function (e, t, n) {
                    var r
                    return function () {
                      var i = this,
                        o = arguments,
                        a = function () {
                          ;(r = null), n || e.apply(i, o)
                        },
                        s = n && !r
                      clearTimeout(r), (r = setTimeout(a, t)), s && e.apply(i, o)
                    }
                  }),
                  (t.exports.extend = a),
                  (t.exports.extendDeep = i),
                  (t.exports.clone = function (e) {
                    return JSON.parse(JSON.stringify(e))
                  })
                var c = (function () {
                  var e = s.createPool(function () {
                    return []
                  })
                  return function (t, n) {
                    var r, i, o, a, s, l
                    if (
                      void 0 === t ||
                      void 0 === n ||
                      null === t ||
                      null === n ||
                      !(
                        (t && n && t.constructor === Object && n.constructor === Object) ||
                        (t.constructor === Array && n.constructor === Array)
                      )
                    )
                      return t === n
                    for (r in ((i = e.use()), (o = e.use()), (i.length = 0), (o.length = 0), t))
                      i.push(r)
                    for (r in n) o.push(r)
                    if (i.length !== o.length) return e.recycle(i), e.recycle(o), !1
                    for (a = 0; a < i.length; ++a)
                      if (
                        ((s = t[i[a]]),
                        (l = n[i[a]]),
                        'object' === typeof s ||
                          'object' === typeof l ||
                          (Array.isArray(s) && Array.isArray(l)))
                      ) {
                        if (s === l) continue
                        if (!c(s, l)) return e.recycle(i), e.recycle(o), !1
                      } else if (s !== l) return e.recycle(i), e.recycle(o), !1
                    return e.recycle(i), e.recycle(o), !0
                  }
                })()
                ;(t.exports.deepEqual = c),
                  (t.exports.diff = (function () {
                    var e = []
                    return function (t, n, r) {
                      var i, o, a, s, l, u, h
                      for (l in ((s = r || {}), (e.length = 0), t)) e.push(l)
                      if (!n) return s
                      for (a in n) -1 === e.indexOf(a) && e.push(a)
                      for (u = 0; u < e.length; u++)
                        (i = t[(l = e[u])]),
                          (o = n[l]),
                          (((h = i && o && i.constructor === Object && o.constructor === Object) &&
                            !c(i, o)) ||
                            (!h && i !== o)) &&
                            (s[l] = o)
                      return s
                    }
                  })()),
                  (t.exports.shouldCaptureKeyEvent = function (e) {
                    return !e.metaKey && document.activeElement === document.body
                  }),
                  (t.exports.splitString = function (e, t) {
                    'undefined' === typeof t && (t = ' ')
                    var n = new RegExp(t, 'g')
                    return (e = (e || '').replace(n, t)).split(t)
                  }),
                  (t.exports.getElData = function (e, t) {
                    t = t || {}
                    var n = {}
                    function r(t) {
                      e.hasAttribute(t) && (n[t] = e.getAttribute(t))
                    }
                    return Object.keys(t).forEach(r), n
                  }),
                  (t.exports.getUrlParameter = function (e) {
                    e = e.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]')
                    var t = new RegExp('[\\?&]' + e + '=([^&#]*)').exec(location.search)
                    return null === t ? '' : decodeURIComponent(t[1].replace(/\+/g, ' '))
                  }),
                  (t.exports.isIframed = function () {
                    return window.top !== window.self
                  }),
                  (t.exports.findAllScenes = function (e) {
                    for (
                      var t = [], n = e.getElementsByTagName('*'), r = 0, i = n.length;
                      r < i;
                      r++
                    )
                      n[r].isScene && t.push(n[r])
                    return t
                  }),
                  (t.exports.srcLoader = e('./src-loader'))
              },
              {
                './bind': 199,
                './coordinates': 200,
                './debug': 201,
                './device': 202,
                './entity': 203,
                './forceCanvasResizeSafariMobile': 204,
                './is-ie11': 207,
                './material': 209,
                './object-pool': 210,
                './split': 211,
                './src-loader': 212,
                './styleParser': 213,
                './tracked-controls': 214,
                'deep-assign': 10,
                'object-assign': 39,
              },
            ],
            206: [
              function (e, t, n) {
                window.addEventListener('orientationchange', function () {
                  ;(document.documentElement.style.height = 'initial'),
                    setTimeout(function () {
                      ;(document.documentElement.style.height = '100%'),
                        setTimeout(function () {
                          window.scrollTo(0, 1)
                        }, 500)
                    }, 500)
                })
              },
              {},
            ],
            207: [
              function (e, t, n) {
                function r() {
                  var e = -1,
                    t = navigator.userAgent
                  return (
                    'Microsoft Internet Explorer' === navigator.appName
                      ? null != new RegExp('MSIE ([0-9]{1,}[\\.0-9]{0,})').exec(t) &&
                        (e = parseFloat(RegExp.$1))
                      : 'Netscape' === navigator.appName &&
                        null != new RegExp('Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})').exec(t) &&
                        (e = parseFloat(RegExp.$1)),
                    e
                  )
                }
                t.exports = 11 === r()
              },
              {},
            ],
            208: [
              function (e, t, n) {
                t.exports = function (e) {
                  return /(iphone|ipod|ipad).*os.(7_|8_|9_)/i.test(e)
                }
              },
              {},
            ],
            209: [
              function (e, t, n) {
                var r = e('../lib/three'),
                  i = ['application/x-mpegurl', 'application/vnd.apple.mpegurl'],
                  o = new Set(['emissiveMap', 'envMap', 'map', 'specularMap'])
                function a(e, t) {
                  t &&
                    (e.emit('materialtextureloaded', { src: t.image, texture: t }),
                    t.image &&
                      'VIDEO' === t.image.tagName &&
                      (t.image.addEventListener('loadeddata', function () {
                        e.components &&
                          e.components.material &&
                          (t.needsCorrectionBGRA &&
                            t.needsCorrectionFlipY &&
                            -1 !==
                              ['standard', 'flat'].indexOf(e.components.material.data.shader) &&
                            e.setAttribute('material', 'shader', 'ios10hls'),
                          e.emit('materialvideoloadeddata', { src: t.image, texture: t }))
                      }),
                      t.image.addEventListener('ended', function () {
                        e.emit('materialvideoended', { src: t.image, texture: t })
                      })))
                }
                ;(t.exports.updateMapMaterialFromData = function (e, t, n, i) {
                  var s = n.el,
                    l = n.material,
                    c = s.sceneEl.systems.renderer,
                    u = i[t]
                  if ((n.materialSrcs || (n.materialSrcs = {}), !u))
                    return delete n.materialSrcs[e], void d(null)
                  function h(t) {
                    n.materialSrcs[e] === u && d(t)
                  }
                  function d(t) {
                    ;(l[e] = t),
                      t && o.has(e) && c.applyColorCorrection(t),
                      (l.needsUpdate = !0),
                      a(s, t)
                  }
                  u !== n.materialSrcs[e] &&
                    ((n.materialSrcs[e] = u),
                    u instanceof r.Texture
                      ? d(u)
                      : s.sceneEl.systems.material.loadTexture(
                          u,
                          { src: u, repeat: i.repeat, offset: i.offset, npot: i.npot },
                          h,
                        ))
                }),
                  (t.exports.updateMap = function (e, n) {
                    return t.exports.updateMapMaterialFromData('map', 'src', e, n)
                  }),
                  (t.exports.updateDistortionMap = function (e, t, n) {
                    var r = e
                    'ambientOcclusion' === e && (r = 'ao')
                    var i = t.el,
                      s = t.material,
                      l = i.sceneEl.systems.renderer,
                      c = n[e + 'Map'],
                      u = {}
                    if (
                      ((u.src = c),
                      (u.offset = n[e + 'TextureOffset']),
                      (u.repeat = n[e + 'TextureRepeat']),
                      (u.wrap = n[e + 'TextureWrap']),
                      c)
                    ) {
                      if (c === t[e + 'TextureSrc']) return
                      return (
                        (t[e + 'TextureSrc'] = c),
                        void i.sceneEl.systems.material.loadTexture(c, u, h)
                      )
                    }
                    function h(e) {
                      var t = r + 'Map'
                      ;(s[t] = e),
                        e && o.has(t) && l.applyColorCorrection(e),
                        (s.needsUpdate = !0),
                        a(i, e)
                    }
                    s.map && h(null)
                  }),
                  (t.exports.handleTextureEvents = a),
                  (t.exports.isHLS = function (e, t) {
                    return (
                      !(!t || !i.includes(t.toLowerCase())) ||
                      !!(e && e.toLowerCase().indexOf('.m3u8') > 0)
                    )
                  })
              },
              { '../lib/three': 179 },
            ],
            210: [
              function (e, t, n) {
                var r = Object.freeze(Object.create(null))
                function i() {
                  return {}
                }
                function o(e) {
                  var t
                  if (e && e.constructor === Object) for (t in e) e[t] = void 0
                }
                function a(e, t) {
                  var n
                  if (e && e.constructor === Object) for (n in e) n in t || delete e[n]
                }
                ;(t.exports.createPool = function (e) {
                  var t = [],
                    n = null
                  function a() {
                    var e
                    return (
                      (null !== n && n !== t.length) || l(t.length || 5),
                      (e = t[n]),
                      (t[n++] = r),
                      o(e),
                      e
                    )
                  }
                  function s(e) {
                    e instanceof Object &&
                      (null !== n && -1 !== n ? (t[--n] = e) : (t[t.length] = e))
                  }
                  function l(r) {
                    var i, o
                    if (((r = void 0 === r ? t.length : r) > 0 && null == n && (n = 0), r > 0))
                      for (i = t.length, t.length += Number(r), o = i; o < t.length; o++) t[o] = e()
                    return t.length
                  }
                  function c() {
                    return t.length
                  }
                  return (e = e || i), { grow: l, pool: t, recycle: s, size: c, use: a }
                }),
                  (t.exports.clearObject = o),
                  (t.exports.removeUnusedKeys = a)
              },
              {},
            ],
            211: [
              function (e, t, n) {
                t.exports.split = (function () {
                  var e = {}
                  return function (t, n) {
                    return n in e || (e[n] = {}), t in e[n] || (e[n][t] = t.split(n)), e[n][t]
                  }
                })()
              },
              {},
            ],
            212: [
              function (t, n, r) {
                var i = t('./debug')('utils:src-loader:warn')
                function o(e, t, n) {
                  l(e, function (r) {
                    r ? t(e) : n(e)
                  })
                }
                function a(e, t) {
                  var n,
                    r,
                    a,
                    l = '',
                    c = []
                  for (r = 0; r < 5; r++) l += '(url\\((?:[^\\)]+)\\),\\s*)'
                  function h(e) {
                    c.push(e), 6 === c.length && t(c)
                  }
                  if (((l += '(url\\((?:[^\\)]+)\\)\\s*)'), (a = e.match(new RegExp(l)))))
                    for (r = 1; r < 7; r++) o(s(a[r]), h)
                  else if ((n = u(e)))
                    return 'A-CUBEMAP' === n.tagName && n.srcs
                      ? t(n.srcs)
                      : void i('Selector "%s" does not point to <a-cubemap>', e)
                }
                function s(e) {
                  var t = e.match(/\url\((.+)\)/)
                  if (t) return t[1]
                }
                function l(e, t) {
                  var n
                  e.tagName
                    ? t('IMG' === e.tagName)
                    : ((n = new XMLHttpRequest()).open('HEAD', e),
                      n.addEventListener('load', function (r) {
                        var i
                        n.status >= 200 && n.status < 300
                          ? null == (i = n.getResponseHeader('Content-Type'))
                            ? c(e, t)
                            : i.startsWith('image')
                            ? t(!0)
                            : t(!1)
                          : c(e, t),
                          n.abort()
                      }),
                      n.send())
                }
                function c(e, t) {
                  var n = new Image()
                  function r() {
                    t(!0)
                  }
                  function i() {
                    t(!1)
                  }
                  n.addEventListener('load', r), n.addEventListener('error', i), (n.src = e)
                }
                function u(t) {
                  try {
                    var n = document.querySelector(t)
                    return n || i('No element was found matching the selector: "%s"', t), n
                  } catch (e) {
                    return void i('"%s" is not a valid selector', t)
                  }
                }
                n.exports = { parseUrl: s, validateSrc: o, validateCubemapSrc: a }
              },
              { './debug': 201 },
            ],
            213: [
              function (e, t, n) {
                var r = /-([a-z])/g
                function i(e) {
                  return e.replace(r, c)
                }
                function o(e) {
                  var t, n
                  for (n in e) n !== (t = i(n)) && ((e[t] = e[n]), delete e[n])
                  return e
                }
                ;(t.exports.parse = function (e, t) {
                  var n
                  return 'string' !== typeof e || (n = s(e, t))[''] ? e : o(n)
                }),
                  (t.exports.stringify = function (e) {
                    return 'string' === typeof e ? e : l(e)
                  }),
                  (t.exports.toCamelCase = i),
                  (t.exports.transformKeysToCamelCase = o)
                var a = (function () {
                  var e = [],
                    t = /url\([^)]+$/
                  return function (n) {
                    var r,
                      i = '',
                      o = 0,
                      a = ';'
                    for (e.length = 0; o < n.length; )
                      -1 === (r = n.indexOf(a, o)) && (r = n.length),
                        (i += n.substring(o, r)),
                        t.test(i)
                          ? ((i += ';'), (o = r + 1))
                          : (e.push(i.trim()), (i = ''), (o = r + 1))
                    return e
                  }
                })()
                function s(e, t) {
                  var n, r, i, o, s, l
                  for (t = t || {}, n = a(e), r = 0; r < n.length; r++)
                    (i = n[r]) &&
                      ((o = i.indexOf(':')),
                      (s = i.substr(0, o).trim()),
                      (l = i.substr(o + 1).trim()),
                      (t[s] = l))
                  return t
                }
                function l(e) {
                  var t,
                    n = 0,
                    r = 0,
                    i = ''
                  for (t in e) n++
                  for (t in e) (i += t + ': ' + e[t]), r < n - 1 && (i += '; '), r++
                  return i
                }
                function c(e) {
                  return e[1].toUpperCase()
                }
              },
              {},
            ],
            214: [
              function (e, t, n) {
                var r = e('../constants').DEFAULT_HANDEDNESS,
                  i = ['x', 'y', 'z', 'w'],
                  o = 2
                function a(e, t, n) {
                  var r,
                    i,
                    o = e.el.sceneEl,
                    a = n.index || 0
                  return (
                    !!t &&
                    !!(i = o && o.systems['tracked-controls-webvr']) &&
                    !!(r = i.controllers).length &&
                    !!l(r, null, t, n.hand, a)
                  )
                }
                function s(e, t, n) {
                  var r,
                    i = e.el.sceneEl,
                    o = i && i.systems['tracked-controls-webxr']
                  return (
                    !!o &&
                    !(!(r = o.controllers) || !r.length) &&
                    c(r, t, n.hand, n.index, n.iterateControllerProfiles, n.handTracking)
                  )
                }
                function l(e, t, n, i, a) {
                  var s,
                    l,
                    c = 0
                  for (l = 0; l < e.length; l++)
                    if (
                      ((s = e[l]),
                      (!n || s.id.startsWith(n)) &&
                        (n || s.id === t) &&
                        (!i || !s.hand || i === s.hand))
                    ) {
                      if (!i || s.hand) return s
                      if (c === o * a + (i === r ? 0 : 1)) return s
                      ++c
                    }
                }
                function c(e, t, n, r, i, o) {
                  var a,
                    s,
                    l,
                    c,
                    u = !1
                  for (a = 0; a < e.length; a++) {
                    if (((c = (l = e[a]).profiles), o)) u = l.hand
                    else if (i) for (s = 0; s < c.length && !(u = c[s].startsWith(t)); s++);
                    else u = c.length > 0 && c[0].startsWith(t)
                    if (u)
                      if ('right' === l.handedness || 'left' === l.handedness) {
                        if (l.handedness === n) return e[a]
                      } else if (a === r) return e[a]
                  }
                }
                ;(t.exports.checkControllerPresentAndSetup = function (e, t, n) {
                  var r,
                    i,
                    o = e.el,
                    l = o.sceneEl.hasWebXR
                  if (
                    ((i = !!(r = (l ? s : a)(e, t, n))),
                    !e.controllerPresent || e.controllerEventsActive || l || e.addEventListeners(),
                    i === e.controllerPresent)
                  )
                    return i
                  ;(e.controllerPresent = i),
                    i
                      ? (e.addEventListeners(),
                        e.injectTrackedControls(r),
                        o.emit('controllerconnected', { name: e.name, component: e }))
                      : (e.removeEventListeners(),
                        o.emit('controllerdisconnected', { name: e.name, component: e }))
                }),
                  (t.exports.isControllerPresentWebVR = a),
                  (t.exports.isControllerPresentWebXR = s),
                  (t.exports.findMatchingControllerWebVR = l),
                  (t.exports.findMatchingControllerWebXR = c),
                  (t.exports.emitIfAxesChanged = function (e, t, n) {
                    var r, o, a, s, l
                    for (o in t) {
                      for (r = t[o], a = !1, l = 0; l < r.length; l++)
                        n.detail.changed[r[l]] && (a = !0)
                      if (a) {
                        for (s = {}, l = 0; l < r.length; l++) s[i[l]] = n.detail.axis[r[l]]
                        e.el.emit(o + 'moved', s)
                      }
                    }
                  }),
                  (t.exports.onButtonEvent = function (e, t, n, r) {
                    var i = (r ? n.mapping[r] : n.mapping).buttons[e]
                    n.el.emit(i + t), n.updateModel && n.updateModel(i, t)
                  })
              },
              { '../constants': 123 },
            ],
            215: [
              function (e, t, n) {
                THREE.DeviceOrientationControls = function (e) {
                  var t = this
                  ;(this.object = e),
                    this.object.rotation.reorder('YXZ'),
                    (this.enabled = !0),
                    (this.deviceOrientation = {}),
                    (this.screenOrientation = 0),
                    (this.alphaOffset = 0)
                  var n = function (e) {
                      t.deviceOrientation = e
                    },
                    r = function () {
                      t.screenOrientation = window.orientation || 0
                    },
                    i = (function () {
                      var e = new THREE.Vector3(0, 0, 1),
                        t = new THREE.Euler(),
                        n = new THREE.Quaternion(),
                        r = new THREE.Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5))
                      return function (i, o, a, s, l) {
                        t.set(a, o, -s, 'YXZ'),
                          i.setFromEuler(t),
                          i.multiply(r),
                          i.multiply(n.setFromAxisAngle(e, -l))
                      }
                    })()
                  ;(this.connect = function () {
                    r(),
                      window.addEventListener('orientationchange', r, !1),
                      window.addEventListener('deviceorientation', n, !1),
                      (t.enabled = !0)
                  }),
                    (this.disconnect = function () {
                      window.removeEventListener('orientationchange', r, !1),
                        window.removeEventListener('deviceorientation', n, !1),
                        (t.enabled = !1)
                    }),
                    (this.update = function () {
                      if (!1 !== t.enabled) {
                        var e = t.deviceOrientation
                        if (e) {
                          var n = e.alpha ? THREE.Math.degToRad(e.alpha) + t.alphaOffset : 0,
                            r = e.beta ? THREE.Math.degToRad(e.beta) : 0,
                            o = e.gamma ? THREE.Math.degToRad(e.gamma) : 0,
                            a = t.screenOrientation ? THREE.Math.degToRad(t.screenOrientation) : 0
                          i(t.object.quaternion, n, r, o, a)
                        }
                      }
                    }),
                    (this.dispose = function () {
                      t.disconnect()
                    }),
                    this.connect()
                }
              },
              {},
            ],
            216: [
              function (e, t, n) {
                ;(window.glStats = function () {
                  var e = null,
                    t = 0,
                    n = 0,
                    r = 0,
                    i = 0,
                    o = 0,
                    a = 0,
                    s = 0
                  function l(e, t) {
                    return function () {
                      t.apply(this, arguments), e.apply(this, arguments)
                    }
                  }
                  function c() {
                    e('allcalls').set(t + n),
                      e('drawElements').set(n),
                      e('drawArrays').set(t),
                      e('bindTexture').set(s),
                      e('useProgram').set(r),
                      e('glfaces').set(i),
                      e('glvertices').set(o),
                      e('glpoints').set(a)
                  }
                  function u() {
                    ;(t = 0), (n = 0), (r = 0), (i = 0), (o = 0), (a = 0), (s = 0)
                  }
                  function h() {}
                  function d(t) {
                    e = t
                  }
                  return (
                    (WebGLRenderingContext.prototype.drawArrays = l(
                      WebGLRenderingContext.prototype.drawArrays,
                      function () {
                        t++, arguments[0] == this.POINTS ? (a += arguments[2]) : (o += arguments[2])
                      },
                    )),
                    (WebGLRenderingContext.prototype.drawElements = l(
                      WebGLRenderingContext.prototype.drawElements,
                      function () {
                        n++, (i += arguments[1] / 3), (o += arguments[1])
                      },
                    )),
                    (WebGLRenderingContext.prototype.useProgram = l(
                      WebGLRenderingContext.prototype.useProgram,
                      function () {
                        r++
                      },
                    )),
                    (WebGLRenderingContext.prototype.bindTexture = l(
                      WebGLRenderingContext.prototype.bindTexture,
                      function () {
                        s++
                      },
                    )),
                    {
                      update: c,
                      start: u,
                      end: h,
                      attach: d,
                      values: {
                        allcalls: { over: 3e3, caption: 'Calls (hook)' },
                        drawelements: { caption: 'drawElements (hook)' },
                        drawarrays: { caption: 'drawArrays (hook)' },
                      },
                      groups: [
                        {
                          caption: 'WebGL',
                          values: [
                            'allcalls',
                            'drawelements',
                            'drawarrays',
                            'useprogram',
                            'bindtexture',
                            'glfaces',
                            'glvertices',
                            'glpoints',
                          ],
                        },
                      ],
                      fractions: [{ base: 'allcalls', steps: ['drawelements', 'drawarrays'] }],
                    }
                  )
                }),
                  (window.threeStats = function (e) {
                    var t = null
                    function n() {
                      t('renderer.info.memory.geometries').set(e.info.memory.geometries),
                        t('renderer.info.programs').set(e.info.programs.length),
                        t('renderer.info.memory.textures').set(e.info.memory.textures),
                        t('renderer.info.render.calls').set(e.info.render.calls),
                        t('renderer.info.render.triangles').set(e.info.render.triangles),
                        t('renderer.info.render.points').set(e.info.render.points)
                    }
                    function r() {}
                    function i() {}
                    function o(e) {
                      t = e
                    }
                    return {
                      update: n,
                      start: r,
                      end: i,
                      attach: o,
                      values: {
                        'renderer.info.memory.geometries': { caption: 'Geometries' },
                        'renderer.info.memory.textures': { caption: 'Textures' },
                        'renderer.info.programs': { caption: 'Programs' },
                        'renderer.info.render.calls': { caption: 'Calls' },
                        'renderer.info.render.triangles': { caption: 'Triangles', over: 1e3 },
                        'renderer.info.render.points': { caption: 'Points' },
                      },
                      groups: [
                        {
                          caption: 'Three.js - Memory',
                          values: [
                            'renderer.info.memory.geometries',
                            'renderer.info.programs',
                            'renderer.info.memory.textures',
                          ],
                        },
                        {
                          caption: 'Three.js - Render',
                          values: [
                            'renderer.info.render.calls',
                            'renderer.info.render.triangles',
                            'renderer.info.render.points',
                          ],
                        },
                      ],
                      fractions: [],
                    }
                  }),
                  (window.BrowserStats = function () {
                    var e = null,
                      t = 0,
                      n = 0
                    window.performance &&
                      !performance.memory &&
                      (performance.memory = { usedJSHeapSize: 0, totalJSHeapSize: 0 }),
                      0 === performance.memory.totalJSHeapSize &&
                        console.warn(
                          'totalJSHeapSize === 0... performance.memory is only available in Chrome .',
                        )
                    var r = {
                        memory: { caption: 'Used Memory', average: !0, avgMs: 1e3, over: 22 },
                        total: { caption: 'Total Memory' },
                      },
                      i = [{ caption: 'Browser', values: ['memory', 'total'] }],
                      o = [{ base: 'total', steps: ['memory'] }],
                      a = Math.log(1024)
                    function s(e) {
                      var t = 100,
                        n = Math.floor(Math.log(e) / a)
                      return Math.round((e * t) / Math.pow(1024, n)) / t
                    }
                    function l() {
                      ;(t = s(performance.memory.usedJSHeapSize)),
                        (n = s(performance.memory.totalJSHeapSize)),
                        e('memory').set(t),
                        e('total').set(n)
                    }
                    function c() {
                      t = 0
                    }
                    function u() {}
                    function h(t) {
                      e = t
                    }
                    return {
                      update: l,
                      start: c,
                      end: u,
                      attach: h,
                      values: r,
                      groups: i,
                      fractions: o,
                    }
                  }),
                  'object' === typeof t &&
                    (t.exports = {
                      glStats: window.glStats,
                      threeStats: window.threeStats,
                      BrowserStats: window.BrowserStats,
                    })
              },
              {},
            ],
            217: [
              function (e, t, n) {
                'use strict'
                !(function () {
                  'performance' in window == 0 && (window.performance = {})
                  var e = window.performance
                  if ('now' in e == 0) {
                    var t = Date.now()
                    e.timing && e.timing.navigationStart && (t = e.timing.navigationStart),
                      (e.now = function () {
                        return Date.now() - t
                      })
                  }
                  e.mark || (e.mark = function () {}), e.measure || (e.measure = function () {})
                })(),
                  (window.rStats = function (e) {
                    function t(e, t) {
                      for (var n = Object.keys(e), r = 0, i = n.length; r < i; r++) t(n[r])
                    }
                    function n(e) {
                      var t = document.createElement('link')
                      ;(t.href = e),
                        (t.rel = 'stylesheet'),
                        (t.type = 'text/css'),
                        document.getElementsByTagName('head')[0].appendChild(t)
                    }
                    var r = e || {},
                      i = r.colours || ['#850700', '#c74900', '#fcb300', '#284280', '#4c7c0c'],
                      o = 'https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700,300',
                      a = (r.CSSPath ? r.CSSPath : '') + 'rStats.css'
                    ;(r.css || [o, a]).forEach(function (e) {
                      n(e)
                    }),
                      r.values || (r.values = {})
                    var s,
                      l,
                      c = 10,
                      u = 200,
                      h = {}
                    function d(e, t, n) {
                      var r = n || {},
                        i = document.createElement('canvas'),
                        o = i.getContext('2d'),
                        a = 0,
                        s = 0,
                        l = r.color ? r.color : '#666666',
                        h = document.createElement('canvas'),
                        d = h.getContext('2d')
                      ;(h.width = 1),
                        (h.height = 2 * c),
                        (d.fillStyle = '#444444'),
                        d.fillRect(0, 0, 1, 2 * c),
                        (d.fillStyle = l),
                        d.fillRect(0, c, 1, c),
                        (d.fillStyle = '#ffffff'),
                        (d.globalAlpha = 0.5),
                        d.fillRect(0, c, 1, 1),
                        (d.globalAlpha = 1)
                      var p = document.createElement('canvas'),
                        f = p.getContext('2d')
                      function m() {
                        ;(i.width = u),
                          (i.height = c),
                          (i.style.width = i.width + 'px'),
                          (i.style.height = i.height + 'px'),
                          (i.className = 'rs-canvas'),
                          e.appendChild(i),
                          (o.fillStyle = '#444444'),
                          o.fillRect(0, 0, i.width, i.height)
                      }
                      function v(e, t) {
                        ;(s += 0.1 * (e - s)) > (a *= 0.99) && (a = s),
                          o.drawImage(i, 1, 0, i.width - 1, i.height, 0, 0, i.width - 1, i.height),
                          t
                            ? o.drawImage(p, i.width - 1, i.height - (s * i.height) / a - c)
                            : o.drawImage(h, i.width - 1, i.height - (s * i.height) / a - c)
                      }
                      return (
                        (p.width = 1),
                        (p.height = 2 * c),
                        (f.fillStyle = '#444444'),
                        f.fillRect(0, 0, 1, 2 * c),
                        (f.fillStyle = '#b70000'),
                        f.fillRect(0, c, 1, c),
                        (f.globalAlpha = 0.5),
                        (f.fillStyle = '#ffffff'),
                        f.fillRect(0, c, 1, 1),
                        (f.globalAlpha = 1),
                        m(),
                        { draw: v }
                      )
                    }
                    function p(e, n) {
                      var r = document.createElement('canvas'),
                        o = r.getContext('2d')
                      function a() {
                        ;(r.width = u),
                          (r.height = c * n),
                          (r.style.width = r.width + 'px'),
                          (r.style.height = r.height + 'px'),
                          (r.className = 'rs-canvas'),
                          e.appendChild(r),
                          (o.fillStyle = '#444444'),
                          o.fillRect(0, 0, r.width, r.height)
                      }
                      function s(e) {
                        o.drawImage(r, 1, 0, r.width - 1, r.height, 0, 0, r.width - 1, r.height)
                        var n = 0
                        t(e, function (t) {
                          var a = e[t] * r.height
                          ;(o.fillStyle = i[t]), o.fillRect(r.width - 1, n, 1, a), (n += a)
                        })
                      }
                      return a(), { draw: s }
                    }
                    function f(e, t) {
                      var n,
                        i = e,
                        o = 0,
                        a = 0,
                        s = 0,
                        c = 0,
                        u = performance.now(),
                        h = 0,
                        p = document.createElement('div'),
                        f = document.createElement('span'),
                        m = document.createElement('div'),
                        v = document.createTextNode(''),
                        g = r ? r.values[i.toLowerCase()] : null,
                        y = new d(p, i, g),
                        b = !1
                      function A(e) {
                        if (g && g.average) {
                          ;(c += e), h++
                          var t = performance.now()
                          t - u >= (g.avgMs || 1e3) && ((s = c / h), (c = 0), (u = t), (h = 0))
                        }
                      }
                      function w() {
                        ;(n = performance.now()),
                          r.userTimingAPI && performance.mark(i + '-start'),
                          (b = !0)
                      }
                      function x() {
                        ;(o = performance.now() - n),
                          r.userTimingAPI &&
                            (performance.mark(i + '-end'),
                            b && performance.measure(i, i + '-start', i + '-end')),
                          A(o)
                      }
                      function E() {
                        x(), w()
                      }
                      function M() {
                        var e = g && g.average ? s : o
                        v.nodeValue = Math.round(100 * e) / 100
                        var t = g && ((g.below && o < g.below) || (g.over && o > g.over))
                        y.draw(o, t),
                          (p.className = t ? 'rs-counter-base alarm' : 'rs-counter-base')
                      }
                      function _() {
                        var e = performance.now(),
                          t = e - n
                        a++,
                          t > 1e3 &&
                            ((o = g && !1 === g.interpolate ? a : (1e3 * a) / t),
                            (a = 0),
                            (n = e),
                            A(o))
                      }
                      function T(e) {
                        A((o = e))
                      }
                      return (
                        (f.className = 'rs-counter-id'),
                        (f.textContent = g && g.caption ? g.caption : i),
                        (m.className = 'rs-counter-value'),
                        m.appendChild(v),
                        p.appendChild(f),
                        p.appendChild(m),
                        t ? t.div.appendChild(p) : l.appendChild(p),
                        (n = performance.now()),
                        {
                          set: T,
                          start: w,
                          tick: E,
                          end: x,
                          frame: _,
                          value: function () {
                            return o
                          },
                          draw: M,
                        }
                      )
                    }
                    function m(e) {
                      var n = e.toLowerCase()
                      if ((void 0 === n && (n = 'default'), h[n])) return h[n]
                      var i = null
                      r &&
                        r.groups &&
                        t(r.groups, function (e) {
                          var t = r.groups[parseInt(e, 10)]
                          i || -1 === t.values.indexOf(n.toLowerCase()) || (i = t)
                        })
                      var o = new f(n, i)
                      return (h[n] = o), o
                    }
                    function v() {
                      if (r.plugins) {
                        r.values || (r.values = {}),
                          r.groups || (r.groups = []),
                          r.fractions || (r.fractions = [])
                        for (var e = 0; e < r.plugins.length; e++)
                          r.plugins[e].attach(m),
                            t(r.plugins[e].values, function (t) {
                              r.values[t] = r.plugins[e].values[t]
                            }),
                            (r.groups = r.groups.concat(r.plugins[e].groups)),
                            (r.fractions = r.fractions.concat(r.plugins[e].fractions))
                      } else r.plugins = {}
                      ;((s = document.createElement('div')).className = 'rs-base'),
                        ((l = document.createElement('div')).className = 'rs-container'),
                        (l.style.height = 'auto'),
                        s.appendChild(l),
                        document.body.appendChild(s),
                        r &&
                          (r.groups &&
                            t(r.groups, function (e) {
                              var t = r.groups[parseInt(e, 10)],
                                n = document.createElement('div')
                              ;(n.className = 'rs-group'), (t.div = n)
                              var i = document.createElement('h1')
                              ;(i.textContent = t.caption),
                                i.addEventListener(
                                  'click',
                                  function (e) {
                                    this.classList.toggle('hidden'), e.preventDefault()
                                  }.bind(n),
                                ),
                                l.appendChild(i),
                                l.appendChild(n)
                            }),
                          r.fractions &&
                            t(r.fractions, function (e) {
                              var n = r.fractions[parseInt(e, 10)],
                                o = document.createElement('div')
                              o.className = 'rs-fraction'
                              var a = document.createElement('div')
                              a.className = 'rs-legend'
                              var s = 0
                              t(r.fractions[e].steps, function (t) {
                                var n = document.createElement('p')
                                ;(n.textContent = r.fractions[e].steps[t]),
                                  (n.style.color = i[s]),
                                  a.appendChild(n),
                                  s++
                              }),
                                o.appendChild(a),
                                (o.style.height = s * c + 'px'),
                                (n.div = o)
                              var u = new p(o, s)
                              ;(n.graph = u), l.appendChild(o)
                            }))
                    }
                    function g() {
                      t(r.plugins, function (e) {
                        r.plugins[e].update()
                      }),
                        t(h, function (e) {
                          h[e].draw()
                        }),
                        r &&
                          r.fractions &&
                          t(r.fractions, function (e) {
                            var n = r.fractions[parseInt(e, 10)],
                              i = [],
                              o = h[n.base.toLowerCase()]
                            o &&
                              ((o = o.value()),
                              t(r.fractions[e].steps, function (t) {
                                var n = r.fractions[e].steps[parseInt(t, 10)].toLowerCase(),
                                  a = h[n]
                                a && i.push(a.value() / o)
                              })),
                              n.graph.draw(i)
                          })
                    }
                    return (
                      v(),
                      function (e) {
                        return e ? m(e) : { element: s, update: g }
                      }
                    )
                  }),
                  'object' === typeof t && (t.exports = window.rStats)
              },
              {},
            ],
            218: [
              function (e, t, n) {
                String.prototype.startsWith ||
                  (String.prototype.startsWith = function (e, t) {
                    return (t = t || 0), this.substr(t, e.length) === e
                  })
              },
              {},
            ],
            219: [
              function (t, n, r) {
                var i = {
                  base64: function (e, t) {
                    return 'data:' + e + ';base64,' + t
                  },
                  isMobile: function () {
                    var e,
                      t = !1
                    return (
                      (e = navigator.userAgent || navigator.vendor || window.opera),
                      (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
                        e,
                      ) ||
                        /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
                          e.substr(0, 4),
                        )) &&
                        (t = !0),
                      t
                    )
                  },
                  isIOS: function () {
                    return /(iPad|iPhone|iPod)/g.test(navigator.userAgent)
                  },
                  isIFrame: function () {
                    try {
                      return window.self !== window.top
                    } catch (e) {
                      return !0
                    }
                  },
                  appendQueryParameter: function (e, t, n) {
                    var r = e.indexOf('?') < 0 ? '?' : '&'
                    return (e += r + t + '=' + n)
                  },
                  getQueryParameter: function (e) {
                    e = e.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]')
                    var t = new RegExp('[\\?&]' + e + '=([^&#]*)').exec(location.search)
                    return null === t ? '' : decodeURIComponent(t[1].replace(/\+/g, ' '))
                  },
                  isLandscapeMode: function () {
                    return 90 == window.orientation || -90 == window.orientation
                  },
                }
                n.exports = i
              },
              {},
            ],
            220: [
              function (e, t, n) {
                var r = e('./util.js')
                function i() {
                  var e = document.createElement('video')
                  e.addEventListener('ended', function () {
                    e.play()
                  }),
                    (this.request = function () {
                      e.paused &&
                        ((e.src = r.base64(
                          'video/webm',
                          'GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4ECQoWBAhhTgGcBAAAAAAAH4xFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsggfG7AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU2LjQwLjEwMVdBjUxhdmY1Ni40MC4xMDFzpJAGSJTMbsLpDt/ySkipgX1fRImIQO1MAAAAAAAWVK5rAQAAAAAAADuuAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDmDgQEj44OEO5rKAOABAAAAAAAABrCBsLqBkB9DtnUBAAAAAAAAo+eBAKOmgQAAgKJJg0IAAV4BHsAHBIODCoAACmH2MAAAZxgz4dPSTFi5JACjloED6ACmAECSnABMQAADYAAAWi0quoCjloEH0ACmAECSnABNwAADYAAAWi0quoCjloELuACmAECSnABNgAADYAAAWi0quoCjloEPoACmAECSnABNYAADYAAAWi0quoCjloETiACmAECSnABNIAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTnghdwo5aBAAAApgBAkpwATOAAA2AAAFotKrqAo5aBA+gApgBAkpwATMAAA2AAAFotKrqAo5aBB9AApgBAkpwATIAAA2AAAFotKrqAo5aBC7gApgBAkpwATEAAA2AAAFotKrqAo5aBD6AApgDAkpwAQ2AAA2AAAFotKrqAo5aBE4gApgBAkpwATCAAA2AAAFotKrqAH0O2dQEAAAAAAACU54Iu4KOWgQAAAKYAQJKcAEvAAANgAABaLSq6gKOWgQPoAKYAQJKcAEtgAANgAABaLSq6gKOWgQfQAKYAQJKcAEsAAANgAABaLSq6gKOWgQu4AKYAQJKcAEqAAANgAABaLSq6gKOWgQ+gAKYAQJKcAEogAANgAABaLSq6gKOWgROIAKYAQJKcAEnAAANgAABaLSq6gB9DtnUBAAAAAAAAlOeCRlCjloEAAACmAECSnABJgAADYAAAWi0quoCjloED6ACmAECSnABJIAADYAAAWi0quoCjloEH0ACmAMCSnABDYAADYAAAWi0quoCjloELuACmAECSnABI4AADYAAAWi0quoCjloEPoACmAECSnABIoAADYAAAWi0quoCjloETiACmAECSnABIYAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTngl3Ao5aBAAAApgBAkpwASCAAA2AAAFotKrqAo5aBA+gApgBAkpwASAAAA2AAAFotKrqAo5aBB9AApgBAkpwAR8AAA2AAAFotKrqAo5aBC7gApgBAkpwAR4AAA2AAAFotKrqAo5aBD6AApgBAkpwAR2AAA2AAAFotKrqAo5aBE4gApgBAkpwARyAAA2AAAFotKrqAH0O2dQEAAAAAAACU54J1MKOWgQAAAKYAwJKcAENgAANgAABaLSq6gKOWgQPoAKYAQJKcAEbgAANgAABaLSq6gKOWgQfQAKYAQJKcAEagAANgAABaLSq6gKOWgQu4AKYAQJKcAEaAAANgAABaLSq6gKOWgQ+gAKYAQJKcAEZAAANgAABaLSq6gKOWgROIAKYAQJKcAEYAAANgAABaLSq6gB9DtnUBAAAAAAAAlOeCjKCjloEAAACmAECSnABF4AADYAAAWi0quoCjloED6ACmAECSnABFwAADYAAAWi0quoCjloEH0ACmAECSnABFoAADYAAAWi0quoCjloELuACmAECSnABFgAADYAAAWi0quoCjloEPoACmAMCSnABDYAADYAAAWi0quoCjloETiACmAECSnABFYAADYAAAWi0quoAfQ7Z1AQAAAAAAAJTngqQQo5aBAAAApgBAkpwARUAAA2AAAFotKrqAo5aBA+gApgBAkpwARSAAA2AAAFotKrqAo5aBB9AApgBAkpwARQAAA2AAAFotKrqAo5aBC7gApgBAkpwARQAAA2AAAFotKrqAo5aBD6AApgBAkpwAROAAA2AAAFotKrqAo5aBE4gApgBAkpwARMAAA2AAAFotKrqAH0O2dQEAAAAAAACU54K7gKOWgQAAAKYAQJKcAESgAANgAABaLSq6gKOWgQPoAKYAQJKcAESAAANgAABaLSq6gKOWgQfQAKYAwJKcAENgAANgAABaLSq6gKOWgQu4AKYAQJKcAERgAANgAABaLSq6gKOWgQ+gAKYAQJKcAERAAANgAABaLSq6gKOWgROIAKYAQJKcAEQgAANgAABaLSq6gB9DtnUBAAAAAAAAlOeC0vCjloEAAACmAECSnABEIAADYAAAWi0quoCjloED6ACmAECSnABEAAADYAAAWi0quoCjloEH0ACmAECSnABD4AADYAAAWi0quoCjloELuACmAECSnABDwAADYAAAWi0quoCjloEPoACmAECSnABDoAADYAAAWi0quoCjloETiACmAECSnABDgAADYAAAWi0quoAcU7trAQAAAAAAABG7j7OBALeK94EB8YIBd/CBAw==',
                        )),
                        e.play())
                    }),
                    (this.release = function () {
                      e.pause(), (e.src = '')
                    })
                }
                function o() {
                  var e = null
                  ;(this.request = function () {
                    e ||
                      (e = setInterval(function () {
                        ;(window.location.href = '/'), setTimeout(window.stop, 0)
                      }, 15e3))
                  }),
                    (this.release = function () {
                      e && (clearInterval(e), (e = null))
                    })
                }
                function a() {
                  var e = navigator.userAgent || navigator.vendor || window.opera
                  return e.match(/iPhone/i) || e.match(/iPod/i) ? o : i
                }
                t.exports = a()
              },
              { './util.js': 219 },
            ],
          },
          {},
          [177],
        )(177)
      })()
    },
  },
])